Problem: „Beim Abrufen von InputStream für blobId ist ein Fehler aufgetreten“

Sie haben einen FileDataStore in Ihrem Adobe Experience Manager 6.x / Oak 1.x-System konfiguriert und im error.log erscheint „Beim Abrufen von InputStream für blobId ist ein Fehler aufgetreten“.

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]

Lösungen

Diese Fehlermeldung weist darauf hin, dass möglicherweise Dateien im Datenspeicherverzeichnis des Adobe Experience Managers fehlen.  Der Verlust von Datenspeicherdateien kann auf einen Ausfall der Oak Blob Garbage Collection, einen Speicherplatzausfall, eine Instabilität der Festplatte oder der Netzwerkfreigabe zurückzuführen sein.  Möglicherweise liegt es auch daran, dass ein Benutzer fälschlicherweise Dateien vom Server löscht.

Um die fehlenden Dateien wiederherzustellen, führen Sie die folgenden Schritte aus.

1. Installieren Sie den neuesten Oak-Hotfix

Nachdem Sie die folgenden Schritte ausgeführt haben, um Ihren Datenspeicher zu reparieren, laden Sie den neuesten Oak-Hotfix herunter und installieren Sie ihn, wenn Sie Adobe Experience Manager 6.0 oder 6.1 mit Oak 1.0.19 oder 1.2.4 oder ältere Versionen verwenden.

Sie können dort die neuesten Hotfixes unter „Adobe Paketfreigabe“ finden.

2. Eine Konsistenzüberprüfung für DataStore ausführen

Die einzige Möglichkeit, eine vollständige Liste aller fehlenden Dateien im Datenspeicher zu erhalten, besteht darin, eine Konsistenzüberprüfung für DataStore auszuführen.  Wenn Ihre AEM-Instanz gestartet werden kann, führen Sie die folgenden Schritte auf der laufenden Instanz aus:

  1. Gehen Sie zum CRX-Explorer und melden Sie sich als Administator an.
    - http://<host>:<port>/crx (CQ5.4/CRX2.2 und früher)
    - http://<host>:<port>/crx/explorer/index.jsp (CQ5.5/CRX2.3 und neuere Versionen)
  2. Klicken Sie auf „Repository-Konfiguration“.
  3. Klicken Sie auf „Repository überprüfen“.
  4. Wählen Sie „Konsistenz des Datenspeichers“.
  5. Klicken Sie auf „Ausführen“.
  6. Lassen Sie den Browser während der Dauer des Prozesses geöffnet. Es werden nur Meldungen an den Bildschirm ausgegeben, wenn ein Fehler gefunden wird und der Prozess keine Meldungen in die Protokolldatei schreibt.  Die Fehlermeldungen melden den Pfad des Knotens, von dem der Datensatz des Datenspeichers referenziert wurde und die Datensatz-ID der fehlenden Datei.
  7. Wenn der Prozess abgeschlossen ist, kopieren Sie die Ausgabe in eine consistency_check_output.txt-Textdatei und fahren Sie mit dem nächsten Schritt fort.

3. Eine Liste von Pfaden von fehlenden Dateien erstellen

Der nächste Schritt bei der Wiederherstellung der fehlenden Dateien besteht darin, eine vollständige Liste der Pfade der fehlenden Dateien zu übersetzen.

1. Die Ausgabe der Konsistenzüberprüfung nach jedem Eintritt des Fehlers „Record not Found“ durchsuchen.

a. Unter Linux oder Unix: Verwenden Sie diesen Befehl, um die Liste aller fehlenden Dateien in einer missing_ds_files.txt-Datei auszugeben:

grep "blobId" 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

** Wenn Ihre Adobe Experience Manager-Instanz aufgrund der "blobld"-Fehler nicht startet, durchsuchen Sie Ihre Protokolldateien stattdessen unter crx-quickstart/logs nach jedem Eintritt des Fehlers "Error occurred while obtaining InputStream for blobId":

grep "Error occurred while obtaining InputStream for blobId" 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

Wenn der Befehl ordnungsgemäß funktioniert, sieht der Inhalt von missing_ds_files.txt wie folgt oder so ähnlich aus:

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

  b. Unter Windows: Verwenden Sie einen Text-Editor, z. B. Textpad oder Notepad++, um nach jedem Eintritt von „Record not found“ zu suchen.  Nachdem Sie alle derartigen Eintritte gefunden haben, extrahieren Sie die Dateinamen, die ein Makro verwenden, indem Sie ein Skript schreiben oder die Dateinamen manuell kopieren und in einer neuen Textdatei erstellen.

DataStore-Dateipfade werden aus dem Datensatznamen in folgendem Format erstellt:
{erste zwei Zeichen der Datensatz-ID} / {zweite zwei Zeichen der Datensatz-ID} / {dritte zwei Zeichen der Datensatz-ID} / {Datensatz ID}

Wie zum Beispiel in diesem Fehler:

java.lang.RuntimeException: Error occurred while obtaining InputStream for blobId [add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]

Die Datensatz-ID ist add1dd8fc5093b27b1fae1b753cb48b24ef3231f und der Dateipfad ist ad/d1/dd/add1dd8fc5093b27b1fae1b753cb48b24ef3231f

4. Die fehlenden Dateien wiederherstellen

Verwenden Sie jetzt 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 sind, können Sie sie von anderen Adobe Experience Manager-Instanzen in Ihrer Umgebung kopieren.

Wenn Sie einige der Dateien in anderen Instanzen nicht finden können, durchsuchen Sie Ihre Sicherungen und stellen Sie sie von dort wieder her, falls möglich.

Bei Linux können Sie sich bei jeder der aktiven Adobe Experience Manager-Instanzen anmelden und einen Befehl wie rsync verwenden, um die fehlenden Dateien in ihnen zu kopieren.  Beispielsweise indem Sie es aus dem Datenspeicherverzeichnis auf dem Server mit den fehlenden Dateien ausführen:

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 eine „rsync“ aus, die alle Dateien kopiert, die in der Datei missing_ds_files.txt aufgeführt sind, die auf dem Server vorhanden sind. 

5. Bereinigen Sie nicht wiederherstellbare Dateiverweise

Wenn Sie einige der Dateien nicht aus einer Sicherung oder aus anderen Adobe Experience Manager-Instanzen wiederherstellen konnten, bereinigen Sie die fehlerhaften Datenspeicherverweise oder korrigieren Sie sie.  Führen Sie die DataStore-Konsistenzprüfung erneut aus, wie wir sie in Schritt 4 ausgeführt haben.  Sie erhalten eine aktuelle Liste der fehlenden Dateien.

Überprüfen Sie jeden aufgelisteten Knotenpfad, der auf fehlende Datenspeicherdateien verweist.  Überprüfen Sie fehlende DAM-Assets oder Dateien, die mit Ihrem Benutzer auf Seiten hochgeladen wurden.  Lassen Sie alle fehlenden Teile neu laden.  Alle, die sie nicht benötigen, können über die Benutzeroberfläche von Adobe Experience Manager sicher gelöscht werden.  Wenn irgendetwas unter /var/audit oder unter /var/eventing fehlt, kann es sicher gelöscht werden.  Für alle Dateien, bei denen Sie sich nicht sicher sind, gehen Sie hierhin und wenden Sie sich an das AEM Support-Team.

6. Reinigen aller asynchronen Oak-Indizes

Aufgrund des asynchronen Indexierungsmodells von Oak könnten Dateien fehlen, die sich auf asynchrone Oak-Indizes beziehen.  Diese fehlenden Dateien werden in der Konsistenzprüfung nicht gemeldet, da sie vor Repository-Traversierungen verborgen sind.  Leider würden solche Dateien nicht über verschiedene AEM-Instanzen hinweg zusammenpassen. Daher besteht die einzige Möglichkeit, solche Inkonsistenzen zu beheben, darin, alle asynchronen Oak-Indizes neu zu indizieren.

So aktivieren Sie die asynchronen Indexe erneut:

1. Laden Sie oak-run 1.0.x herunter, entsprechend der Version, die Sie in Ihrer Oak-Umgebung installiert haben: https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/

2. Laden Sie den oak-run auf den Adobe Experience Manager-Server.

3. Beenden Sie alle Adobe Experience Manager-Instanzen.

4. Führen Sie den unten angeführten Befehl entsprechend dem Oak-Speicher Ihrer Adobe Experience Manager-Instanz durch:

TarMK-Befehl:

java -Xmx4096m -jar /apps/staging/oak-run-*-*.jar checkpoints crx-quickstart/repository/segmentstore rm-all

MongoMK-Befehl:

java -Xmx4096m -jar oak-run-*-*.jar checkpoints mongodb://localhost/aem-author rm-all

5. Starten Sie den Adobe Experience Manager neu und kontrollieren Sie Ihre Protokolldateien auf INFO-Protokollmeldungen von org.apache.jackrabbit.oak.plugins.index.  Wenn Sie weitere Details zur Indizierung anzeigen möchten, wechseln Sie zu /system/console/slinglog und aktivieren Sie die Protokollierung der Debug-Stufe für org.apache.jackrabbit.oak.plugins.index.

Die Protokollmeldungen sollten wie folgt aussehen:

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

6. Wenn die Indizierung aus irgendeinem Grund fehlschlägt, werden Sie eine Wiederholung der folgenden Protokollnachricht sehen:

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]

Gilt für

AEM 6.x / Oak 1.x

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie