「blobId の InputStream」を取得中にデータストアの不整合エラーが発生しました

InputStream を取得する際のデータストアのエラーを解決する方法を説明します。 不足しているファイルのパスのリストをコンパイルして復元し、再インデックスを実行します。

説明 description

環境

  • Adobe Experience Manager 6.4
  • Experience Manager 6.5

問題/症状

Adobe Experience Manager 6.x またはOak 1.x システムに FileDataStore が設定されており、error.log に次のように表示されます。

取得中にエラーが発生しました 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]

解決策 resolution

このエラーは、Adobe Experience Manager データストアディレクトリにファイルが見つからない可能性があることを意味します。  データストアファイルが失われる原因としては、Oak Blob ガベージコレクションのエラー、ディスク領域の停止、ディスク、ネットワーク共有の不安定などが考えられます。 または、ユーザーがサーバーからファイルを誤って削除したことが原因である可能性があります。

不足しているファイルを回復するには、次の手順に従います。

  1. 最新の CFP/SP をインストールします。

    最新のホットフィックスは、Adobeパッケージ共有 ​ にあります。

  2. データストアの整合性チェックを実行します。

    oak-run jar 1.6.6 以降を使用して、次のコマンドを実行します。

    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. 見つからないファイルのパスのリストを作成します。

    見つからないファイルを回復する次の手順では、見つからないファイルのパスの完全なリストをコンパイルします。

    エラー レコードが見つかりません が発生したすべての整合性チェック出力を検索します

    a. Linux または Unix の場合 :このコマンドを使用して、不足しているファイルのリストをファイル 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
    

    メモ - blobId のエラーが原因でAdobe Experience Manager インスタンスが起動しない場合は、代わりに crx-quickstart/logs の下にあるログファイルで、すべての発生するエラー '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.txt
    

    コマンドが正常に動作した場合、missing_ds_files.txt の内容は次のようになります。

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

    b. Windows の場合 :テキストパッドやメモ帳などのテキストエディターを使用して++Record not found のすべてのオカレンスを検索します。 次に、そのような出来事をすべて見つけた後、マクロを使用して、スクリプトを書くか、手動で新しいテキストファイルにファイル名をコピーして構築することによって、ファイル名を抽出します。

    データストアファイルのパスは、レコード名から次の形式で構成されます。{レコード ID の最初の 2 文字}/{2 番目の 2 文字レコード ID}/{3 番目の 2 文字レコード ID}/{レコード ID}

    例えば、次のエラーの場合:

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

    レコード id は add1dd8fc5093b27b1fae1b753cb48b24ef3231f、ファイルパスは ad/d1/dd/add1dd8fc5093b27b1fae1b753cb48b24ef3231f です

  4. 見つからないファイルを回復します。

    次に、最後の手順で得られた出力を使用して、環境内の他のAdobe Experience Manager インスタンスにある同じファイルを検索します。 データストアファイルは一意に保存されるので、環境内の他のAdobe Experience Manager インスタンスからコピーできます。

    他のインスタンスで一部のファイルが見つからない場合は、バックアップを検索し、可能な限りそこから復元します。

    Linux の場合、動作中の各Adobe Experience Manager インスタンスにログインし、rsync などのコマンドを使用して、そこに存在する不足しているファイルをコピーできます。 例えば、不足しているファイルがあるサーバーのデータストアディレクトリから実行する場合は、次のようになります。

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

    このコマンドは、サーバに存在する missing_ds_files.txt にリストされたファイルをコピーする rsync を実行します。

  5. 回復不能なファイル参照をクリーンアップします。

    バックアップまたは他のAdobe Experience Manager インスタンスから一部のファイルを復元できなかった場合は、不正なデータストア参照をクリーンアップまたは修正してください。 手順 4 で実行したように、データストアの整合性チェックを再実行します。 現在の不足しているファイルのリストを取得します。

    リストされた各ノードパスを確認します。これらのパスが欠落しているデータストアファイルを参照しています。 ユーザーと共に、ページにアップロードされた見つからない DAM アセットやファイルを確認します。 不足している必要なファイルを再アップロードしてもらいます。 Adobe Experience Manager ユーザーインターフェイスを使用すると、不要な情報を安全に削除できます。 /var/audit または/var/eventing の下にが見つからない場合は、安全に削除できます。 不明なファイルについては、​ こちら ​ にアクセスして、AEM サポートチームにお問い合わせください。

  6. すべての非同期Oak インデックスを再作成します。

    インデックスファイルはOak リポジトリ内に保存されるので、/oak:index lucene ベースのインデックスにいくつかのファイルが見つからない可能性もあります。

    これらの不足しているファイルは、リポジトリトラバーサルで非表示になるので、/system/console/repositorycheck 整合性チェックでレポートされません。 残念ながら、このようなファイルは異なるAEM インスタンス間で一致しません。

    このような不整合を修正するには、影響を受ける非同期Oak インデックスのインデックスを再作成します。

    警告: この操作には非常にコストがかかり、システム内のコンテンツの量に応じて、完了するまでに 10 分から複数日の長いダウンタイムが必要になります。

    非同期インデックスを再作成するには:

    1. Oak環境にインストールしたバージョンと一致する oak-run 1.0.x を次の場所からダウンロードします。https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/

    2. oak-run をAdobe Experience Manager サーバーにアップロードします。

    3. すべてのAdobe Experience Manager インスタンスを停止します。

    4. Adobe Experience Manager インスタンスのOak ストレージに対応する、以下のコマンドを実行します。

      TarMK コマンド :

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

      MongoMK コマンド

      code language-none
      java -Xmx4096m -jar oak-run-*-*.jar checkpoints mongodb://localhost/aem-author rm-all
      
    5. Adobe Experience Managerを再起動し、ログファイルで org.apache.jackrabbit.oak.plugins.index からの INFO ログメッセージを監視します。 インデックス作成の詳細を確認する場合は、/system/console/slinglog UI に移動し、org.apache.jackrabbit.oak.plugins.index のデバッグレベルのログを有効にします。

      次のようなログメッセージが表示されます。

      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. インデックス作成が何らかの理由で失敗した場合は、ループして、次のログメッセージが繰り返されます。

      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