Solution de contournement et correction de la corruption d’index avec AEM/AEM Forms
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 description
Environnement
Experience Manager Forms
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 resolution
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"
.
Supprimer les données d'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 :
- Copiez la définition d’index (uniquement) vers un nouvel emplacement.
- Supprimez la structure de noeud entière
/oak:index/workflowDataLucene
. - Recréez
/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 :
- Créez un nouvel index avec la même définition d’index que celui corrompu.
- Déclencher la réindexation sur le nouvel index
- 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.
Supprimer les données de la RDB :
En dernier recours et si vous exécutez RDBmk
, vous pouvez analyser pour 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és avant de commencer AEM après cette suppression.