#chronicle #chronicle-queue
#хроника #хроника-очередь
Вопрос:
Я хочу прочитать последнее сообщение, записанное в экземпляр SingleChronicleQueue.
В то время как «хроника.createTailer().direction(TailerDirection.BACKWARD).toEnd()» работает, пока мы находимся в том же цикле, что и последнее записанное сообщение, как только мы попадаем в один из будущих циклов (по сравнению с последним записанным сообщением), tailer.readDocument(…) всегда возвращает «false».
Я внедрил тест для воспроизведения проблемы на основе теста 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);
}
}
}
После этих изменений в методе «testForwardFollowedBackBackwardTailer»
тест завершается с ошибкой в строке assertTrue(DocumentContext.isPresent()) в методе «readBackward».
Есть ли какой-либо способ надежно прочитать последнее сообщение из экземпляра SingleChronicleQueue, независимо от того, как далеко в прошлом было последнее сообщение? (без чтения всего экземпляра хроники с самого начала)
Ответ №1:
Какую версию вы используете, поскольку это должно работать. Если у вас последняя версия, это ошибка.
Можете ли вы отправить запрос на извлечение с помощью этого модульного теста?
Комментарии:
1. Я использую «4.5.15», последнее, что я нашел в maven.
2. Конечно, я отправлю запрос на извлечение.