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. 通过将移动工作流专注于选择有效资产并将这些资产从上载或暂存文件夹移动到目标文件夹,以及在目标文件夹上配置单独的后处理工作流(更新元数据和自定义属性,例如下游系统使用的Dynamic Media标志或字段),并在资产处理完成后通过后处理(自动启动)工作流机制运行),将移动和元数据或后处理逻辑拆分为单独的工作流。
  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