2016-12-23 14 views
0

クロニクルキューv4.5.15を使用しています。私は私にキュー内にある要素の数を伝えるための方法を作成しました:今後のファイルのクロニクル 'ファイルが見つかりません'

public long getQueueSize() { 
    long index = getQueueIndex(); // I store the index in a persistent map so this method simply retrieves the current index from the map. 

    ExcerptTailer tailer = queue.createTailer(); 

    long lastIndex = tailer.toEnd().index(); // Get the last index in our queue. 
    long count = queue.countExcerpts(queueIndex, lastIndex); 

    return count 

} 

私は一晩テストを実行し、私のコンポーネントは、12月22日のために書かれcq4キューファイルを持っていました。それは毎日のサイクルです。今日キューにいくつかの要素を追加しようとしましたが、例外がスローされました'IllegalStateException: 'file not found' for the upperCycle, file ../path_to_queue/20161314.cq4

スタックトレース:

Caused by java.lang.IllegalStateException: java.lang.IllegalStateException: 'file not found' for the upperCycle, file=/var/tmp/app/20161224.cq4 
at net.openhft.chronicle.queue.impl.single.SingleChronicleQueue.countExcertps(SingleChronicleQueue.java:359(
at ... 

12月23日の今日、なぜクロニクルは将来のファイルを探していると見て?

私は最後のインデックスを取得する方法と関係がありますか?

おかげで

+0

は、あなたがこのエラーは年代記のどこに表示されないよう、全体のスタックトレースを含めることはできますか? –

+0

私はstacktraceを追加しました。 SiongleChronicleQueueクラスの665行目にこの例外がスローされています。メソッドtoKeyはこの例外をスローします。 – sam

+0

私は、メッセージが異なる理由である古いバージョンを実行しています。このコードがそのバージョン以降に変更されているのを見ると、バージョン4.5.19を試すことができますか? –

答えて

0

多分それはすべての日カウンタ変数についてですあなたには、いくつかの要素のコードを追加したときに、私は一日のサイクルのためにそれをカウントした後、1日ごとに変更することができますを意味します。何度も要素を追加しようとしましたか?もし何が起こったのですか?

+0

Ok - 私のテストケースを上記の(クロニクルキューの最新バージョンを使用して)上に適合させて問題を再現できるようにしてください。問題があればそれを修正します。 –

0

最後のバージョンで再テストできますか?以下のテストケースを追加しました。

は、以下を参照してください。RollingChronicleQueueTest

@Test 
public void testCountExcerptsWhenTheCycleIsRolled() throws Exception { 

    final AtomicLong time = new AtomicLong(); 

    final SingleChronicleQueue q = binary(getTmpDir()) 
      .timeProvider(time::get) 
      .rollCycle(TEST_SECONDLY) 
      .build(); 

    final ExcerptAppender appender = q.acquireAppender(); 
    time.set(0); 

    appender.writeText("1. some text"); 
    long start = appender.lastIndexAppended(); 
    appender.writeText("2. some more text"); 
    time.set(1000); 
    appender.writeText("3. some text - first cycle"); 
    time.set(2000); 
    time.set(3000); // large gap to miss a cycle file 
    time.set(4000); 
    appender.writeText("4. some text - second cycle"); 
    appender.writeText("some more text"); 
    long end = appender.lastIndexAppended(); 

    Assert.assertEquals(4, q.countExcerpts(start, end)); 
} 
+0

こんにちは、そのテストケースは私のバージョンにも渡します。ここでの回避策として、開始インデックスと終了インデックスを永続マップに格納し、必要に応じてcountExcerptsに渡します。 – sam

+0

うまくいくはずです。後で - この問題を再現する方法が見つかったら、テストケースを大歓迎します。ありがとうございます。 –

関連する問題