public static void main(String[] args) { byte[] bytes = new byte[50]; long sequenceId = Long.MAX_VALUE; addHeadTailMarkers(bytes); addSequenceId(bytes, sequenceId); writeLong(bytes, 3, sequenceId); writeLong(bytes, bytes.length - (8 + 3), sequenceId); LOGGER.info(toHexString(bytes)); checkHeadTailMarkers(bytes); } }
private void checkPayloadContent(Packet packet) { byte[] payload = packet.toByteArray(); int foundPayloadSize = payload == null ? 0 : payload.length; if (foundPayloadSize <= 0) { return; } checkHeadTailMarkers(payload); if (!trackSequenceId) { return; } AtomicLong sequenceCounter = sequenceCounterMap.get(packet.getConn()); if (sequenceCounter == null) { AtomicLong newSequenceCounter = new AtomicLong(0); sequenceCounter = sequenceCounterMap.putIfAbsent(packet.getConn(), newSequenceCounter); if (sequenceCounter == null) { sequenceCounter = newSequenceCounter; } } long foundSequence = readLong(payload, 3); long expectedSequence = sequenceCounter.get() + 1; if (expectedSequence != foundSequence) { throw new IllegalArgumentException("Unexpected sequence id, expected: " + expectedSequence + "found: " + foundSequence); } sequenceCounter.set(expectedSequence); }
public static byte[] makePayload(int payloadSize) { if (payloadSize <= 0) { return null; } byte[] payload = new byte[payloadSize]; // put a well known head and tail on the payload; for debugging. if (payload.length >= 6 + 8) { addHeadTailMarkers(payload); } return payload; }
public static void check(byte[] payload, int index, int value) { byte found = payload[index]; if (found != value) { throw new IllegalStateException(format( "invalid byte at index:%d, found:%02X, expected:%02X payload=", index, found, value) + toHexString(payload)); } }
@Override public boolean onWrite(Packet packet, ByteBuffer dst) throws Exception { if (currentPacket == null && !packet.isHeaderSet(HEADER_BIND) && packet.dataSize() > 100) { currentPacket = packet; addSequenceId(packet.toByteArray(), sequenceId); sequenceId++; } boolean completed = packet.writeTo(dst); if (completed) { currentPacket = null; } return completed; } }
@TimeStep public void timeStep(ThreadState state) throws Exception { if (state.responseFuture.thread == null) { state.responseFuture.thread = Thread.currentThread(); } Connection connection = state.nextConnection(); byte[] payload = makePayload(payloadSize); Packet requestPacket = new Packet(payload, state.workerId); if (!connection.write(requestPacket)) { throw new TestException("Failed to write packet to connection %s", connection); } try { state.responseFuture.get(requestTimeout, requestTimeUnit); } catch (Exception e) { throw new TestException("Failed to receive request from connection %s within timeout %d %s", connection, requestTimeout, requestTimeUnit, e); } state.responseFuture.reset(); }
private void checkPayloadContent(Packet packet) { byte[] payload = packet.toByteArray(); int foundPayloadSize = payload == null ? 0 : payload.length; if (foundPayloadSize <= 0) { return; } checkHeadTailMarkers(payload); if (!trackSequenceId) { return; } AtomicLong sequenceCounter = sequenceCounterMap.get(packet.getConn()); if (sequenceCounter == null) { AtomicLong newSequenceCounter = new AtomicLong(0); sequenceCounter = sequenceCounterMap.putIfAbsent(packet.getConn(), newSequenceCounter); if (sequenceCounter == null) { sequenceCounter = newSequenceCounter; } } long foundSequence = readLong(payload, 3); long expectedSequence = sequenceCounter.get() + 1; if (expectedSequence != foundSequence) { throw new IllegalArgumentException("Unexpected sequence id, expected: " + expectedSequence + "found: " + foundSequence); } sequenceCounter.set(expectedSequence); }
public static byte[] makePayload(int payloadSize) { if (payloadSize <= 0) { return null; } byte[] payload = new byte[payloadSize]; // put a well known head and tail on the payload; for debugging. if (payload.length >= 6 + 8) { addHeadTailMarkers(payload); } return payload; }
public static void check(byte[] payload, int index, int value) { byte found = payload[index]; if (found != value) { throw new IllegalStateException(format( "invalid byte at index:%d, found:%02X, expected:%02X payload=", index, found, value) + toHexString(payload)); } }
@Override public boolean onWrite(Packet packet, ByteBuffer dst) throws Exception { if (currentPacket == null && !packet.isFlagSet(FLAG_BIND) && packet.dataSize() > 100) { currentPacket = packet; addSequenceId(packet.toByteArray(), sequenceId); sequenceId++; } boolean completed = packet.writeTo(dst); if (completed) { currentPacket = null; } return completed; } }
@TimeStep public void timeStep(ThreadState state) throws Exception { if (state.responseFuture.thread == null) { state.responseFuture.thread = Thread.currentThread(); } Connection connection = state.nextConnection(); byte[] payload = makePayload(payloadSize); Packet requestPacket = new Packet(payload, state.workerId); if (!connection.write(requestPacket)) { throw new TestException("Failed to write packet to connection %s", connection); } try { state.responseFuture.get(requestTimeout, requestTimeUnit); } catch (Exception e) { throw new TestException("Failed to receive request from connection %s within timeout %d %s", connection, requestTimeout, requestTimeUnit, e); } state.responseFuture.reset(); }
public static void main(String[] args) { byte[] bytes = new byte[50]; long sequenceId = Long.MAX_VALUE; addHeadTailMarkers(bytes); addSequenceId(bytes, sequenceId); writeLong(bytes, 3, sequenceId); writeLong(bytes, bytes.length - (8 + 3), sequenceId); LOGGER.info(toHexString(bytes)); checkHeadTailMarkers(bytes); } }
private void checkPayloadContent(Packet packet) { byte[] payload = packet.toByteArray(); int foundPayloadSize = payload == null ? 0 : payload.length; if (foundPayloadSize <= 0) { return; } checkHeadTailMarkers(payload); if (!trackSequenceId) { return; } AtomicLong sequenceCounter = sequenceCounterMap.get(packet.getConn()); if (sequenceCounter == null) { AtomicLong newSequenceCounter = new AtomicLong(0); sequenceCounter = sequenceCounterMap.putIfAbsent(packet.getConn(), newSequenceCounter); if (sequenceCounter == null) { sequenceCounter = newSequenceCounter; } } long foundSequence = readLong(payload, 3); long expectedSequence = sequenceCounter.get() + 1; if (expectedSequence != foundSequence) { throw new IllegalArgumentException("Unexpected sequence id, expected: " + expectedSequence + "found: " + foundSequence); } sequenceCounter.set(expectedSequence); }
public static byte[] makePayload(int payloadSize) { if (payloadSize <= 0) { return null; } byte[] payload = new byte[payloadSize]; // put a well known head and tail on the payload; for debugging. if (payload.length >= 6 + 8) { addHeadTailMarkers(payload); } return payload; }
public static void check(byte[] payload, int index, int value) { byte found = payload[index]; if (found != value) { throw new IllegalStateException(format( "invalid byte at index:%d, found:%02X, expected:%02X payload=", index, found, value) + toHexString(payload)); } }