Class DefaultIracManager
- All Implemented Interfaces:
JmxStatisticsExposer
,IracManager
IracManager
.
It tracks the keys updated by this site and sends them, periodically, to the configured remote sites.
The primary owner coordinates everything. It sends the updates request to the remote site and coordinates the local site backup owners. After sending the updates to the remote site, it sends a cleanup request to the local site backup owners
The backup owners only keeps a backup list of the tracked keys.
On topology change, the updated keys list is replicate to the new owner(s). Also, if a segment is being transferred (i.e. the primary owner isn't a write and read owner), no updates to the remote site is sent since, most likely, the node doesn't have the most up-to-date value.
- Since:
- 11.0
- Author:
- Pedro Ruivo
-
Constructor Summary
ConstructorDescriptionDefaultIracManager
(Configuration config, Collection<IracXSiteBackup> backups) -
Method Summary
Modifier and TypeMethodDescriptionChecks if the given key is expired on all other sites.boolean
containsKey
(Object key) Checks if the key is present.long
long
long
long
long
int
int
boolean
Returns whether an interceptor's statistics are being captured.long
void
Increase the count of conflicts if merge policy discard update (local value wins)void
Increase the count of conflicts if merge policy created a new value (merge remote value with local value)void
Increase the count of conflicts if merge policy applies update (remote value wins)void
Increase the count of discards.void
inject
(ScheduledExecutorService executorService, Executor blockingExecutor) boolean
isEmpty()
boolean
void
onTopologyUpdate
(CacheTopology oldCacheTopology, CacheTopology newCacheTopology) Notifies a topology changed.void
receiveState
(int segment, Object key, Object lockOwner, IracMetadata tombstone) Receives the state related to thekey
.void
removeState
(IracManagerKeyInfo state) Removes the state associated to a single key.void
requestState
(Address requestor, IntSet segments) Requests the state stored in this instance for the givensegments
.void
Resets statistics gathered.void
setBackOff
(Function<IracXSiteBackup, ExponentialBackOff> builder) void
setStatisticsEnabled
(boolean enabled) Enables an interceptor's cache statistics If true, the interceptor will capture statistics and make them available through the mbean.void
start()
void
trackClear
(boolean sendClear) Sets all keys as removed.void
trackExpiredKey
(int segment, Object key, Object lockOwner) Similar toIracManager.trackUpdatedKey(int, Object, Object)
but it tracks expired keys instead.trackForStateTransfer
(Collection<XSiteState> stateList) Tracks a set of keys to be sent to the remote site.void
trackUpdatedKey
(int segment, Object key, Object lockOwner) Sets thekey
as changed by thelockOwner
.
-
Constructor Details
-
DefaultIracManager
-
-
Method Details
-
inject
-
start
public void start() -
trackUpdatedKey
Description copied from interface:IracManager
Sets thekey
as changed by thelockOwner
.- Specified by:
trackUpdatedKey
in interfaceIracManager
- Parameters:
segment
- The key's segment.key
- The key changed.lockOwner
- The lock owner who updated the key.
-
trackExpiredKey
Description copied from interface:IracManager
Similar toIracManager.trackUpdatedKey(int, Object, Object)
but it tracks expired keys instead.Expired key need a different conflict resolution algorithm since remove expired should never win any conflict.
- Specified by:
trackExpiredKey
in interfaceIracManager
- Parameters:
segment
- The key's segment.key
- The key expired.lockOwner
- The lock owner who updated the key.
-
trackForStateTransfer
Description copied from interface:IracManager
Tracks a set of keys to be sent to the remote site.There is no much difference between this method and
IracManager.trackUpdatedKey(int, Object, Object)
. It just returns aCompletionStage
to notify when the keys were sent. It is required by the cross-site state transfer protocol to know when it has finish.- Specified by:
trackForStateTransfer
in interfaceIracManager
- Parameters:
stateList
- The list ofXSiteState
.- Returns:
- A
CompletionStage
which is completed when all the keys instateList
have been sent to the remote site.
-
trackClear
public void trackClear(boolean sendClear) Description copied from interface:IracManager
Sets all keys as removed.- Specified by:
trackClear
in interfaceIracManager
- Parameters:
sendClear
- iftrue
, anIracClearKeysRequest
is sent to the backup sites.
-
removeState
Description copied from interface:IracManager
Removes the state associated to a single key.- Specified by:
removeState
in interfaceIracManager
- Parameters:
state
- The state to remove.
-
onTopologyUpdate
Description copied from interface:IracManager
Notifies a topology changed.- Specified by:
onTopologyUpdate
in interfaceIracManager
- Parameters:
oldCacheTopology
- The oldCacheTopology
.newCacheTopology
- The newCacheTopology
.
-
requestState
Description copied from interface:IracManager
Requests the state stored in this instance for the givensegments
.- Specified by:
requestState
in interfaceIracManager
- Parameters:
requestor
- The requestor.segments
- The segments requested.
-
receiveState
Description copied from interface:IracManager
Receives the state related to thekey
.- Specified by:
receiveState
in interfaceIracManager
- Parameters:
segment
- The key's segment.key
- The key modified.lockOwner
- The lastlockOwner
.tombstone
- The tombstone (can benull
)
-
checkAndTrackExpiration
Description copied from interface:IracManager
Checks if the given key is expired on all other sites. If the key is expired on all other sites this will return true- Specified by:
checkAndTrackExpiration
in interfaceIracManager
- Parameters:
key
- The key to check if it is expired or not- Returns:
- Whether this key is expired on all other sites
-
setBackOff
-
isEmpty
public boolean isEmpty() -
getQueueSize
@ManagedAttribute(description="Number of keys that need to be sent to remote site(s)", displayName="Queue size", measurementType=DYNAMIC) public int getQueueSize() -
getNumberOfTombstones
@ManagedAttribute(description="Number of tombstones stored", displayName="Number of tombstones", measurementType=DYNAMIC) public int getNumberOfTombstones() -
getNumberOfConflicts
@ManagedAttribute(description="The total number of conflicts between local and remote sites.", displayName="Number of conflicts", measurementType=TRENDSUP) public long getNumberOfConflicts() -
getNumberOfDiscards
@ManagedAttribute(description="The number of updates from remote sites discarded (duplicate or old update).", displayName="Number of discards", measurementType=TRENDSUP) public long getNumberOfDiscards() -
getNumberOfConflictsLocalWins
@ManagedAttribute(description="The number of conflicts where the merge policy discards the remote update.", displayName="Number of conflicts where local value is used", measurementType=TRENDSUP) public long getNumberOfConflictsLocalWins() -
getNumberOfConflictsRemoteWins
@ManagedAttribute(description="The number of conflicts where the merge policy applies the remote update.", displayName="Number of conflicts where remote value is used", measurementType=TRENDSUP) public long getNumberOfConflictsRemoteWins() -
getNumberOfConflictsMerged
@ManagedAttribute(description="Number of conflicts where the merge policy created a new entry.", displayName="Number of conflicts merged", measurementType=TRENDSUP) public long getNumberOfConflictsMerged() -
isTombstoneCleanupTaskRunning
@ManagedAttribute(description="Is tombstone cleanup task running?", displayName="Tombstone cleanup task running", dataType=TRAIT) public boolean isTombstoneCleanupTaskRunning() -
getTombstoneCleanupTaskCurrentDelay
@ManagedAttribute(description="Current delay in milliseconds between tombstone cleanup tasks", displayName="Delay between tombstone cleanup tasks", measurementType=DYNAMIC) public long getTombstoneCleanupTaskCurrentDelay() -
getStatisticsEnabled
@ManagedAttribute(description="Enables or disables the gathering of statistics by this component", writable=true) public boolean getStatisticsEnabled()Description copied from interface:JmxStatisticsExposer
Returns whether an interceptor's statistics are being captured.- Specified by:
getStatisticsEnabled
in interfaceJmxStatisticsExposer
- Returns:
- true if statistics are captured
-
setStatisticsEnabled
public void setStatisticsEnabled(boolean enabled) Description copied from interface:JmxStatisticsExposer
Enables an interceptor's cache statistics If true, the interceptor will capture statistics and make them available through the mbean.- Specified by:
setStatisticsEnabled
in interfaceJmxStatisticsExposer
- Parameters:
enabled
- whether gathering statistics for JMX are enabled.
-
resetStatistics
@ManagedOperation(displayName="Reset Statistics", description="Resets statistics gathered by this component") public void resetStatistics()Resets statistics gathered. Is a no-op, and should be overridden if it is to be meaningful.- Specified by:
resetStatistics
in interfaceJmxStatisticsExposer
-
incrementNumberOfDiscards
public void incrementNumberOfDiscards()Description copied from interface:IracManager
Increase the count of discards.- Specified by:
incrementNumberOfDiscards
in interfaceIracManager
-
incrementNumberOfConflictLocalWins
public void incrementNumberOfConflictLocalWins()Description copied from interface:IracManager
Increase the count of conflicts if merge policy discard update (local value wins)- Specified by:
incrementNumberOfConflictLocalWins
in interfaceIracManager
-
incrementNumberOfConflictRemoteWins
public void incrementNumberOfConflictRemoteWins()Description copied from interface:IracManager
Increase the count of conflicts if merge policy applies update (remote value wins)- Specified by:
incrementNumberOfConflictRemoteWins
in interfaceIracManager
-
incrementNumberOfConflictMerged
public void incrementNumberOfConflictMerged()Description copied from interface:IracManager
Increase the count of conflicts if merge policy created a new value (merge remote value with local value)- Specified by:
incrementNumberOfConflictMerged
in interfaceIracManager
-
containsKey
Description copied from interface:IracManager
Checks if the key is present.A key is present as long as its latest update was not confirmed by all remote sites.
- Specified by:
containsKey
in interfaceIracManager
- Parameters:
key
- The key to check.- Returns:
true
if the key is present.
-