取得「blobId的InputStream」時,資料存放區不一致錯誤

瞭解如何解決資料存放區取得InputStream錯誤。 編譯遺失檔案的路徑清單,並將路徑還原並重新索引。

說明 description

環境

  • Experience Manager 6.4
  • Experience Manager 6.5

問題/症狀

您的Adobe Experience Manager 6.x / Oak 1.x系統中已設定FileDataStore,而且在error.log中,您會看到下列內容:

取得 blobId的​ InputStream ​時發生錯誤。

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的前兩個字元}/{記錄ID的第二兩個字元}/{記錄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/
    

    該命令會執行一個rsync,以複製伺服器中存在的missing_ds_files.txt中列出的任何檔案。

  5. 清除無法復原的檔案參考。

    如果您無法從備份或其他Adobe Experience Manager執行個體復原部分檔案,請清理或修正錯誤的資料存放區參考。 在步驟4中執行DataStore一致性檢查時,請重新執行。 您會取得目前遺失檔案的清單。

    檢閱列出的每個節點路徑,這些路徑會參照遺失的資料存放區檔案。 檢視任何遺失的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