2016-10-18 13 views
1

SingleChronicleQueueインスタンスに書き込まれた最後のメッセージを読みたいとします。クロニクルの最後のメッセージを読み取る方法

"chronicle.createTailer()。direction(TailerDirection.BACKWARD).toEnd()"は、私たちが将来のサイクルの1つに入るとすぐに、最後に書き込まれたメッセージと同じサイクルにいる間に機能します最後に書かれたメッセージまで)、tailer.readDocument(...)は常に "false"を返します。私はSingleChronicleQueueTest.testForwardFollowedBackBackwardTailerテストに基づいて、問題を再現するためにテストを実施している

:「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); 
     } 
    } 
} 

は、 テストがassertTrue(documentContext.isPresent()) line in the "readBackward" methodで失敗します。

最後のメッセージが過去のどれくらいであっても、確実にSingleChronicleQueueインスタンスから最後のメッセージを読み取る方法はありますか? (最初から全部のインスタンスを読み取ることなく)

答えて

0

どちらのバージョンを使用していればうまくいきますか?最新バージョンをお持ちの場合はバグです。

このユニットテストでプルリクエストを送信できますか?

+0

私はmavenで見つかった最新の "4.5.15"を使用しています。 –

+0

確かに、プルリクエストを提出します。 –

+1

https://github.com/OpenHFT/Chronicle-Queue/pull/302 –

関連する問題