Soluzione e correzione del danneggiamento dell’indice con AEM/AEM Forms
Se qualcuno riscontra il problema di corruzione dell’indice nei moduli AEM/AEM, questo articolo ti aiuterà a risolvere il problema mostrando come eliminare i dati di indice contenuti nell’archivio e reindicizzare l’indice danneggiato.
Descrizione description
Ambiente
Experience Manager Forms
Problema/Sintomi
La corruzione di un indice è un caso molto insolito. Ma se questo accade, si vedranno voci di registro simili a: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)
Risoluzione resolution
Se qualcuno si trova in questa situazione, probabilmente il modo più veloce per risolvere il problema è quello di eliminare i dati di indice contenuti nell’archivio e reindicizzare l’indice danneggiato.
NOTA: la reindicizzazione è un'azione che richiede tempo e risorse per questi esempi. Verrà utilizzato l'indice "workflowDataLucene"
Eliminare i dati di indice:
I dati di indice si trovano nell'archivio sotto /oak:index/workflowDataLucene come nodi nascosti. Per eliminare l'indice danneggiato, è quindi necessario:
- Copia la definizione dell’indice (solo) in una nuova posizione.
- Elimina l'intera struttura del nodo
/oak:index/workflowDataLucene. - Ricrea
/oak:index/workflowDataLucenee attiva la reindicizzazione.
Soluzione alternativa:
Come soluzione alternativa, invece di eliminare l’indice, puoi disattivarlo e creare un nuovo indice con la stessa definizione:
- Crea un nuovo indice con la stessa definizione di quello danneggiato
- Attiva la reindicizzazione per il nuovo indice
- Disattivare l'indice danneggiato modificando la proprietà type in "disabled"
una volta apportate le modifiche, ogni query passerà al nuovo indice
Eliminare i dati da RDB:
Come ultima risorsa e se si esegue su RDBmk, è possibile analizzare per eliminare i dati di indice direttamente dal database con una query simile alla seguente:
DELETE FROM NODES WHEREID = '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
Se decidi di seguire questo percorso, assicurati di verificare la query prima di eseguirla in quanto potrebbe richiedere alcune modifiche
NOTA: è necessario arrestare l'AEM ed eliminare i file di indice e la cache persistente locale (< crx-quickstart> /repository/cache e < crx-quickstart> /repository/index) prima di avviare l'AEM dopo questa eliminazione.