tmf: fix coalesced request handling with one request
authorBernd Hufmann <Bernd.Hufmann@ericsson.com>
Fri, 17 Jan 2014 20:17:47 +0000 (15:17 -0500)
committerBernd Hufmann <bernd.hufmann@ericsson.com>
Mon, 20 Jan 2014 13:02:53 +0000 (08:02 -0500)
... and request with certain time stamp and certain number of events
requested. This will read less events than requested events.

This patch contains fix and test for it

Change-Id: I4a88308bccf858f9f8d112b8602cf80f02db06eb
Signed-off-by: Bernd Hufmann <Bernd.Hufmann@ericsson.com>
Reviewed-on: https://git.eclipse.org/r/20771
Tested-by: Hudson CI
Reviewed-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
IP-Clean: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Tested-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Reviewed-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
Tested-by: Bernd Hufmann <bernd.hufmann@ericsson.com>
org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/request/TmfCoalescedEventRequestTest.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/request/TmfCoalescedEventRequest.java

index 721ae0ef46f3f13ffc4b3a07e98f53c6cb996824..172b6128445e7c61e448de9788ebc939b2bf6c4e 100644 (file)
@@ -410,6 +410,12 @@ public class TmfCoalescedEventRequestTest {
         }
     }
 
+    private static class TmfTestTriggerSignal2 extends TmfSignal {
+        public TmfTestTriggerSignal2(Object source) {
+            super(source);
+        }
+    }
+
     @TmfSignalHandler
     public void trigger(final TmfTestTriggerSignal signal) {
 
@@ -461,6 +467,27 @@ public class TmfCoalescedEventRequestTest {
         providers[0].sendRequest(request3);
     }
 
+    /**
+     * @param signal
+     *            the trigger signal
+     */
+    @TmfSignalHandler
+    public void trigger(final TmfTestTriggerSignal2 signal) {
+        TmfTimeRange range = new TmfTimeRange(new TmfTimestamp(100, -3), TmfTimestamp.BIG_CRUNCH);
+        requestedEvents1 = new Vector<>();
+        request1 = new TmfEventRequest(ITmfEvent.class, range, 0, 1, ExecutionType.FOREGROUND) {
+            @Override
+            public void handleData(ITmfEvent event) {
+                super.handleData(event);
+                if (!isCompleted()) {
+                    requestedEvents1.add(event);
+                }
+            }
+        };
+        providers = TmfProviderManager.getProviders(ITmfEvent.class, TmfTraceStub.class);
+        providers[0].sendRequest(request1);
+    }
+
     public void runCoalescedRequest(long startIndex) throws InterruptedException {
 
         fTrace = setupTrace(TEST_TRACE.getFullPath());
@@ -543,4 +570,25 @@ public class TmfCoalescedEventRequestTest {
         fTrace = null;
     }
 
+    @Test
+    public void testSingleTimeRequest() throws InterruptedException {
+
+        fTrace = setupTrace(TEST_TRACE.getFullPath());
+
+        TmfSignalManager.register(this);
+        TmfTestTriggerSignal2 signal = new TmfTestTriggerSignal2(this);
+        TmfSignalManager.dispatchSignal(signal);
+
+        request1.waitForCompletion();
+
+        assertTrue("Request1: isCompleted", request1.isCompleted());
+
+        // We have to have one event processed
+        assertEquals("Request1: nbEvents", 1, requestedEvents1.size());
+
+        TmfSignalManager.deregister(this);
+        fTrace.dispose();
+        fTrace = null;
+    }
+
 }
index 91d787cdffcb0ea2a7d2cf838d6063638e1ba7a1..7fcf5ff8f8ab36dee2deb401bd3b365d65b5e99e 100644 (file)
@@ -195,8 +195,7 @@ public class TmfCoalescedEventRequest extends TmfEventRequest {
                 request.handleData(null);
             } else {
                 long start = request.getIndex();
-                long end = start + request.getNbRequested();
-                if (!request.isCompleted() && index >= start && index < end) {
+                if (!request.isCompleted() && index >= start && request.getNbRead() < request.getNbRequested()) {
                     ITmfTimestamp ts = data.getTimestamp();
                     if (request.getRange().contains(ts)) {
                         if (request.getDataType().isInstance(data)) {
This page took 0.027776 seconds and 5 git commands to generate.