Solution de contournement et correction de la corruption d’index avec AEM/AEM Forms

Dernière mise à jour : 2023-11-08

Si quelqu’un rencontre le problème de corruption d’index dans les AEM/AEM forms, cet article vous aidera à résoudre le problème en indiquant comment supprimer les données d’index contenues dans le référentiel et réindexer l’index corrompu.

Description

Environnement

Experience Manager Formulaires

Problème/Symptômes

C'est un cas très inhabituel de corruption d'index. Si cela se produit, des entrées de journal sont visibles, comme :
17.01.2019 17:55:47.374 *WARN* [ pool-118-thread-4] org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate [ async] The index update failed org.apache.jackrabbit.oak.api.CommitFailedException: OakMerge0001: OakMerge0001: Failed to merge changes to the underlying store (retries 5, 5169 ms) at org.apache.jackrabbit.oak.spi.state.AbstractNodeStoreBranch.merge0(AbstractNodeStoreBranch.java:345) at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreBranch.merge(DocumentNodeStoreBranch.java:156) at org.apache.jackrabbit.oak.plugins.document.DocumentRootBuilder.merge(DocumentRootBuilder.java:160) at org.apache.jackrabbit.oak.plugins.document.DocumentNodeStore.merge(DocumentNodeStore.java:1588) at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.mergeWithConcurrencyCheck(AsyncIndexUpdate.java:581) at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.updateIndex(AsyncIndexUpdate.java:525) at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.runWhenPermitted(AsyncIndexUpdate.java:431) at org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate.run(AsyncIndexUpdate.java:323) at org.apache.sling.commons.scheduler.impl.QuartzJobExecutor.execute(QuartzJobExecutor.java:115) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1164) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:634)

Résolution

Si quelqu’un est confronté à cette situation, la manière la plus rapide de résoudre ce problème est probablement de supprimer les données d’index contenues dans le référentiel et de réindexer l’index corrompu.

REMARQUE : La réindexation est une action qui prend du temps et des ressources pour ces exemples. Nous utiliserons l’index. "workflowDataLucene"

Supprimez les données de l'index : 

Les données d’index se trouvent dans le référentiel sous /oak:index/workflowDataLucene en tant que noeuds masqués. Par conséquent, pour supprimer l’index corrompu, vous devez :

  1. Copiez la définition d’index (uniquement) vers un nouvel emplacement.
  2. Supprimer l’ensemble /oak:index/workflowDataLucene structure du noeud.
  3. Recréer /oak:index/workflowDataLucene et déclenchez la réindexation.

Solution:

Pour pallier ce problème, au lieu de supprimer l’index, vous pouvez le désactiver et créer un nouvel index avec la même définition :

  1. Créez un nouvel index avec la même définition d’index que celui corrompu.
  2. Déclencher la réindexation sur le nouvel index
  3. Désactivez l’index corrompu en définissant la propriété de type sur "disabled".

une fois ces modifications effectuées, chaque requête est envoyée au nouvel index.

Supprimez les données de RDB :

En dernier recours et si vous exécutez RDBmk, vous pouvez analyser afin de supprimer les données d’index directement de la base de données avec comme requête similaire à :

DELETE FROM NODES WHERE
ID = '2:/oak:index/workflowDataLucene' OR ID LIKE '3:/oak:index/workflowDataLucene/%' OR ID LIKE '4:/oak:index/workflowDataLucene/%' OR ID LIKE '5:/oak:index/workflowDataLucene/%' OR ID LIKE '6:/oak:index/workflowDataLucene/%' OR ID LIKE '7:/oak:index/workflowDataLucene/%' OR ID LIKE '8:/oak:index/workflowDataLucene/%' OR ID LIKE '9:/oak:index/workflowDataLucene/%' OR ID LIKE '10:/oak:index/workflowDataLucene/%' OR   
ID LIKE '5:p/oak:index/workflowDataLucene/%' OR ID LIKE '6:p/oak:index/workflowDataLucene/%' OR ID LIKE '7:p/oak:index/workflowDataLucene/%' OR ID LIKE '8:p/oak:index/workflowDataLucene/%' OR ID LIKE '9:p/oak:index/workflowDataLucene/%' OR ID LIKE '10:p/oak:index/workflowDataLucene/%' OR ID LIKE '11:p/oak:index/workflowDataLucene/%' OR ID LIKE '12:p/oak:index/workflowDataLucene/%' OR
 

Si vous décidez de suivre ce chemin, veillez à vérifier la requête avant de l’exécuter, car certaines modifications peuvent être nécessaires.

REMARQUE : AEM doit être arrêté et les fichiers de cache et d’index persistants locaux (< crx-quickstart> /repository/cache et < crx-quickstart> /repository/index) supprimé avant de commencer AEM après cette suppression.

Sur cette page