1

インデックス構造に ChronicleMap を使用しようとしています。これは Linux では問題なく動作するようですが、Windows (私の開発環境) で JUnit テストを実行すると、エラーが発生し続けます: java.io.IOException: Unable toファイルの準備が整うまで待ちます。ファイルを作成したプロセスがクラッシュしたか、1 分以上ハングした可能性があります。

問題のあるコード スニペットは次のとおりです。

File file = new File(idxFullPath);
        ChronicleMap<Integer, int[]> idx =
                ChronicleMapBuilder.of(Integer.class, int[].class)
                        .averageValue(getSampleIdxList())
                        .entries(IDX_MAX_SIZE)
                        .createPersistedTo(file);

次の例外がスローされます。

[2016-06-17 14:32:47.779] ERROR  main            com.mcm.op.persistence.Persistence                ERR java.io.IOException: Unable to wait until the file is ready, likely the process which created the file crashed or hung for more than 1 minute
at net.openhft.chronicle.map.ChronicleMapBuilder.waitUntilReady(ChronicleMapBuilder.java:1520)
at net.openhft.chronicle.map.ChronicleMapBuilder.openWithExistingFile(ChronicleMapBuilder.java:1583)
at net.openhft.chronicle.map.ChronicleMapBuilder.createWithFile(ChronicleMapBuilder.java:1444)
at net.openhft.chronicle.map.ChronicleMapBuilder.createPersistedTo(ChronicleMapBuilder.java:1405)
at com.mcm.op.persistence.Persistence.initIdx(Persistence.java:131)
at com.mcm.op.persistence.Persistence.init(Persistence.java:177)
at com.mcm.op.persistence.PersistenceTest.initPersist(PersistenceTest.java:47)
at com.mcm.op.persistence.PersistenceTest.setUp(PersistenceTest.java:29)
4

1 に答える 1

0

実際、ファイルを作成したプロセスがクラッシュしたか、デバッグを停止したか、またはそのようなことが原因である可能性があります。

単体テストごとに新しいインデックスを作成しても問題ない場合はidxFullPath、Chronicle Map を作成する前に でファイルを削除するか、または などでマッピング ファイルをランダム化することをお勧めしますFile.createTempFile()。どちらの場合File.deleteOnExit()でも役に立ちそうです。

単体テストの実行間でインデックスを保持し、永続化のために常に同じファイルを使用する場合は、単純なマップ作成方法の代わりidxFullPathに使用を試みることができます。ただし、これによりマップの作成が遅くなる可能性があります。builder.createOrRecoverPersistedTo()createPersistedTo()

于 2016-06-21T07:13:59.937 に答える