Changes in 24.1.15

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

New Features

  1. Implemented the following mathematical SQL functions: ABS, ACOS, ASIN, ATAN, ATAN2, CEIL, COS, COT, DEGREES, EXP, FLOOR, LOG, LOG10, POWER, RADIANS, RAND, ROUND, SIGN, SIN, SQRT, TAN, TRUNC.

Bug and Performance Fixes

  1. Improved the error message of the ShellException thrown when a runadmin command is executed on a storage node incompatible with the current client version. The error message now reports the minimum prerequisite version for the client JAR file.

    [KVSTORE-917]

  2. Added expiration information for the current password as a new field current-passwd-expiration to the user description returned by the show user command. The value will be expired when password is expired and non-expiring if the lifetime of password is set to unlimited. Otherwise the value will be the expiration date time in the format of yyyy-MM-dd HH:mm:ss z.

    [KVSTORE-1904]

  3. Added a new configuration API that allows Streams API users to configure the memory usage of subscribers by size instead of number of stream operations. The new method is called NoSQLSubscriptionConfig.Builder.setOutputQueueSizeMB.

    [KVSTORE-2061]

  4. Fixed a bug where, if multiple XRegion service agents are deployed for multi-region tables, the initial transfer of data for the table from another region could fail to include all rows.

    [KVSTORE-2111]

  5. Corruption of the election.persisted file, used to track master elections, will no longer prevent Replication Node or Admin node startup.

    [KVSTORE-2162]

  6. Fixed an issue where a store request may encounter a failure with the following cause on the stack trace: "Caused by: oracle.kv.impl.async.exception.TemporaryDialogException: Idle timeout, connection is idle during last 20000 ms".

    [KVSTORE-2214]

  7. Fixed an issue that could prevent objects related to network connections from being garbage collected, which might have led to OutOfMemoryErrors during a network outage. The issue can be identified by checking a heap dump for a large number of NioEndpointHandler objects referenced by ForkJoinTask$AdaptedRunnableAction objects.

    [KVSTORE-2190]

  8. Fixed a bug in the Streams API where a runtime error like OutOfMemoryError might fail to terminate a subscription and thus leave the subscription hanging.

    [KVSTORE-2199]

  9. Fixed a problem that could cause a store operation to fail with a FaultException whose message includes the text "Secondary/primary record already present".

    The fix eliminates a problem that could cause corruption of secondary indexes in some cases where the index was specified to include part of the primary key. When the index corruption was detected during a store operation, the operation would fail with a FaultException as described, and a SEVERE logging entry would be logged for the associated Replication Node. The affected node would be restarted, and the secondary index would be dropped and rebuilt automatically, causing the index to be unavailable while it was being rebuilt.

    [KVSTORE-2027]

  10. Fixed a problem that could cause bulk put operations to fail with a NullPointerException if the operation was performed while increasing the number of shards in the store. The problem was present for both the TableAPI.put(List<EntryStream<Row>>, BulkWriteOptions) and KVStore.put(List<EntryStream<KeyValue>>, BulkWriteOptions) methods.
    java.lang.NullPointerException: Cannot invoke "java.util.List.size()"
    because "list" is null
    	at oracle.kv.impl.api.bulk.BulkPut.startShardExecutor(BulkPut.java:423)
    	at oracle.kv.impl.api.bulk.BulkPut.execute(BulkPut.java:292)
    	at oracle.kv.impl.api.table.TableAPIImpl.put(TableAPIImpl.java:1564)

    [KVSTORE-2173]

  11. Fixed a bug that could cause a query with a LIMIT clause, but no OFFSET clause, to miss results if the query was using a multikey index.

    [KVSTORE-2184]

  12. Fixed a bug that could cause queries (and possibly other operations as well) to fail with a ConcurrentModificationException. The problem was due to the fact that index metadata could be used before it was fully initialized.

    [KVSTORE-2185]

  13. Fixed an issue with multi-region tables where a Direct Java Driver table iteration on a child table that also requested rows for the parent table might return tombstone (deleted) rows from the parent table. The incorrect results would appear as rows or keys that match the iteration's key value but the value of the row is empty, resulting in null values in all fields.

    [KVSTORE-2223]

  14. Fixed a bug that could cause decimal values to lose precision when creating a table row from a JSON string.

    [KVSTORE-2189]

  15. Modified the handling of security configuration properties to convert relative pathname values to absolute pathnames. If an application calls the KVStoreConfig.setSecurityProperties method to specify security properties and the properties contain relative pathname values for properties such as AUTH_WALLET_PROPERTY or AUTH_PWDFILE_PROPERTY, the pathnames are now converted to absolute pathnames relative to the current directory. Previously, the presence of relative pathnames could either produce confusing exception messages for wallet configurations or NullPointerExceptions when used with file stores. Security configuration files generated by KVLite use relative pathnames, so these problems could occur if applications called KVStoreConfig.setSecurityProperties with properties read from a KVLite security configuration file

    [KVSTORE-1938]

  16. Modified the network port checks performed by the makebootconfig and diagnostics commands to only check TCP ports, not UDP ports. Previously, in-use UDP ports would be flagged as conflicting with the ports required to support a store. Stores use only TCP for network connections so the UDP port checks were unnecessary.

    [KVSTORE-2164]

  17. Fixed an issue where securityconfig verify may report that a security configuration created with certificate signed by certificate authority has an incorrect keystore installation even if the keystore is valid. This happened because the previous verification incorrectly required the keystore to have a separate root and intermediate certificate entries, even if the keystore was valid, where the private key entry has the full chain of certificates.

    [KVSTORE-1505]

  18. Updated the required privilege of an internal API used by NoSQL Database Admin CLI from SYSVIEW to USRVIEW. After this change, the CLI command await-consistent now requires USRVIEW privilege instead of SYSVIEW.

    [KVSTORE-2183]

  19. Fixed an issue where KVLite failed to start up when using Java 11 and an NFS-mounted kvroot directory.

    [KVSTORE-2015]

  20. Fixed a bug in the ping Admin CLI command where the -shard argument failed to show arbiter nodes.

    [KVSTORE-1692]

  21. Fixed a bug in re-run of contraction plan. If a contraction plan failed due to failure of RemoveShard task, then a re-run of the plan caused the task previous to the RemoveShard task (removeRepNodeJob) to fail with a NullPointerException. This behavior has been corrected.

    [KVSTORE-1844]

  22. Fixed a bug where storage node agent startup with the command line argument '-update-config false' and an unknown/invalid shapshot would hang.

    [KVSTORE-1786]

  23. Fixed a bug where the local region was shown in the output of the SQL "describe table" command for a table that was not a multi-region table.

    [KVSTORE-2201]