Erreur d’incohérence de l’entrepôt de données lors de l’obtention de "InputStream pour blobId"

Découvrez comment résoudre l’erreur d’obtention de InputStream de la banque de données. Compilez une liste de chemins d’accès et restaurez-les dans les fichiers manquants et réindexez-les.

Description description

Environnement

  • Experience Manager 6.4
  • Experience Manager 6.5

Problème/Symptômes

Un FileDataStore est configuré dans votre système Adobe Experience Manager 6.x / Oak 1.x et les éléments suivants s’affichent dans le fichier error.log :

Une erreur s'est produite lors de l'obtention de InputStream pour 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]

Résolution resolution

Cette erreur signifie que vous ne disposez peut-être pas de fichiers dans votre répertoire de banque de données Adobe Experience Manager.  La perte de fichiers de banque de données peut être due à un échec du nettoyage de la mémoire blob Oak, à une panne d’espace disque, à une instabilité du disque ou du partage réseau. Cela peut également être dû à la suppression par erreur de fichiers du serveur par un utilisateur.

Pour récupérer les fichiers manquants, procédez comme suit.

  1. Installez le dernier CFP/SP.

    Vous trouverez les derniers correctifs sur Adobe Package Share.

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

    A l’aide de oak-run jar 1.6.6 et versions ultérieures, exécutez la commande suivante :

    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
    
  3. Créez une liste de chemins d’accès aux 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.

    Recherchez la sortie de vérification de cohérence pour toutes les occurrences de l'erreur Enregistrement introuvable

    a. Sous Linux ou Unix : utilisez cette commande pour générer la liste des fichiers manquants dans un fichier 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.txt
    

    Remarque - Si votre instance Adobe Experience Manager ne démarre pas en raison des erreurs blobId, recherchez dans vos fichiers journaux sous crx-quickstart/logs toutes les occurrences de l’erreur 'Error occurred while obtaining InputStream for blobId' à la place :

    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.txt
    

    Si la commande fonctionnait correctement, le contenu de missing_ds_files.txt ressemblerait à ce qui suit :

    code language-none
    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, écrivez un script ou en copiant et en construisant manuellement les noms de fichier dans un nouveau fichier texte.

    Les chemins d’accès aux fichiers DataStore sont construits à partir du nom d’enregistrement dans ce format : {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 :

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

    l’ID d’enregistrement est add1dd8fc5093b27b1fae1b753cb48b24ef3231f et le chemin du fichier est ad/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. Comme les fichiers de banque de données sont stockés de manière unique, vous pouvez les copier à partir d’autres instances Adobe Experience Manager de votre environnement.

    Si vous ne trouvez pas certains des fichiers dans d’autres instances, recherchez vos sauvegardes et restaurez-les de là si possible.

    Sous Linux, vous pouvez vous connecter à chacune des instances Adobe Experience Manager opérationnelles et utiliser une commande telle que rsync pour copier les fichiers manquants qui y existent. Par exemple, en l’exécutant à partir du répertoire de la banque de données sur le serveur contenant les fichiers manquants :

    code language-none
    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 une synchronisation qui effectue une copie sur tous les fichiers répertoriés dans missing_ds_files.txt qui existent dans le serveur.

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

    Si vous n’avez pas pu récupérer certains fichiers à partir de la sauvegarde ou d’autres instances Adobe Experience Manager, nettoyez ou corrigez les références de banque de données incorrectes. Exécutez à nouveau la vérification de cohérence de l’entrepôt de données lors de 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 à des fichiers de banque de données manquants. Examinez les ressources ou fichiers DAM manquants téléchargés sur les pages avec votre utilisateur. Demandez-leur de télécharger à nouveau les fichiers manquants dont ils ont besoin. Tout ce dont ils n’ont pas besoin peut être supprimé en toute sécurité via l’interface utilisateur de Adobe Experience Manager. Si quelque chose manque dans /var/audit ou /var/eventing peut être supprimé en toute sécurité. Pour tous les fichiers dont vous n'êtes pas sûr, allez ici et contactez l'équipe d'assistance AEM pour obtenir de l'aide.

  6. Réindexez tous les index asynchrones Oak.

    Comme les fichiers d’index sont stockés dans le référentiel Oak, il est également possible que certains fichiers soient manquants dans les index basés sur /oak:index lucene.

    Ces fichiers manquants ne seraient pas signalés dans la vérification de cohérence /system/console/repositorycheck, car ils sont masqués des traversées de référentiel. Malheureusement, de tels fichiers ne correspondraient pas entre différentes instances AEM.

    Pour corriger ces incohérences, réindexez les index Oak asynchrones affectés.

    AVERTISSEMENT : Cette opération est extrêmement coûteuse et nécessitera un temps d’arrêt prolongé, allant de 10 minutes à plusieurs jours, selon le volume de contenu du système.

    Pour réindexer les index asynchrones :

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

    2. Téléchargez 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 :

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

      Commande MongoMK :

      code language-none
      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 de journal INFO de org.apache.jackrabbit.oak.plugins.index. Si vous souhaitez afficher plus de détails sur l’indexation, accédez à /system/console/slinglog UI et activez la journalisation du niveau de débogage pour org.apache.jackrabbit.oak.plugins.index.

      Vous devriez voir des messages de journal comme ceux-ci :

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

      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]
      
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f