我想读取写入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实例中读取最后一条消息,无论过去消息到底有多远? (没有从头开始阅读整个编年史实例)
答案 0 :(得分:0)
您使用哪个版本,因为这应该有效。如果您有最新版本,那就是一个错误。
您可以使用此单元测试提交拉取请求吗?