Erro de inconsistência do armazenamento de dados ao obter "InputStream para blobId"

Descrição

Ambiente

  • Experience Manager 6.4
  • Experience Manager 6.5

Problema/Sintomas
Erro ao obter InputStream para blobId

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



 



1
2
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

Resolução

Esse erro significa que você possivelmente está perdendo arquivos do diretório do armazenamento de dados do Adobe Experience Manager.  A perda de arquivos do armazenamento de dados pode ser devido a uma falha do 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 hotfixes mais recentes em Compartilhamento de pacotes do Adobe.

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

Usando o oak-run jar 1.6.6 e superior, 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 ausentes

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

  1. Procure na saída da verificação de consistência todas as ocorrências do 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 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 Notepad++ para localizar todas as ocorrências de "Registro não encontrado".  Depois de localizar todas essas ocorrências, extraia os nomes de arquivo usando uma macro, escrevendo um script ou copiando e construindo manualmente os nomes de arquivo em um novo arquivo de texto.

Os caminhos de arquivo do DataStore são construídos a partir do nome do registro neste formato:
{primeiro dois caracteres de id de registro}/{segundo dois caracteres de id de registro}/{terceiro 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

a id de registro é add1dd8fc5093b27b1fae1b753cb48b24ef3231f e o caminho do arquivo é ad*/d1/dd/add1dd8fc5093b27b1fae1b7533333303333303 cb48b24ef3231f*
4. Recuperar os arquivos ausentes
Agora use a saída 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 localizar alguns dos arquivos em outras instâncias, pesquise seus backups e os restaure de lá, se possível.

No Linux, você poderia fazer logon em cada uma das instâncias do Adobe Experience Manager em funcionamento 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 tem 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 arquivo 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 a executamos na etapa 4.  Você obtém uma lista atual de arquivos ausentes.

Revise cada um dos caminhos de nó listados que fazem referência a arquivos ausentes do armazenamento de dados.  Revise quaisquer ativos ou arquivos do DAM ausentes carregados nas páginas com seu usuário.  Faça o upload novamente dos que estiverem faltando.  Qualquer um que não precise pode ser excluído com segurança pela interface do usuário do Adobe Experience Manager.  Se algo estiver faltando em /var/audit ou /var/eventing pode ser excluído com segurança.  Para todos os arquivos sobre os quais você não tem certeza, acesse here e entre em contato com a equipe de suporte AEM para obter assistência.

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

Como os arquivos de índice são armazenados no repositório Oak, também pode ser possível que alguns arquivos estejam ausentes dos índices baseados em /oak:index lucene.

Esses arquivos ausentes não seriam relatados na verificação de consistência /system/console/repositorycheck, pois estão ocultos das travessias do repositório.  Infelizmente, esses arquivos não corresponderiam em diferentes instâncias de AEM.

Para corrigir essas inconsistências, reindexe os índices assíncronos do Oak afetados.

AVISO: Essa operação é extremamente cara e exigirá tempo de inatividade estendido, de 10 minutos a vários dias, para ser concluída, dependendo do volume de conteúdo no sistema.

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. Faça upload do oak-run para o servidor 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:
 
1 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 mensagens de log INFO de org.apache.jackrabbit.oak.plugins.index.  Se quiser ver mais detalhes sobre a indexação, acesse /system/console/slinglog UI 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

Nesta página