From: Patrick Tasse Date: Mon, 11 Jan 2016 16:13:12 +0000 (-0500) Subject: ss: Bug 484776: Incorrect end time in HistoryTree X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=e8aa33258a6f3cf94b4e72edb8d9c69b00ee245f;hp=17a3454d10d511587f2a7e597fb5251ed123b653;p=deliverable%2Ftracecompass.git ss: Bug 484776: Incorrect end time in HistoryTree The ThreadedHistoryTreeBackend now keeps track of its own end time that includes the end time of any interval that is in the interval queue. This ensures that the history tree is closed with the correct end time. The HistoryTree no longer updates its end time when initializing new empty nodes. This ensures that the end time is never greater than the real end time. Change-Id: I8ff41d14f54ec1a33b8e22e81a21871f0cbf7ea0 Signed-off-by: Patrick Tasse Reviewed-on: https://git.eclipse.org/r/64015 Reviewed-by: Hudson CI Reviewed-by: Genevieve Bastien Tested-by: Genevieve Bastien --- diff --git a/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTree.java b/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTree.java index 60374ba149..1aa0c7528c 100644 --- a/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTree.java +++ b/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTree.java @@ -605,11 +605,6 @@ public class HistoryTree { CoreNode newNode = new CoreNode(fConfig, fNodeCount, parentSeqNumber, startTime); fNodeCount++; - - /* Update the treeEnd if needed */ - if (startTime >= fTreeEnd) { - fTreeEnd = startTime + 1; - } return newNode; } @@ -626,11 +621,6 @@ public class HistoryTree { LeafNode newNode = new LeafNode(fConfig, fNodeCount, parentSeqNumber, startTime); fNodeCount++; - - /* Update the treeEnd if needed */ - if (startTime >= fTreeEnd) { - fTreeEnd = startTime + 1; - } return newNode; } diff --git a/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTreeBackend.java b/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTreeBackend.java index 1bf34b9083..ae8bf0d850 100644 --- a/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTreeBackend.java +++ b/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTreeBackend.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2015 Ericsson + * Copyright (c) 2012, 2016 Ericsson * Copyright (c) 2010, 2011 École Polytechnique de Montréal * Copyright (c) 2010, 2011 Alexandre Montplaisir * @@ -24,11 +24,6 @@ import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.tracecompass.internal.statesystem.core.Activator; -import org.eclipse.tracecompass.internal.statesystem.core.backend.historytree.CoreNode; -import org.eclipse.tracecompass.internal.statesystem.core.backend.historytree.HTConfig; -import org.eclipse.tracecompass.internal.statesystem.core.backend.historytree.HTInterval; -import org.eclipse.tracecompass.internal.statesystem.core.backend.historytree.HTNode; -import org.eclipse.tracecompass.internal.statesystem.core.backend.historytree.HistoryTree; import org.eclipse.tracecompass.statesystem.core.backend.IStateHistoryBackend; import org.eclipse.tracecompass.statesystem.core.exceptions.StateSystemDisposedException; import org.eclipse.tracecompass.statesystem.core.exceptions.TimeRangeException; @@ -260,10 +255,11 @@ public class HistoryTreeBackend implements IStateHistoryBackend { } private void checkValidTime(long t) { - long treeStart = fSht.getTreeStart(); - long treeEnd = fSht.getTreeEnd(); - if (t < treeStart || t > treeEnd) { - throw new TimeRangeException(fSsid + " Time:" + t + ", Start:" + treeStart + ", End:" + treeEnd); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + long startTime = getStartTime(); + long endTime = getEndTime(); + if (t < startTime || t > endTime) { + throw new TimeRangeException(String.format("%s Time:%d, Start:%d, End:%d", //$NON-NLS-1$ + fSsid, t, startTime, endTime)); } } diff --git a/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/ThreadedHistoryTreeBackend.java b/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/ThreadedHistoryTreeBackend.java index b998a4a0c1..f55141f01c 100644 --- a/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/ThreadedHistoryTreeBackend.java +++ b/statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/ThreadedHistoryTreeBackend.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2015 Ericsson + * Copyright (c) 2012, 2016 Ericsson * Copyright (c) 2010, 2011 École Polytechnique de Montréal * Copyright (c) 2010, 2011 Alexandre Montplaisir * @@ -39,6 +39,11 @@ public final class ThreadedHistoryTreeBackend extends HistoryTreeBackend private static final int CHUNK_SIZE = 127; private final @NonNull BufferedBlockingQueue intervalQueue; private final @NonNull Thread shtThread; + /** + * The backend tracks its end time separately from the tree, to take into + * consideration intervals in the queue. + */ + private long fEndTime; /** * New state history constructor @@ -76,6 +81,7 @@ public final class ThreadedHistoryTreeBackend extends HistoryTreeBackend int maxChildren) throws IOException { super(ssid, newStateFile, providerVersion, startTime, blockSize, maxChildren); + fEndTime = startTime; intervalQueue = new BufferedBlockingQueue<>(queueSize / CHUNK_SIZE, CHUNK_SIZE); shtThread = new Thread(this, "History Tree Thread"); //$NON-NLS-1$ @@ -110,6 +116,7 @@ public final class ThreadedHistoryTreeBackend extends HistoryTreeBackend int queueSize) throws IOException { super(ssid, newStateFile, providerVersion, startTime); + fEndTime = startTime; intervalQueue = new BufferedBlockingQueue<>(queueSize / CHUNK_SIZE, CHUNK_SIZE); shtThread = new Thread(this, "History Tree Thread"); //$NON-NLS-1$ @@ -135,6 +142,12 @@ public final class ThreadedHistoryTreeBackend extends HistoryTreeBackend HTInterval interval = new HTInterval(stateStartTime, stateEndTime, quark, (TmfStateValue) value); intervalQueue.put(interval); + fEndTime = Math.max(fEndTime, stateEndTime); + } + + @Override + public long getEndTime() { + return fEndTime; } @Override