取得「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記憶體回收失敗、磁碟空間中斷、磁碟或網路共用不穩定。 也可能是因為使用者從伺服器錯誤刪除檔案。
若要復原遺失的檔案,請遵循下列步驟。
-
安裝最新的CFP/SP。
您可以在Adobe封裝共用上找到最新的修補程式。
-
執行資料存放區一致性檢查。
使用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 -
建立遺失檔案的路徑清單。
復原遺失檔案的下一步是編譯遺失檔案的完整路徑清單。
搜尋一致性檢查輸出,找出所有發生錯誤 找不到記錄 的情況
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/2837d24aed3ff223cd40e90222226c4ef2e2a0c6b. 在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 -
復原遺失的檔案。
現在,請使用最後一個步驟的輸出,在環境中的其他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中列出的任何檔案。
-
清除無法復原的檔案參考。
如果您無法從備份或其他Adobe Experience Manager執行個體復原部分檔案,請清理或修正錯誤的資料存放區參考。 在步驟4中執行DataStore一致性檢查時,請重新執行。 您會取得目前遺失檔案的清單。
檢閱列出的每個節點路徑,這些路徑會參照遺失的資料存放區檔案。 檢視任何遺失的DAM資產或與使用者一起上傳到頁面的檔案。 讓他們重新上傳任何他們需要的遺失專案。 您不需要的任何物件,都可以透過Adobe Experience Manager使用者介面安全地刪除。 如果/var/audit或/var/eventing下缺少任何專案,則可以安全地刪除。 若您不確定任何檔案,請前往這裡並聯絡AEM支援團隊以尋求協助。
-
重新索引所有非同步Oak索引。
由於索引檔案儲存在Oak存放庫中,某些檔案也可能在/oak:index lucene型索引中遺失。
系統不會在/system/console/repositorycheck一致性檢查中報告這些遺失的檔案,因為這些檔案在存放庫周遊中是隱藏的。 很遺憾,此類檔案在不同的AEM執行個體中並不相符。
若要修正這種不一致的地方,請重新索引受影響的非同步Oak索引。
警告: 這項作業非常昂貴,而且需要延長停機時間,視系統內容的數量而定,從10分鐘到多天不等。
若要重新索引非同步索引:
-
下載和您在Oak環境中安裝的版本相符的Oak-run 1.0.x: https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/
-
將Oak-run上傳至Adobe Experience Manager伺服器。
-
停止所有Adobe Experience Manager執行個體。
-
執行以下與您的Adobe Experience Manager執行個體的Oak儲存空間對應的命令:
TarMK命令:
code language-none java -Xmx4096m -jar /apps/staging/oak-run-*-*.jar checkpoints crx-quickstart/repository/segmentstore rm-allMongoMK命令:
code language-none java -Xmx4096m -jar oak-run-*-*.jar checkpoints mongodb://localhost/aem-author rm-all -
再次啟動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 -
如果索引由於某個原因而失敗,您會看到它循環,重複此紀錄訊息:
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]
-