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; public class DeleteRequestHandler extends ClientRequestHandler { ByteArray key; VectorClock version; boolean succeeded; public DeleteRequestHandler(Store<ByteArray, byte[], byte[]> store, int protocolVersion) { super(store, protocolVersion); } public static boolean isCompleteRequest(DataInputStream inputStream, ByteBuffer buffer) throws IOException, VoldemortException { // skip the key if(!ClientRequestHandler.skipByteArray(inputStream, buffer)) { return false; } // skip the version return ClientRequestHandler.skipByteArrayShort(inputStream, buffer); } @Override public boolean parseRequest(DataInputStream inputStream) throws IOException { key = ClientRequestHandler.readKey(inputStream); int versionSize = inputStream.readShort(); byte[] versionBytes = new byte[versionSize]; ByteUtils.read(inputStream, versionBytes); version = new VectorClock(versionBytes); return false; } @Override public void processRequest() throws VoldemortException { succeeded = store.delete(key, version); } @Override public void writeResponse(DataOutputStream outputStream) throws IOException { outputStream.writeShort(0); outputStream.writeBoolean(succeeded); } @Override public int getResponseSize() { return 2 + 1; } @Override public String getDebugMessage() { return "Operation DELETE " + ClientRequestHandler.getDebugMessageForKey(key) + " ClockSize " + version.sizeInBytes(); } }