LogicBlox 4.3.16

Release Date: November 4th 2016

Executive Summary

LogicBlox 4.3.16 introduces database performance improvements, new service configuration options, as well as expanded visualization options and usability improvements to modeler-js.

  • Database workloads with random insertions or updates should expect dramatic performance improvements.
  • Web services can now be run in asynchronous mode; a higher level API makes specifying workbook template instantiations much more concise and easier to manage.
  • Modeler-js applications will receive a number of features automatically, such as right-click menu for quick access to various functionalities, as well as new display options for images, booleans, and strings.

Take a look at the LogicBlox 4.3.16 - New Features Playlist for video highlights of these new features.

What's New

  • Pages with little data not only impact database performance negatively, but also unnecessarily waste disk space. We improved the handling of such underfull btree pages such that they no longer occur. This improvement significantly improves the performance of database workloads that have random insertions or updates. The duration of transactions with random insertions will significantly improve. Disk usage is also reduced consequently.

Services Framework
  • Asynchronous services: long running services can now be run asynchronously. In the asychronous mode, services can continue running server-side without the need for an open connection between client and server, therefore minimizing the risk of transaction aborts due to connection timeouts.

    Please refer to the Asynchronous Services chapter in the reference manual for a more detailed overview of this feature.

  • Tabular Data Exchange (TDX) now supports int128 types bound to string columns. Furthermore, it supports a new column format called uuid that accepts UUID strings and can be bound both to string as well as int128 types.

Measure Service
  • The measure service can now infer a default hierarchy for a dimension if the dimension is linear (where there is bottom level, and there are unique level mappings to each parent level).

  • Default value inference improvements for CubiQL:

    • A CubiQL expression can now have a default value, yet still be considered for inlining.

    • Default value inference will now propagate default values through many more kinds of CubiQL expressions.


      If you encounter a situation where an expression does not receive a default value, let us know and we can investigate whether the use case can be supported.

Workbook Services
  • A higher level API is now available for developers to more easily configure the creation of workbooks from templates.

    Please refer to the Generating template instantiation data with workbook util chapter in the Reference Manual for a more detailed overview of this feature.

  • The list of measures included in a workbook can now be configured through the new measure_access attribute in the Workbook and WorkbookTemplate configuration message. The configuration of measures through the measures field in the Workbook message is no longer supported.


    Please refer to the Upgrade Instructions on how to migrate existing JSON workbook configurations.

  • Right-click menu: Commonly accessed functionalities such as copy, paste, sort, etc., are now also available through right-click on mouse. The menu options are context-sensitive: depending on the placement of the mouse when right-click is initiated, different options are enabled.

    Example 3. 

    The figure below illustrates all the options that are now available in a central place, only one right-mouse click away. In earlier versions, these options were available in various places throughout the UI, such as the settings cogwheel, or as a right-click option on a level pill.

  • Charting Improvements: We've added the following improvements to the chart mode of the grid:

    • It is now possible to configure charts where multiple measures appear side-by-side. In previous releases we only supported stacked bar charts when there were multiple measures to display.


      Note that stacked bar charts are currently not supported, nor the ability to use different colors for different measures. We expect to add these capabilities in an upcoming release.

    • It is now also possible to use the name of Measures as a "column". For instance, in the chart above, the name of measures each became a column, nested inside a Region. In previous releases, Measures only indicated the measure values.

      By placing the Measures pill on an axis, e.g. the columns, the following is rendered:

      • Measure names are displayed on the axis.

      • Measure values are displayed on the opposing axis.

      As a comparison to the chart above, in the example below we swapped the order of the Measures and the Region pills. As a result, we now get a column for each measure name (Returns and Sales), and then one more column per region nested inside.

  • Various new formatting options:

    • Image formatting option: Images can now be displayed directly within the grid, by using the new image formatting option for string. Note that the value of the cell is expected to hold the URL of the image.

      Example 4. 

      The figure below illustrates in the "Sku Photo (image)" column how an image can be displayed inlined in the grid. The column to its right, called "Sku Photo", shows how the same image is displayed using the mouseover formatting option, which used to be the main displaying option for images in past releases.

    • Dropdown formatting option for booleans: It is now possible to display boolean measures as a dropdown, instead of a checkbox. Dropdown formatting allows users to clearly distinguish true, false, or no value at all. This option only makes sense for boolean measures without default values. To display the measure as a dropdown, the Format property of the measure needs to be configured as booleandropdown in the measure configuration file. The default display behavior for booleans remains a checkbox.

      Example 5. 

      The figure below illustrates both display options for booleans. In the column to the left, the measure is formatted using the default formatting option, while the measure to the right is formatted using the new booleandropdown formatting option.

    • Wrap Text formatting option for strings: Strings can now be formatted such that the text is wrapped to a new line, if the cell is not wide enough to display the complete string. This feature simplifies long text viewing and editing.

      To display the string as wrapped text, the Format property of the measure needs to be set to wrapped-text in the measure configuration file.

      Example 6. 

      In the example below we display two measures of type string. The measure in the first column is formatted as wrapped text, while the measure in the second column is formatted using the default formatting option for strings,


      Note that the width and height of a cell does not automatically change based on the size of the text. Users need to resize the cell manually.

  • Collaboration support for distributed deployments: In past releases, collaboration was only supported on single node deployments. We have removed this restriction in this release.


    Applications in distributed setting need to configure two additional parameters:
    1. The broadcast service has to be configured in the application's front end server. The example below illustrates how this can be done.

        lb:web:config:service_abbr:service_by_prefix["/modelerjs-proxy/example_project" + "/websocket/broadcast_auth/*"] = x,
        lb:web:config:websocket:broadcast_service(x) {
          lb:web:config:service:auth_realm[] = "modeler-proxy-realm"
        lb:web:config:service_abbr:service_by_prefix["/modelerjs-proxy/example_project" + "/websocket/broadcast_noauth"] = x,

    2. The URL for the broadcast service should be set in the new broadcastUrlPrefix property in the application configuration object that is input to the AuthenticatedModelerController object. Below you can find an example on how to set the broadcastUrlPrefix property.

              appPrefix: "/modelerjs/example_project/partition-1",
              broadcastUrlPrefix: "/modelerjs-proxy/example_project",
              loginUrl: ...,
              modelingFeatures: {

  • Applications can now expose lb-workflow's control service on the lb:web:public endpoint simply by setting the realm name in lb:workflow:control:service_config:public_realm[].

  • The new lb workflow check command can now be used to compile workflows and check for errors.

  • We now provide a number of workflows that use the new workbook utilities to simplify the instantiation of workbook templates.

Corrected Issues

The issues listed below have been corrected since the 4.3.15 release.

  • Resolved an issue where seq could give incorrect results under certain circumstances.

  • Resolved an issue where entities were not retracted from the workbook upon workbook refresh, after they were moved across partitions.

  • Measure Service:
    • Resolved an issue with the measure service state not being properly guarded if there were in-flight requests while lb-web reloaded the measure service handler.

    • Resolved an issue where providing a spread method for a measure language recalc metric would be silently ignored. An error will now be reported indicating that it is disallowed.

    • Fixed a source of non-determinism that could cause some locks and edits to be ignored in some cases.

    • Resolved an issue that would sometimes prevent CubiQL let expressions and some abstractions from normalizing correctly.

  • modeler-js User Interface Components:
    • When an area is copied to the clipboard, it is now highlighted in the grid and the "Data copied to clipboard" infobox appears as expected.

    • Resolved an issue that caused the grid to not load correctly when no positions were passing the by-mask filter.

    • Resolved an issue that caused an exception under certain circumstances, when the Measures pill was on the slice.

    • When locking a measure at an aggregated level, the lock now correctly propagates down to the base-level of the measure.

    • Resolved an issue where charts did not draw correctly when two hierarchically related levels were on the same axis.

    • The link cell type now shows an empty cell when there is no value.

    • Resolved an issue that caused an exception when running a warm-up query on a sheet that contained a dimension split.

    • Resolved an issue where under certain circumstances the slice filter became unresponsive.

    • Resolved an issue where the filter icon was not updating correctly, when a level is removed from the axis.

    • Resolved various issues with keyboard navigation on the headers.

    • It is now possible to use the Level filter panel when the Measures pill is on the slice.

    • Resolved an issue that caused an exception when a measure was locked at a certain intersection and the user tried to update the measure at an unlocked position.

Installation and Upgrade information

Installation Instructions

Install LogicBlox 4.3.16 by following the steps outlined below:

  1. Download the installation package.
  2. Extract the tarball in <YourPreferredInstallDirectory>
  3. Run the following command:
    source <YourPreferredInstallDirectory>/logicblox-4.3.16/etc/profile.d/logicblox.sh
    NOTE: this script will set all the necessary environment variables. You might want to add this command to your .bashrc.

Upgrade Information

  • To upgrade the application sheet JSON configurations, as well as the workbook JSON configurations, you can simply run the following command:

    $ migrate-modeler 4.3.15 4.3.16

  • Due to an internal upgrade of modeler-js to React 15, all html pages will need to be updated. Since Modeler-js applications today all write some of their own Javascript code to hook into modeler-js, the upgrade could not get automated. Please refer to the React documentation for the upgrade instructions and get in touch with us if you have any questions or problems!

Release Information

Server requirements
Operating System: 64 bit Linux; OSX 10.10+ is supported for local development.
Java Runtime Environment 8, update 101 or higher
Python 2.7 or higher
CPU compatible with the corei7 architecture
Client requirements
Applications using modeler-js User Interface Components: Google Chrome
Requirements for applications using non-modeler-js components may vary per application.