assertThat(readCtx.isPresent(), is(false)); assertThat(tailer.state(), is(TailerState.END_OF_CYCLE));
@Test public void testToEndOnDeletedQueueFiles() throws IOException { if (OS.isWindows()) { System.err.println("#460 Cannot test delete after close on windows"); return; } File dir = getTmpDir(); try (ChronicleQueue q = builder(dir, wireType).build()) { ExcerptAppender append = q.acquireAppender(); append.writeDocument(w -> w.write(() -> "test").text("before text")); ExcerptTailer tailer = q.createTailer(); // move to the end even though it doesn't exist yet. tailer.toEnd(); append.writeDocument(w -> w.write(() -> "test").text("text")); assertTrue(tailer.readDocument(w -> w.read(() -> "test").text("text", Assert::assertEquals))); Files.find(dir.toPath(), 1, (p, basicFileAttributes) -> p.toString().endsWith("cq4"), FileVisitOption.FOLLOW_LINKS) .forEach(path -> assertTrue(path.toFile().delete())); ChronicleQueue q2 = builder(dir, wireType).build(); tailer = q2.createTailer(); tailer.toEnd(); assertEquals(TailerState.UNINITIALISED, tailer.state()); append = q2.acquireAppender(); append.writeDocument(w -> w.write(() -> "test").text("before text")); assertTrue(tailer.readDocument(w -> w.read(() -> "test").text("before text", Assert::assertEquals))); } }
do { try (DocumentContext documentContext = tailer.readingDocument()) { System.out.println("tailer.state: " + tailer.state());
@Test public void testAppendedBeforeToEnd() { File dir = getTmpDir(); try (ChronicleQueue chronicle = builder(dir, this.wireType) .rollCycle(RollCycles.TEST_SECONDLY) .build(); ChronicleQueue chronicle2 = builder(dir, this.wireType) .rollCycle(RollCycles.TEST_SECONDLY) .build()) { ExcerptTailer tailer = chronicle.createTailer(); ExcerptAppender append = chronicle2.acquireAppender(); append.writeDocument(w -> w.write(() -> "test").text("text")); while (tailer.state() == TailerState.UNINITIALISED) tailer.toEnd(); try (DocumentContext dc = tailer.readingDocument()) { assertFalse(tailer.index() + " " + tailer.state(), dc.isPresent()); } append.writeDocument(w -> w.write(() -> "test").text("text2")); try (DocumentContext dc = tailer.readingDocument()) { assertTrue(dc.isPresent()); assertEquals("text2", dc.wire().read("test").text()); } } }
@Test public void testReadingDocumentForEmptyQueue() { File dir = getTmpDir(); try (ChronicleQueue chronicle = builder(dir, this.wireType) .rollCycle(RollCycles.HOURLY) .build()) { ExcerptTailer tailer = chronicle.createTailer(); // DocumentContext is empty as we have no queue and don't know what the wire type will be. try (DocumentContext dc = tailer.readingDocument()) { assertFalse(dc.isPresent()); } try (ChronicleQueue chronicle2 = builder(dir, this.wireType) .rollCycle(RollCycles.HOURLY) .build()) { ExcerptAppender appender = chronicle2.acquireAppender(); appender.writeDocument(w -> w.write(() -> "test - message").text("text")); while (tailer.state() == TailerState.UNINITIALISED) tailer.toStart(); // DocumentContext should not be empty as we know what the wire type will be. try (DocumentContext dc = tailer.readingDocument()) { assertTrue(dc.isPresent()); dc.wire().read(() -> "test - message").text("text", Assert::assertEquals); } } } }
@Override public void toStart() { log.debug(String.format("toStart: %s", id)); cqTailer.toStart(); if (!cqTailer.state().equals(TailerState.FOUND_CYCLE)) { log.info("Unable to move to start because the tailer is not initialized, " + this); } }
offsetTailer = offsetQueue.createTailer().direction(TailerDirection.BACKWARD).toEnd(); if (offsetTailer.state() == TailerState.UNINITIALISED) {