Thread thread = Thread.currentThread(); while (!thread.isInterrupted()) { appender.pretouch(); Jvm.pause(10);
@Override public Throwable call() throws Exception { ChronicleQueue queue0 = null; try (ChronicleQueue queue = queueBuilder(path).build()) { queue0 = queue; ExcerptAppender appender = queue.acquireAppender(); System.out.println("Starting pretoucher"); while (!Thread.currentThread().isInterrupted() && !queue.isClosed()) { Jvm.pause(50); appender.pretouch(); } } catch (Throwable e) { if (queue0 != null && queue0.isClosed()) return null; exception = e; return e; } return null; } }
@Test public void shouldNotReceiveDuplicateMessages() throws Exception { final File location = DirectoryUtils.tempDir(DuplicateMessageReadTest.class.getSimpleName()); final ChronicleQueue chronicleQueue = SingleChronicleQueueBuilder .binary(location) .rollCycle(QUEUE_CYCLE) .build(); final ExcerptAppender appender = chronicleQueue.acquireAppender(); appender.pretouch(); final List<Data> expected = new ArrayList<>(); for (int i = 50; i < 60; i++) { expected.add(new Data(i)); } final ExcerptTailer tailer = chronicleQueue.createTailer(); tailer.toEnd(); // move to end of chronicle before writing for (final Data data : expected) { write(appender, data); } final List<Data> actual = new ArrayList<>(); Data data; while ((data = read(tailer)) != null) { actual.add(data); } assertThat(actual, is(expected)); }
public static void main(String[] args) { SingleChronicleQueue outQueue = SingleChronicleQueueBuilder.binary("target/" + "monitor") .rollCycle(RollCycles.TEST_SECONDLY).build(); ExcerptAppender outQueueAppender = outQueue.acquireAppender(); HeartbeatListener heartbeatWriter = outQueueAppender.methodWriterBuilder(HeartbeatListener.class).methodWriterListener((m, a) -> validateAll(a)).recordHistory(true).build(); Monitor.addPeriodicUpdateSource(10, () -> currentTimeMillis -> { outQueueAppender.pretouch(); }); long lastHB = 0; while (true) { if (System.currentTimeMillis() - lastHB > 1) { // write a hb to the queue MessageHistory.get().reset(); Heartbeat heartBeat = new Heartbeat(UUID.randomUUID().toString()); heartbeatWriter.heartbeat(heartBeat); lastHB = System.currentTimeMillis(); } } }
private void test(final int pause) { SetTimeProvider timeProvider = new SetTimeProvider(); timeProvider.currentTimeMillis(System.currentTimeMillis()); File tmpDir = getTmpDir(); SingleChronicleQueue queue = SingleChronicleQueueBuilder.binary(tmpDir).timeProvider(timeProvider).rollCycle(RollCycles.TEST_SECONDLY).build(); ExcerptAppender excerptAppender = queue.acquireAppender(); try (DocumentContext dc = excerptAppender.writingDocument()) { dc.wire().write("hello").text("world"); } timeProvider.advanceMillis(pause); { ExcerptTailer tailer = queue.createTailer().direction(TailerDirection.BACKWARD); tailer.toEnd(); try (DocumentContext dc = tailer.readingDocument()) { assertEquals("world", dc.wire().read("hello").text()); } } // pretouch to create next cycle file ----- IF YOU COMMENT THIS LINE THE TEST PASSES excerptAppender.pretouch(); { ExcerptTailer tailer = queue.createTailer().direction(TailerDirection.BACKWARD); tailer.toEnd(); try (DocumentContext dc = tailer.readingDocument()) { assertTrue(dc.isPresent()); assertEquals("world", dc.wire().read("hello").text()); } } }
@Override public boolean action() throws InvalidEventHandlerException, InterruptedException { chronicleQueue.acquireAppender().pretouch(); return false; }
Thread thread = Thread.currentThread(); while (!thread.isInterrupted()) { appender.pretouch(); Jvm.pause(10);