Erro de inconsistência do datastore para obter "InputStream para blobId"

Problema: "Ocorreu um erro ao obter InputStream para blobId"

Você tem um FileDataStore configurado no seu sistema Adobe Experience Manager 6.x / Oak 1.x, e no error.log você vê "Ocorreu um erro ao obter InputStream para blobId."

10.09.2015 10:38:04.220 *ERROR* [pool-9-thread-3] org.apache.sling.commons.scheduler.impl.QuartzScheduler Exception during job execution of org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate@7fe7e8fa : Error occurred while obtaining InputStream for blobId [add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]
java.lang.RuntimeException: Error occurred while obtaining InputStream for blobId [add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]

Soluções

Esse erro significa que você está sem arquivos de seu diretório de armazenamento de dados do Adobe Experience Manager.  A perda de arquivos do armazenamento de dados pode ser devido a uma falha de Oak Blob Garbage Collection, uma interrupção de espaço em disco, disco ou instabilidade de compartilhamento de rede.  Ou pode ser devido a um usuário erroneamente excluindo arquivos do servidor.

Para recuperar os arquivos ausentes, siga as etapas abaixo.

1. Instale o CFP/SP mais recente

Você pode encontrar os últimos hotfixes em Compartilhamento de pacote da Adobe.

2. Executar verificação de consistência do armazenamento de dados

Usando o oak-run jar 1.6.6 e superiores, execute o seguinte comando: 

java -jar oak-run-*.jar datastorecheck --consistency -ref --id --fds crx-quickstart/install/org.apache.jackrabbit.oak.plugins.blob.datastore.FileDataStore.config --repoHome crx-quickstart/repository --store crx-quickstart/repository/datastore --dump temp --verbose --track

3. Crie uma lista de caminhos dos arquivos perdidos

A próxima etapa na recuperação dos arquivos ausentes é compilar uma lista completa dos caminhos dos arquivos que estão faltando.

1. Procure no resultado da verificação de consistência todas as ocorrências de erro "Registro não encontrado".

a. No Linux ou Unix: Use este comando para exibir a lista de arquivos ausentes em um arquivo missing_ds_files.txt:

grep "blobId" consistency_check_output.txt | grep -Eo "[0-9a-f]{40,200}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt

** Se a sua instância do Adobe Experience Manager não estiver sendo inicializada devido aos erros "blobId", pesquise seus arquivos de log em crx-quickstart/logs por todas as ocorrências do erro "Ocorreu um erro ao obter InputStream para blobId":

grep "Error occurred while obtaining InputStream for blobId" error.log* | grep -Eo "[0-9a-f]{40,200}" | awk '{ print substr($1, 0,2) "/" substr($1, 3,2) "/" substr($1, 5,2) "/" $1 }' | sort -u > missing_ds_files.txt

Se o comando funcionasse corretamente, o conteúdo de missing_ds_files.txt seria semelhante ao seguinte:

12/92/04/129204a6dd0ce2cd5ca19c721b6f52ee2b3630e2
9f/d8/38/9fd8386d20cf55e7e0024e18d0c7d4e8400454ee
7a/13/15/7a1315788f45dafd6630454f04183601682a9f80
28/37/d2/2837d24aed3ff223cd40e90222226c4ef2e2a0c6

  b. No Windows:  Use um editor de texto como o Textpad ou o Bloco de Notas para localizar todas as ocorrências de "Registro não encontrado".  Em seguida, depois de localizar todas essas ocorrências, extraia os nomes de arquivos usando uma macro, escrevendo um script ou copiando e construindo manualmente os nomes de arquivos em um novo arquivo de texto.

Os caminhos do arquivo DataStore são construídos a partir do nome do registro neste formato:
{dois primeiros caracteres de id de gravação}/{segundos dois caracteres de id de registro}/{terceiros dois caracteres de id de registro}/{id de registro}

Por exemplo, neste erro:

java.lang.RuntimeException: Error occurred while obtaining InputStream for blobId [add1dd8fc5093b27b1fae1b753cb48b24ef3231f#101983]

o ID do registro é add1dd8fc5093b27b1fae1b753cb48b24ef3231f e o caminho do arquivo é/d1/dd/add1dd8fc5093b27b1fae1b753cb48b24ef3231f

4. Recupere os arquivos ausentes

Agora, use o resultado da última etapa para procurar os mesmos arquivos em outras instâncias do Adobe Experience Manager em seu ambiente.  Como os arquivos do armazenamento de dados são armazenados exclusivamente, você pode copiá-los de outras instâncias do Adobe Experience Manager em seu ambiente.

Se você não conseguir encontrar alguns dos arquivos em outras instâncias, pesquise seus backups e os restaure de lá, se possível.

No Linux, você poderia efetuar login em cada uma das instâncias do Adobe Experience Manager e usar um comando como o rsync para copiar qualquer um dos arquivos ausentes existentes neles.  Por exemplo, executando-o a partir do diretório do armazenamento de dados no servidor que possui os arquivos ausentes:

rsync -avR --files-from=missing_ds_files.txt . user@hostname-of-server-missing-files:/path/to/crx-quickstart/repository/repository/datastore/

O comando executa um rsync que copia todos os arquivos listados em missing_ds_files.txt que existem no servidor. 

5. Limpar referências de arquivos irrecuperáveis

Se você não conseguiu recuperar alguns dos arquivos do backup ou de outras instâncias do Adobe Experience Manager, limpe ou corrija as referências incorretas do armazenamento de dados.  Execute novamente a verificação de consistência do DataStore como executado na etapa 4.  Você recebe uma lista atual de arquivos ausentes.

Revise cada um dos caminhos de nós listados que estão referenciando arquivos de armazenamento de dados ausentes.  Analise todos os recursos ou arquivos do DAM que foram enviados para as páginas com seu usuário.  Faça o upload novamente daqueles que faltam e são necessários.  Todos os desnecessários podem ser excluídos com segurança por meio da interface do Adobe Experience Manager.  Se algo está faltando de /var/audit ou /var/eventing pode ser apagado com segurança.  Para todos os arquivos sobre os quais você não tem certeza, vá aqui e entre em contato com a equipe de suporte do AEM para obter assistência.

6. Reindexe todos os índices assíncronos do Oak

Devido ao modelo de indexação assíncrona do Oak, poderia haver arquivos ausentes relacionados a índices assíncronos do Oak.  Esses arquivos ausentes não serão reportados na verificação de consistência, pois estão ocultos das travessias do repositório.  Infelizmente, esses arquivos não seriam compatíveis com diferentes instâncias do AEM, portanto a única maneira de corrigir tais inconsistências é reindexar todos os índices assíncronos do Oak.

Para reindexar os índices assíncronos:

1. Faça o download do oak-run 1.0.x correspondente à versão que você instalou no seu ambiente Oak: https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/

2. Carregue o oak-run no servidor do Adobe Experience Manager.

3. Pare todas as instâncias do Adobe Experience Manager.

4. Execute o comando abaixo correspondente ao armazenamento Oak da instância do Adobe Experience Manager:

Comando TarMK:

java -Xmx4096m -jar /apps/staging/oak-run-*-*.jar checkpoints crx-quickstart/repository/segmentstore rm-all

Comando MongoMK:

java -Xmx4096m -jar oak-run-*-*.jar checkpoints mongodb://localhost/aem-author rm-all

5. Inicie o Adobe Experience Manager novamente e monitore seus arquivos de log para obter mensagens de log do INFO a partir de org.apache.jackrabbit.oak.plugins.index.  Se você quiser consultar mais detalhes sobre a indexação, vá para a interface /system/console/slinglog e ative o log de nível de depuração para org.apache.jackrabbit.oak.plugins.index.

Você deve ver mensagens de log como estas:

23.06.2015 14:26:23.070 *INFO* [FelixStartLevel] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Reindexing will be performed for following indexes: [/oak:index/cqAcUUID, /oak:index/nodetype, /oak:index/deviceIdentificationMode, /oak:index/campaignpath, /oak:index/active, /oak:index/jcrFrozenMixinTypes]

23.06.2015 14:26:23.517 *INFO* [FelixStartLevel] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Reindexing Traversed #10000 /jcr:system/jcr:versionStorage/c8/5f
...
23.06.2015 14:28:51.999 *INFO* [pool-8-thread-1] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Indexing report
    - /oak:index/counter*(708)
    - /oak:index/authorizables*(159)
    - /oak:index/cqPageLucene*(1913)
    - /oak:index/ntBaseLucene*(444)
    - /oak:index/cqTagLucene*(512)
    - /oak:index/workflowDataLucene*(116)
...

23.06.2015 14:28:52.009 *INFO* [pool-8-thread-1] org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate Reindexing (async) completed for indexes: [/oak:index/counter*(708), /oak:index/authorizables*(159), /oak:index/cqPageLucene*(1913), /oak:index/ntBaseLucene*(444), /oak:index/cqTagLucene*(512), /oak:index/workflowDataLucene*(116)] in 30.36 s

6. Se a indexação falhar por algum motivo, você a verá em loop, repetindo esta mensagem de log:

23.06.2015 14:26:23.070 *INFO* [FelixStartLevel] org.apache.jackrabbit.oak.plugins.index.IndexUpdate Reindexing will be performed for following indexes: [/oak:index/cqAcUUID, /oak:index/nodetype, /oak:index/deviceIdentificationMode, /oak:index/campaignpath, /oak:index/active, /oak:index/jcrFrozenMixinTypes]

Aplica-se a

AEM6.x / Oak 1.x

Logotipo da Adobe

Fazer logon em sua conta