From 8cd77fd3b4de8809f15dd60bfcbb5da6ed10ff4d Mon Sep 17 00:00:00 2001
From: Florian Fittkau <ffi@informatik.uni-kiel.de>
Date: Tue, 19 Nov 2013 00:39:54 +0100
Subject: [PATCH] record serialization

---
 .classpath                                    |  1 +
 .../TraceReconstructionBuffer.java            | 12 +---------
 .../TraceReconstructionFilter.java            | 12 ++++------
 .../TracePatternSummarizationBuffer.java      |  5 ++---
 .../reader/TCPReaderOneClient.java            | 10 +++++----
 .../TraceReconstructionBufferTest.java        | 22 +++++++++++++++++++
 6 files changed, 36 insertions(+), 26 deletions(-)
 create mode 100644 test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java

diff --git a/.classpath b/.classpath
index bd22750..22783ff 100644
--- a/.classpath
+++ b/.classpath
@@ -3,6 +3,7 @@
 	<classpathentry excluding="kieker/analysis/plugin/reader/mq/" kind="src" path="src"/>
 	<classpathentry kind="src" path="test"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
 	<classpathentry kind="lib" path="lib/disruptor-3.2.0.jar">
 		<attributes>
 			<attribute name="javadoc_location" value="jar:platform:/resource/worker/lib/disruptor-3.2.0-javadoc.jar!/"/>
diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
index a97ca03..13cd5d6 100644
--- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
+++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBuffer.java
@@ -7,7 +7,6 @@ import explorviz.live_trace_processing.record.event.AbstractOperationEventRecord
 import explorviz.live_trace_processing.record.event.normal.AfterFailedOperationEventRecord;
 import explorviz.live_trace_processing.record.event.normal.AfterOperationEventRecord;
 import explorviz.live_trace_processing.record.event.normal.BeforeOperationEventRecord;
-import explorviz.live_trace_processing.record.misc.HostApplicationMetaDataRecord;
 import explorviz.live_trace_processing.record.trace.Trace;
 
 class TraceReconstructionBuffer {
@@ -16,7 +15,6 @@ class TraceReconstructionBuffer {
 
 	private static final int INITIAL_EVENT_CAPACITY = 100;
 
-	private HostApplicationMetaDataRecord traceMetadata;
 	private final List<AbstractOperationEventRecord> events = new ArrayList<AbstractOperationEventRecord>(
 			INITIAL_EVENT_CAPACITY);
 
@@ -69,14 +67,6 @@ class TraceReconstructionBuffer {
 		return orderIndex;
 	}
 
-	public void setTrace(final HostApplicationMetaDataRecord trace) {
-		if (traceMetadata != null) {
-			damaged = true;
-			return;
-		}
-		traceMetadata = trace;
-	}
-
 	public final boolean isFinished() {
 		return !isInvalid();
 	}
@@ -87,7 +77,7 @@ class TraceReconstructionBuffer {
 	}
 
 	public final Trace toTrace() {
-		return new Trace(traceMetadata, events, events.get(0).getTraceId());
+		return new Trace(events, false);
 	}
 
 	// private static final class AbstractOperationEventComperator implements
diff --git a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java
index 5cfd682..6c39b30 100644
--- a/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java
+++ b/src/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionFilter.java
@@ -13,7 +13,6 @@ import explorviz.live_trace_processing.filter.reduction.summarization.TracePatte
 import explorviz.live_trace_processing.reader.TimeProvider;
 import explorviz.live_trace_processing.record.IRecord;
 import explorviz.live_trace_processing.record.event.AbstractOperationEventRecord;
-import explorviz.live_trace_processing.record.misc.HostApplicationMetaDataRecord;
 import explorviz.live_trace_processing.record.misc.TerminateRecord;
 import explorviz.live_trace_processing.record.misc.TimedPeriodRecord;
 import explorviz.live_trace_processing.record.trace.Trace;
@@ -40,9 +39,8 @@ public final class TraceReconstructionFilter extends AbstractFilter {
 			final AbstractOperationEventRecord abstractOperationEvent = ((AbstractOperationEventRecord) record);
 
 			final long traceId = abstractOperationEvent.getTraceId();
-			final TraceReconstructionBuffer traceBuffer = getBufferForTraceId(
-					abstractOperationEvent.getTraceId(),
-					abstractOperationEvent.getHostApplicationMetadata());
+			final TraceReconstructionBuffer traceBuffer = getBufferForTraceId(abstractOperationEvent
+					.getTraceId());
 			traceBuffer.insertEvent(abstractOperationEvent);
 
 			if (traceBuffer.isFinished()) {
@@ -54,7 +52,7 @@ public final class TraceReconstructionFilter extends AbstractFilter {
 			if (trace.isValid()) {
 				deliver(trace);
 			} else {
-				getBufferForTraceId(trace.getTraceId(), trace.getHostMetadata());
+				getBufferForTraceId(trace.getTraceEvents().get(0).getTraceId());
 			}
 		} else if (record instanceof TimedPeriodRecord) {
 			checkForTimeouts(TimeProvider.getCurrentTimestamp());
@@ -66,12 +64,10 @@ public final class TraceReconstructionFilter extends AbstractFilter {
 		}
 	}
 
-	private TraceReconstructionBuffer getBufferForTraceId(final long traceId,
-			final HostApplicationMetaDataRecord metadata) {
+	private TraceReconstructionBuffer getBufferForTraceId(final long traceId) {
 		TraceReconstructionBuffer traceBuffer = traceId2trace.get(traceId);
 		if (traceBuffer == null) {
 			traceBuffer = new TraceReconstructionBuffer();
-			traceBuffer.setTrace(metadata);
 			traceId2trace.put(traceId, traceBuffer);
 		}
 		return traceBuffer;
diff --git a/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java b/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java
index 477ead1..0705752 100644
--- a/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java
+++ b/src/explorviz/live_trace_processing/filter/reduction/summarization/TracePatternSummarizationBuffer.java
@@ -29,14 +29,13 @@ class TracePatternSummarizationBuffer {
 		if (accumulator == null) {
 			accumulator = trace;
 		} else {
-			final List<AbstractOperationEventRecord> aggregatedRecords = accumulator.getTraceEvents();
+			final List<AbstractOperationEventRecord> aggregatedRecords = accumulator
+					.getTraceEvents();
 			final List<AbstractOperationEventRecord> records = trace.getTraceEvents();
 
 			for (int i = 0; i < aggregatedRecords.size(); i++) {
 				aggregatedRecords.get(i).getRuntime().merge(records.get(i).getRuntime());
 			}
-
-			accumulator.getRuntime().merge(trace.getRuntime());
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
index dade9e4..9715b4f 100644
--- a/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
+++ b/src/explorviz/live_trace_processing/reader/TCPReaderOneClient.java
@@ -15,13 +15,14 @@ import explorviz.live_trace_processing.Constants;
 import explorviz.live_trace_processing.filter.RecordArrayEvent;
 import explorviz.live_trace_processing.filter.counting.CountingThroughputFilter;
 import explorviz.live_trace_processing.record.IRecord;
+import explorviz.live_trace_processing.record.event.HostApplicationMetaDataRecord;
 import explorviz.live_trace_processing.record.event.normal.AfterFailedOperationEventRecord;
 import explorviz.live_trace_processing.record.event.normal.AfterOperationEventRecord;
 import explorviz.live_trace_processing.record.event.normal.BeforeOperationEventRecord;
-import explorviz.live_trace_processing.record.misc.HostApplicationMetaDataRecord;
 import explorviz.live_trace_processing.record.misc.StringRegistryRecord;
 import explorviz.live_trace_processing.record.misc.SystemMonitoringRecord;
 import explorviz.live_trace_processing.record.misc.TimedPeriodRecord;
+import explorviz.live_trace_processing.record.trace.RuntimeStatisticInformation;
 
 public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalReceiver {
 	private HostApplicationMetaDataRecord hostApplicationMetadata;
@@ -195,7 +196,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 
 		if (operation != null) {
 			putInRingBuffer(new BeforeOperationEventRecord(timestamp, traceId, orderIndex,
-					operation, hostApplicationMetadata));
+					operation, hostApplicationMetadata, new RuntimeStatisticInformation(timestamp)));
 		} else {
 			final byte[] message = new byte[BeforeOperationEventRecord.BYTE_LENGTH_WITH_CLAZZ_ID];
 			buffer.position(buffer.position()
@@ -217,7 +218,8 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 
 		if ((operation != null) && (cause != null)) {
 			putInRingBuffer(new AfterFailedOperationEventRecord(timestamp, traceId, orderIndex,
-					operation, cause, hostApplicationMetadata));
+					operation, cause, hostApplicationMetadata, new RuntimeStatisticInformation(
+							timestamp)));
 		} else {
 			final byte[] message = new byte[AfterFailedOperationEventRecord.BYTE_LENGTH_WITH_CLAZZ_ID];
 			buffer.position(buffer.position()
@@ -236,7 +238,7 @@ public class TCPReaderOneClient extends Thread implements IPeriodicTimeSignalRec
 		final String operation = getStringFromRegistry(operationId);
 		if (operation != null) {
 			putInRingBuffer(new AfterOperationEventRecord(timestamp, traceId, orderIndex,
-					operation, hostApplicationMetadata));
+					operation, hostApplicationMetadata, new RuntimeStatisticInformation(timestamp)));
 		} else {
 			final byte[] message = new byte[AfterOperationEventRecord.BYTE_LENGTH_WITH_CLAZZ_ID];
 			buffer.position(buffer.position() - AfterOperationEventRecord.BYTE_LENGTH_WITH_CLAZZ_ID);
diff --git a/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java b/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java
new file mode 100644
index 0000000..3fae4a3
--- /dev/null
+++ b/test/explorviz/live_trace_processing/filter/reconstruction/TraceReconstructionBufferTest.java
@@ -0,0 +1,22 @@
+package explorviz.live_trace_processing.filter.reconstruction;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import explorviz.live_trace_processing.record.event.HostApplicationMetaDataRecord;
+import explorviz.live_trace_processing.record.event.normal.BeforeOperationEventRecord;
+import explorviz.live_trace_processing.record.trace.RuntimeStatisticInformation;
+
+public class TraceReconstructionBufferTest {
+
+	@Test
+	public void testInsertEvent() throws Exception {
+		final TraceReconstructionBuffer traceReconstructionBuffer = new TraceReconstructionBuffer();
+		traceReconstructionBuffer.insertEvent(new BeforeOperationEventRecord(1000, 1, 0, "test",
+				new HostApplicationMetaDataRecord("testHost", "testApp"),
+				new RuntimeStatisticInformation(1000)));
+		assertEquals(1000, traceReconstructionBuffer.getMaxLoggingTimestamp());
+	}
+
+}
-- 
GitLab