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

データストアの InputStream の取得エラーを解決する方法を説明します。 のリストをコンパイルし、見つからないファイルへのパスを復元し、インデックスを再作成します。

説明 description

環境

  • Adobe Experience Manager 6.4
  • Experience Manager 6.5

問題/症状

次の条件を満たしている: FileDataStore Adobe Experience Manager 6.x/Oak 1.x システムで設定し、error.log で次の内容を確認します。

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

    注意 - Adobe Experience Managerインスタンスが blobId エラーが発生した場合は、次の場所でログファイルを検索します。 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 の場合:Textpad や Notepad++などのテキストエディターを使用して、 レコードが見つかりません. 次に、これらの出現箇所をすべて見つけたら、マクロを使用してファイル名を抽出し、スクリプトを記述するか、新しいテキストファイルにファイル名を手動でコピーして作成します。

    DataStore ファイルのパスは、次の形式のレコード名から構築されます: {レコード id の最初の 2 文字}/{レコード id の 2 番目の文字}/{レコード id の 3 番目の 2 文字}/{レコード 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 のようなコマンドを使用して、存在しないファイルをすべてコピーできます。 例えば、見つからないファイルを持つサーバー上の datastore ディレクトリからこのファイルを実行すると、次のようになります。

    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を再起動し、ログファイルで INFO ログメッセージを監視します。 org.apache.jackrabbit.oak.plugins.index. インデックス作成の詳細を確認するには、/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