AEM에서 OakState0002 및 분기 재설정 오류로 인해 슬링 작업이 실패합니다
폴더 간에 자산을 이동하는 사용자 지정 Sling 작업이 간헐적으로 실패하고 OakState0002 및 분기 재설정 실패와 같은 JCR 커밋 오류가 발생합니다. 이 작업은 장기 세션 및 대규모 커밋 작업을 사용하여 동시 로드 상태에서 자산을 처리하므로 커밋 실패가 반복됩니다. 이 문제를 해결하려면 세션 처리를 리팩터링하고 다시 시도 논리를 구현합니다.
설명 description
환경
Adobe Experience Manager as a Cloud Service (AEMaaCS)
문제/증상
-
폴더 간에 자산을 이동하는 동안 사용자 지정 Sling 작업
com.adidasedamprogram.core.job.MoveAssetsFromUploadToIngestionAreaJob이(가) 작성자 인스턴스에서 간헐적으로 실행되지 않습니다. -
최대 수집 기간 동안
move_assets_upload_to_ingestion/queue/1..4에서 큐 깊이가 증가된 임시 백로그 양식입니다. -
작업 활동은 대량의 자산을 처리하는 동안 특정 시간 범위 동안 급증하여 실행 일관성이 없습니다.
-
오류 로그에 다음을 포함한 커밋 오류가 표시됩니다.
code language-none java.lang.IllegalStateException: Branch with failed reset Caused by: CommitFailedException: OakOak0100: Branch reset failed ... OakState0002: Conflicting concurrent change -
이러한 오류는 격리된 상태로 유지되며 플랫폼 전체의 중단을 나타내지는 않지만 에셋 처리에 일시적인 지연이 발생합니다.
근본 원인
근본 원인은 Oak 커밋 충돌에 대한 새로 고침 및 다시 시도 처리 없이 동시 로드 중에 장기 지속 JCR 세션 및 큰 커밋을 사용하는 것입니다. 이로 인해 OakState0002 및 분기 재설정 오류와 같은 일시적인 커밋 오류가 발생합니다.
해결 방법 resolution
문제를 해결하려면 아래 단계를 수행합니다.
- 각 에셋 또는 소규모 에셋 배치에 대해 단기 세션을 사용하여 장기 JCR 세션을 피하도록 사용자 정의 슬링 작업 구현을 리팩터링하여 세션 범위가 최소화되고 경합이 줄어들도록 합니다.
- 대량 작업을 수행하는 대신 자산당 또는 작은 배치로 변경 사항을 커밋하여 각 커밋의 크기를 줄여 동시 로드 시 커밋 실패를 방지할 수 있습니다.
- OakState0002 또는 분기 재설정 오류와 같은 오류를 감지하고
session.refresh(true)을(를) 사용하여 세션을 새로 고친 후 제한된 횟수만큼 커밋을 다시 시도하여 커밋 작업에 대한 제한된 다시 시도 논리를 구현합니다. - 재시도 로직이 엄격한 제한을 적용하여 무한 루프 또는 과도한 재시도를 방지하여 시스템 안정성을 유지하고 불필요한 리소스 사용을 방지하는지 확인하십시오.
- 이러한 변경 사항을 적용한 후 작업의 큐 깊이 및 오류 로그를 모니터링하여 커밋 충돌 빈도가 감소하고 작업 처리가 안정되는지 확인하십시오.
- 기본 AEM 환경과 컨테이너 상태가 관련이 없으므로 플랫폼이나 인프라 변경이 필요하지 않습니다.