Assets ne passe pas de chargement au dossier cible dans AEMaaCS

Assets reste bloqué dans le dossier de chargement ou d’évaluation lorsqu’un workflow personnalisé ne parvient pas à le déplacer vers le dossier cible en raison de conflits de validation du référentiel. Reconcevez le workflow pour éviter les validations parallèles volumineuses et diviser les mises à jour de métadonnées en un workflow de post-traitement distinct afin de résoudre le problème.

Description description

Environnement

  • ADOBE EXPERIENCE MANAGER AS A CLOUD SERVICE - ASSETS
  • Environnement de création, déployé via Cloud Manager
  • Workflow de déplacement de ressources personnalisé déclenché par un lanceur ou une tâche planifiée

Problème/Symptômes

  • Assets reste dans le dossier de chargement ou d’évaluation et n’apparaît pas dans le dossier cible.

  • Un workflow personnalisé de déplacement des ressources est correctement déclenché (par exemple, par un lanceur de type cron), mais :

    • L'exécution prend beaucoup de temps, ou
    • Se termine par des échecs et des reprises répétés.
  • Aucune erreur n’est signalée pour le lanceur lui-même ; des échecs se produisent dans l’étape de déplacement personnalisé.

  • Un grand nombre d’instances de workflow (par exemple, plus de 10 000 instances en cours d’exécution) s’accumule pour le même modèle de workflow.

  • Le journal des erreurs d’AEM affiche les échecs de validation avec des conflits de modifications simultanées, par exemple :

    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
    
  • Le comportement de post-traitement (tel que la mise à jour des titres de média, des informations de chargeur ou des indicateurs Dynamic Media) est retardé ou intermittent, car les ressources n’atteignent pas le dossier cible de manière fiable.

Cause

  • Dans les implémentations concernées, l’étape de déplacement des ressources personnalisées a été remplacée par :

    • Déplacez un lot de nombreuses ressources dans une seule session JCR volumineuse et validez.
    • Exécutez cette logique en parallèle sur de nombreuses instances de workflow (par exemple, via un lanceur qui s’exécute toutes les quelques minutes pendant que les exécutions précédentes sont toujours actives).
  • En cas de charge, cette conception entraîne :

    • Des validations de branche simultanées en conflit dans le référentiel Oak (OakState0002) entraînent l’échec de la validation et la reprise de la tâche de workflow.
    • Une course où la ressource est déplacée en premier et où les métadonnées du chemin d’accès d’origine sont mises à jour plus tard, de sorte que la mise à jour des métadonnées échoue ou est ignorée.
  • Le problème est un problème de conflit au niveau du référentiel dans le code de workflow personnalisé, et non un dysfonctionnement du lanceur ou du traitement de ressource intégré d’AEM.

Résolution resolution

Pour restaurer un mouvement de ressource fiable et éviter les conflits de validation, procédez comme suit :

  1. Supprimez ou annulez tout lot de validation volumineux unique afin que l’étape de déplacement de ressources personnalisée ne déplace et ne mette plus à jour plusieurs ressources en une seule save() ou commit(), et évitez les conceptions où des centaines de ressources sont déplacées dans une seule transaction.
  2. Refactorisez l’étape de déplacement afin que chaque ressource, ou un très petit lot, soit déplacée vers l’emplacement cible et validée immédiatement (par exemple, avec session.save() ou resourceResolver.commit()). Assurez-vous que l’étape est idempotente par ressource et que peut gérer en toute sécurité les reprises, en interceptant éventuellement les InvalidItemStateException ou les PersistenceException et en implémentant les reprises limitées avec journalisation.
  3. Partagez la logique de déplacement et de métadonnées ou de post-traitement dans des workflows distincts en maintenant le workflow de déplacement axé sur la sélection de ressources valides et leur déplacement du dossier de chargement ou d’évaluation vers le dossier cible, ainsi qu’en configurant un workflow de post-traitement distinct sur le dossier cible qui met à jour les métadonnées et les propriétés personnalisées (comme les indicateurs Dynamic Media ou les champs utilisés par les systèmes en aval) et qui s’exécute via le mécanisme de workflow de post-traitement (démarrage automatique) une fois le traitement des ressources terminé.
  4. Limitez la simultanéité du workflow de déplacement en examinant la configuration de la file d’attente de tâches pour la rubrique de tâche Sling du workflow, en réduisant le nombre maximal de tâches parallèles dans la mesure du possible et en vous assurant que le lanceur ne démarre pas de nouvelles exécutions volumineuses tant que les exécutions précédentes sont toujours actives ou en effectuant de nouvelles tentatives.
  5. Gardez les instances de workflow sous contrôle en configurant la purge des workflows (par exemple, avec la configuration com.adobe.granite.workflow.purge.Scheduler) afin que les instances terminées du modèle personnalisé soient purgées régulièrement et ne s’accumulent pas.
  6. Validez le comportement après ces modifications en chargeant un jeu de ressources de test contrôlé dans le dossier de chargement ou d’évaluation, en confirmant que les ressources se déplacent de manière fiable vers le dossier cible dans les délais prévus, que les workflows de post-traitement dans le dossier cible se terminent avec succès et mettent à jour les métadonnées rapidement, et que les journaux n’affichent plus de conflits fréquents de validation de OakState0002 liés à l’étape de déplacement personnalisé.

Remarques :

  • Ce problème provient de la manière dont les workflows personnalisés interagissent avec le référentiel AEM as a Cloud Service en simultanéité, et non d’un dysfonctionnement du lanceur ou du traitement de ressources intégré d’AEM.
  • En modifiant la conception du workflow de validation par ressource (ou par petit lot) et en déplaçant les métadonnées ou les mises à jour de propriété dans un workflow de post-traitement distinct dans le dossier cible, vous réduisez le conflit de validation, éliminez la course au déplacement/aux métadonnées et restaurez un déplacement stable et rapide des ressources du dossier de chargement vers le dossier cible.
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f