Problema
Un'istanza non si riavvia e registra il seguente messaggio su un sistema Linux:
xx.xx.xx.xxxx xx:xx:xx:xx.xxx *ERROR* org.apache.jackrabbit.core.RepositoryImpl Non è stato possibile inizializzare lo spazio di lavoro 'crx.default' javax.jcr.RepositoryException: Non è possibile istanziare il gestore della persistenza com.day.crx.crx.persistence.tarPe
rsistenceManager
su com.day.crx.core.CRXRepositoryImpl$CRXWorkspaceInfo.createPersistenceManager(CRXRepositoryImpl.java:1290)
a com.day.crx.core.CRXRepositoryImpl$CRXWorkspaceInfo.doInitialize(CRXRepositoryImpl.java:1307)
a org.apache.jackrabbit.core.core.RepositoryImpl$WorkspaceInfo.initialize(RepositoryImpl.java:2002)
a org.apache.jackrabbit.core.RepositoryImpl.initStartupWorkspaces(RepositoryImpl.java:517)
su com.day.crx.core.CRXRepositoryImpl.initStartupWorkspaces(CRXRepositoryImpl.java:428)
su org.apache.jackrabbit.core.repositoryImpl.(RepositoryImpl.java:324)
su com.day.crx.core.CRXRepositoryImpl.(CRXRepositoryImpl.java:283)
at com.day.crx.core.CRXRepositoryImpl.create(CRXRepositoryImpl.java:258)
...
Caused by: java.io.IOException: Bad file descriptor
at java.io.RandomAccessFile.writeBytes(Native Method)
at java.io.RandomAccessFile.write(RandomAccessFile.java:469)
at com.day.crx.persistence.tar.file.TarFile.write(TarFile.java:736)
at com.day.crx.persistence.tar.file.TarFile.writeData(TarFile.java:629)
at com.day.crx.persistence.tar.file.TarFile.appendMetaData(TarFile.java:703)
at com.day.crx.persistence.tar.file.TarFile.append(TarFile.java:585)
at com.day.crx.persistence.tar.TarSet.switchDataFile(TarSet.java:443)
at com.day.crx.persistence.tar.TarSet.open(TarSet.java:225)
at com.day.crx.persistence.tar.ClusterTarSet.reopenCopy(ClusterTarSet.java:1413)
at com.day.crx.persistence.tar.ClusterTarSet.open(ClusterTarSet.java:828)
at com.day.crx.persistence.tar.TarPersistenceManager.openTarSet(TarPersistenceManager.java:963)
at com.day.crx.persistence.tar.TarPersistenceManager.init(TarPersistenceManager.java:494)
at com.day.crx.core.CRXRepositoryImpl$CRXWorkspaceInfo.createPersistenceManager(CRXRepositoryImpl.java:1286)
... 59 more
xx.xx.xxxx xx:xx:xx.xxx *ERROR* org.apache.jackrabbit.core.RepositoryImpl Unable to start repository, forcing shutdown...
o su un sistema Windows:
xx.xx.xxxx xx:xx:xx.xxx *ERROR* [FelixStartLevel] org.apache.jackrabbit.core.RepositoryImpl Failed to initialize workspace 'crx.default' javax.jcr.RepositoryException: Cannot instantiate persistence manager com.day.crx.persistence.tar.TarPersistenceManager at com.day.crx.core.CRXRepositoryImpl$CRXWorkspaceInfo.createPersistenceManager(CRXRepositoryImpl.java:1325) at com.day.crx.core.CRXRepositoryImpl$CRXWorkspaceInfo.doInitialize(CRXRepositoryImpl.java:1342) at org.apache.jackrabbit.core.RepositoryImpl$WorkspaceInfo.initialize(RepositoryImpl.java:2002) at org.apache.jackrabbit.core.RepositoryImpl.initStartupWorkspaces(RepositoryImpl.java:517) at com.day.crx.core.CRXRepositoryImpl.initStartupWorkspaces(CRXRepositoryImpl.java:452) at org.apache.jackrabbit.core.RepositoryImpl.(RepositoryImpl.java:324) su com.day.crx.core.CRXRepositoryImpl.(CRXRepositoryImpl.java:307) at com.day.crx.core.CRXRepositoryImpl.create(CRXRepositoryImpl.java:262) at com.day.crx.core.CRXRepositoryImpl.create(CRXRepositoryImpl.java:245) at com.day.crx.sling.server.impl.jmx.ManagedRepository.activate(ManagedRepository.java:168) ...
Caused by: java.io.IOException: Access is denied at java.io.RandomAccessFile.writeBytes(Native Method) at java.io.RandomAccessFile.write(Unknown Source) at com.day.crx.persistence.tar.file.TarFile.write(TarFile.java:742) at com.day.crx.persistence.tar.file.TarFile.writeData(TarFile.java:635) at com.day.crx.persistence.tar.file.TarFile.appendMetaData(TarFile.java:709) at com.day.crx.persistence.tar.file.TarFile.append(TarFile.java:591) at com.day.crx.persistence.tar.TarSet.switchDataFile(TarSet.java:445) at com.day.crx.persistence.tar.TarSet.open(TarSet.java:227) at com.day.crx.persistence.tar.ClusterTarSet.reopenCopy(ClusterTarSet.java:1455) at com.day.crx.persistence.tar.ClusterTarSet.open(ClusterTarSet.java:860) at com.day.crx.persistence.tar.TarPersistenceManager.openTarSet(TarPersistenceManager.java:980) at com.day.crx.persistence.tar.TarPersistenceManager.init(TarPersistenceManager.java:500) at com.day.crx.core.CRXRepositoryImpl$CRXWorkspaceInfo.createPersistenceManager(CRXRepositoryImpl.java:1321) ... 59 more
In precedenza nei registri, potrebbe esserci un messaggio come quello qui sotto:
*ERROR* com.day.crx.core.backup.LowDiskSpaceMonitor Missing file(s). L'archivio viene chiuso ora.
Un altro messaggio relativo a "I file data*.tar sono ora in modalità sola lettura per motivi di sicurezza...." potrebbe anche comparire all'incirca nello stesso momento (a seconda della versione CRX e delle patch).
Soluzione
I messaggi vengono lanciati quando viene rilevata un'incongruenza tra index_*.tar e data_*.tar, e i file data*.tar sono in modalità sola lettura.
Ripristinare i dati_*.tar per leggere/scrivere. Per fare ciò:
- Su sistemi Linux, usare il comando chmod per impostare di nuovo i permessi dei file a destra.
- Su Windows, basta rimuovere l'attributo 'di sola lettura' sui file.
Quindi, elimina i file index_*.tar e configurare l'archivio per avviarlo in modalità consistency check/fix (sia per l'archivio che per l'indice di ricerca Lucene). Se non vengono rilevati errori, rimuovi il controllo/ripristino di coerenza per rendere più veloce l'avvio successivo.