Sling作業因OakState0002和AEM中的分支重設錯誤而失敗
在資料夾之間移動資產的自訂Sling作業間歇性地失敗,並出現JCR認可錯誤,例如 OakState0002 和分支重設失敗。 此作業會使用長效工作階段和大型認可作業,在同時載入下處理資產,導致重複認可失敗。 若要解決此問題,請重構工作階段處理並實作重試邏輯。
說明 description
環境
Adobe Experience Manager as a Cloud Service (AEMaaCS)
問題/症狀
-
在資料夾之間移動資產時,自訂Sling作業
com.adidasedamprogram.core.job.MoveAssetsFromUploadToIngestionAreaJob間歇性地無法在作者執行個體上執行。 -
在尖峰擷取期間,
move_assets_upload_to_ingestion/queue/1..4中的佇列深度增加的暫時待處理專案表單。 -
處理大量資產時,工作活動會在特定時段尖峰,導致執行不一致。
-
錯誤記錄顯示認可失敗,包括:
code language-none java.lang.IllegalStateException: Branch with failed reset Caused by: CommitFailedException: OakOak0100: Branch reset failed ... OakState0002: Conflicting concurrent change -
這些錯誤會維持隔離狀態,並不表示整個平台發生中斷,但會導致資產處理暫時延遲。
根本原因
根本原因是並行載入下使用長期JCR工作階段和大型認可,而沒有針對Oak認可衝突進行重新整理和重試處理。 這會導致暫時性認可失敗,例如 OakState0002 和分支重設錯誤。
解決方法 resolution
若要解決問題,請遵循下列步驟:
- 重構自訂Sling Job實作,對每個資產或一小批資產使用短期工作階段,以避免長期JCR工作階段,確保工作階段範圍保持最小並減少爭用。
- 透過提交每個資產或小批次的變更來減少每個提交的大小,而不是執行大型大量作業,這有助於防止同時載入時發生提交失敗。
- 透過偵測失敗(例如 OakState0002 或分支重設錯誤)、使用
session.refresh(true)重新整理工作階段,以及重試認可次數有限的方式,實作認可作業的限制式重試邏輯。 - 請確定重試邏輯強制嚴格限制以防止無限回圈或過度重試,維持系統穩定性並避免不必要的資源使用。
- 套用這些變更後,監視工作的佇列深度和錯誤記錄檔,以確認確認確認確認衝突的頻率降低,工作處理穩定。
- 不需要變更平台或基礎架構,因為不會牽涉到基礎的AEM環境和容器健康情況。
experience-cloud-kcs-help-kbarticles