LogicBlox 4.4.9

Release Date: November 7th 2017

Executive Summary

LogicBlox 4.4.9 introduces the following enhancements:

  • Modeler-js

    • Modeler has a brand new filters panel which contains filters for all levels and metrics which are on the grid including Boolean and Text typed measures. Watch the video here.

    • The workflow for reviewing and resolving edits with server errors (asynchronous errors) has been improved.

    • The headers of the currently selected row/column within the pivot grid are now highlighted for the user to easily see what cell is selected.

    • Modeler will now present a warning to the user when pasting/copying a big set of data to prevent issues within the user's browser.

    • It's now easier to lock an entire row or column in the pivot grid by right-clicking on the row or column header and selecting 'Lock'.

  • Tools and Services

    • A preliminary version of a generic workspace archive/restore feature is included in the release.

    • Support for on-demand predicates has been added as an experimental feature.

    • Several string operations in the measure service are now Unicode (UTF8) aware, as is the match comparison operator.

    • Protobuf services now support a "log_messages" parameter.

    • The proto2datalog utility now defaults to giving all protobuf predicates an "Extensional" derivation type.

What's New

Modeler-js

  • A new filters panel is introduced in the release. It contains filters for all levels and metrics which are on the grid. The user is now also to create filters for Boolean and Text typed measures. It still supports associative filtering as axis filters do. Watch the video here.

    Level and entity/string measure filters have a search input. In order to see some data in the filter, you need to use the search input to narrow the data. What you're typing is applied automatically once you've reached 3 characters or more. In order to apply search with less than 3 characters, you can hit Enter. Be careful with hitting Enter especially when one character is entered because it's going to load a huge amount of data. Use the search thoughtful.

    The search in the menubar is not available anymore. The new filters panel has filters that replace that search functionality. Make sure to migrate existing search configurations to filters. This new filter configuration supports filtering on empty values.

    The following filter configuration gives all SKUs where measure Active has an undefined value.

    Example 11. 

    {
        "id": "my-view",
        "pivotConfig": {
            "axis": {
                "x": [{ "qualifiedName": "Product:sku" }],
                "y": [{ "qualifiedName": "-:Measures" }],
                "z": [
                    { "qualifiedName": "Active" }
                ]
            },
            "filter": {
                "Active": {
                    "type": "empty",
                    "empty": true
                }
            }
        }
    }

    The filter below gives all SKUs where measure Active has a value, true or false.

    Example 12. 

    {
        "Active": {
            "type": "empty",
            "empty": false
        }
    }

  • The workflow for reviewing and resolving edits with server errors (asynchronous errors) has been improved.

    • An action bar will now appear when an edit has server errors. This action bar provides two actions: review edits and resubmit.

    • Resubmitting will immediately commit all edits which have server errors (regardless of when the server errors appeared).

    • Only edits which are erroneous now need to be addressed, not each individual edit, before resubmitting.

    • The "review invalid edits" dialog is now accessible only from the error action bar.

    • The "review invalid edits" dialog now shows ALL invalid edits, not just those from a single edit commit "batch".

    • The "mark edits valid" behavior (clicking the green checkmark in a cell) has been removed.

    • The red exclamation point which opens the "review invalid edits" dialog has been removed.

  • The headers of the currently selected row/column within the pivot grid are now highlighted for the user to easily see what cell is selected.

  • Modeler will now present a warning to the user when pasting/copying a big set of data to prevent issues within the user's browser. For pasting, the threshold is 10k cells, for copying is 50k.

  • It's now easier to lock an entire row or column in the pivot grid by right-clicking on the header and selecting 'Lock'.

Tools and Services

  • A preliminary version of generic workspace archive/restore functionality has been included in this release. This is intended to support migration of rules and data from one workspace to another, using text and CSV files to allow migration across workspace versions that are not binary compatible. Documentation of this feature will be added to the LogicBlox Administration Guide once more testing is done. To start experimenting with this, see the archive and restore commands within dlbatch. For example

    Example 13. 

    $ dlbatch
    <blox> help archive
    <blox> help restore
    <blox> create test_ws
    <blox> archive --dirname test_archive
    <blox> restore --dirname test_archive test_ws2

  • A new experimental type of predicates supporting on-demand value calculation has been introduced. To create an on-demand predicate, set its derivation type to "OnDemand" when declaring the predicate. In some ways, on-demand predicates are like derived-only predicates or views. On-demand predicates allow abstracting over computations that we cannot or do not want to fully materialize. For on-demand predicates, we compute only those tuples that are needed in all the places the predicate is used.

    One of the most significant differences between on-demand and derived-only predicats is that on-demand predicates can be recursively defined. For example, it is possible to define the Fibonacci function:

    Example 14. 

    fib[i]=f -> int(i), int(f).
    lang:derivationType[`fib]="OnDemand".
    fib[0]=0. 
    fib[1]=1.
    fib[i]=(f1 + f2) <- i >= 2, fib[i-1]=f1, fib[i-2]=f2.

    On-demand predicates also make it much easier to work with more interesting data-structures defined via constructors in LogQL (lists, trees, etc.). However, performance of on-demand predicates for these uses has not been evaluated yet.

    Unlike derived-only predicates, one significant limitation for on-demand predicates is that they may only be referenced from the evaluation stage in which they are defined. For example, an on-demand predicate declared in database lifetime logic will be evaluated at stage final. This means that it is not possible to reference the predicate from transaction lifetime logic running at stage initial or query. This is because for any demanded tuples computed in one stage, it will not be possible to compute the result until evaluation reaches the declaring stage, or it will be too late for the demand to be considered.

    You do not necessarily always want to use on-demand predicates in place of derived-only predicats. They are not inlined into their use site like derived-only predicates, which in some cases may yield better performance.

  • Several string operations in the measure service are now Unicode (UTF8) aware, as is the match comparison operator.

  • Protobuf services now support a "log_messages" parameter. Set service_parameter["log_messages"] = "true" in a service config to enable protobuf message logging for that service.

  • The proto2datalog now defaults to giving all protobuf predicates the derivation type “Extensional”. Previously, all protobuf predicates were created initially as "NotDerived" (effectively "unknown") and then potentially migrated to "DerivedAndStored" (IDB) if a rule to compute a predicate was added to the workspace. Default the derivation type to "Extensional" for these predicates removes some ambiguity that complicates functions like workspace archive/restore. If you want protobuf predicates to be IDBs, you now need to pass "-derivationType idb" to proto2datalog or use "derivationType=idb" in LogiQL project files.

Corrected Issues

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

  • Measure Service

    • The row_limit_exceeded=true flag is now properly propagated from local measure service responses to the response of the global service. All local response rows are still combined into the global response. Consequently, the number of rows in the global response can be well higher than the row_limit specified in the request.

  • Modeler-js

    • Modeler now correctly shows new values in cells when processing pasted data.

    • Values pasted in a dropdown cell are now validated against available labels.

    • Resizing columns/rows (with or without holding the Ctrl-key) now behaves the same for both attributes (measures directly on axis) and measures (in Visible Measures).

    • The 'Clear Sort' option in the context menu now correctly clears all sort configs within a sheet.

  • Tools and Services

    • Fixed a performance issue for maintenance of rules requiring sensitivity indexes

Installation and Upgrade information

Installation Instructions

Install LogicBlox 4.4.9 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.4.9/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

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:

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

where the version numbers refer to LogicBlox releases.

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; macOS 10.10+ is supported for local development.
Java Runtime Environment 8
Python 2.7 or higher
Client requirements
Applications using modeler-js User Interface Components: Google Chrome or Internet Explorer 11+
Requirements for applications using non-modeler-js components may vary per application.