package voldemort.server.protocol.vold;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import voldemort.VoldemortException;
import voldemort.store.Store;
import voldemort.utils.ByteArray;
import voldemort.utils.ByteUtils;
import voldemort.versioning.VectorClock;
import voldemort.versioning.Versioned;
public class PutRequestHandler extends ClientRequestHandler {
ByteArray key;
byte[] value;
byte[] transforms;
VectorClock clock;
public PutRequestHandler(Store<ByteArray, byte[], byte[]> store, int protocolVersion) {
super(store, protocolVersion);
}
public static boolean isCompleteRequest(DataInputStream inputStream,
ByteBuffer buffer,
int protocolVersion)
throws IOException, VoldemortException {
if(!ClientRequestHandler.skipByteArray(inputStream, buffer))
return false;
if(!ClientRequestHandler.skipByteArray(inputStream, buffer))
return false;
ClientRequestHandler.readSingleTransform(inputStream, protocolVersion);
return true;
}
@Override
public boolean parseRequest(DataInputStream inputStream) throws IOException {
key = ClientRequestHandler.readKey(inputStream);
int valueSize = inputStream.readInt();
clock = VectorClock.createVectorClock(inputStream);
int vectorClockSize = clock.sizeInBytes();
value = new byte[valueSize - vectorClockSize];
ByteUtils.read(inputStream, value);
transforms = ClientRequestHandler.readSingleTransform(inputStream, protocolVersion);
return false;
}
@Override
public void processRequest() throws VoldemortException {
store.put(key, new Versioned<byte[]>(value, clock), transforms);
}
@Override
public void writeResponse(DataOutputStream outputStream) throws IOException {
outputStream.writeShort(0);
}
@Override
public int getResponseSize() {
return 2;
}
@Override
public String getDebugMessage() {
return "Operation PUT " + ClientRequestHandler.getDebugMessageForKey(key) + " ValueHash"
+ (value == null ? "null" : value.hashCode()) + " ClockSize " + clock.sizeInBytes()
+ " ValueSize " + (value == null ? "null" : value.length);
}
}