2016-06-17 13 views
1

내 인덱스 구조에 ChronicleMap을 사용하려고하는데 Linux에서 제대로 작동하는 것으로 보이지만 Windows (내 개발 환경)에서 JUnit 테스트를 실행할 때 오류가 계속 발생합니다. : java.io.IOException : 파일 준비가 완료 될 때까지 기다릴 수 없습니다. 파일을 만든 프로세스가 충돌하거나 1 분 이상 걸렸을 가능성이 있습니다. 다음 예외가 발생Windows의 크로니클 맵 관련 문제

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) 

답변

0

을 실제로, 파일을 생성 한 프로세스가 충돌하거나 중지 종료 된 것 같다 디버깅 또는 그와 비슷한 것입니다.

단위 테스트에서 테스트 실행까지 새로운 색인을 얻는 것이 좋으면 크로니클 맵을 만들기 전에 idxFullPath에서 파일을 삭제하거나 File.createTempFile()과 같은 방법으로 매핑 파일을 무작위로 추출하는 것이 좋습니다. 두 경우 모두 File.deleteOnExit()이 도움이 될 수 있습니다.

단위 테스트 실행 사이에 색인을 유지하고 지속성을 위해 항상 idxFullPath에서 동일한 파일을 사용하려는 경우 일반 createPersistedTo()지도 작성 방법 대신 builder.createOrRecoverPersistedTo()을 사용해 볼 수 있습니다. 그러나 이렇게하면지도 작성 속도가 느려질 수 있습니다.