LogicBlox 4.7.0

Release Date: October 16, 2018

What's New

LogicBlox 4.7.0 introduces the following enhancements:

  • Modeler
    • Users can now search for headers within Modeler's grid to find specific positions without scrolling. Header Search can be invoked by clicking on the magnifying glass icon in the toolbar or by pressing CTRL+SHIFT+F from within the sheet.

      Type your search term in the search field to find headers on either the Rows or Columns axis. When there is more than one match, use the < and > buttons to select the previous or next matching position. To make your search case sensitive, select the Aa option in the search field.

    • Modeler now implements internationalization support and comes with English and Russian languages out of the box. Translations are provided as JSON files and are located in the <LOGICBLOX_HOME>/assets/translations/common directory of the LogicBlox distribution.

      You can use the new Modeler configuration setting availableLanguages to configure the supported languages in your Modeler application. These languages will be selectable by the user in the Language Selector in the menu pane.

      Modeler will detect the browser's locale on startup and choose the most appropriate language from the availableLanguages list. If no language was found or there's no appropriate one, Modeler will fallback to the English language.

      Example 1. 

      The following configuration enables both English (en-US) and Russian (ru-RU) in the Modeler application.

      const modelerConfig = {
        /** @type {Array<Object>} - An array of { name, value } objects. Defines languages shown in the Language Selector. */
        availableLanguages: [
            { name: "English", value: "en-US" },
            { name: "Русский", value: "ru-RU" }
        ],
        .. 
      }

      Pro tip: you can use flag emojis in language names as shown in the screenshot above.

      You can add your own language(s) by duplicating one of the bundled translation files (en-US is recommended) and using a valid BCP 47 language tag as its file name. Then, replace the JSON values with appropriate translations. There is support for interpolation, plural forms, and contexts. You may compare the bundled en-US and ru-RU JSON files to better understand these principles.

      The <LOGICBLOX_HOME>/assets directory of the LogicBlox distribution is typically copied over to Modeler application projects. In your project, new translation files should be placed alongside the bundled translation files (e.g. in <MODELER_APP>/frontend/translations/common).

      Suggested translation guidelines:

      • Group keys together by an app module/functionality/component/etc.

        Don't

        {
          "labelTitle": "Modeler App",
          "buttonExportToExcel": "Export to Excel"
        }

        Do

        {
          "app": {
            "title": "Modeler App"
          },
          "export": {
            "buttonExportToExcel": "Export to Excel"
          }
        }

      • Define prefixed keys. By convention, a prefix is usually a control type or a target property name. This will simplify key management and will allow you to find keys faster.

        Example 2. 

        Some examples:

        • buttonSubmit - For a button's text.
        • labelNoMoreRecords - For a label somewhere on UI.
        • captionStartTyping - For the caption property of an input field.

      With future releases of Modeler, there may be changes/additions/removals of translation keys and values. If you're supporting a language, you need to synchronize your file with the bundled en-US.json. You could do this using the following simple steps:

      • Compare the newer en-US.json file with the previous version using any diff tool (VSCode/Meld/diff/etc).
      • Look for changed keys/values and modify your own file to follow those changes.

      There is a special language { name: "Debug", value: "cimode" } which can be used during translation development. Selecting this language shows keys instead of translated values on the UI.

      Additionally, you can use the Modeler configuration setting translationDebug to see missing keys and other debug messages in the browser's console.

      const modelerConfig = {
        /** @type {Boolean} - True, if you want to see missing keys and other debug messages in the browser's console. */
        translationDebug: true,
        .. 
      }

  • Tools and Services
    • Runtime support for language modules has been added. At this time it is really only practical for platform developers to add new modules. New request/response messages have been added to the ConnectBlox protocol for interacting with language modules and a new dlbatch command allows interaction with language modules. A tutorial language implementation will be coming soon.

    • Internal refactoring has improved the consistency of interpreting combinations of lifetime, run stage, and install flags for blocks. This is largely an invisible change, but did require removing some long deprecated fields from compiled block bytecodes. Separately compiled logic from earlier LogicBlox releases will not be compatible and will need to be recompiled.

    • Added a --branch option to the lb print-rules command, allowing inspection of database rules installed on a specific branch.

    • TDX services now allow multiple aliases to be specified for a single column in a CSV file. To define aliases, replace a normal column name in the TDX configuration with a bar delimited list of column aliases surrounded by braces. For example, {name1|name2|name3}. Aliases are also supported for optional columns, as in [{name1|name2|name3}].

    • The signature algorithm used in SAML is now configurable through the signature_algo option. It supports sha1, sha256 and sha512.

  • Measure service
    • A new flag, up_on_some has been added to the dimension lock message. This can be used to control the behavior of dimension locks on targets with a base intersection using a level from the given dimension above its bottom level. Previously, a lock would only be propagated up from the bottom of a dimension to a higher level if all children rolling up to a position at the higher level were locked. The flag allows specifying that a position at the higher level be locked if only some of its children are locked.

    • Added an additional validation on slides to ensure that a given label's dimension does not change between the source and the target of the slide.

    • Improved the abstraction of the CubiQL parser into an independent jar. This makes it possible to provide a different parser implementation when using the measure service code on non-JVM targets.

Corrected Issues

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

  • Modeler
    • Fixed an issue where editing the base positions of a level (e.g. Sku) with multiple percent parent rollup locks (e.g. on Subclass 1 and Subclass 2) would result in invalid updates of data.

    • Cleaned up workbook list screen where brackets appeared above "Welcome, <username>".

    • Fixed an issue where the cover aggregation method was not displayed correctly on the Measure Properties panel under "Default Aggregation".

    • Fixed an issue with scrolling in the Filter Panel.

  • Tools and Services
    • Improved performance of rules of the pattern A=(B-C)/C, where all predicates have a default value.

    • Added limits to threads that can be spawned by alpha-trees. In some cases, huge data imports could previously cause alpha-trees to spawn a number of threads the exceeded the allowed number of threads per process. This should no longer occur. In addition, we try to make sure the newly spawned threads are targeted to the busiest subdomains.

    • Fixed an issue where underscores were not allowed in protobuf namespaces.

    • The LogicBlox lb web-client and batch commands were not using compression. This has been fixed.

    • The gzip parameter for the JsonService workflow task is now respected properly instead of always compressing.

    • Fixed an issue with lb-workflow's JSON parsing, where boolean literals would generate invalid JSON when a JSON typed variable is used to store the result.

    • Fixed a null deference error that would occasionally occur when adding blocks, a problem introduced with recent code cleanup.

    • Fixed an issue with lb web-client that was not correctly sending authentication headers when using a PrivateKeyHolder.

  • Measure service
    • Fixed an issue where we would generate an additional and unnecessary use of a conversion atom for request parameters that already had a named entity type. This additional atom would cause the logic to be invalid.

    • Fixed an issue where we would incorrectly sink dices inside of aggregations that use slides. In general, this transformation will not be semantics preserving.

    • Fixed an issue that was preventing the propagation of some warnings and errors concerning the model back to clients. These are now correctly logged and returned in model requests.

Installation Information

Install LogicBlox 4.7.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.7.0).

      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; Apple macOS 10.10+ is supported for local development
    • Java Runtime Environment 8, update 101 or higher
    • Python 2.7 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.