package voldemort.server.protocol.vold;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.List;
import voldemort.VoldemortException;
import voldemort.store.Store;
import voldemort.utils.ByteArray;
import voldemort.versioning.Versioned;
public class GetRequestHandler extends ClientRequestHandler {
ByteArray key;
byte[] transforms;
List<Versioned<byte[]>> results;
public static boolean isCompleteRequest(DataInputStream inputStream,
ByteBuffer buffer,
int protocolVersion) throws IOException,
VoldemortException {
if(ClientRequestHandler.skipByteArray(inputStream, buffer)) {
ClientRequestHandler.readSingleTransform(inputStream, protocolVersion);
return true;
}
return false;
}
public GetRequestHandler(Store<ByteArray, byte[], byte[]> store, int protocolVersion) {
super(store, protocolVersion);
}
@Override
public boolean parseRequest(DataInputStream inputStream) throws IOException {
key = ClientRequestHandler.readKey(inputStream);
transforms = ClientRequestHandler.readSingleTransform(inputStream, protocolVersion);
return true;
}
@Override
public void processRequest() {
results = store.get(key, transforms);
}
@Override
public void writeResponse(DataOutputStream outputStream) throws IOException {
outputStream.writeShort(0);
ClientRequestHandler.writeResults(outputStream, results);
}
@Override
public int getResponseSize() {
return 2 + ClientRequestHandler.getResultsSize(results);
}
@Override
public String getDebugMessage() {
return "Operation GET " + ClientRequestHandler.getDebugMessageForKey(key)
+ ClientRequestHandler.getDebugMessageForValue(results);
}
}