JBoss.org Community Documentation
singletonStore
element enables modifications to be stored by only one node in the cluster,
the coordinator. Essentially, whenever any data comes in to some node
it is always replicated so as to keep the caches' in-memory states in
sync; the coordinator, though, has the sole responsibility of pushing
that state to disk. This functionality can be activated setting the
enabled
subelement to true in all nodes, but
again only the coordinator of the cluster will store the modifications
in the underlying cache loader as defined in
cacheloader
element. You cannot define a cache loader as
shared
and with
singletonStore
enabled at the same time.
Default value for
enabled
is
false
.
Optionally, within the
singletonStore
element, you can define a
class
element that specifies the implementation class that provides the
singleton store functionality. This class must extend
org.jboss.cache.loader.AbstractDelegatingCacheLoader
, and if absent, it defaults to
org.jboss.cache.loader.SingletonStoreCacheLoader
.
The
properties
subelement defines properties that allow changing the behaivour of the
class providing the singleton store functionality. By default,
pushStateWhenCoordinator
and
pushStateWhenCoordinatorTimeout
properties have been defined, but more could be added as
required by the user-defined class providing singleton store
functionality.
pushStateWhenCoordinator
allows the in-memory
state to be pushed to the cache store when a node becomes the
coordinator, as a result of the new election of coordinator due to a
cluster topology change. This can be very useful in situations where the
coordinator crashes and there's a gap in time until the new coordinator
is elected. During this time, if this property was set to
false
and the
cache was updated, these changes would never be persisted. Setting this
property to
true
would ensure that any changes during this process also
get stored in the cache loader. You would also want to set this property
to
true
if each node's cache loader is configured with a different
location. Default value is
true
.
pushStateWhenCoordinatorTimeout
is only relevant if
pushStateWhenCoordinator
is
true
in which case, sets the maximum number of milliseconds that the process
of pushing the in-memory state to the underlying cache loader should take,
reporting a
PushStateException
if exceeded. Default value is 20000.
Note on using the
singletonStore
element:
setting
up a cache loader as a singleton and using cache passivation (via
evictions) can lead to undesired effects. If a node is to be passivated
as a result of an eviction, while the cluster is in the process of
electing a new coordinator, the data will be lost. This is because no
coordinator is active at that time and therefore, none of the nodes in
the cluster will store the passivated node. A new coordinator is elected
in the cluster when either, the coordinator leaves the cluster, the
coordinator crashes or stops responding.