@Override public void processDataStream(final InputStream chainInputStream, final OutputPort<IMonitoringRecord> outputPort) throws IOException { final BinaryValueDeserializer deserializer = BinaryValueDeserializer.create(this.buffer , this.registry); boolean endOfStreamReached = false; while (!endOfStreamReached) { byte[] bytes = this.buffer.array(); int bytesRead = chainInputStream.read(bytes, this.buffer.position(), this.buffer.remaining()); this.buffer.position(this.buffer.position() + bytesRead); while (bytesRead > 0) { bytes = this.buffer.array(); bytesRead = chainInputStream.read(bytes, this.buffer.position(), this.buffer.remaining()); if (bytesRead >= 0) { this.buffer.position(this.buffer.position() + bytesRead); } } if (bytesRead == -1) { endOfStreamReached = true; } this.processBuffer(deserializer, outputPort); if (endOfStreamReached) { chainInputStream.close(); } } }
/** * Factory method to create a binary value deserializer. * * @param buffer * serialization buffer * @param stringRegistry * the string registry used for the deserializer * @return the value deserializer */ public static BinaryValueDeserializer create(final ByteBuffer buffer, final ReaderRegistry<String> stringRegistry) { return new BinaryValueDeserializer(buffer, stringRegistry); }
@Override public <T extends Enum<T>> T getEnumeration(final Class<T> clazz) throws RecordInstantiationException { final int value = this.buffer.getInt(); return this.enumerationValueOf(clazz, value); }
@Override public boolean getBoolean() { // NOPMD return (this.getByte() == BinaryValueDeserializer.TRUE_VALUE); }
@Override public String getString() { final int stringId = this.getInt(); return this.stringRegistry.get(stringId); }
final BinaryValueDeserializer deserializer = BinaryValueDeserializer.create(this.buffer, this.stringRegistry);
final BinaryValueDeserializer deserializer = BinaryValueDeserializer.create(this.buffer, registry);
private void read(final ByteBuffer buffer) { final int clazzId = buffer.getInt(); final long loggingTimestamp = buffer.getLong(); try { // NOCS (Nested try-catch) // final IMonitoringRecord record = AbstractMonitoringRecord.createFromByteBuffer(clazzid, buffer, this.stringRegistry); final String recordClassName = this.stringRegistry.get(clazzId); final IRecordFactory<? extends IMonitoringRecord> recordFactory = this.cachedRecordFactoryCatalog.get(recordClassName); final IMonitoringRecord record = recordFactory.create(BinaryValueDeserializer.create(buffer, this.stringRegistry)); record.setLoggingTimestamp(loggingTimestamp); super.deliver(OUTPUT_PORT_NAME_RECORDS, record); } catch (final RecordInstantiationException ex) { this.logger.error("Failed to create record", ex); } }
private List<IMonitoringRecord> decodeMonitoringRecords(final ByteBuffer buffer, final ReaderRegistry<String> stringRegistry, final int endOffset) { final List<IMonitoringRecord> records = new ArrayList<>(); int currentOffset = buffer.position(); final CachedRecordFactoryCatalog recordFactoryCatalog = this.cachedRecordFactoryCatalog; while (currentOffset < endOffset) { final int recordTypeId = buffer.getInt(); final String recordTypeName = stringRegistry.get(recordTypeId); final long loggingTimestamp = buffer.getLong(); final IRecordFactory<? extends IMonitoringRecord> recordFactory = recordFactoryCatalog.get(recordTypeName); final IMonitoringRecord record = recordFactory .create(BinaryValueDeserializer.create(buffer, stringRegistry)); record.setLoggingTimestamp(loggingTimestamp); records.add(record); currentOffset = buffer.position(); } // The record data must end exactly at the given end offset if (currentOffset != endOffset) { throw new InvalidFormatException("Invalid record data found, should have ended at offset " + endOffset + ", but ended at offset " + currentOffset + "."); } return records; }
private void readRegularRecord(final ByteBuffer buffer) { final long registryId = buffer.getLong(); final int classId = buffer.getInt(); final long loggingTimestamp = buffer.getLong(); final ReaderRegistry<String> stringRegistry = this.getStringRegistry(registryId); try { final String recordClassName = stringRegistry.get(classId); final IRecordFactory<? extends IMonitoringRecord> recordFactory = this.cachedRecordFactoryCatalog.get(recordClassName); final IMonitoringRecord record = recordFactory.create(BinaryValueDeserializer.create(buffer, stringRegistry)); record.setLoggingTimestamp(loggingTimestamp); this.reader.deliverRecord(record); } catch (final RecordInstantiationException e) { LOGGER.error("Error instantiating record", e); } }
@Override protected final boolean onBufferReceived(final ByteBuffer buffer) { // identify record class if (buffer.remaining() < INT_BYTES) { return false; } final int clazzId = buffer.getInt(); // NOPMD (clazzId must be read before reading timestamp) // identify logging timestamp if (buffer.remaining() < LONG_BYTES) { return false; } final long loggingTimestamp = buffer.getLong(); // NOPMD (timestamp must be read before checking the buffer for record size) final String recordClassName = this.stringRegistry.get(clazzId); // identify record data final IRecordFactory<? extends IMonitoringRecord> recordFactory = this.recordFactories.get(recordClassName); if (buffer.remaining() < recordFactory.getRecordSizeInBytes()) { // includes the case where size is -1 return false; } try { final IMonitoringRecord record = recordFactory.create(BinaryValueDeserializer.create(buffer, this.stringRegistry)); record.setLoggingTimestamp(loggingTimestamp); this.onRecordReceived(record); } catch (final RecordInstantiationException ex) { super.logger.error("Failed to create: {}", recordClassName, ex); } return true; }
private boolean deserializeRecord(final int clazzId, final ByteBuffer buffer) { // identify logging timestamp if (buffer.remaining() < LONG_BYTES) { return false; } final long loggingTimestamp = buffer.getLong(); // NOPMD (timestamp must be read before checking the buffer for record size) final String recordClassName = this.readerRegistry.get(clazzId); // identify record data final IRecordFactory<? extends IMonitoringRecord> recordFactory = this.recordFactories.get(recordClassName); if (buffer.remaining() < recordFactory.getRecordSizeInBytes()) { return false; } try { final IMonitoringRecord record = recordFactory.create(BinaryValueDeserializer.create(buffer, this.readerRegistry)); record.setLoggingTimestamp(loggingTimestamp); this.listener.onRecordReceived(record); } catch (final RecordInstantiationException ex) { super.logger.error("Failed to create: {}", recordClassName, ex); } return true; }
final IValueDeserializer deserializer = BinaryValueDeserializer.create(buffer, this.registry); try { final IMonitoringRecord record = recordFactory.create(deserializer);
final IMonitoringRecord record = recordFactory.create(BinaryValueDeserializer.create(buffer, this.stringRegistry)); record.setLoggingTimestamp(loggingTimestamp);
private void checkToFromBinaryAllFields(final OperationExecutionRecord opExecutionRecord) { final WriterListener receiver = new WriterListener(); final IWriterRegistry<String> writerRegistry = new WriterRegistry(receiver); final ByteBuffer buffer = ByteBuffer.allocate(OperationExecutionRecord.SIZE); opExecutionRecord.serialize(BinaryValueSerializer.create(buffer, writerRegistry)); buffer.flip(); final OperationExecutionRecord deserializedRecord = new OperationExecutionRecord(BinaryValueDeserializer.create(buffer, receiver.getReaderRegistry())); Assert.assertEquals("Records not equal (binary)", opExecutionRecord, deserializedRecord); this.checkEoiEss(deserializedRecord, opExecutionRecord.getEoi(), opExecutionRecord.getEss()); this.checkHostName(deserializedRecord, opExecutionRecord.getHostname()); this.checkSessionId(deserializedRecord, opExecutionRecord.getSessionId()); this.checkTinTout(deserializedRecord, opExecutionRecord.getTin(), opExecutionRecord.getTout()); this.checkTraceId(deserializedRecord, opExecutionRecord.getTraceId()); } }
@Test public void testRecordConstructionWithFactory() { final WriterListener receiver = new WriterListener(); final IWriterRegistry<String> writerRegistry = new WriterRegistry(receiver); final String recordClassName = AfterOperationEvent.class.getName(); final IRecordFactory<? extends IMonitoringRecord> recordFactory = this.cachedRecordFactories.get(recordClassName); Assert.assertEquals(AfterOperationEventFactory.class, recordFactory.getClass()); final String operationSignature = "isEmpty()"; final String classSignature = "java.util.List"; final int orderIndex = 333; final long traceId = 666; final long timestamp = 111; final AfterOperationEvent expectedEvent = new AfterOperationEvent(timestamp, traceId, orderIndex, classSignature, operationSignature); expectedEvent.serialize(BinaryValueSerializer.create(this.buffer, writerRegistry)); this.buffer.flip(); final IMonitoringRecord event = recordFactory.create(BinaryValueDeserializer.create(this.buffer, receiver.getReaderRegistry())); Assert.assertEquals(expectedEvent.getClass(), event.getClass()); final AfterOperationEvent castedEvent = (AfterOperationEvent) event; Assert.assertEquals(expectedEvent.getTimestamp(), castedEvent.getTimestamp()); Assert.assertEquals(expectedEvent.getTraceId(), castedEvent.getTraceId()); Assert.assertEquals(expectedEvent.getOrderIndex(), castedEvent.getOrderIndex()); Assert.assertEquals(expectedEvent.getClassSignature(), castedEvent.getClassSignature()); Assert.assertEquals(expectedEvent.getOperationSignature(), castedEvent.getOperationSignature()); }
/** * Tests the constructor and writeBytes(..) methods of {@link SplitEvent}. */ @Test public void testSerializeDeserializeBinaryEquals() { final SplitEvent event1 = new SplitEvent(TSTAMP, TRACE_ID, ORDER_INDEX); Assert.assertEquals("Unexpected timestamp", TSTAMP, event1.getTimestamp()); Assert.assertEquals("Unexpected trace ID", TRACE_ID, event1.getTraceId()); Assert.assertEquals("Unexpected order index", ORDER_INDEX, event1.getOrderIndex()); final WriterListener receiver = new WriterListener(); final IWriterRegistry<String> stringRegistry = new WriterRegistry(receiver); final ByteBuffer buffer = ByteBuffer.allocate(event1.getSize()); event1.serialize(BinaryValueSerializer.create(buffer, stringRegistry)); buffer.flip(); final SplitEvent event2 = new SplitEvent(BinaryValueDeserializer.create(buffer, receiver.getReaderRegistry())); Assert.assertEquals(event1, event2); Assert.assertEquals(0, event1.compareTo(event2)); } }
/** * Tests the constructor and writeBytes(..) methods of {@link JoinEvent}. */ @Test public void testSerializeDeserializeBinaryEquals() { final JoinEvent event1 = new JoinEvent(TSTAMP, TRACE_ID, ORDER_INDEX, JOINED_TRACE_ID); Assert.assertEquals("Unexpected timestamp", TSTAMP, event1.getTimestamp()); Assert.assertEquals("Unexpected trace ID", TRACE_ID, event1.getTraceId()); Assert.assertEquals("Unexpected order index", ORDER_INDEX, event1.getOrderIndex()); Assert.assertEquals("Unexpected joined trace id", JOINED_TRACE_ID, event1.getJoinedTraceId()); final WriterListener receiver = new WriterListener(); final IWriterRegistry<String> stringRegistry = new WriterRegistry(receiver); final ByteBuffer buffer = ByteBuffer.allocate(event1.getSize()); event1.serialize(BinaryValueSerializer.create(buffer, stringRegistry)); buffer.flip(); final JoinEvent event2 = new JoinEvent(BinaryValueDeserializer.create(buffer, receiver.getReaderRegistry())); Assert.assertEquals(event1, event2); Assert.assertEquals(0, event1.compareTo(event2)); } }
/** * Tests the constructor and writeBytes(..) methods of {@link MonitorRequestEvent}. */ @Test public void testSerializeDeserializeBinaryEquals() { final MonitorRequestEvent event1 = new MonitorRequestEvent(TSTAMP, TRACE_ID, ORDER_INDEX, LOCK_ID); Assert.assertEquals("Unexpected timestamp", TSTAMP, event1.getTimestamp()); Assert.assertEquals("Unexpected trace ID", TRACE_ID, event1.getTraceId()); Assert.assertEquals("Unexpected order index", ORDER_INDEX, event1.getOrderIndex()); Assert.assertEquals("Unexpected lock id", LOCK_ID, event1.getLockId()); final WriterListener receiver = new WriterListener(); final IWriterRegistry<String> stringRegistry = new WriterRegistry(receiver); final ByteBuffer buffer = ByteBuffer.allocate(event1.getSize()); event1.serialize(BinaryValueSerializer.create(buffer, stringRegistry)); buffer.flip(); final MonitorRequestEvent event2 = new MonitorRequestEvent(BinaryValueDeserializer.create(buffer, receiver.getReaderRegistry())); Assert.assertEquals(event1, event2); Assert.assertEquals(0, event1.compareTo(event2)); } }
/** * Tests the constructor and writeBytes(..) methods of {@link MonitorNotifyAllEvent}. */ @Test public void testSerializeDeserializeBinaryEquals() { final MonitorNotifyAllEvent event1 = new MonitorNotifyAllEvent(TSTAMP, TRACE_ID, ORDER_INDEX, LOCK_ID); Assert.assertEquals("Unexpected timestamp", TSTAMP, event1.getTimestamp()); Assert.assertEquals("Unexpected trace ID", TRACE_ID, event1.getTraceId()); Assert.assertEquals("Unexpected order index", ORDER_INDEX, event1.getOrderIndex()); Assert.assertEquals("Unexpected lock id", LOCK_ID, event1.getLockId()); final WriterListener receiver = new WriterListener(); final IWriterRegistry<String> stringRegistry = new WriterRegistry(receiver); final ByteBuffer buffer = ByteBuffer.allocate(event1.getSize()); event1.serialize(BinaryValueSerializer.create(buffer, stringRegistry)); buffer.flip(); final MonitorNotifyAllEvent event2 = new MonitorNotifyAllEvent(BinaryValueDeserializer.create(buffer, receiver.getReaderRegistry())); Assert.assertEquals(event1, event2); Assert.assertEquals(0, event1.compareTo(event2)); } }