Changes in 20.2.17

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

Bug and Performance Fixes

  1. Updated 3rd party libraries to current versions.

  2. In extreme situations, when an RN is unable to find a suitable feeder for a Network Restore because all other RNs are down or unreachable, the RN gives up, but does not exit the process. This can result in the environment never being restored and the RN process is effectively hung, unable to process requests and needs to be explicitly killed and restarted. The behavior has been changed so that the RN exits and the SNA restarts it with a clean process state with which to retry the Network Restore.

    [KVSTORE-610]
  3. A SessionAccessException in the SNA resulted in the SNA halting the Master Balancing functionality at the SN, as indicated by the following representative entries in the SNA's logs:

    ...
    2020-08-10 00:27:33.875 UTC SEVERE [sn5] MasterRebalanceThread thread exiting due to exception.
    ...
    2020-08-10 00:27:33.878 UTC INFO [sn5] Master balance manager shutdown
    2020-08-10 00:27:33.878 UTC INFO [sn5] MasterRebalanceThread thread exited.
    ...

    The SNA now handles the SessionAccessException and retries the operation.

    [KVSTORE-595]
  4. Fixed a problem where setting a mutable JE parameter for a Replication Node did not have an effect unless the node was restarted explicitly. This problem was introduced in release 20.2.16.

    [KVSTORE-574]
  5. Fixed a problem where an unresolved network address for the host of a storage node could cause requests to fail with RequestTimeoutException. Once the problem occurred, it was persistent, and all future client calls would timeout until the client was restarted. If client logging was enabled, the logging output might include an exception like the following:

    2020-08-12 13:09:40.047 UTC SEVERE - Uncaught exception in thread:KV c-5287366135758798770 RepNodeStateUpdateThread_Updater_1
    java.nio.channels.UnresolvedAddressException
        at oracle.kv.impl.async.AbstractCreatorEndpoint.startDialog(AbstractCreatorEndpoint.java:87)
        at oracle.kv.impl.async.AsyncVersionedRemoteInitiator.startDialog(AsyncVersionedRemoteInitiator.java:131)
        at oracle.kv.impl.async.AsyncVersionedRemoteInitiator.getSerialVersion(AsyncVersionedRemoteInitiator.java:102)
        at oracle.kv.impl.async.registry.ServiceRegistryInitiator.getSerialVersion(ServiceRegistryInitiator.java:53)
        at oracle.kv.impl.async.AsyncVersionedRemoteAPI.computeSerialVersion(AsyncVersionedRemoteAPI.java:111)
        at oracle.kv.impl.async.registry.ServiceRegistryAPI.access$000(ServiceRegistryAPI.java:47)
        at oracle.kv.impl.async.registry.ServiceRegistryAPI$Factory.wrap(ServiceRegistryAPI.java:152)
        at oracle.kv.impl.util.registry.AsyncRegistryUtils.getRegistry(AsyncRegistryUtils.java:354)
        at oracle.kv.impl.util.registry.AsyncRegistryUtils.getRequestHandler(AsyncRegistryUtils.java:314)
        at oracle.kv.impl.api.rgstate.RepNodeState$AsyncReqHandlerRef.getRequestHandler(RepNodeState.java:1179)
        at oracle.kv.impl.api.rgstate.RepNodeState$AsyncReqHandlerRef.resolveInternal(RepNodeState.java:1138)
        at oracle.kv.impl.api.rgstate.RepNodeState$AsyncReqHandlerRef.resolve(RepNodeState.java:1083)
        at oracle.kv.impl.api.rgstate.RepNodeState.resolveReqHandlerRef(RepNodeState.java:251)
        at oracle.kv.impl.api.rgstate.UpdateThread$ResolveHandler.run(UpdateThread.java:322)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
    [KVSTORE-523]