tmf: bug 495897 Keep last good formula on failed synchronization
authorGeneviève Bastien <gbastien+lttng@versatic.net>
Mon, 13 Jun 2016 18:24:20 +0000 (14:24 -0400)
committerGenevieve Bastien <gbastien+lttng@versatic.net>
Fri, 15 Jul 2016 18:52:01 +0000 (14:52 -0400)
When trace synchronization fails, the last known good formula should be kept
and the traces synchronized. It is a better approximation than to keep the
traces unsynchronized

Change-Id: I35a4b2627fcaf0e7e64e9a77516758944959ca6a
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
Reviewed-on: https://git.eclipse.org/r/75176
Reviewed-by: Hudson CI
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
tmf/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/synchronization/SyncTest.java
tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/internal/tmf/core/synchronization/SyncAlgorithmFullyIncremental.java

index 5d6b94a23800e7703d4ded6634fb6e7366b06565..24dad3b0c3fc7c7fa6259a894e757eb63c4da3fb 100644 (file)
@@ -29,6 +29,7 @@ import java.util.LinkedList;
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.tracecompass.internal.tmf.core.synchronization.SyncAlgorithmFullyIncremental;
+import org.eclipse.tracecompass.internal.tmf.core.synchronization.TmfTimestampTransformLinearFast;
 import org.eclipse.tracecompass.tmf.core.event.matching.TmfEventDependency;
 import org.eclipse.tracecompass.tmf.core.synchronization.ITmfTimestampTransform;
 import org.eclipse.tracecompass.tmf.core.synchronization.SynchronizationAlgorithm;
@@ -119,11 +120,27 @@ public class SyncTest {
         assertEquals(syncAlgo.getTimestampTransform(t1.getHostId()), tt1);
         assertEquals(TimestampTransformFactory.getDefaultTransform(), tt1);
         assertEquals(syncAlgo.getTimestampTransform(t2.getHostId()), tt2);
+        assertTrue(tt2 instanceof TmfTimestampTransformLinearFast);
 
-        /* Make the two hulls intersect */
+        /*
+         * Make the two hulls intersect, and make sure the last good formula is
+         * kept after failure
+         */
         addSyncMatch(syncAlgo, t1, 7, t2, 4);
+        assertEquals(SyncQuality.ACCURATE, syncAlgo.getSynchronizationQuality(t1, t2));
+        assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 0.375 beta 1.625 ]]", syncAlgo.toString());
+        // Last good synchronization
+        tt2 = syncAlgo.getTimestampTransform(t2);
+        tt1 = syncAlgo.getTimestampTransform(t1);
+        assertTrue(tt2 instanceof TmfTimestampTransformLinearFast);
+
         addSyncMatch(syncAlgo, t2, 7, t1, 3);
         assertEquals(SyncQuality.FAIL, syncAlgo.getSynchronizationQuality(t1, t2));
+        assertEquals("SyncAlgorithmFullyIncremental [Between t1 and t2 [ alpha 0.375 beta 1.625 ]]", syncAlgo.toString());
+
+        assertEquals(tt2, syncAlgo.getTimestampTransform(t2.getHostId()));
+        assertEquals(tt1, syncAlgo.getTimestampTransform(t1.getHostId()));
+        assertEquals(TimestampTransformFactory.getDefaultTransform(), tt1);
     }
 
     /**
index 26b1db5dcdbb389b57a1cd2825b56c69af92fc05..2203f2b4cad9307f8fd38d71e0dd7fbfc6182854 100644 (file)
@@ -158,7 +158,7 @@ public class SyncAlgorithmFullyIncremental extends SynchronizationAlgorithm {
             fTree = new SyncSpanningTree(getRootNode());
             for (ConvexHull traceSync : fSyncs) {
                 SyncQuality q = traceSync.getQuality();
-                if (q == SyncQuality.ACCURATE || q == SyncQuality.APPROXIMATE) {
+                if (q == SyncQuality.ACCURATE || q == SyncQuality.APPROXIMATE || q == SyncQuality.FAIL) {
                     String from = traceSync.getReferenceHost();
                     String to = traceSync.getOtherHost();
                     fTree.addSynchronization(from, to, traceSync.getTimestampTransform(to), traceSync.getAccuracy());
This page took 0.026345 seconds and 5 git commands to generate.