LogicBlox 4.4.12

Release Date: February 6, 2018

What's New

LogicBlox 4.4.12 introduces the following enhancements:

  • Modeler

    • Modeler already supported dimension splitting on different axes. We now also added support for dimension splitting on a single axis! Watch the video here.

    • The handling of pending and invalid edits in form mode now matches the behavior in grid mode.

    • Modelertestutils now contains methods for creating and removing user-defined sheets.

  • Tools and Services

    • Support for 128-bit integer literals has been added to LogiQL. These literals are written with a suffix of 'q'. For example, 5 is treated as an int type and 5q has a type of int128.

    • A new global service configuration flag 'enable_authorization_without_authentication' was added to enable service authorization without authentication. This is intended for use in the backend nodes that are behind a proxy which cannot authenticate requests. In such scenarios, setting this flag to true will enable authorization check on requests with operations associated with them and thus preventing unauthorized access to the services on the backend nodes. Setting the global flag affects all services hosted on the node.

      There is an additional service level option to enable/disable this behavior. It can be achieved by setting the "authorization_only" predicate to true/false in the service configuration. The value set in the predicate will override the global configuration.

      NOTE: If you want to start using authorization on the backend, make sure the proxy targets port 8080 instead of 55183 for workbook services, and the flag 'enable_authorization_without_authentication' is set to true (on the backend nodes ONLY!).

  • Measure Service

    • Extended slides to allow more than a single target level.

    • It is now possible use an AdminRequest to query the state of some of the measure service configuration flags (such as the log level, etc.).

    • The REPL will now print results of optimization in CubiQL text format rather than in JSON.

    • Considerable memory usage improvements, especially for scenarios where there are many branches all with their own measure service instances.

    • The measure service model can now make use of what we are calling tuple types in many places. Previously all types referenced by the measure service have been atomic and have a straightforward mapping to LogiQL types. Tuple types allow defining various things in terms of a n-ary tuple of other types. For example, instead of a particular level being defined in terms of a single entity, it could be defined by a pair of two entity values. When generating the underlying LogiQL these tuples will be flattened down to multiple predicate arguments. There are a few places they are not supported, but we'll improve this over time.

Corrected Issues

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

  • Modeler

    • When using the mouse to drag a level or measure pill to/from the axes, the dragged pill looks much better.

    • For IE11 users, the performance of level creation forms containing large dropdowns has been improved significantly.

    • Modeler no longer has troubles keeping up with user input in String typed input fields on custom level creation forms.

    • Modeler’s performance while processing user input on a grid containing a large number of position locks has been improved significantly.

  • Tools and Services

    • Fixed an issue in TDX Services where lookup of sub-entities would not work.

    • Improved diagnostic messages for incorrect uses of linear recursion P2P and also fixed some problems with the use of constants in the body of linear recursion rules.

    • Fixed various issues with default valued predicates.
      • Fixed bug that caused exception to be thrown when min or max aggregation was used with a default valued predicate in an inactive exec block.

      • Applied an optimization that improves the performance and prevents leaking default values into the head of the rule. It clearly defines the semantics of a default val min/max aggregate and rewrites it into the set of rules that produce an equivalent result as the original rule, but runs over materialized layers only. As the rewrite is semantically equivalent to the original rule, it solves an issue of incorrect calculations and also prevents leaking of default values into the head predicates.

      • Fix for leaking default values into head predicates for default value rules with total aggregation and non-aggregate IDB rules. Fix is applied to default value rules that do not contain any non-default predicates in the head and no upserts.

      • Added an optimization that handles division in the default value rule body. Such rules are now efficiently evaluated over the materialized layer only. The optimization supports `int` and `decimal` types. The `float` type is not supported as the semantics of float type division is different.

  • Measure Service

    • Fixed incorrect rewrite and fusing aggregations in queries over default valued expressions.

    • Fixed issues with commuting splits and relabeling expressions with aggregations using slides.

    • Fixed issue where we did not check properly that labels match when using a slide.

    • Fixed incorrect query generation for measure expressions using both min and max aggregations with measures that had a default value.

Installation Information

Installation Instructions

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

  • Modeler

    • The libs.js and libs.min.js files were removed from the build as announced. Please remove references to these files from your HTML pages.

    • Modelertestutils now uses ES6 classes. By the ES6 specification, its methods are no longer enumerable via forEach loops. So, if you have code which tries to enumerate modelertestutils methods, you should do it in a way compatible with ES6. For example:

      Example 7. 

      function getAllMethods(obj) {
          let methods = [];
      
          do {
              const currentProtoMethods = Object.getOwnPropertyNames(obj)
                  .filter((p, i, arr) =>
                      typeof obj[p] === 'function' &&    // only the methods
                      p !== 'constructor' &&             // not the constructor
                      (i == 0 || p !== arr[i - 1]) &&    // not overriding in this prototype
                      methods.indexOf(p) === -1          // not overridden in a child
                  );
      
              methods = methods.concat(currentProtoMethods);
          }
          while (
              (obj = Object.getPrototypeOf(obj)) &&     // walk-up the prototype chain
              Object.getPrototypeOf(obj)                // not the the Object prototype methods (hasOwnProperty, etc...)
          )
      
          return methods;
      }
      
    • 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.