LogicBlox 4.9.0

Release Date: January 7, 2019

What's New

LogicBlox 4.9.0 introduces the following enhancements:

  • Modeler
    • Deleting fields from the axis configuration panels has become more convenient. Now, if you want to delete multiple fields, you can press the "Delete Mode" button in the sheet toolbar and all the fields will replace their icons with the "Delete" icon. Clicking on that icon will delete the field immediately.

    • We now support an ability to select multiple measures or levels and add them all at once to an axis configuration panel. When some items are selected, the dropdown button will appear, which allows you to choose where to add the items: Measures, Columns and Rows for measures, and Columns, Rows and Slices for levels.

      If an item cannot be added to the current axis configuration, you will receive a warning notification when you try adding it.

    • You can now display to the user when a cell has non-uniform values below the displayed value. When the values below a cell are non-uniform (have at least 1 value but not all values are the same OR some are empty), then a "?" icon will be displayed to the left of the value in that cell. Works with all aggregation methods.

      Example 1. 

      To configure, add a new column BaseAmbiguous in Measures.csv file and set its to "true" to make it work.


    • We now display dimension locks in the UI. This primarily impacts projects using the user permissions library as permissions are enabled via dimension locks but any installed dimension locks will be displayed. Dimension locked cells will use the same styling as read-only cells. The UI will indicate a cell is locked if a lock is applied directly to any level in a measure's base intersection or if all of the children are locked for an aggregate level.

    • Scroll performance has been improved by storing the scroll position and cursor position locally in the browser per user/view.

  • Tools, Database, and Services
    • Introduced support for database lifetime file export predicates.

    • Added two new options for lang:physical:fileMode, export_append and fifo. The export_append mode will append new output to the end of the specified file, useful for auditing or logging for example. The fifo mode will create a named pipe file if it doesn't already exist and will write the output to the pipe, useful for providing notifications to some interested party for example.

    • IMPLICIT_PULSE and EXPLICIT_PULSE have been promoted from pedantic warnings to regular warnings. LB 4 does not have a notion of pulse predicate for transaction lifetime logic. To migrate old code and remove the warnings, include add the pragma lang:compiler:txnLifetimePulse[]=false. to LogiQL files and update predicates as appropriate. Often, it will be more efficient to convert transaction lifetime predicates from EDBs into IDBs.

    • Introduced a new warning SUBTYPE to highlight the declaration of entity subtypes, which are now deprecated. Two recommendations for replacing the use of subtypes:

      • Convert subtypes into unary predicates (lang:isEntity[`p]=false.) and treat them as "roles". Consider an entity modeling employees with subtype entities for different kinds of employees. Using unary predicates instead of subtypes is a more accurate way to model this since employees could change roles over time or could occupy multiple roles at the same time.

      • Convert subtypes into different constructors of the "parent" entity type. For example, consider modeling different kinds of nodes in a graph. As each type of node is distinct with no overlap across nodes types, it would be appropriate to define each type of node with a different constructor predicate, with the keys storing the particular properties of that node type.

    • Improved page splitting heuristic for pages with variable length data.

    • Added the ability to dynamically change the LB web server log level. For example, lb web-server loglevel lb-web DEBUG will set the log level to DEBUG for all lb-web components. Log levels can also be set for individual lb-web components. For example, use lb web-server loglevel lb-web.netty DEBUG to set the log level for the netty component.

  • Measure service
    • Improvements allow more aggregations to be collapsed.

    • A new CubiQL expression called refine has been added. This is roughly a generalization of the functionality of the widen expression, but allows pushing data down specific hierarchies and using slides. The widen expression e @ i is equivalent to refine e @ (interof(e) & i). Widen is now deprecated and will eventually be removed in a future release.

    • The measure service model completer is now enabled by default. This will generate types and predicates that are required for a measure service model but are not defined in the workspace when the model is installed. The completer will also perform more elaborate validation than was done previously. Portions of an invalid model will be elided so that the service can continue handling requests for the portions that are valid. The tighter validation could expose mistakes in a model that have were previously overlooked and that now need to be corrected. These problems will be reported as warnings in the lb-web-server.log file.

    • It is now possible to generate a separately compiled LogiQL project containing predicates determined as necessary by the measure model completer. Use the lb measure-service model generate command to do this.

    • Composite spread expansion now more closely matches the behavior of composite aggregations. The expansion now uses wildcard matching semantics if the composite component does not reference a specific label. The hierarchy field of the composite component will be used to override the specified hierarchy of a spread. This tends to come up when wanting to do spreads along first or last hierarchies.

    • Semantics of dimension locking has been refined. See the protocol definition for full details.

Corrected Issues

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

  • Modeler
    • Fixed an error that popped up in the Javascript console when using "Hide/Show" functionality for measures from the context menu.

    • Fixed an issue where copy/pasting of an empty value could result in pasting a value (0) in the target cell.

    • Cells for string-typed measures formatted as wrapped-text now correctly show a lock icon for either installed or user locks.

    • Fixed some issues with Excel/CSV exports. In some specific scenarios filtered positions could appear in the export. If applicable, we now also export the configured Empty Value when a cell holds no data.

    • Fixed an issue where filtering on percent parent measures could result in percentages to be shown against ALL instead of the highest level in the hierarchy displayed on the grid.

    • Fixed a Javascript error (AssertionError) that could occur on views showing position only metrics on ALL.

    • Fixed an error which caused Modeler to stop working after creating a user-defined sheet with a name containing one or more special characters (e.g. "Sales %").

    • The name of a user-defined sheet doesn't have to be unique anymore. This allows multiple users to create user-defined sheets with the exact same sheet name.

  • Tools, Database, and Services
    • Fixed issue with logic simplifier eliminating meaningful entity atoms in the presence of pragma predicates.

    • Fixed an issue where the type dependencies of a block was not being correctly cleared after the block was removed.

    • Improved LogiQL optimizer performance, fixing a boundary case where the search for the best key order could take very long time.

    • Fixed a problem in alpha trees where certain data sets would be highly compressed and in some cases could cause invalid alpha tree internal structure. The problems would be reported as unexplainable functional dependency violations during execution of LogiQL rules.

    • Fixed a problem with the lb.CopyFiles lb-workflow task that could produce an error when the recursive option was used.

    • lb-workflow tasks that parsed JSON (like lb.ParseJsonObject) previously produced runtime exceptions if a field contained an empty string. This has been fixed and empty string field values are now supported properly.

    • Changed some lb-workflow tasks (CreateTemplate, CreateWorkbook, GetWorkbookPermission, GetWorkbookPosition, and others) to use JSON objects instead of strings to fix errors that were introduced after recent changes in the LB runtime that imposes restrictions on string lengths.

    • Improved incremental maintenance performance for some rules. This will be most noticeable when a rule is maintained due to a large deltas of some predicates in the rule's body. A typically example would be a batch process where many products are added or removed from the product hierarchy, which causes many tuples being added or removed in predicates that are keyed by product, location, and week.

    • Fixed a bug that could cause prefix-join with lookup to produce incorrect results and have degraded performance during incremental maintenance when domain parallelism is being used.

  • Measure service
    • Fixed an issue that would cause count aggregations to be incorrectly collapsed.

    • CubiQL-defined measures with one inverse now behave the same as measure service defined measures with one inverse when locking at an aggregated level and editing at a level below that aggregation.

Known Issues

The issues listed below are known to exist in the 4.9.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.9.0 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

  • Modeler
    • The /canvas and /sheet services, which were deprecated as of LogicBlox release 4.3.13 in favor of the /view and /viewstate services, have finally been removed.
    • The dimension_lock_up_method service has been renamed to up_on_some so that the service and the predicate have the same name.
    • The library containing the Modeler migration tool is included in the distribution under <LOGICBLOX_HOME>/lib/npm/modeler-migrations-<VERSION>.tgz and contains a command line tool for doing various transformations/migrations of modeler configurations.

      To use the npm module, you first need to install it by running npm install <LOGICBLOX_HOME>/lib/npm/modeler-migrations-<VERSION>.tgz. You will then be able to use the command line tool. The module contains a README.md file that lists all available transformations as well as detailed instructions for use.

      To automatically upgrade a Modeler application from one version to another, run the upgrade script to upgrade between versions:

      ./node_modules/.bin/migrate-modeler --fromVersion <prevVer> --toVersion <toVer> /path/to/my/modelerapp

      where the version numbers refer to LogicBlox releases (e.g. 4.9.0).

      NOTE: If you installed the npm module globally, you won't need the ./node_modules/.bin prefix on the command.

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.