package org.infinispan.commands.write; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; import org.infinispan.commands.remote.BaseRpcCommand; import org.infinispan.util.ByteString; import org.infinispan.util.concurrent.CommandAckCollector; /** * A command that represents an acknowledge sent by a backup owner to the originator. * <p> * The acknowledge signals a successful execution of a multi-key command, like {@link PutMapCommand}. It contains the * segments ids of the updated keys. * * @author Pedro Ruivo * @since 9.0 */ public class BackupMultiKeyAckCommand extends BaseRpcCommand { public static final byte COMMAND_ID = 41; private CommandAckCollector commandAckCollector; private int segment; private long id; private int topologyId; public BackupMultiKeyAckCommand() { super(null); } public BackupMultiKeyAckCommand(ByteString cacheName) { super(cacheName); } public BackupMultiKeyAckCommand(ByteString cacheName, long id, int segment, int topologyId) { super(cacheName); this.id = id; this.segment = segment; this.topologyId = topologyId; } public void ack() { commandAckCollector.multiKeyBackupAck(id, getOrigin(), segment, topologyId); } @Override public byte getCommandId() { return COMMAND_ID; } @Override public boolean isReturnValueExpected() { return false; } @Override public boolean canBlock() { return false; } @Override public void writeTo(ObjectOutput output) throws IOException { output.writeLong(id); output.writeInt(segment); output.writeInt(topologyId); } @Override public void readFrom(ObjectInput input) throws IOException, ClassNotFoundException { id = input.readLong(); segment = input.readInt(); topologyId = input.readInt(); } public void setCommandAckCollector(CommandAckCollector commandAckCollector) { this.commandAckCollector = commandAckCollector; } @Override public String toString() { return "BackupMultiKeyAckCommand{" + "id=" + id + ", segment=" + segment + ", topologyId=" + topologyId + '}'; } }