LogicBlox 4.2.0

Release Date: May 2nd 2015

What's New

  • Replication: LogicBlox now supports online replication, where transactions committed to a workspace on a primary server are automatically copied to a read-only workspace on one or more secondary servers. The replicated workspaces can answer read-only queries. If the primary server fails, one of the secondary servers can be "promoted" to the primary role. For more information on the configuration and use of Replication please refer to the LogicBlox Administration Manual.
  • Improved performance of incremental maintenance of many IDB rules: Incremental maintenance of many types of IDB rules is now parallelized, and our benchmarks show a performance improvement that is close to linear in the number of cores, similar to queries. The usage of parallelism is currently restricted to IDB rules that do not require sensitivity indexes. Which rules require a sensitivity index is fairly complicated to explain (documentation of sensitivity indexes is pending for the next release). Most simple joins do not need a sensitivity index though, notably joins between atoms that have the same variable arguments (we have now and then used the term ‘conforming’ for such joins).
  • Support for disjunctive non-materialized views (derived-only predicates) in aggregations: Non-materialized views that use disjunction or are defined by multiple rules used to be disallowed in the body of an aggregation because the runtime did not have a way of evaluating such aggregations. Starting with this release, we automatically transform the logic to support such uses of views. The body of the aggregation will be materialized as an intermediate predicate. We also apply this transformation for views to project out a variable, which fixes a semantic bug with the evaluation of aggregations over views with projections.
Services Framework
  • More efficient method for exposing the authenticated username to service logic: For lb-web services we have added a configuration option to disable the import of the full HTTP control information, and only populate the username pulse predicate. This simpler method can help with the transaction throughput of services. For more information, please refer to the LogicBlox Administration Manual
Measure Service

  • There are now three LogiQL libraries for the measure service:
    • lb_measure_db_proto – database lifetime version of the protocol predicates. Must be installed to use the measure service.
    • lb_measure_txn_proto – optional transaction lifetime version of the protocol predicates.
    • lb_measure_service – optional configuration layer on top of lb_measure_db_proto.
  • New MATCH comparison type: for filtering by a POSIX extended regular expression.
  • Measure service support for user-defined operators:
    • The OpDef protocol message can now be used to define an operator, by binding an operator name to its implementing functional predicate in LogiQL. A user-defined operator can be invoked similarly to built-in operators such as add(x, y) or sqrt(x) -- both in textual CubiQL and via the Op protocol message, using Op.Kind = NAMED. (The NAMED Op can now be used for built-in operators as well, but the previous syntax, such as Op.Kind=ADD or Op.Kind=SQRT, is still available.)
    • An operator can be overloaded, by using several OpDef instances with distinct implementing predicates -- as long as the predicates differ in the types or arity of their arguments. Most built-in operators can be overloaded as well -- on the argument types that differ from the built-in overloads. Two built-in operators that may not be user-overloaded are negate and add_outer.
  • New ExprSubst functionality: to subsume only the old Bindings method of overriding code generation of a given expression. ExprSubsts allow specifying whether the replacement happens before or after optimization.
  • lb measure query --tdx no longer requires (or has) a workspace argument.


  • Initial support for linear/mixed integer programming is now available.


    Note that only the Gurobi 5.x solver is supported. To invoke the solving feature, the user has to have a valid installation of Gurobi as well as a valid Gurobi license.

  • The integer/linear programming feature is implemented as a combination of a stand-alone preprocessor program (included in the distribution) that transforms an input LogiQL program with linear constraints and objective function into another LogiQL "grounder program". The grounder program can be installed into a LogicBlox workspace as if it were any other LogiQL source, to obtain a solution for the optimization problem specified by the original input program.

LogicBlox Server Configuration

  • The compiler is no longer configured using lb-compiler.config, but with lb-server.config. Please refer to the LogicBlox Admin Manual for more information on the configuration files for lb-server.

Corrected Issues

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

  • Fixed rare crash on negated predicates.
  • TDX requests are now properly aborted within the database if the client connection is terminated. In the Java API, canceling the future that is returned by the TDX request will also properly terminate the request within the database.
  • Measure Service:
    • Significant improvement to code generation for key requests in QueryRequests with many columns.
    • Demote now correctly preserves named types.
    • A variety of smaller bug fixes and optimizations.

Installation and Upgrade information

Installation Instructions

Installing LogicBlox 4.2.0 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.2.0/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

  • Measure Service Protocol changes:
    • Binding messages have been deprecated and will be removed in 4.2.2. Use the new ExprSubst functionality.
    • Predicate messages no longer need the is_disjunctive_view field, which will be removed in 4.2.1.
    • Level messages should now be defined with type field rather than impl field. Deprecated and to be removed in 4.2.2.

Release Information

Table 2. 

Server requirements
Operating System: 64 bit Linux
Java Runtime Environment 1.7, update 11 or higher
Python 2.7 or higher