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.VectorClock;
import voldemort.versioning.Version;
public class GetVersionRequestHandler extends ClientRequestHandler {
ByteArray key;
List<Version> results;
public GetVersionRequestHandler(Store<ByteArray, byte[], byte[]> store, int protocolVersion) {
super(store, protocolVersion);
}
public static boolean isCompleteRequest(DataInputStream inputStream, ByteBuffer buffer)
throws IOException, VoldemortException {
// skip the key
return ClientRequestHandler.skipByteArray(inputStream, buffer);
}
@Override
public boolean parseRequest(DataInputStream inputStream) throws IOException {
key = ClientRequestHandler.readKey(inputStream);
return true;
}
@Override
public void processRequest() throws VoldemortException {
results = store.getVersions(key);
}
@Override
public void writeResponse(DataOutputStream outputStream) throws IOException {
outputStream.writeShort(0);
outputStream.writeInt(results.size());
for(Version v: results) {
byte[] clock = ((VectorClock) v).toBytes();
outputStream.writeInt(clock.length);
outputStream.write(clock);
}
}
@Override
public int getResponseSize() {
int size = 2 + 4;
for(Version v: results) {
size += 4 + ((VectorClock) v).sizeInBytes();
}
return size;
}
@Override
public String getDebugMessage() {
return "Operation GetVersion" + ClientRequestHandler.getDebugMessageForKey(key);
}
}