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:

  1. Copia la definizione dell’indice (solo) in una nuova posizione.
  2. Elimina tutto /oak:index/workflowDataLucene struttura dei nodi.
  3. 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:

  1. Crea un nuovo indice con la stessa definizione di quello danneggiato
  2. Attiva la reindicizzazione per il nuovo indice
  3. 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.

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f