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中的队列深度增加的临时积压形成。
  • 处理大量资产时,作业活动在特定时间窗口期间达到高峰,导致执行不一致。
  • 错误日志显示提交失败,包括:

java.lang.IllegalStateException:分支重置失败
原因为: CommitFailedException: OakOak0100:分支重置失败

OakState0002:冲突的并发更改

  • 这些错误仍然处于隔离状态,不指示整个平台出现中断,但会导致资产处理出现临时延迟。

根本原因

根本原因是在并发负载下使用长期JCR会话和大量提交,没有对Oak提交冲突进行刷新和重试处理。 这会导致临时提交失败,例如​ OakState0002 ​和分支重置错误。

解决方法 resolution

要解决此问题,请执行以下步骤:

  1. 重构自定义Sling作业实施,通过为每个资源或一小部分资源使用短期会话来避免长期JCR会话,确保会话范围保持最小并减少争用。
  2. 通过按资产或小批量提交更改来减小每次提交的大小,而不是执行大型批量操作,这有助于防止在并发负载下发生提交失败。
  3. 通过检测故障(如​ OakState0002 ​或分支重置错误)、使用session.refresh(true)刷新会话以及重试提交次数有限的方式,为提交操作实施受限重试逻辑。
  4. 请确保重试逻辑强制实施严格的限制以防止无限循环或过度重试,从而维护系统稳定性并避免不必要的资源使用。
  5. 在应用这些更改后,监视作业的队列深度和错误日志,以确认提交冲突的频率降低并且作业处理稳定。
  6. 由于不涉及底层AEM环境和容器运行状况,因此无需更改平台或基础架构。

相关阅读

Assets不在AEMaaCS中从上传移动到目标文件夹

recommendation-more-help
experience-cloud-kcs-help-kbarticles