Record di incoerenza del datastore non trovato

Problema

Viene visualizzato uno di questi messaggi nel error.log:

*WARN * BLOBInDataStore: getSize for a586f73ec77fba3135021af01c7f09d972eb3e01 failed (BLOBInDataStore.java, line 95)
org.apache.jackrabbit.core.data.DataStoreException: Record not found: a586f73ec77fba3135021af01c7f09d972eb3e01

org.apache.jackrabbit.core.data.DataStoreException: Failed to read record modified date: /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e

Caused by: java.io.FileNotFoundException: /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e
at org.apache.jackrabbit.core.data.LazyFileInputStream.<init>(LazyFileInputStream.java:63)
at org.apache.jackrabbit.core.data.FileDataRecord.getStream(FileDataRecord.java:57)
... 114 more

Soluzione

Questo errore significa che stai perdendo file dalla directory del datastore AEM.  Vedi questa documentazione per maggiori dettagli su cosa è e come funziona il datastore. La perdita di file del datastore può essere dovuta a un fallimento del garbage collection del datastore, un'interruzione dello spazio su disco, disco o instabilità della condivisione di rete. Oppure, potrebbe essere dovuto ad un utente che ha erroneamente cancellato dei file dal server.

Per recuperare i file mancanti, segui la seguente procedura.

1. Installa l'ultimo hotfix di CRX

Prima di continuare, se utilizzi CQ5.4 o prima, scarica l'ultima hotfix CRX e installala se l'istanza di CQ è in fase di avvio.

Puoi trovare gli ultime hotfix su Condivisione pacchetti Adobe.

2. Correggi gli errori "File non trovato:"

Se mancano i file tar come descritto in questo articolo, risolvi prima quel problema.  Se mancano i file tar, è probabile che nel log error.log visualizzi alcuni errori come "File non trovato:".

Per esempio, ecco alcuni errori che sono stati osservati durante il GC del datastore a causa della mancanza di un file tar:

27.02.2012 13:55:01 *WARN * TarSet: File not found: 4650 for entry 6c18a73a-aba1-44b8-93c2-90fb49cac5e5 pos:4650/148692992 length: 669 from /opt/author/crx-quickstart/repository/workspaces/crx.default/copy [4651, 4652, 4653, 4654, 4655, 4656, 4657, 4658, 4659, 4660, 4661, 4662, 4663].
27.02.2012 13:55:38 *INFO * FileDataStore: Deleting old file /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e modified: 2012-02-23 10:06:58.0 length: 6555 (FileDataStore.java, line 315)
28.02.2012 10:49:46 *WARN * BLOBInDataStore: getSize for 6fb61425b9187a97f9404cee290cc255177c702e failed (BLOBInDataStore.java, line 95)
org.apache.jackrabbit.core.data.DataStoreException: Failed to read record modified date: /opt/author/crx-quickstart/repository/shared/repository/datastore/6f/b6/14/6fb61425b9187a97f9404cee290cc255177c702e

3. Esegui un controllo di coerenza del DataStore

L'unico modo per ottenere un elenco completo di tutti i file mancanti nell'archivio dati è quello di eseguire un Controllo di coerenza del datastore.  Se la tua istanza AEM è in grado di avviarsi, segui questi passaggi sull'istanza in esecuzione:

  1. Vai a CRX Explorer e accedi come amministratore.
    - http://<host>:<port>/crx (CQ5.4/CRX2.2 e versioni precedenti)
    - http://<host>:<port>/crx/explorer/index.jsp (CQ5.5/CRX2.3 e versioni successive)
  2. Fai clic su Configurazione archivio.
  3. Fai clic su Controlla archivio.
  4. Seleziona Coerenza del datastore.
  5. Fate clic su Esegui.
  6. Tieni aperto il tuo browser per tutta la durata del processo. Emette messaggi sullo schermo solo quando viene rilevato un errore e il processo non scrive alcun messaggio nel file di log.  I messaggi di errore riportano il percorso del nodo da cui è stato fatto riferimento al record del datastore e l'id del record del file mancante.
  7. Al termine del processo, copia l'output in un file di testo consistency_check_output.txt e passa alla fase successiva.

4. Crea una lista di percorsi dei file mancanti

Il passo successivo nel recupero dei file mancanti è quello di compilare un elenco completo dei percorsi dei file mancanti.

1. Cerca nell'output di controllo coerenza tutti i casi di errore "Record non trovato."

a. In Linux o Unix: Utilizza questo comando per visualizzare l'elenco dei file mancanti in un file missing_ds_files.txt:

grep "Record not found:" consistency_check_output.txt | grep -Eo "[0-9a-f]{40}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt

** Se la tua istanza AEM non si avvia a causa degli errori "Record non trovato", cerca nei tuoi file di log in crx-quickstart/logs per tutte le occorrenze dell'errore "Record non trovato":

grep "Record not found:" error.log* | grep -Eo "[0-9a-f]{40}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt

Se il comando ha funzionato correttamente, il contenuto di missing_ds_files.txt sarà simile al seguente:

12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2
9f/d8/38/9fd8386d20cf55e7e0024e18d0c7d4e8400454ee
7a/13/15/7a1315788f45dafd6630454f04183601682a9f80
28/37/d2/2837d24aed3ff223cd40e90222226c4ef2e2a0c6

  b. In Windows:  Usa un editor di testo come Textpad o Notepad+++ per trovare tutte le occorrenze di "Record non trovato."  Poi, dopo aver trovato tutte queste occorrenze, estrai i nomi dei file usando una macro, scrivendo uno script o copiando e costruendo manualmente i nomi dei file in un nuovo file di testo.

I percorsi dei file DataStore sono costruiti a partire dal nome del record in questo formato:
{primi due caratteri di record id}/{secondi due caratteri di record id}/{terzi due caratteri di record id}/{record id}/{record id}

Per esempio, in questo errore:

error.log: org.apache.jackrabbit.core.data.DataStoreException: Record not found: 129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2

l'id del record è 129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2 e il percorso del file è 12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2

5. Recupera i file mancanti

Ora usa l'output dell'ultimo passaggio per cercare gli stessi file in altre istanze AEM (CQ) nel tuo ambiente.  Poiché i file del datastore sono memorizzati singolarmente, puoi copiarli da altre istanze AEM nel tuo ambiente.

Se non è possibile trovare alcuni dei file in altri casi, cerca nei backup e ripristinali da lì, se possibile.

In Linux, puoi accedere a ciascuna delle istanze AEM funzionanti e usare un comando come rsync per copiare i file mancanti che esistono in esse.  Ad esempio, eseguendolo dalla directory del datastore sul server che ha i file mancanti:

rsync -avR --files-from=missing_ds_files.txt . user@hostname-of-server-missing-files:/path/to/crx-quickstart/repository/repository/datastore/

Il comando esegue un rsync che copia sui file elencati in missing_ds_files.txt che esistono nel server. 

6. Pulire i riferimenti di file non recuperabili

Se non sei stato in grado di recuperare alcuni dei file dal backup o da altre istanze AEM (CQ) allora ripulisci o correggi i riferimenti scorretti del datastore.  Esegui nuovamente il controllo di coerenza del DataStore come mostrato nel passaggio 4.  Ottieni una lista aggiornata dei file mancanti.

Esamina ciascuno dei percorsi dei nodi elencati che fanno riferimento ai file mancanti del datastore.  Esamina le risorse DAM mancanti o i file caricati nelle pagine con il tuo utente.  Fa' in modo che ricarichino quelli mancanti di cui hanno bisogno.  Qualsiasi cosa non sia necessaria può essere cancellata in tutta sicurezza tramite l'interfaccia utente di AEM.  Se manca qualcosa da /var/audit o /var/evento può essere tranquillamente cancellato.  Per qualsiasi file di cui non sei sicuro, vai qui e contatta il team di supporto AEM per assistenza.

Si applica a

CRX 2.2, 2.3

Logo Adobe

Accedi al tuo account