LogicBlox 4.6


LogicBlox 4.6.9

Release Date: April 23, 2019

Corrected Issues

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

  • Tools, Database, and Services
    • Fix for case when copying part of an alpha-tree leaf page to a sibling empty one fails due to unfortunate caching/encoding.

LogicBlox 4.6.8

Release Date: February 18, 2019

Corrected Issues

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

  • Tools, Database, and Services
    • Fixed an exception in the rule incremental maintenance that happens in a corner case when a negated predicate in the rule's body is updated.

LogicBlox 4.6.7

Release Date: January 18, 2019

Corrected Issues

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

  • Tools, Database, and Services
    • Fixed an error in the maintenance of predicates defined by linear recursion rules. If there are any changes to the grouping predicates that appear in the body of a previously-defined linear recursion P2P rule, the rule is now re-evaluated. The previous (incorrect) behaviour was to silently ignore such changes.

    • The string:min and string:max predicates had been implemented for some time but an oversight in the implementation made them inaccessible. This has been fixed.

LogicBlox 4.6.6

Release Date: December 18, 2018

Corrected Issues

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

  • Modeler
    • Fixed an issue where copy/pasting of an empty value could result in pasting a value (0) in the target cell.

  • Tools and Services
    • Fixed a bug that could cause prefix-join with lookup to produce incorrect results and have degraded performance during incremental maintenance when domain parallelism is being used.

    • Fixed a problem in alpha trees where certain data sets would be highly compressed and in some cases could cause invalid alpha tree internal structure. The problems would be reported as unexplainable functional dependency violations during execution of LogiQL rules.

LogicBlox 4.6.5

Release Date: November 12, 2018

Corrected Issues

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

  • Tools and Services
    • Corrected a bug in the runtime that could produce out of bounds access errors during incremental maintenance of rules containing negated atoms with more keys than the global key order for the rule.

LogicBlox 4.6.4

Release Date: October 16, 2018

What's New

LogicBlox 4.6.4 introduces the following enhancements:

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

Corrected Issues

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

  • Modeler
    • Fixed an issue with scrolling in the Filter Panel.

LogicBlox 4.6.3

Release Date: October 2, 2018

Corrected Issues

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

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

LogicBlox 4.6.2

Release Date: September 28, 2018

Corrected Issues

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

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

LogicBlox 4.6.1

Release Date: September 24, 2018

Corrected Issues

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

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

    • Fixed an issue with lb.JsonService workflow task ignoring gzip parameter, and always using compression on the wire.

LogicBlox 4.6.0

Release Date: September 12, 2018

What's New

LogicBlox 4.6.0 introduces the following enhancements:

  • Modeler
    • The performance of Modeler's Export to Excel functionality has been improved significantly.

    • Modeler now supports the configuration of an empty value for measures. When there is no value returned for a measure for a cell, this configured value will be shown instead.

      Empty values can be defined in the EmptyValue column of the measures configuration file measures.csv like so:

      Measure,Label,Intersection,DataType,DefaultValue,DefaultAgg,DefaultSpread,RecalcRuleName,PercentBase,PercentParentDimension,Format,HAlignment,Readonly,SpreadByMetric,DerivationType,EmptyValue
      EmptyValueDecimal,EmptyValueDecimal,sku,decimal,,,,,,,"$#,###.00",right,,,,0d
      

      Unlike default values, which are a performance optimization/convenience, empty values are only displayed in Modeler's UI. If a measure has both a default value and an empty value, the default value will take precedence. However, there are some instances where even though a measure is declared to have a default value, the rule defined for the measure does not allow it and in these cases the empty value will be used, if defined.

    • Modeler's filter panel has been enhanced with a number of new options to improve the searching and filtering experience:

      • We have added the Exact decimal filter. This filter allows the user to specify an exact decimal value to filter on. Using the "exclude from results" option, the user can choose whether Modeler needs to include or exclude the specified value from the filter result.

        This decimal filter can be defined in the sheet configuration JSON by configuring an equal or not_equal filter.

        Example 1. 

        The following filter gives all SKU's where Sales is exactly $ 15,000.

        {
          "pivotConfig": {
              "axis": {
                  "x": [{ "qualifiedName": "Product:Sku" }],
                  "y": [{ "qualifiedName": "-:Measures" }],
                  "z": [{ "qualifiedName": "Sales" }]
              },
              "filter": {
                  "Sales": {
                      "type": "equal",
                      "value": 15000
                  }
              }
          }
        }
        

        Example 2. 

        The following filter excludes all SKU's from the results where Returns is equal to zero.

        {
          "pivotConfig": {
              "axis": {
                  "x": [{ "qualifiedName": "Product:Sku" }],
                  "y": [{ "qualifiedName": "-:Measures" }],
                  "z": [{ "qualifiedName": "Returns" }]
              },
              "filter": {
                  "Returns": {
                      "type": "not_equal",
                      "value": 0
                  }
              }
          }
        }
        

      • In the Range, At Most, and At Least decimal filters, the new "include empty values" option allows users to specify whether they want to include empty cells in the filter results.

        The "include empty values" option of a filter can be defined in the sheet configuration JSON using the includeEmpty property.

        Example 3. 

        {
            "pivotConfig": {
                "axis": {
                    "x": [{ "qualifiedName": "Product:Sku" }],
                    "y": [{ "qualifiedName": "-:Measures" }],
                    "z": [{ "qualifiedName": "Sales" }]
                },
                "filter": {
                    "Sales": {
                        "type": "range",
                        "includeEmpty": false,
                        "min": 1000,
                        "max": 10000
                    }
                }
            }
        }
        

      • The "exclude from results" option has also been added to the string filter. This option allows the user to inverse the filter result.

        The "exclude from results" option of a string filter can be defined in the sheet configuration JSON using the exclude property.

        Example 4. 

        The following filter returns all SKU's except the ones with a color equal to Red.

        {
            "id": "my-view",
            "pivotConfig": {
                "axis": {
                    "x": [{ "qualifiedName": "Product:Sku" }],
                    "y": [{ "qualifiedName": "-:Measures" }],
                    "z": [{ "qualifiedName": "SkuColor" }]
                },
                "filter": {
                    "SkuColor": {
                        "type": "match",
                        "exclude": true,
                        "selection": {
                            "Red": true
                        }
                    }
                }
            }
        }
        

    • Modeler's fonts and buttons have been updated to Infor Design System's latest SoHo XI standards.

  • Tools and Services
    • We now enable domain parallelism for incremental maintenance of more rules, including those that have sensitivity indices. With previous releases, rules with sensitivity indices were maintained sequentially, which could perform badly. As an example, the rule below can now use domain parallelism when incrementally maintained.

      r(x,y) <- a(x), b(x,y), c(y).

    • Added a timeout parameter to lb-workflow's workbook tasks.

  • Measure service
    • Introduced the cover aggregation method for position-only expressions as a dual to the already existing collect aggregation method. For a position-only expression, collect will yield a position at the aggregated level if there is position in the source that maps to the aggregated intersection. This is analogous to Boolean or.

      The new cover aggregation will yield a position at the aggregated level if all positions mapping to the aggregated position exist (not that this does not apply in the vacuous case where there are no level members for the base position).

      Currently, cover may only be used for position-only expressions. It could maybe be extended to handle CubiQL expressions with values, but we want to see real-world use cases first.

    • Improvements to measure service error reporting:
      • We more reliably collect all relevant errors and warnings in more cases, where we would often only report the first error encountered previously.

      • We've introduced a first step towards more structured error reporting. We've refined the Problem message in the protocol into AtomicProblem and NestedProblem so that it is possible to group related errors and warnings together. The old fields in the Problem message will be removed in 4.7.0

    • Improved support for working with locks.

      • There is now textual syntax for specifying locks with updates. The changes to the grammar include:

        <update> ::= do <update-expr>
                  |  do <update-expr> locking <locks>
        <locks> ::= <lock> and ... and <lock>
        
        <lock> ::= <dimension-lock>
                |  <target-lock>
        
        <target-lock> ::= <convertibility> <target> to <expr>
        
        <convertibility> ::= convertible
                          |  fixed
        
        <dimension-lock> ::= dimension <dim-ref> to <expr>
        
        <dim-ref> ::= <dim-name>
                   |  <label> : <dim-name>
        

      • The CubiQL REPL now provides stateful support for working with locks, so that you can define them as part of an ongoing interactive session. The new commands are:

         :set-lock
           -- define a lock for adding to update requests
              lock names are only used within REPL, for referencing across lock commands
              for target locks:
                :set-lock <name> = (convertible|fixed) <target> to <expr>
              for dimension locks:
                :set-lock <name> = dimension [<label> :]<dimension> to <expr>
         :release-lock <name>n
           -- remove a previously-set per-request lock
         :release-all-locks
           -- remove all previously-set per-request locks
         :disable-locks
           -- do not add currently-set locks to requests
         :enable-locks
           -- resume adding currently-set locks to update requests
         :print-lock <name>
           -- print a lock, or all locks if the name is omitted
        

    • Dimension and non-convertible target locks will now be projected to the appropriate base intersection (bottom of the dimension, and base intersection of the target respectively). We didn't do this previously for dimension locks, so it was not really possible to use dimension locks in realistic use cases. We didn't support this previously for non-convertible target locks to encourage people to define them at the correct intersection and avoid confusion, but we do so now for consistency with dimension locks.

    • There is now syntax for updating level map targets:

      <target> ::=  <ident>                   // metric
                |   <level>                   // level
                |   <level>.<ident>           // attribute
                |   <level> -> <level>        // level map
      

    • It is now possible to clear out the data of an EDB measure service model from the command line. This will not work if you are using an IDB version of the protobuf predicates corresponding to the model. For example, lb measure-service model clear -w workspace.

    • The measure service has been split into smaller components, including jars for the Java protobuf bindings and the textual syntax parser, mostly of interest to downstream developers.

Corrected Issues

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

  • Modeler
    • Fixed a Javascript error that occured when using DROP expressions for target locks.

    • Fixed an issue where entering number with a lot of significant digits could result in an "inconsistent edit".

    • Action buttons are now disabled everywhere while the corresponding action is still running.

  • Tools and Services
    • Corrected a problem where some rule rewrites using inside-out evaluation would cause segmentation violations and server crashes.

    • TDX services requests were not properly reported to the tracing infrastructure. This has now been fixed.

    • Fixed an issue in TDX import for the ignore entity accumulation policy. When this policy was used for a given column, the entity would not be created but entities bound to other columns would still be created. Now for a column flagged with ignore accumulation, the entire row is skipped if the entity is not found for a given row and no entity will be created for that row.

    • The lb-web-client utility now uses compression on the wire by default. This used to be the case in the past but was broken in recent releases.

    • Corrected a problem which caused SAML metadata responses to be empty.

    • Cleanup of temporary TDX files was not working as expected, this has been fixed.

  • Measure service
    • Ensure that a dimension lock applies to any target whose intersection involves the dimension, by widening the positions of the lock to the intersection. This corrected an issue where a metric with multiple keys in the keyspace could not be edited if only a single key is dimension locked.

      Also, the treatment of target locks is now harmonized with dimension locks: where a non-convertible target lock given above the base intersection would previously be prohibited, it is now implemented by inserting a projection to the base intersection.

    • Introduced a fix with labeling in spreading.

Installation Information

Install LogicBlox 4.6.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.6.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.