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