LogicBlox 4.3.6

Release Date: January 8th 2016

What's New

  • Configurable auto backup mode: Revisions of the database are automatically tagged for backup and investigation purposes. The new configuration option auto_backup_mode in lb-server.config can be set to none to disable this feature. The default setting is default, where the server automatically keeps versions.
LogiQL Language
  • datetime:parse now supports the %p directive to recognize am/AM/pm/PM for 12-hour time inputs.
modeler-js User Interface Components

  • Automatic Support for Ordered Levels: Modeler-js based applications now can have sorting logic for ordered levels automatically generated for them. The sort is by default created using the refmode of a level entity. The only declaration required from developers is to set the IsOrdered column in Levels.csv to be true, for levels that should be ordered. The Modeler-js toolset will automatically generate and populate the following predicates for an ordered level L:
    L_first[] = l   -> L(l).
    L_last[] = l    -> L(l).
    L_next[l1] = l2 -> L(l1), L(l2).
    L_index[l] = i  -> L(l), int(i).
    For two ordered levels that have a hierarchical mapping, L mapping to M, the following predicates are generated and populated:
    L:M_first[l] = m    -> L(l), M(m).
    L:M_last[l] = m     -> L(l), M(m).
    L:M_next[m,l1] = l2 -> M(m), L(l1), L(l2).
    If the refmode of entity L does not provide a proper alphanumeric sort order for the entities, developers can additionally provide a transform predicate P, and a transformed primitive type T. Predicate P with the following signature will be declared for the developer:
    P[l] = t -> L(l), T(t).
    The project logic must then implement rules to populate P. The expectation is for P to produce a primitive value for each member of L such that these values can be used for alphanumeric sorting.


    Note that due to this change, the header format of Levels.csv has changed. Please refer to the Upgrade Information section for more information.

Measure Service

  • A new config option fatal_warnings has been added to the measure service configuration file (lb-measure-service.config). If set to true, the measure service will consider warnings to be errors. This setting can be useful for clearing deprecated features out of a project prior to their removal from the measure service.

Services Framework

  • In order to be consistent with the LogiQL syntax for number literals, some TDX column formats where changed in a backwards incompatible manner. Previously, 0.0+ and >0.0 would format non-negative and positive floats, respectively. Now, these formats are used for decimals; floats are formatted with 0.0f+ and >0.0f. Furthermore, >0 can be used for positive integers.
  • lb-web transactions aborted explicitly with lb:web:abort:error_response now also return the error message in the body of the response.

Developer Tools

  • lb info for a secondary workspace now shows how many pages have been received and how many are expected in the current incoming version. For example:
    pages_in_incoming_version: 81
    pages_received_in_incoming_version: 9 
    This also works when lb start-mirror is still receiving the initial version. The new field state that has been added to lb info's output indicates whether the workspace is ready to process requests. When lb start-mirror is still busy, it will show state: INIT and otherwise state: OPENED.
  • The lb info command now also shows the timestamp of the last committed version (for both primary and secondary workspaces).
  • The new command lb print-block can be used to print the content of a block (both active or inactive).


    lb print-block [-h] [--loglevel LOGLEVEL] [-L] [--cwd [DIR]]
                          WORKSPACE BLOCK
  • The new command lb print-rules allows developers to print the rules for a given predicate name that exist in the database. The command can also be used on EDBs that have delta rules.


    lb print-rules [-h] [--internal] [--loglevel LOGLEVEL] [-L] [--cwd [DIR]]


    Please refer to the Command Reference chapter in the reference manual for an extensive overview of all the LogicBlox commands and their usage.

  • The lb execblock command now also has a --timeout parameter.
  • It is now possible to abort a running transaction using CTRL+C on the 'lb' command. The lb tool now also aborts transactions when the process terminated with the Linux 'timeout' command.
  • Logging enhancements:

    • We now log a clearer message when initializing all services has completed and lb-web-server is up and running:

      INFO lb-web             - lb web-server initialized and ready to accept requests (code: LB_WEB_INIT_COMPLETE)

    • Various improvements to replication related error reporting and logging.

    • The perf logging level now includes logging for the number of changed facts.

Corrected Issues

The issues listed below have been corrected since the 4.3.5 release.

  • Improved performance of copying large S3 buckets using cloud-store copy.

  • Resolved several internal issues in the lb web-server that impacted memory usage.

  • Resolved an issue with server access logs were not respecting the log_timezone setting in lb-web-server.config.

  • Resolved an issue where protobuf messages weren't displayed correctly via the meta service.

  • Write transactions on the secondary workspace now result in an error.

  • Write transactions do not get blocked anymore during initial replication.

  • Resolved an issue where delta rules involving foreign predicates with default values didn't update correctly.

  • Resolved an issue where lb exec produced inconsistent results for queries involving foreign predicates and default values.

  • Resolved an issue that could cause lb server to crash when aborting a transaction.

  • ModelerTestUtil will now fail on queries to canvas when a query error occurs. Previously, ModelerTestUtil was erroneously swallowing these errors.

  • Measure Service:

    • The measure service handler is now fully asynchronous and should respond to abort requests.

    • Selection of hierarchies is now deterministic when the choice of ambiguous.

    • Locked measure language primary metrics will now properly be converted to identity updates if one of their dependencies is edited.

    • Performance improvements for queries and updates involving many large CubiQL expressions.

Installation and Upgrade information

Installation Instructions

Installing LogicBlox 4.3.6 is as simple as 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.3.6/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

Upgrade information for applications using the modeler-js User Interface Components:

  • The header format of Levels.csv had to change to support specification of transform predicate and transformed type. Levels.csv now expects two additional columns: OrderTransform, and TransformType.

    Example 40. 

    The header of Levels.csv is now as follows:

  • Filter Panel removed: The filter panel was removed to make way for position filtering improvements. A new and improved filter panel will be taking its place soon.

Removed Features from the Measure Service

  • CondExpr message is removed: The conditional expression CondExpr is removed. The textual CubiQL had form if e0 then e1 else e2. There is no direct replacement: CondExpr did not find much use and had somewhat confusing semantics. Moreover, in the point-free style of CubiQL, the more natural idiom emerged as filtering some input with several FilterExpr and then combining their results in some way.
  • attr field is removed from AttributeExpr: The attr field (holding an Attribute) in an AttributeExpr was used to represent an "anonymous attribute". That is, it would produce a measure that looked like a measure for an attribute of a level, but without the requirement the attribute be named in the model. Instead, the attr field would directly name the predicate that implemented the attribute. The same result can be obtained as an "anonymous metric" defined by the same predicate.

    Example 41. 

    For example, the anonymous attribute expression

      {"kind": "ATTRIBUTE", 
       "qualified_level": {"dimension": "Location", "hierarchy": "Geographic", 
                           "level": "store"}, 
       "attr": {"predicate": {"name": "pdx:loc:store_id"}, 
                "type": {"kind": "STRING"}}

    gives the same result as the anonymous metric expression

      {"kind": "METRIC", 
              {"kind": "BASE", 
                    {"qualified_level": [{"dimension": "Location", 
                        "hierarchy": "Geographic", "level": "store"}]}, 
                  "type": {"kind": "", type: {"kind": "STRING"}}
            "predicate": {"name": "pdx:loc:store_id"}

  • NO_GROUPING kind of aggregation grouping is removed: The NO_GROUPING kind is removed from the AggExpr.Grouping.Kind enumeration. It had the same semantics as having no groupings of any kind within an aggregation expression.
  • Support for the TDX measure service plugin has been disabled.

Release Information

Server requirements
Operating System: 64 bit Linux; OSX 10.10+ is supported for local development.
Java Runtime Environment 7, update 11 or higher
Python 2.7 or higher
CPU compatible with the corei7 architecture
Client requirements
Applications using modeler-js User Interface Components: Google Chrome
Requirements for applications using non-modeler-js components may vary per application.