Datenspeicher-Inkonsistenzfehler beim Abrufen von „InputStream for blobId“
Erfahren Sie, wie Sie den Fehler beim Abrufen des InputStream-Datenspeichers beheben. Kompilieren Sie eine Liste von - und stellen Sie die Pfade zu fehlenden Dateien wieder her - und indizieren Sie sie neu.
Beschreibung description
Umgebung
- Experience Manager 6.4
- Experience Manager 6.5
Problem/Symptome
Adobe Experience Manager In Ihrem 6.x/Oak 1.x-System Sie einen „FileDataStore“ konfiguriert. Im error.log wird Folgendes angezeigt:
Fehler beim Abrufen von InputStream für 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]
Auflösung resolution
Dieser Fehler bedeutet, dass möglicherweise Dateien aus dem Adobe Experience Manager-Datenspeicherverzeichnis fehlen. Der Verlust von Datenspeicherdateien kann auf einen Fehler bei der Oak Blob Garbage Collection, einen Speicherplatzausfall, einen Datenträger oder eine Instabilität der Netzwerkfreigabe zurückzuführen sein. Oder es kann daran liegen, dass ein Benutzer versehentlich Dateien vom Server löscht.
Gehen Sie wie folgt vor, um die fehlenden Dateien wiederherzustellen.
-
Installieren Sie das neueste CFP/SP.
Die neuesten Hotfixes finden Sie auf Adobe Package Share.
-
Führen Sie eine Konsistenzprüfung des Datenspeichers aus.
Führen Sie mit oak-run jar 1.6.6 und höher den folgenden Befehl aus:
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 -
Erstellen Sie eine Liste der Pfade der fehlenden Dateien.
Der nächste Schritt zum Wiederherstellen der fehlenden Dateien besteht darin, eine vollständige Liste der Pfade der fehlenden Dateien zu erstellen.
Durchsuchen Sie die Ausgabe der Konsistenzprüfung nach allen Fehlervorfällen (nicht gefunden
a. Unter Linux oder Unix: Verwenden Sie diesen Befehl, um die Liste der fehlenden Dateien an einen
missing_ds_files.txtauszugeben: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.txtHinweis - Wenn Ihre Adobe Experience Manager-Instanz aufgrund von
blobIdnicht startet, durchsuchen Sie stattdessen Ihre Protokolldateien untercrx-quickstart/logsnach allen Vorkommen der'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.txtWenn der Befehl ordnungsgemäß funktionierte, würde der Inhalt von
missing_ds_files.txtin etwa wie folgt aussehen:code language-none 12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2 9f/d8/38/9fd8386d20cf55e7e0024e18d0c7d4e8400454ee 7a/13/15/7a1315788f45dafd6630454f04183601682a9f80 28/37/d2/2837d24aed3ff223cd40e90222226c4ef2e2a0c6b. In Windows: Verwenden Sie einen Texteditor wie Textpad oder Notepad++, um alle Vorkommen von "nicht gefunden“. Extrahieren Sie dann, nachdem Sie alle derartigen Vorkommen gefunden haben, die Dateinamen mithilfe eines Makros, indem Sie ein Skript schreiben oder indem Sie die Dateinamen manuell kopieren und in eine neue Textdatei erstellen.
Datenspeicherdateipfade werden aus dem Datensatznamen in folgendem Format erstellt: {first two chars of record id}/{second two chars of record id}/{third two chars of record id}/{record id}
In diesem Fehler:
code language-none java.lang.RuntimeException: Error occurred while obtaining InputStream for blobId [ add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]Die Datensatz-ID ist
add1dd8fc5093b27b1fae1b753cb48b24ef3231fund der Dateipfadad/d1/dd/add1dd8fc5093b27b1fae1b753cb48b24ef3231f -
Stellen Sie die fehlenden Dateien wieder her.
Verwenden Sie nun die Ausgabe aus dem letzten Schritt, um dieselben Dateien in anderen Adobe Experience Manager-Instanzen in Ihrer Umgebung zu suchen. Da die Datenspeicherdateien eindeutig gespeichert werden, können Sie sie von anderen Adobe Experience Manager-Instanzen in Ihrer Umgebung kopieren.
Wenn Sie einige der Dateien nicht in anderen Instanzen finden können, durchsuchen Sie Ihre Backups und stellen Sie sie dort wieder her, falls möglich.
Unter Linux können Sie sich bei jeder der funktionierenden Adobe Experience Manager-Instanzen anmelden und einen Befehl wie rsync verwenden, um alle fehlenden Dateien zu kopieren, die in ihnen vorhanden sind. Beispielsweise durch Ausführen von über das Datenspeicherverzeichnis auf dem Server, auf dem die Dateien fehlen:
code language-none rsync -avR --files-from=missing_ds_files.txt . user@hostname-of-server-missing-files:/path/to/crx-quickstart/repository/repository/datastore/Der Befehl führt einen rsync-Befehl aus, der alle Dateien kopiert, die in missing_ds_files.txt aufgeführt sind und auf dem Server vorhanden sind.
-
Bereinigen Sie nicht wiederherstellbare Dateiverweise.
Wenn Sie einige der Dateien nicht aus der Sicherung oder von anderen Adobe Experience Manager-Instanzen wiederherstellen konnten, bereinigen oder beheben Sie die fehlerhaften Datenspeicherverweise. Führen Sie die Konsistenzprüfung des Datenspeichers so erneut aus, wie wir sie in Schritt 4 ausgeführt haben. Es wird eine aktuelle Liste der fehlenden Dateien angezeigt.
Überprüfen Sie alle aufgelisteten Knotenpfade, die auf fehlende Datenspeicherdateien verweisen. Überprüfen Sie mit Ihrem Benutzer alle fehlenden DAM-Assets oder Dateien, die auf Seiten hochgeladen wurden. Fordern Sie sie auf, alle fehlenden Dateien erneut hochzuladen. Alle nicht erforderlichen Elemente können sicher über die Benutzeroberfläche von Adobe Experience Manager gelöscht werden. Wenn unter /var/audit oder /var/eventing etwas fehlt, kann es sicher gelöscht werden. Wenn Sie sich nicht sicher sind, gehen Sie hier und wenden Sie sich an das AEM-Supportteam.
-
Indizieren Sie alle asynchronen Oak-Indizes neu.
Da Indexdateien im Oak-Repository gespeichert werden, kann es auch sein, dass einige Dateien in /oak:index lucene-basierten Indizes fehlen.
Diese fehlenden Dateien werden bei der Konsistenzprüfung unter /system/console/repository nicht gemeldet, da sie vor Repository-Durchläufen ausgeblendet sind. Leider stimmen solche Dateien nicht über verschiedene AEM-Instanzen hinweg überein.
Um diese Inkonsistenzen zu beheben, indizieren Sie die betroffenen asynchronen Oak-Indizes neu.
WARNUNG: Dieser Vorgang ist extrem teuer und erfordert verlängerte Ausfallzeiten von 10 Minuten bis zu mehreren Tagen, je nach Volumen des Inhalts im System.
So indizieren Sie die asynchronen Indizes neu:
-
Laden Sie oak-run 1.0.x herunter, das der in Ihrer Oak-Umgebung installierten Version entspricht: https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/
-
Laden Sie die oak-run-Datei auf den Adobe Experience Manager-Server hoch.
-
Beenden Sie alle Adobe Experience Manager-Instanzen.
-
Führen Sie den folgenden Befehl aus, der dem Oak-Speicher Ihrer Adobe Experience Manager-Instanz entspricht:
TarMK-:
code language-none java -Xmx4096m -jar /apps/staging/oak-run-*-*.jar checkpoints crx-quickstart/repository/segmentstore rm-allMongoMK-Befehl:
code language-none java -Xmx4096m -jar oak-run-*-*.jar checkpoints mongodb://localhost/aem-author rm-all -
Starten Sie Adobe Experience Manager erneut und überwachen Sie Ihre Protokolldateien auf INFO-Protokollmeldungen aus
org.apache.jackrabbit.oak.plugins.index. Wenn Sie weitere Details zur Indizierung sehen möchten, gehen Sie zu /system/console/slinglog UI und aktivieren Sie die Protokollierung auf Debugging-Ebene fürorg.apache.jackrabbit.oak.plugins.index.Sie sollten Protokollmeldungen wie die folgende sehen:
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 -
Wenn die Indizierung aus irgendeinem Grund fehlschlägt, wird sie in einer Schleife angezeigt, wobei diese Protokollmeldung wiederholt wird:
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]
-