LogicBlox 4.19.0

Release Date: December 6, 2019

What's New

LogicBlox 4.19.0 introduces the following enhancements:

  • Modeler
    • Modeler's view updates after editing data are now significantly faster. We started using the newly introduced asynchronous measure service which notifies Modeler over a persistent websocket connection when data has changed for a certain cell. This eliminates the need for Modeler to re-query all data in a view after an edit.

  • Modeler IDE
    • Improved the way forms respond when the user opens the validation console or resizes the IDE. When space is limited due to an open validation console, the Modeler IDE now places input fields on the next row instead of making all fields in the row more narrow.

    • As preparation for view configuration functionality, we've added a very basic view to the Modeler IDE for creating and managing Visible Measures Groups. This functionality will be used in future releases as part of the configuration of visible dimensions and measures.

  • Tools, Database, and Services
    • lb-web now has support for using websockets through proxy servers. This will allow the measure service's async interface to be used through proxies, which in turn enables the modeler's predicate watch feature to provide better UI performance. For more information, see the Upgrade Information section.

    • lb-web now supports token-based authentication in call, import and export commands.

    • Added a new --proto option to the lb print-block command. The purpose of this new option is to support the development of a visualization tool on top of the LogicBlox database. The new option retrieves the protobuf responsible for creating the block. This protobuf holds the formula syntax tree, useful to model the relationship between predicates.

    • The following cloud-store improvements and changes were made in the 4.19 release:

      • HTTP proxies defined by the HTTP_PROXY or HTTPS_PROXY environment variables are now respected by the Google Cloud Store backend.

      • cloud-store now picks better defaults for internal S3 client configurations and Amazon Web Services credential providers. This leads to a better default for the internal S3 client and fewer calls to construct client connections.

      • allAuthenticatedUsers is now supported as a Google Cloud Store canned Access Control List.

      • Some public API changes were made to the cloud-store library that will require you to update how you use the library if you are writing code against cloud-store instead of just using the command line utility. Changes you need to make to your code include:

        • Replace setCredentialsProvider with setAWSCredentialsProvider for S3ClientBuilder.

        • The createS3Client function in S3ClientBuilder can now throw a MalformedURLException.

        • Replace Utils.defaultCredentialProvidersS3 with S3Client.defaultCredentialProviders.

        • Utils.getCredentialsProviderS3 is not publicly exposed any more.

        • Replace Utils.GCS_XML_ACCESS_KEY_ENV_VAR with GCSClientBuilder.GCS_XML_ACCESS_KEY_ENV_VAR.

        • Replace Utils.GCS_XML_SECRET_KEY_ENV_VAR with GCSClientBuilder.GCS_XML_SECRET_KEY_ENV_VAR.

        • Replace Utils.getGCSXMLEnvironmentVariableCredentialsProvider with GCSClientBuilder.getDefaultAWSCredentialsProvider.

        • Replace Utils.setProxy with S3ClientBuilder.setHttpProxy.

        • New methods setInternalS3ClientConfiguration and setAWSCredentialsProvider added to GCSClientBuilder.

        • New methods setInternalS3ClientConfiguration and setAWSCredentialsProvider added to S3ClientBuilder.

  • Measure service
    • Significantly improved CubiQL error checking and reporting for references to names of metrics, variables, etc. that do not exist.

    • Simultaneous edits that are mutually recursive will now be detected by the measure service and reported before logic is sent to the runtime.

    • EditabilityResponse messages from the measure service now include information that can be used to provide feedback to developers as to why certain metric-intersection pairs cannot be edited. The incomparable field will indicate when an edit is not possible due to there already being an edit at an incomparable intersection. The no_solution field indicates that an editing solution could not be found for a given metric-intersection pair. The invalid field indicates that the edit is below or incomparable with the metric's base intersection.

    • Added built-in operators round and roundUpHalf to CubiQL so that developers do not need to define them themselves.

    • More messages in the measure service protocol now include an optional region field to help narrow the source of issues in the source text.

    • The attribute field of the AttributeExpr message is now deprecated in favor of the new name field. The attribute field will be removed in LogicBlox 4.21.

    • The widen expression in CubiQL is deprecated in favor of using refine. The widen expression will be removed in LogicBlox 4.21. The expression E @ I is strictly equivalent to writing refine E @ (I & interof(E)). However, most people use widening in a way such that E @ I will be equivalent to just refine E @ I.

    • Made minor internal optimizations to the measure service to improve performance.

Corrected Issues

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

  • Tools, Database, and Services
    • Added support in lb-web for ContinuationWebSocketFrame to fix problems found when testing file upload through the measure service's async interface.

    • Fixed a bug whereby lb-server's log messages were not transferred to the client upon request (applicable to interactions using the lb command).

    • Fixed a bug that caused lb-server to crash on macOS when compiled in debug mode.

    • Fixed a bug where an exception was thrown when forcing a specific key ordering where a key variable in the ordering was used in equality with a constant.

    • Fixed a bug where lb-server would ignore certain configuration options when running as a daemon.

    • Fixed a bug introduced in the Python 3 update where a timeout on commands sent to lb-server could not be set through the command-line interface of lb.

    • Fix for issue with --delimiter option in lb commands introduced with the update to Python 3.

  • Measure service
    • Fixed and improved the measure service handling of edits that cause locks to be converted to edits to preserve the locked value.

    • Fixed an issue where the measure service completer would not report a conflict when a metric requests a CubiQL expression be bound to an EDB predicate.

    • Fixed an issue with a timeout length in the measure service being only thirty seconds, which is too short for some production requests.

Known Issues

The issues listed below are known to exist in the 4.19.0 release.

  • Tools, Database, and Services
    • LogicBlox currently has issues running on Python 3.7 since it's not fully backwards-compatible with Python 3.5. In some Python scripts bundled with this LogicBlox release, we have an argument called async which has become a reserved keyword in Python 3.7.

    • This release contains changes to some lb-workflow tasks related to workbook creation. These fixes have not been applied yet to lb.wb.CreateWorkbook, which means errors related to recent changes in the LB runtime that imposes restrictions on string lengths can still occur. Please note that this known issue does apply to lb.wb.util.CreateWorkbook.

Installation Information

Install LogicBlox 4.19.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.19.0).

      NOTE: If you installed the npm module globally, you won't need the ./node_modules/.bin prefix on the command.

  • Tools, Database, and Services
    • To support the use of websockets through a proxy, an additional websocket_proxy service type has been introduced. This websocket_proxy is now required for the measure service to be accessible in partitioned Modeler deployments.

      Example 1. 

      An example websocket_proxy configuration:

      block(`service_config) {
      
      	..
      
      	alias(`lb:web:config:service_abbr, `s),
      	alias(`lb:web:config:proxy, `p),
      
      	clauses(`{
      		s:service_by_prefix[service_prefix] = x,     
      		p:websocket_proxy(x) {
      			p:proxy_target[] = target,
      			p:proxy_host[] = host_name,
      			p:proxy_prefix[] = proxy_prefix,
      			lb:web:config:service:auth_realm[] = "modeler-app-proxy-realm"
      		} <-    
      			service_prefix = "/modeler-app-proxy" + "/workbook-" + workbook_id + "/websocket/measure",          
      			proxy_prefix = "/modeler-app-proxy",
      			target = "ws://" + host_name + ":55183" + "/modeler-app",
      			host_name = proxy:model:workbook_host[workbook_id].
      
      		..
      	})
      } <-- .

      Since only the measure service uses websockets, and pivot_config and actions do not, you should set up separate transparant_proxy services for these services in the service_config.

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 3.5
  • 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.