LogicBlox 4.15.0

Release Date: August 20, 2019

What's New

LogicBlox 4.15.0 introduces the following enhancements:

  • Modeler
    • Changes have been made to improve the performance of views which have many (50+) measures. These improvements include but are not limited to faster rendering when adding or removing measures to or from a view and faster rendering when a filter is invoked either from the measure tile or via the filter panel. The first filter application fetches data that is now cached at the client, resulting in virtually instantaneous rendering for subsequent uses of the filter.

  • Measure service
    • CubiQL now supports use of the inventory P2P. A few basic examples:

      Example 1. 

      inventory cover Calendar 
                   in Stock 
                 with Sales

      Example 2. 

      inventory cover Calendar 
                   in Stock 
                 with Sales and Sales

      Example 3. 

      inventory uncover Calendar 
                     in (total Supply @ {Brand, Week}) 
                   with (total Sales @ {Brand, Week})

      Here Calendar is the label for the time dimension.

      More detailed information about the inventory P2P can be found in the LogicBlox Reference Manual.

    • Introduced the annotation {{unwind = false}} to prevent the optimizer from unwinding the specified aggregations. Using this annotation will cause less data will be materialized, stored, and maintained for intermediate aggregations. However, using this annotation will also prevent sharing of these sub-computations, so it possible that more evaluation time and more data storage will be needed if you have many rules that use the same aggregations.

    • Added a measure service configuration option, unwind_aggs = false, to force all aggregations to be rewound, even in installed logic. This is a little different than the annotation discussed above as it will still allow floating of dices, etc.

    • Performance logging improvements:

      • Each request will now prominently indicate whether assertions are enabled in the build to warn about the negative performance impact.

      • Added some time spans that were missing in the breakdown for measure service request processing at the perf log level.

      • At the perf log level and above, more information about the number of rules and how many of them are materialized will be logged.

    • Made a few improvements to the measure service REPL:

      • Support for completing commands and CubiQL syntax has been improved.

      • The :help command can now take a command name as an argument to limit the scope of the message printed.

      • The :model command has been introduced to make it easier to query information out of the model when debugging. For example, using :model problems will print all the problems that exist with the installed model, using :model metric <name> will print the JSON representation of the named metric in the model, using :model metric will print the JSON representation of all metrics in the model, and using :model dim <name> will print the JSON representation of the named dimension in the model.

    • The measure service will now generate predicate names with a prefix that makes it easier to identify what they compute, and a smaller hash with a more compact encoding into ASCII is used.

    • Improved the error reporting when using an operator on a type for which that operator does not have a currently defined overloading.

Corrected Issues

The issues listed below have been corrected since the 4.14.0 release:

  • Modeler
    • When setting prefixSymbol to true for a grid configuration, input validation now properly allows inputting “%” before the value.

    • Position filters invoked from level tiles on rows or columns no longer incorrectly display spinners on every position select or deselect.

    • The standard HTML “\n” for line ending in string type measures formatted as wrapped-text now properly displays the line breaks.

    • Back to back edits performed quickly on the same cell, such that the second edit is input before the first edit processing completes, now properly process the second edit and provides the user with the visual clues (yellow dirty marker) that this is occurring.

    • Cells for measures marked read only now properly display spinners when the value is changing.

    • Installed target locks (historical locks) using an expression of the type filter by now work properly.

  • Tools, Database, and Services
    • Corrected a problem that prevented incremental maintenance to run properly for the inventory P2P when the extension predicate is changed. This problem only occurred if the extension predicate did not appear in the body of the P2P.

    • Default values leaking into the materialized layer for the result predicate of rules that use the inventory P2P has been fixed.

    • Rules using the inventory P2P that had differing key orders for the head and body predicates could previously produced incorrect results. This is now fixed.

    • Improved performance of incremental maintenance for rules using the linear recursion P2P.

    • Fixed a bug that could generate functional dependency violations during parallel incremental evaluation of a rule using prefix-join.

    • Fixed a bug that could cause the rule evaluation sequence to be wrong, which manifest as an internal "Duplicate key in hashtree" error.

    • Corrected an issue that could cause crashes of lb-server during maintenance of some simple aggregations. The types of aggregations affected are those in rules where the head atom is not a scalar, all variables in the body are ouput variables, and are total aggregations over float types, max aggregations over strings, or aggregations over types without negation.

  • Measure service
    • Fixed an issue where too aggressive inlining of an expression with a default value would prevent the default value from ever being materialized.

    • Fixed an issue that prevented some tuple types from being used in model definitions.

    • Fixed a problem with the parser that made it impossible to use the datetime type in CubiQL.

    • Previously using the min and max operators (not to be confused with the aggregations) was difficult due to parsing ambiguity. They have been renamed minimum and maximum to avoid this problem.

    • The parsing of abstraction and application arguments has been tightened up to avoid extra generality that was never used.

Known Issues

The issues listed below are known to exist in the 4.15.0 release.

  • Tools, Database, and Services
    • This release contains changes to some lb-workflow tasks related to workbook creation. These fixes have not been applied yet to lb.wb.CreateWorkbook, which means errors related to recent changes in the LB runtime that imposes restrictions on string lengths can still occur. Please note that this known issue does apply to lb.wb.util.CreateWorkbook.

Installation Information

Install LogicBlox 4.15 by following the steps outlined below:

  1. Download the LogicBlox installation package for Linux or macOS from the LogicBlox developer website.
  2. Extract the tarball into a directory, which we refer to as <LOGICBLOX_HOME>.
  3. Run the following commands:
    source <LOGICBLOX_HOME>/etc/profile.d/logicblox.sh
    source <LOGICBLOX_HOME>/etc/bash_completion.d/logicblox.sh
    NOTE: these scripts automatically set all the necessary environment variables (please be aware that this script only works if you use bash as your shell). You might want to add these commands to your .bashrc.

Upgrade Information

  • Measure service
    • Any use of min and max operators in CubiQL (not to be confused with the aggregations) must be updated to use the new minimum and maximum operators.

Release Information

  • Server requirements
    • Operating System: 64-bit Linux; Apple macOS 10.10+ is supported for local development
    • Java Runtime Environment 8, update 101 or higher
    • Python 2.7 or higher
  • Client requirements
    • Applications using LogicBlox Modeler: Modeler supports major browsers not older than 1 year. Google Chrome provides the best performance.
    • Requirements for applications using non-LogicBlox Modeler components may vary per application.