Assets不會從AEMaaCS的上傳資料夾移至目標資料夾

當自訂工作流程由於存放庫認可衝突而無法將其移動到目標資料夾時,Assets仍卡在上傳或暫存資料夾中。 重新設計工作流程以避免大型平行認可,並將中繼資料更新分割為個別的後處理工作流程以解決問題。

說明 description

環境

  • ADOBE EXPERIENCE MANAGER AS A CLOUD SERVICE - ASSETS
  • 作者環境,透過Cloud Manager部署
  • 啟動器或排程工作觸發的自訂資產移動工作流程

問題/症狀

  • Assets會保留在上傳或暫存資料夾中,不會出現在目標資料夾中。

  • 自訂資產移動工作流程可正確觸發(例如,透過類似cron的啟動器),但:

    • 需要很長時間才能完成,或
    • 以重複失敗和重試結束。
  • 不會報告啟動器本身的錯誤;自訂移動步驟中會發生失敗。

  • 相同工作流程模型會累積大量工作流程執行個體(例如10,000個以上執行中的執行個體)。

  • AEM錯誤記錄會顯示具有並行變更衝突的提交失敗,例如:

    code language-none
    org.apache.sling.api.resource.PersistenceException: Unable to commit changes to session      at com.example.aem.core.workflows.MoveToTarget.execute(MoveToTarget.java:xx)    Caused by: javax.jcr.InvalidItemStateException:      OakState0002: Conflicting concurrent change on branch commits
    
  • 後置處理行為(例如更新媒體標題、上傳程式資訊或Dynamic Media旗標)會延遲或間歇性,因為資產無法可靠地到達目標資料夾。

原因

  • 在受影響的實作中,自訂資產移動步驟已變更為:

    • 將許多資產批次處理為單一大型JCR工作階段並認可,然後
    • 跨許多工作流程執行個體並行執行此邏輯(例如,透過啟動器,在先前的執行仍處於作用中狀態時每幾分鐘執行一次)。
  • 在負載下,此設計會導致:

    • Oak存放庫(OakState0002)中的並行分支認可發生衝突,導致認可失敗並重試工作流程工作。
    • 先移動資產,稍後再更新原始路徑的中繼資料的競爭情形,因此中繼資料更新會失敗或略過。
  • 問題是自訂工作流程程式碼中的存放庫層級競爭問題,而不是啟動器故障或AEM的內建資產處理。

解決方法 resolution

若要還原可靠的資產移動並防止認可衝突,請遵循下列步驟:

  1. 移除或還原任何單一大型認可批次,以便自訂資產移動步驟不再移動和更新單一save()commit()中的多個資產,並避免在一個交易中移動數百個資產的設計。
  2. 重構移動步驟,讓每個資產或極小的批次都移至目標位置並立即認可(例如,使用session.save()resourceResolver.commit()),並確定步驟是每個資產的等冪式且可安全地處理重試,可選擇擷取InvalidItemStateExceptionPersistenceException,並實作具有記錄功能的限制重試。
  3. 將移動和中繼資料或後續處理邏輯分割為個別的工作流程,方法是讓移動工作流程專注於選取有效資產,並將它們從上傳或暫存資料夾移至目標資料夾,以及在目標資料夾上設定個別的後處理工作流程,以更新中繼資料和自訂屬性(例如動態媒體旗標或下游系統使用的欄位),並在資產處理完成後透過後續處理(自動啟動)工作流程機制執行。
  4. 檢閱工作流程Sling工作主題的工作佇列設定,儘可能減少平行工作的最大數量,並確保啟動器不會在前一個執行仍處於作用中狀態或重試時,啟動新的大型執行,藉此限制移動工作流程的並行。
  5. 藉由設定工作流程清除(例如,使用com.adobe.granite.workflow.purge.Scheduler設定)來控制工作流程執行個體,讓自訂模型的已完成執行個體定期清除且不會累積。
  6. 透過上傳受控的測試資產集至上傳或暫存資料夾、確認資產在預期時間內可靠地移動到目標資料夾、目標資料夾中的後處理工作流程成功完成並及時更新中繼資料,以及記錄檔不再顯示與自訂移動步驟相關的經常OakState0002認可衝突,來驗證這些變更後的行為。

附註:

  • 此問題源自自訂工作流程在並行狀態下與AEM as a Cloud Service存放庫互動的方式,而非啟動器故障或AEM的內建資產處理。
  • 透過重新設計工作流程以認可每個資產(或小批次),並將中繼資料或屬性更新移動到目標資料夾中的單獨後處理工作流程,您可以減少認可競爭、消除移動/中繼資料競爭,以及將資產從上傳資料夾恢復到目標資料夾的穩定、及時移動。
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f