Correção e solução alternativa de corrupção de índice com AEM/AEM Forms
Se alguém tiver o problema de corrupção de índice nos formulários AEM/AEM, este artigo ajudará a resolver o problema, mostrando como excluir os dados de índice contidos no repositório e reindexar o índice corrompido.
Descrição description
Ambiente
Experience Manager Forms
Problema/Sintomas
Experimentar uma corrupção de índice é um caso muito incomum. Mas, se isso acontecer, será possível ver entradas de log semelhantes 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)
Resolução resolution
Se alguém enfrentar essa situação, provavelmente a maneira mais rápida de resolver esse problema é excluindo os dados de índice contidos no repositório e reindexando o índice corrompido.
OBSERVAÇÃO: a reindexação é uma ação que consome tempo e recursos para esses exemplos, e usaremos o índice "workflowDataLucene"
Excluir os dados do índice:
Os dados de índice estão localizados no repositório abaixo de /oak:index/workflowDataLucene
como nós ocultos. Portanto, para excluir o índice corrompido, é necessário:
- Copie a definição do índice (somente) para um novo local.
- Excluir toda a estrutura do nó
/oak:index/workflowDataLucene
. - Recrie
/oak:index/workflowDataLucene
e acione a reindexação.
Solução alternativa:
Como solução, em vez de excluir o índice, você pode desativá-lo e criar um novo índice com a mesma definição:
- Criar um novo índice com a mesma definição do índice corrompido
- Acionar reindexação no novo índice
- Desative o índice corrompido alterando a propriedade de tipo para "desativado"
depois que essas alterações forem feitas, cada consulta passará para o novo índice
Excluir os dados do RDB:
Como último recurso, e se você executar em RDBmk
, poderá analisar para excluir os dados do índice diretamente do banco de dados com uma consulta do tipo:
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/%'
'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 decidir seguir esse caminho, verifique a consulta antes de executá-la, pois ela pode exigir algumas alteraçõesOR
ID
LIKE
OBSERVAÇÃO: o AEM deve ser desligado e os arquivos de índice e cache persistentes locais (<
crx-quickstart>
/repository/cache e <
crx-quickstart>
/repository/index) devem ser excluídos antes de o AEM ser iniciado após essa exclusão.