Package org.infinispan.commands.write
Class PutMapCommand
- java.lang.Object
-
- org.infinispan.commands.AbstractFlagAffectedCommand
-
- org.infinispan.commands.AbstractTopologyAffectedCommand
-
- org.infinispan.commands.write.PutMapCommand
-
- All Implemented Interfaces:
FlagAffectedCommand
,MetadataAwareCommand
,ReplicableCommand
,TopologyAffectedCommand
,VisitableCommand
,WriteCommand
,RemoteLockCommand
public class PutMapCommand extends AbstractTopologyAffectedCommand implements WriteCommand, MetadataAwareCommand, RemoteLockCommand
A command writing multiple key/value pairs with the same metadata.Note: In scattered caches, push state transfer uses
PutMapCommand
but wraps the values inInternalCacheValue
instances in order to preserve the original metadata and timestamps.- Since:
- 4.0
- Author:
- Mircea.Markus@jboss.com
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.infinispan.commands.VisitableCommand
VisitableCommand.LoadType
-
-
Field Summary
Fields Modifier and Type Field Description static byte
COMMAND_ID
-
Constructor Summary
Constructors Constructor Description PutMapCommand()
PutMapCommand(Map<?,?> map, CacheNotifier notifier, Metadata metadata, long flagsBitSet, CommandInvocationId commandInvocationId)
PutMapCommand(PutMapCommand command)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Object
acceptVisitor(InvocationContext ctx, Visitor visitor)
Accept a visitor, and return the result of accepting this visitor.boolean
canBlock()
If true, the command is processed asynchronously in a thread provided by an Infinispan thread pool.boolean
equals(Object o)
void
fail()
Make subsequent invocations ofWriteCommand.isSuccessful()
returnfalse
.Collection<?>
getAffectedKeys()
byte
getCommandId()
Used by marshallers to convert this command into an id for streaming.CommandInvocationId
getCommandInvocationId()
Object
getKeyLockOwner()
It returns the lock owner of the key.Collection<?>
getKeysToLock()
It returns aCollection
with the keys to be lock.Map<Object,Object>
getMap()
Metadata
getMetadata()
Get metadata of this command.ValueMatcher
getValueMatcher()
int
hashCode()
boolean
hasSkipLocking()
It checks if this command should acquire locks.boolean
hasZeroLockAcquisition()
void
init(CacheNotifier<Object,Object> notifier)
boolean
isConditional()
Certain commands only work based on a certain condition or state of the cache.boolean
isForwarded()
For non transactional caches that support concurrent writes (default), the commands are forwarded between nodes, e.g.: - commands is executed on node A, but some of the keys should be locked on node B - the command is send to the main owner (B) - B tries to acquire lock on the keys it owns, then forwards the commands to the other owners as well - at this last stage, the command has the "isForwarded" flag set to true.boolean
isReturnValueExpected()
If true, a return value will be provided when performed remotely.boolean
isSuccessful()
Some commands may want to provide information on whether the command was successful or not.VisitableCommand.LoadType
loadType()
Object
perform(InvocationContext ctx)
Performs the primary function of the command.void
readFrom(ObjectInput input)
Reads this instance from the stream written byReplicableCommand.writeTo(ObjectOutput)
.void
setForwarded(boolean forwarded)
void
setMap(Map<Object,Object> map)
void
setMetadata(Metadata metadata)
Sets metadata for this command.void
setValueMatcher(ValueMatcher valueMatcher)
String
toString()
PutMapCommand
withMap(Map<Object,Object> map)
void
writeTo(ObjectOutput output)
Writes this instance to theObjectOutput
.-
Methods inherited from class org.infinispan.commands.AbstractTopologyAffectedCommand
getTopologyId, setTopologyId
-
Methods inherited from class org.infinispan.commands.AbstractFlagAffectedCommand
getFlagsBitSet, hasSameFlags, printFlags, setFlagsBitSet
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.infinispan.commands.FlagAffectedCommand
addFlag, addFlags, addFlags, getFlags, getFlagsBitSet, hasAllFlags, hasAnyFlag, hasFlag, setFlags, setFlagsBitSet
-
Methods inherited from interface org.infinispan.commands.ReplicableCommand
invoke, invokeAsync, setOrigin
-
Methods inherited from interface org.infinispan.commands.TopologyAffectedCommand
getTopologyId, setTopologyId
-
Methods inherited from interface org.infinispan.commands.VisitableCommand
ignoreCommandOnStatus, shouldInvoke
-
Methods inherited from interface org.infinispan.commands.write.WriteCommand
isWriteOnly, updateStatusFromRemoteResponse
-
-
-
-
Field Detail
-
COMMAND_ID
public static final byte COMMAND_ID
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
PutMapCommand
public PutMapCommand()
-
PutMapCommand
public PutMapCommand(Map<?,?> map, CacheNotifier notifier, Metadata metadata, long flagsBitSet, CommandInvocationId commandInvocationId)
-
PutMapCommand
public PutMapCommand(PutMapCommand command)
-
-
Method Detail
-
getCommandInvocationId
public CommandInvocationId getCommandInvocationId()
- Specified by:
getCommandInvocationId
in interfaceWriteCommand
- Returns:
- the
CommandInvocationId
associated to the command.
-
init
public void init(CacheNotifier<Object,Object> notifier)
-
acceptVisitor
public Object acceptVisitor(InvocationContext ctx, Visitor visitor) throws Throwable
Description copied from interface:VisitableCommand
Accept a visitor, and return the result of accepting this visitor.- Specified by:
acceptVisitor
in interfaceVisitableCommand
- Parameters:
ctx
- invocation contextvisitor
- visitor to accept- Returns:
- arbitrary return value
- Throws:
Throwable
- in the event of problems
-
getKeysToLock
public Collection<?> getKeysToLock()
Description copied from interface:RemoteLockCommand
It returns aCollection
with the keys to be lock.It may return an empty collection if no keys needs to be locked independently of the return value of
RemoteLockCommand.hasSkipLocking()
. It may contains duplicated keys andnull
is not a valid return value.- Specified by:
getKeysToLock
in interfaceRemoteLockCommand
- Returns:
- a
Collection
of keys to lock.
-
getKeyLockOwner
public Object getKeyLockOwner()
Description copied from interface:RemoteLockCommand
It returns the lock owner of the key.Usually, in transaction caches it is the
GlobalTransaction
and in non-transactional caches theCommandInvocationId
.- Specified by:
getKeyLockOwner
in interfaceRemoteLockCommand
- Returns:
- the lock owner of the key.
-
hasZeroLockAcquisition
public boolean hasZeroLockAcquisition()
- Specified by:
hasZeroLockAcquisition
in interfaceRemoteLockCommand
- Returns:
- it the locks should be acquire with 0 (zero) acquisition timeout.
-
hasSkipLocking
public boolean hasSkipLocking()
Description copied from interface:RemoteLockCommand
It checks if this command should acquire locks.- Specified by:
hasSkipLocking
in interfaceRemoteLockCommand
- Returns:
true
if locks should be acquired for the keys inRemoteLockCommand.getKeysToLock()
.
-
perform
public Object perform(InvocationContext ctx) throws Throwable
Description copied from interface:VisitableCommand
Performs the primary function of the command. Please see specific implementation classes for details on what is performed as well as return types. Important: this method will be invoked at the end of interceptors chain. It should never be called directly from a custom interceptor.- Specified by:
perform
in interfaceReplicableCommand
- Specified by:
perform
in interfaceVisitableCommand
- Parameters:
ctx
- invocation context- Returns:
- arbitrary return value generated by performing this command
- Throws:
Throwable
- in the event of problems.
-
withMap
public final PutMapCommand withMap(Map<Object,Object> map)
-
getCommandId
public byte getCommandId()
Description copied from interface:ReplicableCommand
Used by marshallers to convert this command into an id for streaming.- Specified by:
getCommandId
in interfaceReplicableCommand
- Returns:
- the method id of this command. This is compatible with pre-2.2.0 MethodCall ids.
-
writeTo
public void writeTo(ObjectOutput output) throws IOException
Description copied from interface:ReplicableCommand
Writes this instance to theObjectOutput
.- Specified by:
writeTo
in interfaceReplicableCommand
- Parameters:
output
- the stream.- Throws:
IOException
- if an error occurred during the I/O.
-
readFrom
public void readFrom(ObjectInput input) throws IOException, ClassNotFoundException
Description copied from interface:ReplicableCommand
Reads this instance from the stream written byReplicableCommand.writeTo(ObjectOutput)
.- Specified by:
readFrom
in interfaceReplicableCommand
- Parameters:
input
- the stream to read.- Throws:
IOException
- if an error occurred during the I/O.ClassNotFoundException
- if it tries to load an undefined class.
-
isSuccessful
public boolean isSuccessful()
Description copied from interface:WriteCommand
Some commands may want to provide information on whether the command was successful or not. This is different from a failure, which usually would result in an exception being thrown. An example is a putIfAbsent() not doing anything because the key in question was present. This would result in a isSuccessful() call returning false.- Specified by:
isSuccessful
in interfaceReplicableCommand
- Specified by:
isSuccessful
in interfaceWriteCommand
- Returns:
- true if the command completed successfully, false otherwise.
-
isConditional
public boolean isConditional()
Description copied from interface:WriteCommand
Certain commands only work based on a certain condition or state of the cache. For example,ConcurrentMap.putIfAbsent(Object, Object)
only does anything if a condition is met, i.e., the entry in question is not already present. This method tests whether the command in question is conditional or not.- Specified by:
isConditional
in interfaceWriteCommand
- Returns:
- true if the command is conditional, false otherwise
-
getValueMatcher
public ValueMatcher getValueMatcher()
- Specified by:
getValueMatcher
in interfaceWriteCommand
- Returns:
- The current value matching policy.
-
setValueMatcher
public void setValueMatcher(ValueMatcher valueMatcher)
- Specified by:
setValueMatcher
in interfaceWriteCommand
- Parameters:
valueMatcher
- The new value matching policy.
-
getAffectedKeys
public Collection<?> getAffectedKeys()
- Specified by:
getAffectedKeys
in interfaceWriteCommand
- Returns:
- a collection of keys affected by this write command. Some commands - such as ClearCommand - may return an empty collection for this method.
-
fail
public void fail()
Description copied from interface:WriteCommand
Make subsequent invocations ofWriteCommand.isSuccessful()
returnfalse
.- Specified by:
fail
in interfaceWriteCommand
-
isReturnValueExpected
public boolean isReturnValueExpected()
Description copied from interface:ReplicableCommand
If true, a return value will be provided when performed remotely. Otherwise, a remoteResponseGenerator
may choose to simply return null to save on marshalling costs.- Specified by:
isReturnValueExpected
in interfaceReplicableCommand
- Returns:
- true or false
-
canBlock
public boolean canBlock()
Description copied from interface:ReplicableCommand
If true, the command is processed asynchronously in a thread provided by an Infinispan thread pool. Otherwise, the command is processed directly in the JGroups thread. This feature allows to avoid keep a JGroups thread busy that can originate discard of messages and retransmissions. So, the commands that can block (waiting for some state, acquiring locks, etc.) should return true.- Specified by:
canBlock
in interfaceReplicableCommand
- Returns:
true
if the command can block/wait,false
otherwise
-
loadType
public VisitableCommand.LoadType loadType()
- Specified by:
loadType
in interfaceVisitableCommand
- Returns:
- Nodes on which the command needs to read the previous values of the keys it acts on.
-
getMetadata
public Metadata getMetadata()
Description copied from interface:MetadataAwareCommand
Get metadata of this command.- Specified by:
getMetadata
in interfaceMetadataAwareCommand
- Returns:
- an instance of Metadata
-
setMetadata
public void setMetadata(Metadata metadata)
Description copied from interface:MetadataAwareCommand
Sets metadata for this command.- Specified by:
setMetadata
in interfaceMetadataAwareCommand
-
isForwarded
public boolean isForwarded()
For non transactional caches that support concurrent writes (default), the commands are forwarded between nodes, e.g.: - commands is executed on node A, but some of the keys should be locked on node B - the command is send to the main owner (B) - B tries to acquire lock on the keys it owns, then forwards the commands to the other owners as well - at this last stage, the command has the "isForwarded" flag set to true.
-
setForwarded
public void setForwarded(boolean forwarded)
- See Also:
isForwarded()
-
-