Changes in 22.1.22

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

Bug and Performance Fixes

  1. Fixed an issue that if KVStore handles were repeatedly created under UnknownHostException or UnresolvedAddressException, sock type file descriptors would be leaked.

    [KVSTORE-1515]

  2. Fixed a problem that could cause a thread deadlock in the direct Java driver for applications that perform queries. The problem was seen in the httpproxy, which uses the direct Java driver for queries, but is not specific to it. The result was that the application would hang.
    Using the jstack utility to create a thread dump for the application showed two characteristic stack traces, which represent the two sides of the deadlock:
    "nioEventLoopGroup-3-11" #70 prio=10 os_prio=0 cpu=66.97ms elapsed=5790.89s tid=0x00007f6fdc017800 nid=0x9e in Object.wait()  [0x00007f6fecbf3000]
       java.lang.Thread.State: RUNNABLE
    	at oracle.kv.impl.api.table.FieldDefImpl.<clinit>(FieldDefImpl.java:90)
    	at oracle.kv.impl.query.types.TypeManager.<clinit>(TypeManager.java:378)
    	at oracle.kv.impl.query.compiler.FuncAndOr.<init>(FuncAndOr.java:38)
    	at oracle.kv.impl.query.compiler.FunctionLib.<init>(FunctionLib.java:169)
    	at oracle.kv.impl.query.compiler.CompilerAPI.<clinit>(CompilerAPI.java:41)
    	at oracle.nosql.proxy.sc.TableUtils.getCallbackInfo(TableUtils.java:567)
    	at oracle.nosql.proxy.DataService.handlePrepare(DataService.java:2032)
    	at oracle.nosql.proxy.DataService$$Lambda$354/0x0000000800551840.handle(Unknown Source)
    	at oracle.nosql.proxy.DataService.handleRequestWithContext(DataService.java:664)
    	at oracle.nosql.proxy.DataService.handleRequestInternal(DataService.java:451)
    	at oracle.nosql.proxy.DataService.handleRequest(DataService.java:424)
    	at oracle.nosql.proxy.DataService.handleRequest(DataService.java:399)
    	at oracle.nosql.proxy.DataService.handleRequest(DataService.java:355)
    And:
    "nioEventLoopGroup-3-9" #66 prio=10 os_prio=0 cpu=124.03ms elapsed=5791.14s tid=0x00007f6fdc015800 nid=0x98 in Object.wait()  [0x00007f7163aef000]
       java.lang.Thread.State: RUNNABLE
    	at oracle.kv.impl.api.table.FieldDefSerialization.readTimestamp(FieldDefSerialization.java:433)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readFieldDef(FieldDefSerialization.java:346)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readFieldDef(FieldDefSerialization.java:261)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readRecord(FieldDefSerialization.java:380)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readFieldDef(FieldDefSerialization.java:348)
    	at oracle.kv.impl.api.table.FieldDefSerialization.readFieldDef(FieldDefSerialization.java:261)
    	at oracle.kv.impl.query.runtime.PlanIter.deserializeFieldDef(PlanIter.java:1184)
    	at oracle.kv.impl.query.runtime.ReceiveIter.<init>(ReceiveIter.java:367)
    	at oracle.kv.impl.query.runtime.PlanIter.deserializeIter(PlanIter.java:876)
    	at oracle.kv.impl.api.query.PreparedStatementImpl.<init>(PreparedStatementImpl.java:550)
    	at oracle.nosql.proxy.DataServiceHandler.deserializePreparedQuery(DataServiceHandler.java:810)
    	at oracle.nosql.proxy.DataService.deserializePreparedQuery(DataService.java:2181)
    	at oracle.nosql.proxy.DataService.handleQuery(DataService.java:1661)
    	at oracle.nosql.proxy.DataService$$Lambda$353/0x0000000800552440.handle(Unknown Source)
    	at oracle.nosql.proxy.DataService.handleRequestWithContext(DataService.java:664)
    	at oracle.nosql.proxy.DataService.handleRequestInternal(DataService.java:451)
    	at oracle.nosql.proxy.DataService.handleRequest(DataService.java:424)
    [KVSTORE-1484]
  3. Discovered that a bug fixed as of the initial 21.1 release can have user-visible consequences. The checkpointing of a multi-region table might cause some data to be lost during replication. In other words, some writes from one region might not be able to replicate to remote regions.

    [KVSTORE-772]

  4. Discovered that a bug fixed as of the initial 21.1 release can have user-visible consequences. The checkpointing of a multi-region table might cause deadlock in data replication. If multi-region table runs into the bug, the writes made to one region may stop replication to remote regions, and network connections from remote regions might drop due to inactivity.

    [KVSTORE-1525]