LogicBlox 4.4.14

Release Date: April 12, 2018

What's New

LogicBlox 4.4.14 introduces the following enhancements:

MODELER

Users can now collapse and expand headers in Modeler's grid view. This functionality can
be found in the header's context menu. For instance, right-click on a header and select 'Collapse All' to
collapse all headers in the grid. Then, use the + icon on a header to expand it.

This behavior can also be pre-defined in the view configuration JSON:

Example 3.

For instance, when the levels Class, Subclass, Sku are on an axis and you want all Subclasses to be collapsed.
You then have to set the expandOnly option to an empty array for the Subclass level.

NOTE: This feature is not available on a grid containing dimension splits on the same axis
or if there's an inlined field (displayMode = "NONE") in the dimension.

Modeler now provides the ability to install locks in the application workspace and have these locks displayed
in Modeler's grid view.
Installed locks will be displayed in the same way as the existing user locks. User locks now have a blue lock
icon.

Installed lock targets can be applied using the pivot:config:lock:installed_target_locks predicate.

Example 5.

Let's say we want to lock Sales and Returns for all sku/store/day tuples where the day is prior to the
current day.
With previous LogicBlox versions, the following (or similar) steps were taken:

Create a boolean metric with day as the intersection. We'll use HistLock as the metric name for this example.

Install logic that populates HistLock for days that are locked per the specified calculation.

For each metric that is locked by HistLock, populate the pivot:config:lock:lock predicate mapping the
target metric to the lock metric.

When an edit is made to Sales or Returns, Modeler would spread the historical lock to the correct
base intersection for each
measure and send the lock with the edit request.

With this new version of LogicBlox, HistLock should be applied to Sales and Returns in the following manner:

Apply the same steps 1 and 2 as above

Create a CubiQL expression that spreads HistLock to the appropriate base intersection:

(#HistLock) @ {sku,store,day}

Populate the metric pivot:config:lock:installed_target_locks to associate the lock expression with each target metric.

In previous LogicBlox versions, all installed locks were sent as non-convertible locks but this
can now be specified per target lock.

Restart the measure service.

The measure service only needs to be restarted when the installed locks have been changed.
If the lockable tuples specified by HistLock change, they will be reflected automatically in the grid without the need to restart
the measure service.

NOTE: Modeler will continue to support locks in the view configuration JSONs until 4.4.16,
but these type of locks will not be shown in the grid.

Modeler will now limit the amount of data that can be displayed at once in Modeler's grid view. This limitation
has been also been applied to panels such as the filters panel,
the slice filters panel, and the level filters panel.

The default limit is set to 10k members. This means data will be displayed only if every level on the grid
contains less than 10k members. If a level contains more than 10k
members, the user will be required to apply a filter for that level first.

This default limit can be changed. You can set a value for the option in your Modeler's application configuration
in modelerConfig.levelMembersQuantityThreshold.
We highly recommend not to increase this limit.

Added a recomputeGraph command to dlbatch. This can be used in emergency situations
to try to recompute a rule execution graph in a workspace. In the past, we've seen
rare rule execution errors due to bad rule priority numbers. The recomputeGraph
command will attempt to regenerate these numbers and can be used to try to patch
an existing workspace.

Tracing support has been added to lb-workflow. Tracing can be enabled globally by
setting the trace = true flag in the lb-workflow-driver.config file.
Once the flag is set, the driver will log the traces in the console. These logs can
then be processed exactly like the lb-web-server logs to display the time split of
the task run.

There is also an option to enable the tracing for individual runs if tracing is not
desired for all the driver runs. To do so, simply add --trace in the
command line arguments for the driver CLI call.

NOTE: Not all the tasks support deep tracing (in which the server side calls are
also traced). Here are some of the tasks that don't support deep tracing yet:

BackupWorkspace

CommitWorkbooks

CreateWorkbooks

DeleteWorkbooks

ExecuteLogiQL

JsonService

RefreshWorkbooks

The server code includes some smart pointer improvements which could potentially have a small
performance benefit.

MEASURE SERVICE

This release contains a new measure service query optimizer. There should be no observable
difference other than improved performance of the optimizer.

Corrected Issues

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

MODELER

Users will experience much smoother and more reliable drag and drop behavior when dragging and reordering
fields.

Modeler now correctly displays views with multiple sheets when using logicblox.min.js.

TOOLS AND SERVICES

Fixed an error in the ordering of rule execution units that could generate invalid
sequence numbers in some uncommon situations. The error could cause odd calculation
problems or errors like "Duplicate key in hashtree" in the LB server logs.

User sessions are now invalidated when a user is made inactive through the credentials
service. Before when a user was inactivated through the credentials service, the user
could still continue accessing resources previously accessible until the session expires.
Now the credentials service will invalidate the user session when the user is made inactive.
Note that the user session will only be invalidated in the compute node where the credentials
service is running, not for other nodes used by the application. This should be good
enough for most scenarios, where an authenticated proxy acts as the front end for insecure
resources.

Fixed an "illegal cast" error reported when exporting default valued
predicates where the raw_string column format was used in a key column
for the export service configuration.

Fixed a performance problem where a TDX import operation would not utilize available CPU
resources at times when the import was executed after many export operations.

MEASURE SERVICE

Composite aggregation now supports grouping along a dimension that is not
mentioned in the composite, as long as the grouping is vacuous, meaning that the
grouping is to the same level as the data. Previously, queries using these
types of aggregations would produce an error.

Upgrade Information

MODELER

Please use logicblox.min.js in your projects. The file logicblox.js
is intended to use only by Modeler's developers and has no supplied source maps. Moreover, it is heavier and
slower than its
minified version. Please update your references to the logicblox.min.js. The non-minified file will be removed in future releases.
This relates to logicbloxtestutils.js as well.

View layout modification has been disabled due to instability. This means it's no longer possible to
resize or reposition a sheet inside a canvas with your mouse.

If you have a modified layout saved in the view state, use the "Reset Canvas Layout" option
from pivot cell's context menu. Modeler's canvas layout functionality is currently being improved
and layout modification will be re-enabled once this work is completed.

The generated file percent_parent_rules.rules has been removed as it is no longer needed.
You'll likely need to update the config.py in your project to remove it from the list of .rules files to install.

Modeler has been upgraded to React 16, that means global exports comming with logicblox.min.js
such as React and ReactDOM are upgraded too. Please review the
React migration guide.

Some of the notable changes include:

React.createClass helper is obsolete and was moved to the separate create-react-class package.

React.DOM helpers are obsolete and were moved to a separate package.
Our suggestion is to replace them with React.createElement.

React.PropTypes were moved to the separate prop-types package.

React Add-Ons were discontinued. react-addons-test-utils were replaced by react-dom/test-utils
and createRenderer was moved to react-test-renderer/shallow.

Please stop using componentWillMount life-cycle hook and replace it with componentDidMount instead.

The library containing the modeler migration tool is included in the
distribution under 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 path/to/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-js based application from one version to another,
run the upgrade script to upgrade between versions: