diff --git a/src/main/java/teetime/stage/kieker/traceReconstruction/TraceReconstructionFilter.java b/src/main/java/teetime/stage/kieker/traceReconstruction/TraceReconstructionFilter.java index 5514a5f6b2eb59e1888a319c33a8056cb84ca993..96cfe3d4c4f1d7f23e26b7afa1f5b8ff7bd49f4a 100644 --- a/src/main/java/teetime/stage/kieker/traceReconstruction/TraceReconstructionFilter.java +++ b/src/main/java/teetime/stage/kieker/traceReconstruction/TraceReconstructionFilter.java @@ -20,10 +20,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.TimeUnit; -import kieker.analysis.plugin.filter.flow.TraceEventRecords; -import kieker.common.record.flow.IFlowRecord; -import kieker.common.record.flow.trace.AbstractTraceEvent; -import kieker.common.record.flow.trace.TraceMetadata; import teetime.framework.core.AbstractFilter; import teetime.framework.core.Context; import teetime.framework.core.IInputPort; @@ -31,9 +27,14 @@ import teetime.framework.core.IOutputPort; import teetime.util.concurrent.hashmap.ConcurrentHashMapWithDefault; import teetime.util.concurrent.hashmap.TraceBuffer; +import kieker.analysis.plugin.filter.flow.TraceEventRecords; +import kieker.common.record.flow.IFlowRecord; +import kieker.common.record.flow.trace.AbstractTraceEvent; +import kieker.common.record.flow.trace.TraceMetadata; + /** * @author Christian Wulf - * + * * @since 1.10 */ public class TraceReconstructionFilter extends AbstractFilter<TraceReconstructionFilter> { @@ -50,7 +51,7 @@ public class TraceReconstructionFilter extends AbstractFilter<TraceReconstructio private boolean timeout; private long maxEncounteredLoggingTimestamp = -1; - private Map<Long, TraceBuffer> traceId2trace = new ConcurrentHashMapWithDefault<Long, TraceBuffer>(new TraceBuffer()); + private static final Map<Long, TraceBuffer> traceId2trace = new ConcurrentHashMapWithDefault<Long, TraceBuffer>(new TraceBuffer()); @Override protected boolean execute(final Context<TraceReconstructionFilter> context) { @@ -96,10 +97,10 @@ public class TraceReconstructionFilter extends AbstractFilter<TraceReconstructio } private void putIfFinished(final Long traceId, final Context<TraceReconstructionFilter> context) { - final TraceBuffer traceBuffer = this.traceId2trace.get(traceId); + final TraceBuffer traceBuffer = TraceReconstructionFilter.traceId2trace.get(traceId); if (traceBuffer.isFinished()) { synchronized (this) { // has to be synchronized because of timeout cleanup - this.traceId2trace.remove(traceId); + TraceReconstructionFilter.traceId2trace.remove(traceId); } this.put(traceBuffer, context); } @@ -109,12 +110,12 @@ public class TraceReconstructionFilter extends AbstractFilter<TraceReconstructio Long traceId = null; if (record instanceof TraceMetadata) { traceId = ((TraceMetadata) record).getTraceId(); - final TraceBuffer traceBuffer = this.traceId2trace.get(traceId); + final TraceBuffer traceBuffer = TraceReconstructionFilter.traceId2trace.get(traceId); traceBuffer.setTrace((TraceMetadata) record); } else if (record instanceof AbstractTraceEvent) { traceId = ((AbstractTraceEvent) record).getTraceId(); - final TraceBuffer traceBuffer = this.traceId2trace.get(traceId); + final TraceBuffer traceBuffer = TraceReconstructionFilter.traceId2trace.get(traceId); traceBuffer.insertEvent((AbstractTraceEvent) record); } @@ -132,7 +133,7 @@ public class TraceReconstructionFilter extends AbstractFilter<TraceReconstructio final long duration = timestamp - this.maxTraceDuration; final long traceTimeout = timestamp - this.maxTraceTimeout; - for (final Iterator<Entry<Long, TraceBuffer>> iterator = this.traceId2trace.entrySet().iterator(); iterator.hasNext();) { + for (final Iterator<Entry<Long, TraceBuffer>> iterator = TraceReconstructionFilter.traceId2trace.entrySet().iterator(); iterator.hasNext();) { final TraceBuffer traceBuffer = iterator.next().getValue(); if ((traceBuffer.getMaxLoggingTimestamp() <= traceTimeout) // long time no see || (traceBuffer.getMinLoggingTimestamp() <= duration)) { // max duration is gone @@ -180,12 +181,12 @@ public class TraceReconstructionFilter extends AbstractFilter<TraceReconstructio this.maxEncounteredLoggingTimestamp = maxEncounteredLoggingTimestamp; } - public Map<Long, TraceBuffer> getTraceId2trace() { - return this.traceId2trace; - } - - public void setTraceId2trace(final Map<Long, TraceBuffer> traceId2trace) { - this.traceId2trace = traceId2trace; - } + // public Map<Long, TraceBuffer> getTraceId2trace() { + // return TraceReconstructionFilter.traceId2trace; + // } + // + // public void setTraceId2trace(final Map<Long, TraceBuffer> traceId2trace) { + // TraceReconstructionFilter.traceId2trace = traceId2trace; + // } } diff --git a/src/main/java/teetime/stage/stringBuffer/util/KiekerHashMap.java b/src/main/java/teetime/stage/stringBuffer/util/KiekerHashMap.java index f6a1939a48f4f5c8b87ffc44abf40374ddea3209..22542a58e94def8f0df6da4500332b422c550d55 100644 --- a/src/main/java/teetime/stage/stringBuffer/util/KiekerHashMap.java +++ b/src/main/java/teetime/stage/stringBuffer/util/KiekerHashMap.java @@ -89,7 +89,8 @@ public class KiekerHashMap { public final String get(final String value) { final int hash = KiekerHashMap.hash(value); - return this.segments[(hash >>> this.segmentShift) & this.segmentMask].get(value, hash); + Segment segment = this.segments[(hash >>> this.segmentShift) & this.segmentMask]; + return segment.get(value, hash); } // ---------------- Inner Classes --------------