public class RetryingEntryWrappingInterceptor extends EntryWrappingInterceptor
ScatteredDistributionInterceptor
before replicating the change from primary owner.
When the ScatteredDistributionInterceptor
throws a ConcurrentChangeException
during single-key
command processing, we know that the entry has not been committed and can safely remove the whole entry from context
and retry.
When the command processes multiple keys, some of the entries might be already committed. Therefore we have to keep
the original value in a RepeatableReadEntry
and for committed entries we
only reset the value before retry (we assume that the outcome of an operation is deterministic). The non-committed
entries are removed and re-wrapped as in the single-key case.cdl, distributionManager
cacheConfiguration
Constructor and Description |
---|
RetryingEntryWrappingInterceptor() |
Modifier and Type | Method and Description |
---|---|
protected Object |
setSkipRemoteGetsAndInvokeNextForDataCommand(InvocationContext ctx,
DataWriteCommand command,
CompletionStage<Void> delay)
Locks the value for the keys accessed by the command to avoid being override from a remote get.
|
protected Object |
setSkipRemoteGetsAndInvokeNextForManyEntriesCommand(InvocationContext ctx,
WriteCommand command,
CompletionStage<Void> delay)
Locks the value for the keys accessed by the command to avoid being override from a remote get.
|
canRead, canReadKey, commitContextEntries, commitContextEntry, start, visitClearCommand, visitCommitCommand, visitComputeCommand, visitComputeIfAbsentCommand, visitEvictCommand, visitGetAllCommand, visitGetCacheEntryCommand, visitGetKeysInGroupCommand, visitGetKeyValueCommand, visitInvalidateCommand, visitInvalidateL1Command, visitPrepareCommand, visitPutKeyValueCommand, visitPutMapCommand, visitReadOnlyKeyCommand, visitReadOnlyManyCommand, visitReadWriteKeyCommand, visitReadWriteKeyValueCommand, visitReadWriteManyCommand, visitReadWriteManyEntriesCommand, visitRemoveCommand, visitRemoveExpiredCommand, visitReplaceCommand, visitWriteOnlyKeyCommand, visitWriteOnlyKeyValueCommand, visitWriteOnlyManyCommand, visitWriteOnlyManyEntriesCommand, wrapEntriesForPrepareAndApply
handleDefault, visitCommand, visitEntrySetCommand, visitKeySetCommand, visitLockControlCommand, visitRollbackCommand, visitSizeCommand, visitUnknownCommand
asyncInvokeNext, asyncInvokeNext, asyncInvokeNext, asyncValue, delayedNull, delayedValue, delayedValue, invokeNext, invokeNextAndExceptionally, invokeNextAndFinally, invokeNextAndHandle, invokeNextThenAccept, invokeNextThenApply, isSuccessfullyDone, makeStage, setNextInterceptor, valueOrException
protected Object setSkipRemoteGetsAndInvokeNextForDataCommand(InvocationContext ctx, DataWriteCommand command, CompletionStage<Void> delay)
EntryWrappingInterceptor
setSkipRemoteGetsAndInvokeNextForDataCommand
in class EntryWrappingInterceptor
protected Object setSkipRemoteGetsAndInvokeNextForManyEntriesCommand(InvocationContext ctx, WriteCommand command, CompletionStage<Void> delay)
EntryWrappingInterceptor
setSkipRemoteGetsAndInvokeNextForManyEntriesCommand
in class EntryWrappingInterceptor
Copyright © 2021 JBoss by Red Hat. All rights reserved.