Changes in 19.5.16

The following changes were made in Oracle NoSQL Database Release 19.5.16 Enterprise Edition.

New Features

  1. Introduced Multi-Region Tables, a feature that lets users create "read-anywhere" and "write-anywhere" tables that live in multiple regions, where each region is a separate Oracle NoSQL Database store. This is a preview release and a general availability version will be available in a future release.

  2. Improved the way to configure the network name resolution cache for services. The address cache is used to resolve host names during name resolution. Two values are used to specify how long the results of successful or unsuccessful name lookups should be kept in the cache. See the Address Cache section of the Networking Properties page for more details.

    When creating a new SN, the values can be configured with the -dns-cachettl flag to the makebootconfig command. After deployment, the initial values can be overridden by changing the parameters dnsCacheTTL and dnsCacheNegativeTTL of the SN. Those two parameters are also policy parameters so that it can be set for future SN deployments. Each service shares the same parameter values with its monitoring SN. When changing the parameters for an SN, all service processes need to be restarted for the new values to take effect. Admin, RN, and arbiter services will be restarted automatically, but the SNs must be restarted manually.

  3. Added new asynchronous methods to the table API. Applications can use these methods to make calls without using a thread to wait for results, which can improve the efficiency of clients that make many concurrent calls.

    Clients now use a new network protocol that supports multiplexing multiple calls on the same socket, which is used to support asynchronous operation and to reduce the number of socket connections needed. New clients are only compatible with this version of the server, although the server continues to support old clients. When upgrading to this release, make sure to upgrade the store first before upgrading clients or HTTP proxies.

    New methods on TableAPI:
    • getAsync
    • multiGetAsync
    • multiGetKeysAsync
    • tableIteratorAsync
    • tableKeysIteratorAsync
    • putAsync
    • putIfAbsentAsync
    • putIfPresentAsync
    • putIfVersionAsync
    • deleteAsync
    • deleteIfVersionAsync
    • multiDeleteAsync
    • executeAsync
    New methods on KVStore:
    • executeAsync
    New fields and methods on KVStoreConfig:
    • getNetworkRoundtripTimeout
    • setNetworkRoundtripTimeout
    • getUseAsync
    • setUseAsync
    New field in KVStoreFactory:
    New interfaces:
    • oracle.kv.ExecutionSubscription
    • oracle.kv.IterationSubscription

    Iteration methods (TableAPI.tableIteratorAsync, TableAPI.tableKeysIteratorAsync, and KVStore.executeAsync) are implemented using the Reactive Streams framework. Other asynchronous methods return java.util.concurrent.CompletableFuture.

    Also added the new table.AsyncExample example.

  4. Added the ServerResourceLimitException class. Instances of this class may be thrown if the server is unable to handle a request because of resource constraints.

  5. Added the new WRITE_SYSTEM_TABLE privilege and writesystable role to support modifications to system tables. The new privilege and role are intended to be used with the multi-region table agent. Normal users typically should not modify system tables.

  6. The Oracle NoSQL Hadoop/Hive/BigDataSQL integration code now works with Hadoop3, Hive2, and BigDataSQL 4.0. Because changes were made in Apache Hive that make Hive1 incompatible with Hive2, if you wish to run MapReduce jobs, Hive queries, and/or BigDataSQL queries in a Hadoop2, Hive1, and/or BigDataSQL 3.5.x environment, then you should use the 18.3 release of Oracle NoSQL Database; and use this release in Hadoop3/Hive2/BigDataSQL 4.0 environments.

  7. Source code for the NoSQL Database storage engine, also known as "Berkeley DB Java Edition", is now included in the Community Edition release package.

  8. Added the following string manipulation SQL functions:
    • concatenation: arg1 || arg2 -> string , concat(arg1, arg2, ...) -> string?
    • substring(str, position[, for_substring_length] ) -> string
    • upper(str) -> string
    • lower(str) -> string
    • trim(from_str[, where[, trim_chars]]) -> string
    • ltrim(str) -> string
    • rtrim(str) -> string
    • length(str) -> integer
    • contains(str, contained_str) -> boolean
    • starts_with(str, start_str) -> boolean
    • ends_with(str, end_str) -> boolean
    • index_of(str, search [, pos]) -> integer
    • replace(str, search_str [, replacement_str] ) -> string
    • reverse(str) -> string

    Also the result of casting a JSON null value to a string has been changed from RuntimeError to string "null".


Bug and Performance Fixes

  1. Fixes a bug where AbsoluteConsistency read requests could be directed to the master on the minority side of a network partition. AbsoluteConsistency read requests now require an authoritative master: one that is in contact with a quorum of replicas. The request will timeout if a suitable master is not available within the request timeout period.

  2. Enhanced the predicate pushdown mechanism in the Oracle NoSQL Hive integration code to work with changes made in Hive2 that cause some queries to produce incorrect results under Hive2.

  3. Fixed a bug in the capacity planning spreadsheet, where the number of machines required by a store could be overestimated in some cases.

  4. Fixed a bug where in some cases executing a DDL command which is a duplicate of a running DDL command, an Admin plan will be orphaned in the APPROVED state.

  5. Fixed a bug in sorting the special values (NULL, json null, and EMPTY) when the direction of the sort is descending.

  6. Fixed a bug in REMOVE clause of UPDATE statement, when the path to remove evaluates to NULL. In this case, the UPDATE statement would get into an infinite loop.

  7. Fixed a bug that caused importing data into a table whose shard key is different from one of the tables from which the data was exported to cause the imported data to be corrupted. The data is now imported correctly.

    [#27782] [#27783]
  8. Fix a problem that caused the Admin CLI history to not be loaded on startup.

  9. Fixed a problem that could cause the Admin CLI 'plan verify data' command to fail to complete and instead remain in the "RUNNING" state. This problem only occurred in stores with 5 or more shards.

  10. Fixed a problem that could cause the Admin CLI 'plan verify data' command to fail on nodes that had a master change after restarting. The command will now work in those cases, although a master change during the verification of an individual node will still cause that verification to fail and mean that the node's verification needs to be redone. We expect to fix this additional problem in a future release.

  11. Fixed a problem that caused using the stop command to fail when used to stop a kvlite instance. For example:
    java -jar KVHOME/lib/kvstore.jar stop -root /tmp/mykvlite
    Failed to stop SNA: Bootstrap config file ./mykvlite/config.xml does not exist.
  12. Fixed a problem that DDLGenerator did not create correct DDLs for tables with Timestamp or Map of enums.

  13. The 'Shaded' version of the antlr4-runtime 3rd party library that was previously shipped under the name antlr4-runtime.jar is shipped with this release under the name antlr4-runtime-nosql-shaded.jar. Shading that library is necessary to avoid ClassLoader conflicts (typically manifested as a NoClassDefFoundError) when an application runs in an environment that depends on a different, incompatible version of that library; for example, various containers, Hadoop clusters, Hive clients, etc. When running in those environments, in general, this will require no changes to current applications other than making the corresponding name changes in the application's classpath.


Utility Changes

  1. Removed support for the -r2-compat option from the 'table create' command in the Admin CLI. The ability to create tables on top of key/value data was removed in release 19.3 as part of removing support for Avro, but this option had been left in place by mistake.