in folsom/src/main/java/com/spotify/folsom/client/binary/MultigetRequest.java [102:135]
public void handle(BinaryResponse replies, final HostAndPort server) throws IOException {
final int size = keys.size();
final List<GetResult<byte[]>> result = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
result.add(null);
}
int expectedOpaque = opaque;
for (final ResponsePacket reply : replies) {
if (OpCode.getKind(reply.opcode) != OpCode.GET) {
throw new IOException("Unmatched response");
}
final int opaque = reply.opaque & 0xFFFFFF00;
if (opaque != expectedOpaque) {
throw new IOException("messages out of order for " + getClass().getSimpleName());
}
final int sequenceCounter = reply.opaque & 0x000000FF;
int index = size - sequenceCounter - 1;
if (index < 0) {
throw new IOException("Invalid index: " + index);
}
if (reply.status == MemcacheStatus.OK) {
result.set(index, GetResult.success(reply.value, reply.cas, reply.flags));
} else if (reply.status == MemcacheStatus.KEY_NOT_FOUND) {
// No need to do anything
} else {
throw new IOException("Unexpected response: " + reply.status);
}
}
succeed(result);
}