Changes in 22.2.12
The following changes were made in Oracle NoSQL Database Release 22.2.12 Enterprise Edition.
- The Rep Node parameter 'enableErasure' now defaults to true, meaning
that Obsolete Data Erasure is now enabled by default.
When 'enableErasure' is set to true, this enables the erasure feature for the underlying BDB JE storage layer. Erasure periodically wipes the obsolete data from the storage layer, by zeroing out corresponding records. Obsolete data is data that is no longer returned in queries or scans because it has been replaced or expired, but still exists in the database. Note that only table and key/value data is erased. Table metadata is not subject to erasure.
The Rep Node parameter 'erasurePeriod' specifies the duration for one complete erasure pass over data. Erasure is throttled based on this value, to minimize its impact on performance. By default, it is set to "6 DAYS".
Bug and Performance Fixes
- Fixed a bug that in some cases could cause the XRegion Service to
block for up to one hour before processing the next request to create or delete
- Fixed a bug that could cause elasticity operations to fail in some cases where
partitions were moved back and forth between two shards.
- Fixed a bug that a multi-region table would not be initialized correctly in some
cases when the table was dropped and recreated in a remote region.
- Added 95% and 99% percentile latency values to the XRegion Service statistics.
- Fixed a bug in multi-region tables that, in some cases with high load, caused
requests to create, alter and drop multi-region tables to become blocked inside
the XRegion Service.
- Fixed a bug in multi-region tables that stream operations from remote regions
could in some cases be lost when the XRegion Service writes them to the local
- Discovered that a bug fixed in the 21.1 release, but not previously reported,
could have user-visible consequences. Prior to that release, checkpointing a
multi-region table might cause some data to be lost during replication. In other
words, some writes from one region might not be replicated to remote regions.
- Discovered that a bug fixed in the 21.1 release, but not previously reported,
can have user-visible consequences. Prior to that release, checkpointing a
multi-region table might cause a deadlock in data replication. If the issue is
encountered, writes made to a multi-region table in one region may stop
replication to remote regions, and network connections from remote regions might
drop due to inactivity.
- 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.
jstackutility 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)
- Fixed a bug where using Ctrl+C or Ctrl+D to terminate paginated output of a
query running in the SQL shell would cause a NullPointerException.
- Fixed an issue that prevented a storage node from starting when using Java 8
after calling the securityconfig merge-trust utility to merge a security
configuration with Java keystores in PKCS12 format into a configuration with
Java keystores in JKS format. The start command would fail with following
Failed to start SNA: Error contructing RMISocketPolicy using transport class for transport client
- Fixed a bug that the table description wrongly showed that JSON MRCounter fields
were nullable. Users always need to set values for JSON MRCounters.
- Fixed a bug that caused creating a child table that included a JSON MRCounter to
fail with the following error message:
Error: Error found when creating the table: Only multi-region tables support MR_counters.
- Modified the implementation of
KVStore.executeSyncto reduce its thread usage by having it use async network operations.
- Added the "show ddl <table>" command to the SQL shell. The new
command returns the DDL of a table and its indexes, if any.
- The deprecated import/export utility and its related jar files (kvtool.jar,
kvmigrator.jar, migrator.jar) have been removed and are no longer available. The
old utility has been replaced by the standalone migrator utility, which is an
independent download. It is available on the general Oracle NoSQL Database download
- Fixed a regression that was discovered affecting query processing for a small
number of Hive query types. Prior to fixing this regression, each query's state
was always reset when the job properties were configured. Although this
addressed an issue with Big Data SQL query processing, because Hive and Big Data
SQL employ different code paths, it has recently been observed that resetting
the query state when the job properties are configured can result in incorrect
results for some Hive queries. To address this issue, the state from the most
recent query is now reset at the beginning of query processing for the next
query. This addresses both the old issue with Big Data SQL query processing and
this new issue with Hive.
- Version.fromByteArray() will now throw IllegalArgumentException if the byte
argument is invalid. It would previously throw FaultException.