如何阅读Chronicle中的最后一条消息长期翻过

时间:2016-10-18 09:58:51

标签: chronicle chronicle-queue

我想读取写入SingleChronicleQueue实例的最后一条消息。

while" chronicle.createTailer()。direction(TailerDirection.BACKWARD).toEnd()"当我们处于最后一个写入消息的同一周期时,只要我们处于未来的一个周期(与上一个写入的消息相比),tailer.readDocument(...)总是返回" false&# 34。

我已经实施了一项测试,可以根据SingleChronicleQueueTest.testForwardFollowedBackBackwardTailer测试重现该问题:

@Test
public void testForwardFollowedBackBackwardTailer() {
    File tmpDir = getTmpDir();

    // when "forwardToFuture" flag is set, go one day to the future
    AtomicBoolean forwardToFuture = new AtomicBoolean(false);
    TimeProvider timeProvider = () -> forwardToFuture.get()
            ? System.currentTimeMillis() + Duration.ofDays(1).toMillis() 
            : System.currentTimeMillis();

    try (RollingChronicleQueue chronicle = SingleChronicleQueueBuilder.binary(tmpDir)
            .rollCycle(TEST2_DAILY)
            .wireType(this.wireType)
            .timeProvider(timeProvider)
            .build()) {

        ExcerptAppender appender = chronicle.acquireAppender();

        int entries = chronicle.rollCycle().defaultIndexSpacing() + 2;

        for (int i = 0; i < entries; i++) {
            int finalI = i;
            appender.writeDocument(w -> w.writeEventName("hello").text("world" + finalI));
        }

        // go to the future (and to the next roll cycle)
        forwardToFuture.set(true);

        for (int i = 0; i < 3; i++) {
            readForward(chronicle, entries);
            readBackward(chronicle, entries);
        }
    }
}

对&#34; testForwardFollowedBackBackwardTailer&#34;进行这些更改后方法, 测试在assertTrue(documentContext.isPresent()) line in the "readBackward" method处失败。

有没有办法可靠地从SingleChronicleQueue实例中读取最后一条消息,无论过去消息到底有多远? (没有从头开始阅读整个编年史实例)

1 个答案:

答案 0 :(得分:0)

您使用哪个版本,因为这应该有效。如果您有最新版本,那就是一个错误。

您可以使用此单元测试提交拉取请求吗?