Errore di incoerenza dell’archivio dati durante il recupero di "InputStream per blobId"
Scopri come risolvere l’errore di acquisizione di InputStream nell’archivio dati. Compila un elenco di percorsi e ripristina i file mancanti e reindicizza.
Descrizione description
Ambiente
- Experience Manager 6.4
- Experience Manager 6.5
Problema/Sintomi
Hai un FileDataStore configurato nel tuo sistema Adobe Experience Manager 6.x / Oak 1.x e nel registro degli errori vedi quanto segue:
Errore durante il recupero di InputStream per blobId.
10.09.2015 10:38:04.220 *ERROR* [ pool-9-thread-3] org.apache.sling.commons.scheduler.impl.QuartzScheduler
Exception during job execution of org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate@7fe7e8fa :
Error occurred while obtaining InputStream for blobId [ add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]
java.lang.RuntimeException: Error occurred while obtaining InputStream for blobId [ add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]
Risoluzione resolution
Questo errore indica che probabilmente mancano file dalla directory dell’archivio dati di Adobe Experience Manager. La perdita dei file dell’archivio dati può essere dovuta a un errore di Oak Blob Garbage Collection, a un’interruzione dello spazio su disco, a un’instabilità del disco o della condivisione di rete. Oppure, potrebbe essere dovuto a un utente che elimina erroneamente i file dal server.
Per recuperare i file mancanti, attieniti alla procedura seguente.
-
Installare il CFP/SP più recente
Puoi trovare gli aggiornamenti rapidi più recenti in Adobe Package Share.
-
Esegui verifica coerenza archivio dati.
Utilizzando oak-run jar 1.6.6 e versioni successive, esegui il seguente comando:
code language-none java -jar oak-run-*.jar datastorecheck --consistency -ref --id --fds crx-quickstart/install/org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.config --repoHome crx-quickstart/repository --store crx-quickstart/repository/datastore --dump temp --verbose --track -
Crea un elenco di percorsi dei file mancanti.
Il passaggio successivo per il recupero dei file mancanti consiste nel compilare un elenco completo dei percorsi dei file mancanti.
Cerca nell'output della verifica di coerenza tutte le occorrenze dell'errore Record non trovato
a. In Linux o Unix: utilizzare questo comando per generare l'elenco dei file mancanti in un file
missing_ds_files.txt:code language-none grep "blobId" consistency_check_output.txt | grep -Eo "[ 0-9a-f] {40,200}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txtNota - Se l'istanza di Adobe Experience Manager non si sta avviando a causa di
blobIderrori, cercare nei file di registro incrx-quickstart/logstutte le occorrenze dell'errore'Error occurred while obtaining InputStream for blobId':code language-none grep "Error occurred while obtaining InputStream for blobId" error.log* | grep -Eo "[ 0-9a-f] {40,200}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txtSe il comando funziona correttamente, il contenuto di
missing_ds_files.txtsarà simile al seguente:code language-none 12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2 9f/d8/38/9fd8386d20cf55e7e0024e18d0c7d4e8400454ee 7a/13/15/7a1315788f45dafd6630454f04183601682a9f80 28/37/d2/2837d24aed3ff223cd40e90222226c4ef2e2a0c6b. In Windows: utilizzare un editor di testo come Textpad o Notepad++ per trovare tutte le occorrenze di Record non trovato. Quindi, dopo aver trovato tutte queste occorrenze, estrarre i nomi dei file utilizzando 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 dal nome del record in questo formato: {primi due caratteri dell'ID record}/{secondi due caratteri dell'ID record}/{terzi due caratteri dell'ID record}/{ID record}
Ad esempio, in questo errore:
code language-none java.lang.RuntimeException: Error occurred while obtaining InputStream for blobId [ add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]l'id record è
add1dd8fc5093b27b1fae1b753cb48b24ef3231fe il percorso file èad/d1/dd/add1dd8fc5093b27b1fae1b753cb48b24ef3231f -
Recupera i file mancanti.
Ora utilizza l’output dell’ultimo passaggio per individuare gli stessi file in altre istanze di Adobe Experience Manager nell’ambiente. Poiché i file dell’archivio dati vengono memorizzati in modo univoco, è possibile copiarli da altre istanze di Adobe Experience Manager nell’ambiente in uso.
Se non riesci a trovare alcuni file in altre istanze, cerca nei backup e ripristinali da lì, se possibile.
In Linux, è possibile accedere a ciascuna istanza di Adobe Experience Manager funzionante e utilizzare un comando come rsync per copiare uno qualsiasi dei file mancanti che esistono in esse. Ad esempio, eseguendolo dalla directory dell’archivio dati sul server in cui sono presenti i file mancanti:
code language-none rsync -avR --files-from=missing_ds_files.txt . user@hostname-of-server-missing-files:/path/to/crx-quickstart/repository/repository/datastore/Tramite il comando viene eseguita una rsync che copia tutti i file elencati in missing_ds_files.txt presenti nel server.
-
Pulizia dei riferimenti di file non recuperabili.
Se non sei riuscito a ripristinare alcuni dei file dal backup o da altre istanze di Adobe Experience Manager, ripulisci o correggi i riferimenti all’archivio dati errato. Esegui nuovamente il controllo di coerenza dell’archivio dati mentre lo eseguiamo al passaggio 4. Viene visualizzato un elenco corrente dei file mancanti.
Esamina ciascuno dei percorsi dei nodi elencati che fanno riferimento a file dell’archivio dati mancanti. Esamina eventuali risorse DAM mancanti o file caricati sulle pagine con il tuo utente. Chiedi loro di ricaricare eventuali file mancanti di cui hanno bisogno. Eventuali elementi non necessari possono essere eliminati tramite l’interfaccia utente di Adobe Experience Manager. Se manca qualcosa in /var/audit o /var/eventing, puoi tranquillamente eliminarlo. Per qualsiasi file di cui non sei sicuro, vai qui e contatta il team di supporto dell'AEM per assistenza.
-
Reindicizza tutti gli indici Oak asincroni.
Poiché i file di indice sono memorizzati nell’archivio di Oak, è possibile che alcuni file non siano presenti negli indici basati su /oak:index Lucene.
I file mancanti non vengono segnalati nella verifica di coerenza /system/console/repositorycheck in quanto sono nascosti dagli attraversamenti dell’archivio. Sfortunatamente, tali file non corrisponderebbero tra le diverse istanze AEM.
Per correggere tali incoerenze, reindicizza gli indici Oak asincroni interessati.
AVVISO: questa operazione è estremamente costosa e richiederà tempi di inattività prolungati, da 10 minuti a più giorni, a seconda del volume di contenuto nel sistema.
Per reindicizzare gli indici asincroni:
-
Scarica oak-run 1.0.x corrispondente alla versione installata nel tuo ambiente Oak: https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/
-
Carica oak-run sul server Adobe Experience Manager.
-
Arresta tutte le istanze di Adobe Experience Manager.
-
Esegui il comando seguente corrispondente all’archiviazione Oak dell’istanza Adobe Experience Manager:
Comando TarMK:
code language-none java -Xmx4096m -jar /apps/staging/oak-run-*-*.jar checkpoints crx-quickstart/repository/segmentstore rm-allComando MongoMK:
code language-none java -Xmx4096m -jar oak-run-*-*.jar checkpoints mongodb://localhost/aem-author rm-all -
Riavviare Adobe Experience Manager e monitorare i file di log per i messaggi di log INFO di
org.apache.jackrabbit.oak.plugins.index. Se desideri visualizzare ulteriori dettagli sull'indicizzazione, passa all'interfaccia utente /system/console/slinglog e abilita la registrazione a livello di debug perorg.apache.jackrabbit.oak.plugins.index.Dovresti visualizzare messaggi di registro come questi:
code language-none 23.06.2015 14:26:23.070 *INFO* [ FelixStartLevel] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Reindexing will be performed for following indexes: [ /oak:index/cqAcUUID, /oak:index/nodetype, /oak:index/deviceIdentificationMode, /oak:index/campaignpath, /oak:index/active, /oak:index/jcrFrozenMixinTypes] 23.06.2015 14:26:23.517 *INFO* [ FelixStartLevel] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Reindexing Traversed #10000 /jcr:system/jcr:versionStorage/c8/5f ... 23.06.2015 14:28:51.999 *INFO* [ pool-8-thread-1] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Indexing report - /oak:index/counter*(708) - /oak:index/authorizables*(159) - /oak:index/cqPageLucene*(1913) - /oak:index/ntBaseLucene*(444) - /oak:index/cqTagLucene*(512) - /oak:index/workflowDataLucene*(116) ... 23.06.2015 14:28:52.009 *INFO* [ pool-8-thread-1] org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate Reindexing (async) completed for indexes: [ /oak:index/counter*(708), /oak:index/authorizables*(159), /oak:index/cqPageLucene*(1913), /oak:index/ntBaseLucene*(444), /oak:index/cqTagLucene*(512), /oak:index/workflowDataLucene*(116)] in 30.36 s -
Se per qualche motivo l’indicizzazione non riesce, viene visualizzato un ciclo continuo, ripetendo questo messaggio di registro:
code language-none 23.06.2015 14:26:23.070 *INFO* [ FelixStartLevel] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Reindexing will be performed for following indexes: [ /oak:index/cqAcUUID, /oak:index/nodetype, /oak:index/deviceIdentificationMode, /oak:index/campaignpath, /oak:index/active, /oak:index/jcrFrozenMixinTypes]
-