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 回答