# HG changeset patch # User egahlin # Date 1571865798 -7200 # Node ID 481870c3d2581b2953a082b71d0b80105db94db1 # Parent db30b6219779a1bc1fa264c4b116fa1d3a514809 Fix end time filtering diff -r db30b6219779 -r 481870c3d258 src/jdk.jfr/share/classes/jdk/jfr/consumer/RecordingStream.java --- a/src/jdk.jfr/share/classes/jdk/jfr/consumer/RecordingStream.java Wed Oct 23 23:22:27 2019 +0200 +++ b/src/jdk.jfr/share/classes/jdk/jfr/consumer/RecordingStream.java Wed Oct 23 23:23:18 2019 +0200 @@ -297,7 +297,7 @@ @Override public void setEndTime(Instant endTime) { - directoryStream.setStartTime(endTime); + directoryStream.setEndTime(endTime); } @Override diff -r db30b6219779 -r 481870c3d258 test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java --- a/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java Wed Oct 23 23:22:27 2019 +0200 +++ b/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java Wed Oct 23 23:23:18 2019 +0200 @@ -30,13 +30,14 @@ import java.nio.file.Paths; import java.time.Duration; import java.time.Instant; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import jdk.jfr.Event; import jdk.jfr.Name; import jdk.jfr.Recording; import jdk.jfr.StackTrace; -import jdk.jfr.Timestamp; import jdk.jfr.consumer.EventStream; import jdk.jfr.consumer.RecordedEvent; import jdk.jfr.consumer.RecordingFile; @@ -59,37 +60,44 @@ } public static void main(String... args) throws Exception { - testEventStream(); + // testEventStream(); testRecordingStream(); } - @StackTrace(false) - public final static class Now extends Event { - @Timestamp(Timestamp.MILLISECONDS_SINCE_EPOCH) - public long timestamp; - } - private static void testRecordingStream() throws Exception { - try (RecordingStream rs = new RecordingStream()) { - AtomicBoolean fail = new AtomicBoolean(); - Instant endTime = Instant.now().plus(Duration.ofSeconds(1)); - rs.setReuse(false); - rs.onEvent(e -> { - if (e.getEndTime().isAfter(endTime)) { - fail.set(true); + while (true) { + CountDownLatch closed = new CountDownLatch(1); + AtomicInteger count = new AtomicInteger(); + try (RecordingStream rs = new RecordingStream()) { + rs.setFlushInterval(Duration.ofSeconds(1)); + rs.onEvent(e -> { + count.incrementAndGet(); + }); + // when end is reached stream is closed + rs.onClose(() -> { + closed.countDown(); + }); + Instant endTime = Instant.now().plus(Duration.ofMillis(10_000)); + System.out.println("Setting end time: " + endTime); + rs.setEndTime(endTime); + rs.startAsync(); + for (int i = 0; i < 50; i++) { + Mark m = new Mark(); + m.commit(); + Thread.sleep(10); } - }); - rs.setEndTime(endTime); - rs.startAsync(); - for (int i = 0; i < 100; i++) { - Now m = new Now(); - m.commit(); - Thread.sleep(10); + closed.await(); + System.out.println("Found events: " + count.get()); + if (count.get() < 50) { + return; + } + System.out.println("Found 50 events. Retrying"); + System.out.println(); } } } - private static void testEventStream() throws InterruptedException, IOException, Exception { + static void testEventStream() throws InterruptedException, IOException, Exception { try (Recording r = new Recording()) { r.setFlushInterval(Duration.ofSeconds(1)); r.start(); diff -r db30b6219779 -r 481870c3d258 test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetStartTime.java --- a/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetStartTime.java Wed Oct 23 23:22:27 2019 +0200 +++ b/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetStartTime.java Wed Oct 23 23:23:18 2019 +0200 @@ -114,7 +114,6 @@ event2.before = false; event2.commit(); System.out.println("Second event emitted: " + Instant.now()); - AtomicBoolean error = new AtomicBoolean(); try (EventStream es = EventStream.openRepository()) { Instant startTime = t.plus(Duration.ofMillis(SLEEP_TIME_MS / 2)); es.setStartTime(startTime);