LogicBlox 4.20.0

Release Date: February 13, 2020

What's New

LogicBlox 4.20.0 introduces the following enhancements:

  • Modeler IDE
    • We have published the Modeler IDE Reference Manual on the LogicBlox Developer website. This documentation can be accessed directly from within the Modeler IDE by clicking on the "Help" option in the top menu bar. This "Help" option is context-sensitive, which means the Modeler IDE opens the relevant section of the manual based on the view you are currently using.

    • We have added the ability for users to manage the configuration of workbook templates in the IDE.

    • The measure explosion syntax ($) has been extended with a new variable $$BASE. This variable holds the base intersection of a measure variant based on the measure components along which a rule is being exploded.

      Example 1. 

      Imagine you have the following CubiQL rule to calculate the average unit retail (AUR) of the measure Sales:

      fun [inter = {Sku,Store,Week}] in
        $Sales_R[inter] / $Sales_U[inter]

      This function expression requires a default value for the intersection argument inter which in this example is equal to the base intersection Sku,Store,Week of our Sales measure.

      Now imagine you want to use the Modeler IDE to explode this measure rule across two different roles in a planning application, Manager and Planner. The Manager role always plans top-down and at a high level, e.g. Department,Region,Week where as the Planner is planning at the base level Sku,Store,Week. These base intersections are typically defined as overrides in the measure component items for each of these roles.

      To explode the AUR rule for these roles with different base intersections, you can now use the $$BASE variable which will be substituted with the correct intersection:

      fun [inter = $$BASE] in
        $Sales_R[inter] / $Sales_U[inter]

    • The configuration in the "Intersections" view is now validated as part of the global validation functionality of the Modeler IDE.

    • Measure component item labels can now be left blank which ensures the measure component item will not part of the generated label of derived measures.

      Example 2. 

      Let's say you have a measure component "Unit of Measure" (UOM) with a measure component item named NOLABEL. We don't assign a label to this measure component item:

      An example of a derived measure name using the measure component item would be Sales_WP_NOLABEL_MGR while the label for that same derived measure would be “Sales WP MGR”.

    • When opening a Modeler IDE project that has a project version higher than the current IDE version, the IDE alerts the user that the project requires a newer version of the IDE.

    • Added the keyboard shortcut CTRL-N / Cmd-N for the "+ New" button in Modeler IDE views.

  • Tools, Database, and Services
    • Added support for parallel upload and download of files for Google Cloud Store to our cloud-store utility. This necessitated an update of some of the third party jars used by our Java components (lb-web, lb-workflow, and cloud-store) to more recent versions.

    • Updated lb-web client and lb-workflow to conform with the latest cloud-store API changes.

    • Improved logging to show subdomain sizes during parallel rule evaluation.

  • Measure service
    • In the LogicBlox 4.18.0 release, we have introduced the new asynchronous measure service which uses WebSocket connections. The old HTTP version of the measure service has now been removed from LogicBlox. For more information, see the "Measure Service" section in the Upgrade Information section.

    • Greatly improved the error messages reported when there is a mismatch between the definition of a LogiQL predicate and how it is used in the measure service model.

    • The measure service client has been updated to transparently convert Request messages to AsyncRequest messages and AsyncResponse messages to Response messages, when using a URI that starts with ws:// or wss://. This allows all lb measure-service command line options to work with the new asynchronous measure service.

      Example 3. 

      Starting the CubiQL REPL swith the new asynchronous measure service:

       lb measure-service repl --uri ws://localhost:55183/modeler-now/websocket/measure

    • The measure service CubiQL parser will now treat various other forms of Unicode whitespace the same as ASCII whitespace. This addresses problems caused when copying and pasting between some applications (such as chat clients).

    • Some small improvements to error reporting.

Corrected Issues

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

  • Modeler
    • The new websocket version of the measure service is now placed in the pivot module instead of the modeler_platform module. This could previously cause a problem with the proxy, because a typical setup is to have the proxy have the modeler_platform module. Now, if you do this you can end up with a measure service in the proxy workspace. Not only is this unnecessary, but it can cause a URL conflict if the app prefixes are the same in both workspaces.

    • When the backend session expires while the logout timer is running in the Session Expired dialog in the user's browser, the user is now automatically logged out and routed to the login screen.

    • Resolved an issue where the measure service would not accept certain CubiQL expressions used as target locks.

    • Resolved an issue where Modeler would not render a navigation tree when the Modeler configuration allowUserDefinedSheets is set to false.

    • Fixed a bug in install_ui.py related to Python 3 which caused an issue when reading files containing special characters.

    • Revised and added a number of translations in the Spanish language file.

  • Modeler IDE
    • Fixed an issue in the "Dimensions" view which caused too much white space to be rendered when editing the name and label of a dimension.

    • Generated actions URLs are now prefixed correctly with a /. For more information about service URL prefix requirements for Modeler IDE projects, see the "Modeler IDE" section in the Upgrade Information section.

    • Resolved an issue that prevented users from make corrections to measure rules referring to deleted measure component items.

    • The "Formula" tab of the "Measures" view stopped functioning properly when a user deleted a measure rule while there were still inverse rules present. This issue has been resolved.

    • Resolved build issues that could occur with large Modeler IDE projects.

    • Composite aggregation and spread methods using first or last methods are now correctly saved by the Modeler IDE. Before this fix, these composite aggregations and spreads would disappear after saving.

    • Fixed a bug in the "Intersections" view which in some situations prevented the user from reordering levels in an existing intersection.

    • When automatic migration of a Modeler IDE project fails, it will no longer result in any file changes to that project.

    • Fixed a bug that caused the "Settings" view to save changes and remove keyboard focus from the active input field on every keystroke when editing the value of a "Dependencies" input field.

    • Removed internal references from measure component items to measure components. In some situations, this circular reference could cause a problem when automatically upgrading an older Modeler IDE project to the current version of the IDE.

    • The Modeler IDE now prevents users from configuring both a "Spread By Metric" and a "Spread Method" at the same time. If the user picks a "Spread by Metric" measure that does not have the same base intersection as the measure for which it is being set, the user is warned that this is not allowed and cannot continue until the issue is fixed.

    • Predicates such as Calendar:Week:month_first, Calendar:Week:month_last, Calendar:Week:month_next are generated by the Modeler IDE as a result of specifying hasFirst/hasLast but they weren't being populated. These predicates are now being populated by the Modeler IDE.

  • Tools, Database, and Services
    • Fixed a bug in the lb state-dump command that prevented it from working with Python 3.

    • Fixed some lb-web and lb-workflow python scripts that generated syntax errors when used with Python 3.7.

    • Fixed a bug in the FilePoller lb-workflow task that made it miss files in some circumstances.

    • Corrected some problems with detecting when to re-optimize and which evaluation algorithm to choose during rule maintenance.

    • Fixed a bug where the runtime could produce topological sorting errors in some extreme cases.

    • Fixed a bug in linear recursion where duplicated variables in the head of a rule that should produce a type error instead of an internal runtime error.

    • Fixed a runtime problem that generated internal errors for incremental maintenance of some rules that need sensitivity indices and that use a predicate computed by a recursive rule.

    • Fixed a bug in lb-web the prevented lb-web-server from starting if the log_file option was set in lb-web-server.config.

  • Measure service
    • Increased a timeout that could cause failures for requests that require more than thirty seconds to process.

    • Fixed a bug in the REPL where we did not correctly handle the label and id of a given level having distinct types.

    • Fixed an issue that would arise when refining with hierarchies using an intersection instead of distributions.

    • The command-line tool lb measure-service model generate will now return a proper failure exit code to the invoking process.

    • Fixed an issue that could cause stack overflows when an inverse references a recursive definition.

    • Fixed a tracing bug introduced when the modeler UI switched to the async measure service. This bug caused all traces for LogicBlox components below the modeler layer to be dropped. Tracing should now work as expected.

Known Issues

The issues listed below are known to exist in the 4.20.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.20.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 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.20.0).

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

  • Modeler IDE
    • Similar to non-Modeler IDE projects, service URLs in workflow functions should now always be prefixed with a /.

      Example 4. 

      The following workflow function contains a service URL which is correctly prefixed (/$(app_prefix)/delim-file/hierarchy/calendar instead of $(app_prefix)/delim-file/hierarchy/calendar):

      workflow master.import_hierarchies(app_prefix,location,timeout,transport="http://localhost:55183",full=false)[] {
        master.TdxImport(
          app_prefix=$app_prefix,
          timeout=$timeout,
          input={
            "{
                service: '/$(app_prefix)/delim-file/hierarchy/calendar'
                file:    '$(location)/Calendar.csv'
                error:   '$(location)/error/Calendar.csv'
            }",
            ..
          },
          transport=$transport,
          full=$full)
      }
      

  • Measure service
    • In the LogicBlox 4.18.0 release, we have introduced the new asynchronous measure service which uses WebSocket connections. The old HTTP version of the measure service has now been removed from LogicBlox. The new asynchronous measure service is available at the URI ws://<PREFIX>/websocket/measure.

      Example 5. 

      Refreshing the new asynchronous measure service with the lb measure-service command line tool:

      lb measure-service admin refresh --uri ws://localhost:55183/modeler-now/websocket/measure

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 3.5 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.