Problème : « une erreur s’est produite lors de l’obtention de InputStream pour blobId »

Vous avez un FileDataStore configuré dans votre système Adobe Experience Manager 6.x / Oak 1.x system, et, dans le fichier error.log, vous voyez « Error occurred while obtaining InputStream for 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]

Solutions

Cette erreur signifie que vous avez peut-être des fichiers manquants du répertoire de banque de données Adobe Experience Manager.  La perte de fichiers de banque de données peut être due à une défaillance de Oak Blob Garbage Collection, à une instabilité de l'espace disque, au disque lui-même, ou à une instabilité du partage réseau.  Sinon, il peut être dû à une suppression incorrecte des fichiers du serveur.

Pour récupérer les fichiers manquants, suivez les étapes ci-dessous.

1. Installez le plus récent correctif Oak

Après avoir suivi les étapes ci-dessous pour réparer votre banque de données, si vous utilisez Adobe Experience Manager 6.0 ou 6.1 avec Oak 1.0.19 ou 1.2.4 ou une version antérieure, téléchargez et installez le dernier correctif Oak.

Vous pouvez trouver les derniers correctifs sur le partage de modules Adobe Package Share.

2. Exécutez une vérification de cohérence de la banque de données

Le seul moyen d’obtenir une liste complète de tous les fichiers manquants dans la banque de données est d’exécuter un contrôle de cohérence du stock de données.  Si l’instance AEM peut démarrer, procédez comme suit sur l’instance en cours d'exécution :

  1. Accédez à CRX Explorer et connectez-vous en tant qu’administrateur.
    - http://<host>:<port>/crx (CQ5.4/CRX2.2 et versions antérieures)
    - http://<host>:<port>/crx/explorer/index.jsp (CQ5.5/CRX2.3 et versions ultérieures)
  2. Cliquez sur Configuration du référentiel.
  3. Cliquez sur Vérifiez le référentiel.
  4. Sélectionner la Cohérence du magasin de données.
  5. Cliquez sur Exécuter.
  6. Gardez le navigateur ouvert pendant toute la durée du processus. Il envoie uniquement des messages à l’écran lorsqu’une erreur est détectée et que le processus n’écrit aucun message dans le fichier journal.  Les messages d’erreur signalent le chemin d’accès au nœud où l’enregistrement de banque de données a été référencé et l’ID d’enregistrement du fichier manquant.
  7. Une fois le processus terminé, copiez la sortie dans un fichier texte consistency_check_output.txt et passez à l'étape suivante.

3. Créez une liste de chemins des fichiers manquants.

L’étape suivante de la récupération des fichiers manquants consiste à compiler une liste complète des chemins d’accès des fichiers manquants.

1. Recherchez une sortie de vérification de cohérence pour toutes les occurrences d'erreur « enregistrement introuvable ».

a. In Linux ou Unix : Utilisez cette commande pour afficher la liste des fichiers manquants dans un fichier missing_ds_files.txt :

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

** Si votre instance Adobe Experience Manager ne démarre pas en raison des erreurs « blobId », recherchez dans les fichiers journaux sous crx-quickstart/logs toutes les occurrences de l'erreur « Une erreur s'est produite lors de l'obtention de InputStream pour 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

Si la commande a fonctionné correctement, le contenu de missing_ds_files.txt serait similaire à ce qui suit :

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

  b. Sous Windows : utilisez un éditeur de texte tel que Textpad ou Notepad + + pour trouver toutes les occurrences de « enregistrement introuvable ».  Ensuite, après avoir trouvé toutes ces occurrences, extrayez les noms de fichier à l’aide d’une macro, rédigez un script ou copiez et construisez manuellement les noms de fichier dans un nouveau fichier texte.

Les chemins d'accès des instances Datastore sont formés du nom d'enregistrement au format suivant :
{first two chars of record id}/{second two chars of record id}/{third two chars of record id}/{record id}

Par exemple, dans cette erreur :

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

L'identifiant de l'enregistrement (record id) est add1dd8fc5093b27b1fae1b753cb48b24ef3231f et le chemin d'accès du fichier correspond à /d1/dd/add1dd8fc5093b27b1fae1b753cb48b24ef3231f

4. Récupérez les fichiers manquants.

Utilisez maintenant la sortie de la dernière étape pour rechercher les mêmes fichiers dans d'autres instances Adobe Experience Manager de votre environnement.  Les fichiers de banque de données étant stockés de manière unique, vous pouvez les copier à partir d’autres instances d’Adobe Experience Manager dans votre environnement.

Si vous ne parvenez pas à trouver certains fichiers dans d’autres instances, effectuez une recherche sur les sauvegardes et restaurez-les si possible.

Sous Linux, vous pouvez vous connecter à chacune des instances en cours d’Adobe Experience Manager et utiliser une commande comme rsync pour copier les fichiers manquants existants.  Par exemple, en l’exécutant à partir du répertoire de banque de données sur le serveur disposant des fichiers manquants :

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

La commande exécute un fichier rsync qui se copie sur des fichiers répertoriés dans missing_ds_files.txt qui existent dans le serveur. 

5. Nettoyer les références de fichiers irrécupérables.

Si vous n’avez pas pu récupérer certains des fichiers de la sauvegarde ou d’autres instances d’Adobe Experience Manager, nettoyez ou corrigez les références de banque de données erronées.  Réexécutez le contrôle de cohérence du stock de données à mesure comme à l’étape 4.  Vous obtenez une liste actuelle des fichiers manquants.

Examinez chacun des chemins de noeud répertoriés qui font référence aux fichiers de banque de données manquants.  Examinez tous les fichiers ou éléments DAM manquants téléchargés sur les pages avec l’utilisateur.  Demandez-leur de télécharger tout document manquant dont ils ont besoin.  Tout ce dont ils n'ont pas besoin peut être supprimé en toute sécurité grâce à l'interface utilisateur d'Adobe Experience Manager.  Si quelque chose manque sous /var/audit ou /var/eventing, vous pouvez le supprimer en toute sécurité.  Pour tous les fichiers dont vous n'êtes pas sûr, accédez ici et contactez l’équipe de support d’AEM pour obtenir de l’aide.

6. Réindexation de tous les indices asynchrones Oak.

En raison du modèle d'indexation asynchrone Oak, des fichiers liés aux index asynchrones Oak pourraient manquer.  Les fichiers manquants ne sont pas signalés dans la vérification de cohérence car ils sont masqués des traversées de référentiel.  Malheureusement, ces fichiers ne sont pas identiques à toutes les occurrences AEM de façon à ce que le seul moyen de corriger ces incohérences soit la réindexation des asynchrones Oak.

Pour reindexer les indices asynchrones :

1. Téléchargez la version oak-run 1.0.x correspondant à la version installée dans l'environnement Oak : https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/.

2. Chargez le fichier Oak-Run sur le serveur Adobe Experience Manager.

3. Arrêtez toutes les instances Adobe Experience Manager.

4. Exécutez la commande ci-dessous correspondant au stockage Oak de votre instance Adobe Experience Manager :

Commande TarMK :

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

Commande MongoMK :

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

5. Redémarrez Adobe Experience Manager et surveillez vos fichiers journaux pour les messages du journal INFO à partir d' org.apache.jackrabbit.oak.plugins.index.  Pour afficher plus de détails sur l’indexation, accédez à /system/console/slinglog de l'interface utilisateur et activez l’enregistrement du niveau de débogage pour org.apache.jackrabbit.oak.plugins.index.

Vous devriez voir les messages journaux tels que :

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. Si l’indexation échoue pour une raison quelconque, elle sera affichée en boucle, en répétant ce message de journal :

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]

S’applique à

AEM 6.x / Oak 1.x

Ce produit est distribué sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage à l’identique 3.0 non transposé  Les publications Twitter™ et Facebook ne sont pas couvertes par les dispositions Creative Commons.

Mentions légales   |   Politique de confidentialité en ligne