Solution et correction de la corruption de l’index avec AEM/AEM Forms
Si quelqu’un rencontre le problème de corruption d’index dans 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 description
Environnement
Experience Manager Forms
Problème/Symptômes
Rencontrer une corruption d’index est un cas très inhabituel. Mais si cela se produit, des entrées de journal similaires à :17.01.2019 17:55:47.374 *WARN* [ pool-118-thread-4] org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate [ async] The index update failedorg.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 resolution
Si quelqu’un est confronté à cette situation, la façon 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 demande beaucoup de temps et de ressources. Pour ces exemples, nous utiliserons l’index "workflowDataLucene"
Supprimez les données d’index :
Les données d’index se trouvent dans le référentiel sous /oak:index/workflowDataLucene en tant que nœuds masqués. Par conséquent, pour supprimer l’index corrompu, vous devez :
- Copiez la définition d’index (uniquement) vers un nouvel emplacement.
- Supprimez l’ensemble de la structure du nœud
/oak:index/workflowDataLucene. - Recréez des
/oak:index/workflowDataLuceneet déclenchez la réindexation.
Solution de contournement :
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 :
- Créez un index avec la même définition d’index que celle corrompue.
- Déclencher la réindexation sur le nouvel index
- Désactivez l’index corrompu en modifiant la propriété de type sur « désactivé »
une fois ces modifications effectuées, chaque requête est envoyée au nouvel index
Supprimez les données de la base de données RDB :
En dernier recours, et si vous exécutez sur RDBmk, vous pouvez analyser pour supprimer les données d’index directement de la base de données avec comme requête semblable à :
DELETE FROM NODESWHEREID ='2:/oak:index/workflowDataLucene' ORIDLIKE '3:/oak:index/workflowDataLucene/%' ORIDLIKE '4:/oak:index/workflowDataLucene/%' ORIDLIKE '5:/oak:index/workflowDataLucene/%' ORIDLIKE '6:/oak:index/workflowDataLucene/%' ORIDLIKE '7:/oak:index/workflowDataLucene/%' ORIDLIKE '8:/oak:index/workflowDataLucene/%' ORIDLIKE '9:/oak:index/workflowDataLucene/%' ORIDLIKE '10:/oak:index/workflowDataLucene/%' OR IDLIKE '5:p/oak:index/workflowDataLucene/%' ORIDLIKE '6:p/oak:index/workflowDataLucene/%' ORIDLIKE '7:p/oak:index/workflowDataLucene/%' ORIDLIKE '8:p/oak:index/workflowDataLucene/%' ORIDLIKE '9:p/oak:index/workflowDataLucene/%' ORIDLIKE '10:p/oak:index/workflowDataLucene/%' ORIDLIKE '11:p/oak:index/workflowDataLucene/%' ORIDLIKE '12:p/oak:index/workflowDataLucene/%' OR
Si vous décidez d’utiliser ce chemin, veillez à vérifier la requête avant de l’exécuter, car elle peut nécessiter des modifications
REMARQUE : AEM doit être arrêté et les fichiers d’index et de cache persistants locaux (< crx-quickstart> /repository/cache et < crx-quickstart> /repository/index) supprimés avant de démarrer AEM après cette suppression.