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 utilizzeremo l’indice "workflowDataLucene"
Eliminare i dati di indice:
I dati di indice si trovano nell’archivio seguente /oak:index/workflowDataLucene
come nodi nascosti, quindi per eliminare l’indice danneggiato è necessario:
- Copia la definizione dell’indice (solo) in una nuova posizione.
- Elimina tutto
/oak:index/workflowDataLucene
struttura dei nodi. - Ricrea
/oak:index/workflowDataLucene
e reindicizzazione del trigger.
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
Elimina i dati da RDB:
Come ultima risorsa e se si corre su RDBmk
, è possibile analizzare per eliminare i dati di indice direttamente dal database con una query simile a:
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
Se decidi di seguire questo percorso, assicurati di verificare la query prima di eseguirla in quanto potrebbe richiedere alcune modifiche
NOTA: L'AEM deve essere arrestato e i file di indice e cache persistenti locali (<
crx-quickstart>
/repository/cache e <
crx-quickstart>
/repository/index) eliminato prima di avviare AEM dopo questa eliminazione.