A mechanism for adding application specific information when asynchronously
tracking the state of a running JE HA application.
NodeState provides information about the current state of a member
of the replication group. The application can obtain NodeState via
com.sleepycat.je.rep.util.ReplicationGroupAdmin#getNodeState or
com.sleepycat.je.rep.util.DbPing#getNodeState. A NodeState contains mostly
JE-centric information, such as whether the node is a master or
replica. However, it may be important to add in some application specific
information to enable the best use of the status.
For example, an application may want to direct operations to specific nodes
based on whether the node is available. The fields in
NodeState will
tell the application whether the node is up and available in a JE HA sense,
but the application may also need information about an application level
resource, which would affect the load balancing decision. The AppStateMonitor
is a way for the application to inject this kind of application specific
information into the replicated node status.
The AppStateMonitor is registered with the replicated environment using
ReplicatedEnvironment#registerAppStateMonitor(AppStateMonitor).
There is at most one AppStateMonitor associated with the actual environment
(not an
com.sleepycat.je.Environment handle) at any given time. JE
HA calls
AppStateMonitor#getAppState when it is assembling status
information for a given node.
After registration, the application can obtain this application specific
information along with other JE HA status information when it obtains a
NodeState, through
NodeState#getAppState.
AppStateMonitor#getAppState() returns a byte array whose length
should be larger than 0. An IllegalStateException will be thrown if the
returned byte array is 0 size. Users are responsible for serializing and
deserializing the desired information into this byte array.