Release 12cR1.3.3.4 Enterprise Edition
See the section on Updating an Existing Oracle NoSQL Database Deployment in the Admin Guide.
Release 3.3 is compatible with Java SE 7 and later, and has been tested and certified against Oracle JDK 7u67. We encourage you to upgrade to the latest Java releases to take advantage of the latest bug fixes and performance improvements.
Attempting to use this release with a version of Java earlier than Java 7 will produce an error message similar to:
Exception in thread "main" java.lang.UnsupportedClassVersionError: oracle/kv/impl/util/KVStoreMain : Unsupported major.minor version 51.0
Users are now able to enforce table-level access checks through both the API and administrative command line interface (Admin CLI) by using the following new series of table-specific privileges:
Privilege | Description |
READ_ANY_TABLE | Read from any table in kvstore |
DELETE_ANY_TABLE | Delete data from any table in kvstore |
INSERT_ANY_TABLE | Insert and update data to any tables in kvstore |
READ_TABLE | Read from a specific table in kvstore |
DELETE_TABLE | Delete data from a specific table in kvstore |
INSERT_TABLE | Insert and update data to a specific table in kvstore |
CREATE_ANY_TABLE | Create any table in kvstore |
DROP_ANY_TABLE | Drop any table in kvstore |
EVOLVE_ANY_TABLE | Evolve any table in kvstore |
CREATE_ANY_INDEX | Create any index on any table in kvstore |
DROP_ANY_INDEX | Drop any index on any table in kvstore |
EVOLVE_TABLE | Evolve a specific table |
CREATE_INDEX | Create index on a specific table |
DROP_INDEX | Drop index on a specific table |
Users are now able to create new roles to group together privileges or other roles. This provides a way to grant a group of desired privileges to a user. New role management commands have been added to support create and drop roles, and to grant and revoke privileges or roles to and from other roles.
Modifications to the data definition language (DDL) have been added to provide a declarative interface to all security operations. The language reference is in Security Guide. The language is accessible via the API as well as via the "execute" command in the Admin CLI.
Passwords now have lifetimes and will expire when they have been in use beyond the specified lifetime. It is also possible now to explicitly expire a password when adding a new user or by altering the profile of an existing user. Users are required to renew the expired password before they can log in to the store successfully. [#23951]
Admin services created in a secondary zone by previous release will have the
wrong type (primary). This mismatch will be reported as a violation
from the verify configuration
command. This condition can be
remedied through the plan repair-topology
command.
In addition to the changes in Admin service type behavior, new rules have been put in place regarding Admin service deployment. In general it is recommended that Admin services follow the same rules as data nodes, specifically the number of Admin services in a zone should match the zone's replication factor. [#23985][#24182]
show admins
command will also
indicate that the CLI is connected read-only.
Additional re-connect capabilities have been added to the Admin CLI to improve robustness of the CLI in the face of Admin node failures. [#23943]
oracle.kv.table.TableAPI.execute
and
oracle.kv.table.TableAPI.executeSync
have been deprecated in
favor of the new APIs, oracle.kv.KVStore.execute
and
oracle.kv.KVStore.executeSync
. The motivation for the
change is the introduction of new DDL statements which
manage objects that are above the scope of a single table, such as
users and roles. Likewise, the
classes oracle.kv.table.ExecutionFuture
and
oracle.kv.table.StatementResult
are deprecated in favor of
oracle.kv.ExecutionFuture
and
oracle.kv.StatementResult
.
[#23937]
oracle.kv.table.RecordValue
to provide the ability to
use JSON values for complex fields in a table. In the past, JSON could
be used to specify the entire row, but not portions of a row. The
following 6 JSON input methods for complex types in RecordValue are
new: [#24069]
RecordValue putRecordAsJson(String fieldName, String jsonInput, boolean exact);
RecordValue putRecordAsJson(String fieldName, InputStream jsonInput, boolean exact);
RecordValue putArrayAsJson(String fieldName, String jsonInput, boolean exact);
RecordValue putArrayAsJson(String fieldName, InputStream jsonInput, boolean exact);
RecordValue putMapAsJson(String fieldName, String jsonInput, boolean exact);
RecordValue putMapAsJson(String fieldName, InputStream jsonInput,boolean exact);
oracle.kv.ExecutionFuture.toByteArray()
returns a serialized version of the future that can later be passed to
oracle.kv.KVStore.getFuture(byte[])
to recreate a Future
instance.
[#24228]
oracle.kv.StatementResult
. In past releases, both
return values and execution status were returned
via StatementResult.getInfo(),
StatementResult.getInfoAsJson()
. Now, results are return via a
new method, StatementResult.getResult()
, while status is
returned via StatementResult.getInfo(),
getInfoAsJson
. [#24277]
plan deploy-admin
now deploys an Admin with the same
type (primary or secondary) as the zone in which it resides. Previously
the Admin was always created as a primary.
plan repair-topology
will change an Admin's type so that
the type matches the zone in which it resides.
verify configuration
will report the following:
-exact
flag. When
true, the input json string or file specified to the command must
contain values for all columns in the table, and cannot contain
extraneous fields.
For example, the following command would have had to be typed in a single line:
kv-> execute "create table users(name string, address string, primary key (name))"or
kv-> execute "create table users \ -> (name string, \ -> address string, \ -> primary key (name))"but can now be entered this way:
kv-> execute "create table users -> (name string, -> address string, -> primary key (name))";In addition, multiple commands can be entered as below, using a semicolon as a terminator.
kv-> show table -name users; get table -name users;[#24119]
The new utility is invoked this way:
java jar -kvstore.jar disable-services -root ROOT_DIRECTORY [-config CONFIG_FILE][#23988]
verify
configuration
command, and both the Admin CLI and top level
versions of the ping
command:
-json
flag is
specified
[#23981]
java -jar kvstore.jar diagnostics verify -help Usage: verify -checkLocal | -checkMulti
kv-> show events -type stat or kv-> show events \ > -type stat
java -jar kvstore.jar diagnostics diagnostics-> help Oracle NoSQL Database Diagnostic Utility Commands: setup collect exit help diagnostics->
oracle.kv.table.TableAPI.execute(String)
and
oracle.kv.table.TableAPI.executeSync(String)
were added
to execute Data Definition Language (DDL) statements.
oracle.kv.table.StatementResult
and
oracle.kv.table.ExecutionFuture
were added to handle
results of the new statement execution methods
on TableAPI
.
oracle.kv.table.MapValue.putNull(String)
and the constant,
oracle.kv.table.MapValue.ANONYMOUS
, were added in order to
handle new the map indexes.
oracle.kv.table.Index.createMapKeyFieldRange(String)
and
oracle.kv.table.Index.createMapValueFieldRange(String)
were added
to create FieldRange
instances for the new map indexes.
oracle.kv.table.TableAPI.execute(List<TableOperation>,
WriteOptions)
used to throw
oracle.kv.OperationExecutionException
. However,
OperationExecutionException
provides information that
applies to the key value API in the oracle.kv
package
rather than the Table API in
oracle.kv.table
.The method has been changed to throw a
new exception,
oracle.kv.table.TableOpExecutionException
, which provides
information suitable for the Table API.
Note that this is an incompatible API change. Applications which
invoked TableAPI.execute(List<TableOperation>,
WriteOptions)
must be modified to
handle TableOpExecutionException
instead of
OperationExecutionException
.
java -jar kvstore.jar load
utility did not provide
proper feedback when there were errors in operation, and incorrectly
returned "Load succeeded". Now it returns both a non-zero status code
when an error has been found and an accurate status message. [#23681]
get kv -all
command with the administrative CLI:
kv-> get kv -all Error handling command get kv -all: Failed to iterate records : Parallel storeIterator Request Queue take timed out. (12.1.3.1.3) Timeout: 5000msIf the scan was performed via the API using the
KVStore.storeIterator
or storeKeysIterator
method overloadings that supply a StoreIteratorConfig
, the
problem could cause the method call to throw a
RequestTimeoutException
. In all of these cases, the
iteration now returns no elements. [#23881]
The KVStore logging system has also been enhanced to log security sensitive events. Two new logging levels named SEC_WARNING and SEC_INFO have been introduced. Messages logged at SEC_WARNING level will produce critical events in the CLI. High level security events like failed login attempts and unauthorized operations will be recorded as SEC_WARNING KVStore events. Execution of CLI commands which require sysadmin or dbadmin roles will be recorded as SEC_INFO events. Logging messages of all security sensitive events have "timestamp KVAuditInfo" as the prefix for the ease of grepping and filtering. [#23423]
The supported Java environments can use compressed object references when the heap size is smaller than a certain size, currently between 25 and 32 GB depending on the implementation. Because the space savings provided by compressed references are substantial, using a larger heap size typically results in less usable space unless the heap size is at least 50% larger than the largest size that supports compressed references.
The system now automatically reduces the replication node heap size if the value of the memoryMB storage node parameter produces a heap size that is too large to support compressed references but not large enough to provide more usable space. The heap size is not reduced if the application specifies a javaMiscParams replication node parameter that explicitly specifies either non-compressed references or the maximum heap size. Note that, if the memoryMB parameter is not specified explicitly, or is set to zero, the system sets it to the amount of physical memory available on the host, and will reduce the heap size in the same way as when memoryMB is set explicitly to a non-zero value. [#22695]
oracle.kv.hadoop.KVInputFormatBase.setDirection(Direction)
has been deprecated since only Direction.UNORDERED
is supported.
oracle.kv.KVStore
and oracle.kv.table.TableAPI
interfaces have been updated to make it clear that the iterators returned by
those interfaces can only be used safely by one thread at a time unless
synchronized externally.
[#23799]
kv-> verify upgrade Unknown Exception: class oracle.kv.impl.rep.admin.RepNodeAdminFaultException RepNode is not RUNNING, current status is STARTING (12.1.3.1.2) oracle.kv.impl.rep.admin.IllegalRepNodeServiceStateException: RepNode is not RUNNING, current status is STARTINGThis has been fixed. [#23859]
com.sleepycat.persist.evolve.IncompatibleClassException: (JE 6.2.5) Changes to the fields or superclass were detected when evolving class: oracle.kv.impl.admin.plan.task.StopAdmin version: 1 to class: oracle.kv.impl.admin.plan.task.StopAdmin version: 1 Error: A new higher version number must be assigned --- (Note that when upgrading an application in a replicated environment, this exception may indicate that the Master was mistakenly upgraded before this Replica could be upgraded, and the solution is to upgrade this Replica.) at com.sleepycat.persist.impl.PersistCatalog.init(PersistCatalog.java:512) at com.sleepycat.persist.impl.PersistCatalog.initAndRetry(PersistCatalog.java:268) at com.sleepycat.persist.impl.PersistCatalog.<init>(PersistCatalog.java:228) at com.sleepycat.persist.impl.Store.<init>(Store.java:202) at com.sleepycat.persist.EntityStore.<init>(EntityStore.java:190) at oracle.kv.impl.admin.Admin.initEstore(Admin.java:2126)
oracle.kv.coherence
package for information on how to configure a NoSQL Database
backed cache with Coherence 12.1.2, or the earlier Coherence 3.7.1. [#23350]
com.sleepycat.je.rep.UnknownMasterException: Transaction -XXX cannot execute write operations because this node is no longer a master[#23580]
change-policy -params "javaMiscParams=-XX:CMSInitiatingOccupancyFraction=77" plan change-parameters -all-rns -params "javaMiscParams=-XX:CMSInitiatingOccupancyFraction=77"[#23652]
Task 23/DeployNewRN on sn1(slc06tyu:5000) ended in state ERROR oracle.kv.impl.fault.RNUnavailableException: Security metadata database is not opened yet.
Insufficient access rights : client host: xx.xxx.xxx.xx: attempt to call RepNodeAdmin.updateMetadata(MetadataInfo,AuthContext,short)
ProcessMonitor: java.lang.NullPointerException ProcessMonitor: at oracle.kv.impl.api.rgstate.RepNodeState$ReqHandlerRef.resolve(RepNodeState.java:649) ProcessMonitor: at oracle.kv.impl.api.rgstate.RepNodeState$ReqHandlerRef.get(RepNodeState.java:709)
java -Doracle.kv.shell.jline.disable=true -jar KVHOME/kvstore.jar runadmin -host <hostname> -port <portname>
The CLI attempts to save the history in a
KVHOME/.jlineoracle.kv.impl.admin.client.CommandShell.history
file, which is created and opened automatically. The default history
saved is 500 lines. If the history file cannot be opened, it will fail
silently and the CLI will run without saved history.
The default history file path can be overridden by setting
the oracle.kv.shell.history.file=
path Java property.
The default number of lines to save to the file can be modified by
setting the oracle.kv.shell.history.size=
int_value Java
property. [#22690]
aggregate
command to provide
subcommands for tables and key/value entries. The aggregate
table
subcommand performs simple data aggregation operations on
numeric fields of a table, while the aggregate kv
subcommand performs aggregation operations on keys. [#23258]
SecondaryIntegrityException
s being thrown when the
migration was restarted. [#23392]
FieldRange.setEndDate
method, in favor of the
existing setEnd
method. [#23399]
FaultException
being thrown from KVStore operations
instead of RequestTimeout
when a timeout occurs. Here's a
sample stack trace:
Caused by: oracle.kv.FaultException: Problem during unmarshalling (12.1.2.1.24) Fault class name: java.rmi.UnmarshalException at oracle.kv.impl.api.RequestDispatcherImpl.faultIfWrite(RequestDispatcherImpl.java:968) at oracle.kv.impl.api.RequestDispatcherImpl.handleRemoteException(RequestDispatcherImpl.java:883) at oracle.kv.impl.api.RequestDispatcherImpl.handleDispatchException(RequestDispatcherImpl.java:736) at oracle.kv.impl.api.RequestDispatcherImpl.execute(RequestDispatcherImpl.java:572) at oracle.kv.impl.api.RequestDispatcherImpl.execute(RequestDispatcherImpl.java:1031) at oracle.kv.impl.api.KVStoreImpl.executeRequest(KVStoreImpl.java:1251) at oracle.kv.impl.api.KVStoreImpl.putIfVersion(KVStoreImpl.java:990) at oracle.kv.impl.api.KVStoreImpl.putIfVersion(KVStoreImpl.java:968) [...] ... 41 more Caused by: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: java.net.SocketException: Socket closed at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:228) at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161) at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194) at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148) at com.sun.proxy.$Proxy21.execute(Unknown Source) at oracle.kv.impl.api.RequestHandlerAPI.execute(RequestHandlerAPI.java:94) at oracle.kv.impl.api.RequestDispatcherImpl.execute(RequestDispatcherImpl.java:560) ... 46 more Caused by: java.net.SocketException: Socket closed at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:121) at java.net.SocketOutputStream.write(SocketOutputStream.java:159) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1822) at java.io.ObjectOutputStream.flush(ObjectOutputStream.java:718) at sun.rmi.transport.StreamRemoteCall.releaseOutputStream(StreamRemoteCall.java:114) at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:212) ... 52 more[#23411]
List<String>IndexKey.getFields()
to return the
fields used to define the index.List<String>PrimaryKey.getFields()
to return the
fields used to define the primary key.List<String>RecordValue.getFields()
to return the
fields used to define the record, in declaration order.Map<String, FieldValue> MapValue.getFields()
to
return an immutable view of the map.Tables and indexes are defined using the administrative CLI and accessed via programmatic API. The data CLI has been enhanced to perform operations on tables and indexes as well. The API is documented in the Oracle NoSQL Database javadoc, and is primarily in the oracle.kv.table package.
It is possible to define tables that overlay data created with NoSQL DB Release 2 if that data was created using a conforming Avro schema. This overlay is required in order to create secondary indexes on conforming Release 2 data.
The existing key/value interface remains available.
-store-security
). Users that wish to use the new
capabilities should be aware of the following areas of change:
-store-security
command-line argument, which is used to
enable security for a new KVStore deployment. The -store-security flag
is also used to enable a non-secure deployment, and is actually
required in that case (-store-security none).
setSecurityProperties()
getSecurityProperties()
KVStoreFactory.getStore(KVStoreConfig, LoginCredentials, ReauthenticateHandler)
This new method utilizes the new interfaces
LoginCredentials
ReauthenticateHandler
As well as the new class PasswordCredentials
.
login()
logout()
UnauthorizedException
AuthenticationFailureException
AuthenticationRequiredException
Users should also familiarize themselves with security property files, which are required when using a KVStore command-line utility program against a secure store, and which may also be useful when running an application against a secure store.
This feature is described in much greater depth in the Oracle NoSQL Database Security Guide, as well as in the Administrators Guide and product Javadoc.
Commands that contained the word "datacenter" have been deprecated, and are replaced with commands using the word "zone". The previous commands will continue to work in this release. New commands are:
plan deploy-zone
plan remove-zone
show zones
Command flags that specify a zone have been changed to -zn
,
for a zone ID, and -znname
, for a zone name. The
earlier -dc
and -dcname
flags have been
deprecated but will continue to work in this release. In addition, zone
IDs can now be specified using the "zn" prefix, with the earlier "dc"
prefix still currently supported.
The administrative GUI has also been modified to use the new Zone terminology. [#22878]
show plan
command now provides an estimated migration completion time. For example:
Plan Deploy Topo (12) State: RUNNING Attempt number: 1 Started: 2014-01-14 17:35:09 UTC Ended: 2014-01-14 17:35:27 UTC Total tasks: 27 Successful: 12 Incomplete: 15 Incomplete tasks 3 partition migrations queued 1 partition migrations running 11 partition migrations succeeded, avg migration time = 550164 ms. Estimated completion: 2014-01-14 19:57:37 UTC[#22183]
oracle.kv.Consistency.NONE_REQUIRED_NO_MASTER
can now be
used to specify that the desired read operations must always be serviced
by a replica, never the master. For read-heavy applications (ex. analytics),
it may be desirable to isolate read requests so that they are performed
only on replicas, never a master; reducing the load on the master. The
preferred mechanism for achieving this sort of read isolation is the new
secondary zone feature; which users are encouraged to employ for this
purpose. But for cases where the use of secondary zones is not desired
or impractical, oracle.kv.Consistency.NONE_REQUIRED_NO_MASTER
can be used to achieve a similar effect, without the additional resources
that secondary zones may require. [#22338]
KVStoreConfig.setReadZones()
KVStoreConfig.getReadZones()
These methods make it possible to require that read operations only be performed on nodes located in the specified zones.
-runadmin
command-line argument, which allows the SNA to force the start of a bootstrap
admin even if the value of -admin
is set to 0.
The option -port
of plan deploy-admin within the admin CLI
has been changed to be able to control the start of the admin web service. No
web service of the admin will be started if the -port
is set to
0 in deploying.
Users can also change the http port of an admin after deployment via plan change-param command of admin CLI to change the setting for whether an admin runs a web server. [#22344]
topology redistribute
command to ignore storage directory settings when creating new
replication nodes. [#23161]
InputStream.skip
as needed to position the input stream to
the start location, so long as the calls return non-zero values.
An IllegalArgumentException
will be thrown if the calls do
not advance the stream to the required start location.
KVStore.appendLOB()
now permits appending to an
existing LOB (Large Object). As part of this change, the
method PartialLOBException.isPartiallyDeleted()
has been deprecated
in favor of the new
method: PartialLOBException.getPartialState()
. Please consult the
javadoc associated with these new methods, as well as the updated doc for the
interface KVLargeObject
, for a detailed description of this new
functionality.
This release is backwards compatible with LOBs created in previous releases, with one exception: Only LOBs created in this, or a later, release support the append operation. Attempts to use the append operation on LOBs created in previous releases will result in the method throwing an UnsupportedOperationException.
LOBs created in this release cannot be read or deleted by clients using earlier releases. Such operations will typically fail with a ConcurrentModificationException. Please ensure that all clients are updated to this release before creating new LOBs. [#22876]
KVROOT/<storename>/log
directory (the standard
location for all NoSQL related logging information). This default behavior only
applies when using JDK release 1.7 or a later release, since gc log rotation is
only supported in the more recent JDKs. The logging has minimal resource
overheads. Having these log files readily available, conforms to deployment best
practices for production java applications making it simpler to diagnose GC
issues should the need arise. [#22858]
StoreIteratorConfig
setter methods has been
fixed. [#23010]
KVStore.storeIterator()
and KVStore.storeKeysIterator()
implements Parallel
Scans. The other storeIterator()
methods scan all
shards and Replication Nodes in serial order. The new Parallel
Scan methods allow the programmer to specify a number of client-side
threads that are used to scan Replication Nodes in parallel. [#22146]
kvshell-> put -key /test -value ./emp.insert -file -json Employee Could not create JSON from input: Unable to serialize JsonNodebut will now produce this more useful response:
kvshell-> put -key /test -value ./emp.insert -file -json Employee Exception handling command put -key /test -value ./emp.insert -file -json Employee: Could not create JSON from input: Expected Avro type STRING but got JSON value: null in field Address of Employee[#22791]
2014-03-28 12:13:34.544 UTC SEVERE [sn2] MasterRebalanceThread thread exiting due to exception. null (12.1.2.1.24) java.lang.NullPointerException at oracle.kv.impl.sna.StorageNodeAgentImpl$27.execute(StorageNodeAgentImpl.java:838) at oracle.kv.impl.sna.StorageNodeAgentImpl$27.execute(StorageNodeAgentImpl.java:831) at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:119) at oracle.kv.impl.sna.StorageNodeAgentImpl.getMDInfo(StorageNodeAgentImpl.java:829) at sun.reflect.GeneratedMethodAccessor12.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) ... at com.sun.proxy.$Proxy1.getMDInfo(Unknown Source) at oracle.kv.impl.sna.StorageNodeAgentAPI.getMDInfo(StorageNodeAgentAPI.java:492) at oracle.kv.impl.sna.masterBalance.RebalanceThread.orderMSCNs(RebalanceThread.java:580) at oracle.kv.impl.sna.masterBalance.RebalanceThread.candidateTransfers(RebalanceThread.java:485) at oracle.kv.impl.sna.masterBalance.RebalanceThread.run(RebalanceThread.java:301) 2014-03-28 12:13:34.546 UTC INFO [sn2] Master balance manager shutdown 2014-03-28 12:13:34.546 UTC INFO [sn2] MasterRebalanceThread thread exited.[#23419]
java.lang.IllegalStateException: Transaction 30 detected open cursors while aborting at com.sleepycat.je.txn.Txn.abortInternal(Txn.java:1190) at com.sleepycat.je.txn.Txn.abort(Txn.java:1100) at com.sleepycat.je.txn.Txn.abort(Txn.java:1073) at com.sleepycat.je.Transaction.abort(Transaction.java:207) at oracle.kv.impl.util.TxnUtil.abort(TxnUtil.java:80) at oracle.kv.impl.api.RequestHandlerImpl.executeInternal(RequestHandlerImpl.java:469) at oracle.kv.impl.api.RequestHandlerImpl.access$300(RequestHandlerImpl.java:122) at oracle.kv.impl.api.RequestHandlerImpl$2.execute(RequestHandlerImpl.java:301) at oracle.kv.impl.api.RequestHandlerImpl$2.execute(RequestHandlerImpl.java:290) at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:135>[#22152]
plan deploy-topology
command has additional
safeguards to increase the reliability of the topology rebalance and
redistribute plans. When moving a replication node from one Storage
Node to another, the command will now check that the Storage Nodes
involved in the operation are up and running before any action is
taken. [#22850]
plan
deploy-topology
command could result in the following
error if there was a transient network failure, or if the movement of
the replication node took longer than a few seconds. Although the store
state was still consistent, and the command could be manually retried,
the command should be more resilient to communication glitches.
... [admin1] Task 2/RelocateRN ended in state ERROR with java.lang.RuntimeException: Time out while waiting for rg4-rn1 to come up on sn1 and become consistent with the master of the shard before deleting the RepNode from its old home on sn4 2/RelocateRN failed. java.lang.RuntimeException: Time out while waiting for rg4-rn1 to come up on sn1 and become consistent with the master of the shard before deleting the RepNode from its old home
The command will now adjust waiting times and retry appropriately to ascertain whether the movement of a replication node has finished.[#22596]
java -jar kvstore.jar ping
command
could generate spurious messages about components that are no longer
legitimately within the store.
Failed to connect to service commandService Connection refused to host: 10.32.17.12; nested exception is: java.net.ConnectException: Connection refused SNA at hostname:localhost registry port: 6000 has no available Admins or RNs registered.In particular, these messages could happen for bootstrap Admins on Storage Nodes that do not host deployed Admin Services. While the store was consistent, the error messages were confusing and have been removed. [#22639]
plan
deploy-topology
command to fail. This has been corrected.
... INFO [rg1-rn1] Failed pushing entire topology push to rg1-rn3 updating from topo seq#: 0 to 1001 Problem:Update to topology seq# 1001 failed ... oracle.kv.impl.fault.OperationFaultException: Update to topology seq# 1001 failed at oracle.kv.impl.rep.admin.RepNodeAdminImpl$6.execute(RepNodeAdminImpl.java:261) at oracle.kv.impl.fault.ProcessFaultHandler.execute(ProcessFaultHandler.java:169) at oracle.kv.impl.rep.admin.RepNodeAdminFaultHandler.execute(RepNodeAdminFaultHandler.java:117) ...INFO [rg1-rn3] Topology update skipped. Current seq #: 1001 Update seq #: 1001[#22678]
plan deploy-topology
command on a store that contains Storage Nodes
that have capacity values greater than 1, and can host multiple
Replication Nodes. A delay in notifying the Storage Node of its
replication nodes status can make the distribution of mastership
responsibilities less optimal.
[#22689]
plan deploy-topology
command. During this time, the
admin service process appeared idle, only burning a second or two of
CPU time once in a while and would not respond to new attempts to
connect with the Admin CLI. The problem would likely only occur in
large clusters with hundreds of components. [#22694]
plan deploy-topology
which result in the movement of a replication node from one storage
node to another are now more resilient to transient network failures.
There are now more advance checks to ensure that the shard and storage
nodes involved in the movement are available and ready to accept the
change. In the advent of a network failure mid-move, the command is
better at handling retries issued by the system administrator.
[#22722]
INFO [sn1] rg2-rn2: ProcessMonitor: startProcess INFO [sn1] rg2-rn2: ProcessMonitor: stopProcess SEVERE [sn1] rg2-rn2: ProcessMonitor: Unexpected exception in MonitorThread: java.lang.NullPointerExceptionjava.lang.NullPointerException at oracle.kv.impl.sna.ProcessMonitor$MonitorThread.run(ProcessMonitor.java:404)[#22830]
The new CLI commands provide the administrator tools to help with the upgrade process. Using these commands, the general upgrade procedure is:
verify prerequisite
command to verify that the
entire store is at the proper software version to be upgraded (All
2.0 versions of NoSQL DB will qualify as prerequisites).
show upgrade-order
to get an ordered list of nodes to
upgrade.
verify upgrade
to monitor progress and verify that
the upgrade was successful.
If the upgrade procedure is interrupted steps 4-6 can be repeated as necessary to complete the upgrade.
verify prerequisite [-silent] [-sn snX]*
This command will verify that a set of storage nodes in the store meets the required prerequisites for upgrading to the current version and display the components which do not meet prerequisites or cannot be contacted. It will also check and report an illegal downgrade situation where the installed software is of a newer minor release than the current version. In this command the current version is the version of the software running the command line interface. If no storage nodes are specified, all of the nodes in the store will be checked.
verify upgrade [-silent] [-sn snX]*
This command will verify that a set of storage nodes in the store has been successfully upgraded to the current version and display the components which have not yet been upgraded or cannot be contacted. In this command the current version is the version of the software running the command line interface. If no storage nodes are specified, all of the nodes in the store will be checked.
show upgrade-order
This command will display the list of storage nodes in the order that they should be upgraded to maintain the store's availability. This command will display one or more storage nodes on a line. Multiple storage nodes on a line are separated by a space. If multiple storage nodes appear on a single line, then those nodes can be safely upgraded at the same time. When multiple nodes are upgraded at the same time, the upgrade must be completed on all nodes before the nodes next on the list can be upgraded.
The verify [-silent]
command has been deprecated and is replaced by
verify configuration [-silent]
. The verify [-silent]
command will continue to work in this release.
WriteOperations
(located in the examples
directory) now includes methods that
perform write operations for large objects (or LOB,
see KVLargeObject
). The
new utility methods added in this release will properly retry the associated
LOB operation when
a FaultException
is encountered. Prior to this release,
the WriteOperations
utility only provided retry methods for objects that are not large
objects. [#21966]
java.net.InetAddress.getLocalHost() returned loopback address:<hostname> and no suitable address associated with network interfaces.This has been fixed. [#22252]
RequestTimeoutException
will now be propagated to the client; wrapping the original exception from the underlying persistent store as the cause. For additional information, including strategies one might employ when this exception is encountered, refer to the RequestTimeoutException
javadoc.
This has been fixed. [#21210]
hideUserData
is set
to true, as it is by default, error messages which are printed to the
server side logs or are displayed via the show CLI commands replace
any key/values with the string "[hidden]". To see the actual record content
in errors, set the parameter to false. [#22376]
plan
deploy-topology
command would often be visible only within
the NoSQL DB logs, which made
installation troubleshooting difficult. In this
release, such start up errors can now be seen via the Admin CLI
show plan -id <id>
command. [#22101]
examples.hadoop.CountMinorKeys
example against a cluster based on the 2.x version of Hadoop (CDH4), the MapReduce job initiated by that example would fail as a result of an IncompatibleClassChangeError
; which is caused by an incompatibility introduced in org.apache.hadoop.mapreduce.JobContext
between Hadoop 1.x and Hadoop 2.x. This failure occurs whether the example is compiled and built against Hadoop 1.x or Hadoop 2.x. Because the product's customer base almost exclusively uses Hadoop 2.x, this release will provide support for Hadoop 2.x instead of 1.x. Future releases may revisit support for both Hadoop version paths, but doing so will involve refactoring the codebase and its associated release artifacts, as well as substantial changes to the product's current build process.
Support of Hadoop 2.x (CDH4) has been provided. [#22157]
plan remove-admin -admin <adminId>
You cannot remove the sole Admin if only one Admin instance is configured.
For availability and durability reasons, it is highly recommended that you maintain at least three Admin instances at all times. For that reason, if you try to remove an Admin when the removal would result in there being fewer than three, the command will fail unless you give the -force flag.
If you try to remove the Admin that is currently the master, mastership will transfer to another Admin. The plan will be interrupted, and subsequently can be re-executed on the new master Admin. To re-execute the interrupted plan, you would use this command:
plan execute -id <planId>
show perf
command, .perf files and .csv files, as well as the client-side statistics
returned by KVStore.getStats. However, corrections to the 95% and 99% values do
not apply to the client-side statistics, since these values do not appear in
the client-side API.
Op Type
column where latency
information is displayed. The previous definition was "latency in
milliseconds per operation" while the new definition is "latency
in milliseconds per request". In other words, for a "multi"
operation request, latency now applies to the entire request rather than
to each operation. For "single" operation requests, the definition of
latency has not changed.
TotalReq
. This is also available for client-side
statistics using the new OperationMetrics.getTotalRequests
method. For "multi" operation requests, the total number of requests is
normally smaller than the total number of operations (the
TotalOps
column). For "single" operation requests, the
total number of requests and operations are equal.
Exception in thread "main" com.sleepycat.je.EnvironmentFailureException: (JE 5.0.XX) ... last LSN=.../... LOG_INTEGRITY: Log information is incorrect, problem is likely persistent. Environment is invalid and must be closed. at com.sleepycat.je.recovery.RecoveryManager.traceAndThrowException(RecoveryManager.java:2793) at com.sleepycat.je.recovery.RecoveryManager.undoLNs(RecoveryManager.java:1097) at com.sleepycat.je.recovery.RecoveryManager.buildTree(RecoveryManager.java:587) at com.sleepycat.je.recovery.RecoveryManager.recover(RecoveryManager.java:198) at com.sleepycat.je.dbi.EnvironmentImpl.finishInit(EnvironmentImpl.java:610) at com.sleepycat.je.dbi.DbEnvPool.getEnvironment(DbEnvPool.java:208) at com.sleepycat.je.Environment.makeEnvironmentImpl(Environment.java:246) at com.sleepycat.je.Environment.<init>(Environment.java:227) at com.sleepycat.je.Environment.<init>(Environment.java:170) ... Caused by: java.lang.NullPointerException at com.sleepycat.je.log.entry.LNLogEntry.postFetchInit(LNLogEntry.java:406) at com.sleepycat.je.txn.TxnChain.<init>(TxnChain.java:133) at com.sleepycat.je.txn.TxnChain.<init>(TxnChain.java:84) at com.sleepycat.je.recovery.RollbackTracker$RollbackPeriod.getChain(RollbackTracker.java:1004) at com.sleepycat.je.recovery.RollbackTracker$Scanner.rollback(RollbackTracker.java:477) at com.sleepycat.je.recovery.RecoveryManager.undoLNs(RecoveryManager.java:1026) ... 10 more[#22052]
KVStore.storeIterator
or KVStore.storeKeysIterator
method was used. [#21973]
lib/kvstore.jar lib/kvclient.jar
This change should reduce the amount of work needed to switch to a new release because the names of JAR files will no longer change between releases. Note that the name of the installation directory continues to include the release version number. [#22034]
121215 13:48:57:480 SEVERE [...] Average cleaner backlog has grown from 0.0 to 6.4. If the cleaner continues to be unable to make progress, the JE cache size and/or number of cleaner threads are probably too small. If this is not corrected, eventually all available disk space will be used.For more information on setting the cache size appropriately to avoid such problems, see "Determining the Per-Node Cache Size" in the Administrator's Guide. [#21111]
oracle.kv.lob
package provides operations that can
be used to read and write Large Objects (LOBs) such as audio and video
files. As a general rule, any object larger than 1 MB is a good
candidate for representation as a LOB. The LOB API permits access to
large values without having to materialize the value in its entirety
by providing streaming APIs for reading and writing these objects.
A storage node was incorrectly configured, and cannot be deployed.[#20530]
A storage node was once part of a NoSQL Database, but all components have been migrated from it using the migrate-storagenode command, and the storage node should be decommissioned.
oracle.kv.avro
package is
described in the Javadoc. The use of the Avro format is strongly
recommended. NoSQL DB will leverage Avro in the future to provide additional
features and capabilities. [#21213]
KVInputFormat
classes.
A new oracle.kv.hadoop.KVAvroInputFormat
class returns Avro
IndexedRecord
s to the caller. When this class is used in
conjunction with Oracle Loader for Hadoop, it is possible to read data
directly from NoSQL Database using OLH without using an interim Map-Reduce
job to store data in HDFS. [#21157]
oracle.kv.exttab
package and an "cookbook" example in the
examples/externaltables
directory. [#20981]
KVStoreConfig.setOpenTimeout()
KVStoreConfig.getOpenTimeout()
KVStoreConfig.setReadTimeout()
KVStoreConfig.getReadTimeout()
R1 installations must ensure that the software on the storage nodes has been upgraded as described in the upgrade documentation accompanying this release before using the above APIs on the client. [#20997]
rnRHSOBacklog
(default
1024), rnMonitorSOBacklog
(default 0), rnAdminSOBacklog
(default 0), rnAdminSOBacklog
(default 0),
snAdminSOBacklog
(default
0), snMonitorSOBacklog
(default 0), and
snRegistrySOBacklog
(default 1024).
[#21322]
Key.isPrefix
with an argument containing
a smaller major or minor path than the target Key object caused an
IndexOutOfBoundsException in certain cases. This has been fixed.
KeyRange()
constructor now checks that the start
Key
is less than the end Key
if both are specified,
otherwise an IllegalArgumentException
is thrown.
KeyRange
also has toString()
and
fromString()
methods for encoding and decoding
KeyRange
instances, similar to the same methods in
Key
. [#21470]
Datacenters can now be expressed as # or dc#joinPool myStorageNodePool 17 show repnode-params 5,3
The commands shown above are still valid, but can also be expressed as:
[#21099]joinPool myStorageNodePool sn17 show repnode-params rg5-rn3
Key.createKey
methods has been improved to
warn that List instances passed as parameters are owned by the Key object
after calling the method. To avoid unpredictable results, they must not be
modified. [#20530]
snapshot create
command
has been made significantly faster. Previously, it could take
minutes if executed on a store with a large amount of data. This
should be reduced to seconds. [#20772]
bin/run-kvlite.sh
and bin/kvctl
, have been replaced
by a java -jar lib/kvstore-M.N.P.jar
command. This provides portability
to all Java platforms, including Windows. The two scripts are deprecated, but
will be supported for at least one release cycle.
The translation from the old script commands to the new -jar commands is as follows:
Old script command | New -jar command |
---|---|
bin/run-kvlite.sh args... |
java -jar lib/kvstore-M.N.P.jar kvlite args... |
bin/kvctl command args... |
java -jar lib/kvstore-M.N.P.jar command args... |
There are a few differences to be aware of between the old and new commands.
nohup
, if desired, must be explicitly specified. In
the bin/kvctl
script, nohup was added automatically for the
start
and restart
commands. To specify the
equivalent command, use:
nohup java -jar lib/kvstore-M.N.P.jar start args... > /dev/null <
/dev/null 2<&1 &
The logging configuration file for kvlite is now specified using
standard Java syntax. Previously, the
examples/logging.properties
configuration file was added
automatically when passing -logging
to the
run-kvlite.sh
script. The new equivalent is:
java -Djava.util.logging.config.file=examples/logging.properties
-jar lib/kvstore-M.N.P.jar kvlite args...
Previously, the -host
argument defaulted to
the local machine name (via the `hostname`
command) when
running the kvctl
script. Now, for all control commands, no
default hostname is used and the -host
argument must be
specified explicitly. This change was made for two reasons: 1)
consistency, since the port and other arguments have no default value for
control commands, and 2) safety, since specifying an explicit hostname
guards against accidental errors.
Previously, the -host
argument defaulted to
localhost
when running the run-kvlite.sh
script.
Now, the default is the local machine name rather than (literally)
localhost
. Note that the kvlite command, unlike the control
commands, has default values for all arguments. This is because the kvlite
command is designed for ease-of-use during development on a single machine.
kvlite should not be used in production or for performance testing.
Previously, running java -jar lib/kvstore-M.N.P.jar
, with or
without arguments, printed the product version. Now, if no arguments are
specified, a usage message is printed. To print the version, use the
version command:
java -jar lib/kvstore-M.N.P.jar version