ss: Bug 484776: Incorrect end time in HistoryTree
authorPatrick Tasse <patrick.tasse@gmail.com>
Mon, 11 Jan 2016 16:13:12 +0000 (11:13 -0500)
committerPatrick Tasse <patrick.tasse@gmail.com>
Tue, 8 Mar 2016 20:12:29 +0000 (15:12 -0500)
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 <patrick.tasse@gmail.com>
Reviewed-on: https://git.eclipse.org/r/64015
Reviewed-by: Hudson CI
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
Tested-by: Genevieve Bastien <gbastien+lttng@versatic.net>
statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTree.java
statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/HistoryTreeBackend.java
statesystem/org.eclipse.tracecompass.statesystem.core/src/org/eclipse/tracecompass/internal/statesystem/core/backend/historytree/ThreadedHistoryTreeBackend.java

index 60374ba1498bd6c56824d3b0d3999390d938819d..1aa0c7528c9f5298dde953f543967f79612b7ca5 100644 (file)
@@ -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;
     }
 
index 1bf34b9083aed4e95536d701e7e970628e3a1e34..ae8bf0d850cdac8e9a25c48fc6bee912c8ec7911 100644 (file)
@@ -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 <alexandre.montplaisir@gmail.com>
  *
@@ -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));
         }
     }
 
index b998a4a0c11a3eb02446dce3732dd9518e6c1112..f55141f01cf2412db93487f5caa155750c825062 100644 (file)
@@ -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 <alexandre.montplaisir@gmail.com>
  *
@@ -39,6 +39,11 @@ public final class ThreadedHistoryTreeBackend extends HistoryTreeBackend
     private static final int CHUNK_SIZE = 127;
     private final @NonNull BufferedBlockingQueue<HTInterval> 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
This page took 0.030774 seconds and 5 git commands to generate.