LogicBlox 4.4.3

Release Date: April 6th 2017

Executive Summary

LogicBlox 4.4.3 introduces the following enhancements:

  • The database includes a rewrite of the 'refgraph' (comparable to a garbage collector), causing significant performance as well as stability improvements.

  • The Measure Service includes improvements to help developers with debugging.

  • The release also comes with some exciting features for users of Modeler-js based applications, such as support for searching over text and entity-typed measure values directly from the grid, support for directly assigning level members to parent levels via the right-mouse click menu as well as the ability to configure measures to be read-only at the user level.

    • For video highlights of the new Modeler-js search feature, please see the LogicBlox 4.4.3 release video.

What's New

Database

  • This release introduces a rewrite of the ‘refgraph’, which is comparable to a garbage collector. In our testing, this rewrite improves performance by about 25% on non-trivial benchmarks. The rewrite also addresses a long-standing bug (missing pageinfo) that we’ve observed in our most rigorous testsuites, but rarely occurs in applications.

  • Mirrors can now be disconnected also on the primary lb-server instance to support situations where the secondary lb-server instance may not be usable. A list of active mirrors can be obtained using lb info and the disconnect command is lb disconnect-mirror.

    Example 53. 

    lb disconnect-mirror foo 192.168.1.3:57078 

Services Framework

  • Asynchronous lb-web services now have a configurable timeout.

Workflow

  • The lb.CreateBranch workflow task now has an optional override parameter, allowing the creation of a branch even if there exists one with the same name. The default is false, as per the previous behavior.

Measure Service

  • Improved formatting of generated logic in debug(2) level logs.

  • CubiQL inverses:

    • CubiQL inverses are now properly reported for ModelRequests.

    • CubiQL inverses now use Input as a distinguished variable for the changed tuples, rather than the name of the edited metric plus intersection, etc.

Modeler-js

  • Text Based Search: Users can now search over text and entity-type measure values using the new magnifier icon that is available via the menubar on every sheet. After specifying on which measure the search should run on (which can also be a measure that is not visible on the sheet), the user needs to indicate whether to look for an exact (Exactly Matches) or non-exact match (Contains, Starts with or Ends with).

    Tips for optimal search results

    • To search for multiple search terms, simply separate them with a space. For instance, to search for SKUs that have either the color yellow or green, enter the following into the search field: yellow green.

    • To search for a specific word that has quotes around it, use double quotes. For instance, to search for ""colored, enter """colored"" into the search field. As a result, measures containing only colored will not appear in the search results.

    • It is possible to run a search on a measure that is not visible on the view. The user will then receive a notification about the results appearing in fields that are not available on the view and get the option to add the measure to the view.

    • The list of measures from which the user can select from depends on the displayableMeasures entry that is configured for the sheet/canvas. The list is restricted to strings and entity-type measures.

    Additionally, it is also possible to pre-populate the search bar via the view configuration.

    Example 54. 

    In the example below, we add a configuration to the pivotConfig of the sheet so that when the view is initially opened, the data is filtered based on the search criteria. The search is configured to run on the measure Description, where all results have to exactly match the search term Banana.

     id: "some view",
     pivotConfig: {
         axis: {
             ...
         },
         search: [{
            qualifiedNames: ["Description"],
            query: "Banana",
            exactMatch: true,
            startsWith: false,
            endsWith: false
        }]
     }

  • Directly Assigning Level Members to Parent Levels: To map a level to a parent level or to change an existing mapping, users can now right-click on the level header of the parent level and select the new option Assign <level_label>. This will open up a form that allows the mapping of one or multiple children to the selected parent.

  • Performance optimization of dropdowns: We have optimized the performance of dropdowns with large datasets. Users will notice significant performance improvements when scrolling or searching through them.

  • Configure metrics read-only by user: A new predicate allows developers to configure if a metric should be read-only for a user:

    pivot:config:format:metric_readonly_by_user(m, u) -> lb:web:measure:Metric(m), system:app:User(u).

    In previous releases this was only possible at the metric level using the pivot:config:format:metric_readonly predicate. A metric is now considered read-only if either pivot:config:format:metric_readonly(m) or pivot:config:format:metric_readonly_by_user(m, u) is set for a user.

    Example 55. 

    In the example below the measure Sales is configured to be read-only for user user1. The measure will only be rendered read-only for this specific user.

     +pivot:config:format:metric_readonly_by_user(m,u) <-
        lb:web:measure:Metric_name[m] = measure_name,
        system:app:User:name[u] = user_name,
        measure_name = "Sales",
        user_name = "user1",
        +system:app:User(u). 

  • New configuration option for handling links: It is now possible to configure whether a link should be opened in a new tab (default behavior) or in the active tab, using the openInNewTab link configuration setting.

    Example 56. 

    In the example below the openInNewTab setting is set to false. When the user clicks on the link, the LogicBlox website will open up in the active browser tab.

    { "caption": "LogicBlox", "url": "http://www.logicblox.com", "openInNewTab": false } 

  • Entity labels in export to CSV/Excel: We now support the entity label toggle when exporting to CSV or MS Excel. Column headers, levels, and entity-typed measures will now be exported based on the selected display option.

    Note

    Please note that this can cause a change in the default exports from the grid as column names will now show the label instead of the qualified name unless the ID display option is selected.

Corrected Issues

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

  • We identified a bug that in the following sequence would allow an IDB predicate to be treated as an EDB:

    1. Add a predicate p (without any rules)

    2. Add an inactive block that updates p as an EDB (e.g. using ^p )

    3. Add an IDB rule for p

    4. Execute the inactive block

    This sequence would result in internal errors and incorrect results. The two options to fix this bug were to either (a) change p into an EDB predicate as part of step (2), or (b) produce a runtime error at step (4). We decided to implement option (b).

    Note

    This is a backwards incompatible change, and for internal applications we have seen new errors reported during the build. Typically an error is reported in step (3) when attempting to install an IDB rule for p. While we try to avoid backwards incompatible changes, these errors almost always do indicate a real problem in the application logic that should be fixed. The only case where the new error is a false positive is if the inactive block would never be executed.

  • Fixed a race condition in datetime:format that in rare cases resulted in an incorrectly formatted datetime.

  • Fixed a memory leak that under heavier loads can be serious enough to cause problems.

  • Resolved an issue where changing or resetting passwords was not possible when using local credentials service.

  • Fixed an issue on lb-workflow backups, which were not compressing the backups.

  • Fixed an issue in lb workflow where lb.wb.BackupMasterWorkbook tasks were ignoring export errors and reporting success.

  • Resolved an issue where lb-workflow was receiving error files in memory when no error file was specified. This could lead to an exception when receiving a large error response with no file specified.

  • The workbook framework delta merge operation is now resilient to crashes. Previously, a crash during a delta merge (commit or refresh) could leave the workspace in an inconsistent state which would not be recoverable without manual intervention. Now, a subsequent merge request that detects an inconsistent state is capable of recovering from it before executing the operation.

  • Sending parameters with empty LiteralExprs will no longer cause a runtime exception.

  • Modeler-js:
    • Resolved an issue where under certain circumstances all dimensions were available via the dimension browser instead of only the ones configured in the dimensionsConfig entry of a sheet.

    • Resolved an issue where navigation using the right and left arrow keys was not supported on the axis configuration panel.

    • If a cell is displayed hashed, the tooltip now contains an explanation on why this is the case.

    • The modeler no longer sends duplicate relations in its measure service requests.

Installation and Upgrade information

Installation Instructions

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

Release Information

Server requirements
Operating System: 64 bit Linux; OSX 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.