El trabajo de Sling falla con OakState002 y errores de restablecimiento de rama en AEM

Un trabajo de Sling personalizado que mueve recursos entre carpetas falla intermitentemente con errores de confirmación de JCR como OakState0002 y errores de restablecimiento de rama. El trabajo procesa recursos en carga simultánea mediante sesiones de larga duración y grandes operaciones de compromiso, lo que provoca errores de compromiso repetidos. Para resolver el problema, refactorice la administración de sesiones e implemente la lógica de reintentos.

Descripción description

Entorno

Adobe Experience Manager as a Cloud Service (AEMaaCS)

Problema/Síntomas

  • El trabajo de Sling personalizado com.adidasedamprogram.core.job.MoveAssetsFromUploadToIngestionAreaJob no se puede ejecutar intermitentemente en la instancia de autor al mover recursos entre carpetas.

  • Se forma un registro de pendientes temporal con mayor profundidad de cola en move_assets_upload_to_ingestion/queue/1..4 durante los períodos de máxima ingesta.

  • La actividad del trabajo se dispara durante períodos de tiempo específicos mientras se procesan grandes volúmenes de recursos, lo que provoca una ejecución incoherente.

  • Los registros de errores muestran errores de confirmación, incluidos:

    code language-none
    java.lang.IllegalStateException: Branch with failed reset
    Caused by: CommitFailedException: OakOak0100: Branch reset failed
    ...
    OakState0002: Conflicting concurrent change
    
  • Estos errores permanecen aislados y no indican una interrupción en toda la plataforma, pero causan retrasos temporales en el procesamiento de recursos.

Causa principal

La causa raíz es el uso de sesiones JCR de larga duración y confirmaciones grandes en carga simultánea sin administración de actualización y reintentos para conflictos de confirmación de Oak. Esto provoca errores de confirmación transitorios, como OakState0002 y errores de restablecimiento de rama.

Resolución resolution

Para resolver el problema, siga los pasos a continuación:

  1. Refactorice la implementación del trabajo de Sling personalizada para evitar sesiones JCR de larga duración utilizando sesiones de corta duración para cada recurso o un pequeño lote de recursos, lo que garantiza que el ámbito de la sesión siga siendo mínimo y reduzca la contención.
  2. Reduzca el tamaño de cada confirmación confirmando los cambios por recurso o en lotes pequeños en lugar de realizar grandes operaciones masivas, lo que ayuda a evitar errores de confirmación en carga simultánea.
  3. Implemente la lógica de reintentos limitada para las operaciones de confirmación detectando errores como OakState0002 o errores de restablecimiento de rama, actualizando la sesión con session.refresh(true) y reintentando la confirmación un número limitado de veces.
  4. Asegúrese de que la lógica de reintentos aplica límites estrictos para evitar bucles infinitos o reintentos excesivos, manteniendo la estabilidad del sistema y evitando el uso de recursos innecesario.
  5. Supervise la profundidad de cola del trabajo y los registros de errores después de aplicar estos cambios para confirmar que se reduce la frecuencia de conflictos de confirmación y se estabiliza el procesamiento del trabajo.
  6. No se requieren cambios de plataforma o infraestructura, ya que el entorno de AEM subyacente y el estado de los contenedores no están implicados.

Lectura relacionada

Assets no se mueve de la carga a la carpeta de destino en AEMaaCS

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