2016-06-17 1 views
1

J'essaie d'utiliser ChronicleMap pour ma structure d'index, cela semble fonctionner correctement sur Linux mais quand je cours mon test JUnit sur Windows (qui est mon environnement de développement), je reçois toujours une erreur : java.io.IOException: Impossible d'attendre jusqu'à ce que le fichier soit prêt, probablement le processus qui a créé le fichier s'est écrasé ou a été suspendu pendant plus d'une minute.Problèmes avec Chronicle Map sur Windows

est ici l'extrait de code qui est problématique:

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

L'exception suivante est levée:

[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) 

Répondre

0

En effet, il est probable que le processus qui a créé le fichier est tombé en panne, ou arrêté pris fin débogage, ou quelque chose comme ça. Si vous avez un nouvel index à partir des tests unitaires de test, je recommande d'essayer de supprimer le fichier au idxFullPath avant de créer une carte Chronique, ou de randomiser le fichier de mapping par quelque chose comme File.createTempFile(). Dans les deux cas File.deleteOnExit() pourrait sembler utile.

Si vous voulez garder l'index entre les cycles de tests unitaires et toujours utiliser le même fichier à idxFullPath pour la persistance, vous pouvez essayer d'utiliser builder.createOrRecoverPersistedTo() au lieu de la méthode simple de création de carte createPersistedTo(). Cependant, cela pourrait ralentir la création de la carte.