Как прочитать последнее сообщение в хронике с длительным переходом

#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. Конечно, я отправлю запрос на извлечение.