in folsom/src/main/java/com/spotify/folsom/client/binary/MultigetRequest.java [55:94]
public ByteBuf writeRequest(final ByteBufAllocator alloc, final ByteBuffer dst) {
final int numKeys = keys.size();
int expiration;
int extrasLength;
final boolean hasTTL = ttl > 0;
if (hasTTL) {
expiration = Utils.ttlToExpiration(ttl);
extrasLength = 4;
} else {
expiration = 0;
extrasLength = 0;
}
int multigetOpaque = opaque;
int sequenceNumber = numKeys;
for (final byte[] key : keys) {
final int keyLength = key.length;
final int totalLength = keyLength + extrasLength;
final int opaque = multigetOpaque | --sequenceNumber;
dst.put(MAGIC_NUMBER);
dst.put(sequenceNumber == 0 ? OpCode.GET.value() : OpCode.GETQ.value());
dst.putShort((short) keyLength); // byte 2-3
dst.put((byte) extrasLength); // byte 4
dst.put((byte) 0); // byte 5-7, Data type, Reserved
dst.put((byte) 0); // byte 5-7, Data type, Reserved
dst.put((byte) 0); // byte 5-7, Data type, Reserved
dst.putInt(totalLength); // byte 8-11
dst.putInt(opaque); // byte 12-15, Opaque
dst.putLong((long) 0); // byte 16-23, CAS
if (hasTTL) {
dst.putInt(expiration);
}
dst.put(key);
}
return toBuffer(alloc, dst);
}