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

Saiba como resolver o armazenamento de dados obtendo o erro InputStream. Compilar uma lista de e restaurar caminhos para arquivos ausentes e reindexar.

Descrição description

Ambiente

  • Experience Manager 6.4
  • Experience Manager 6.5

Problema/Sintomas

Você tem um FileDataStore configurado no sistema Adobe Experience Manager 6.x/Oak 1.x e, no error.log, você vê o seguinte:

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]

Resolução resolution

Esse erro significa que provavelmente você não tem arquivos do diretório de armazenamento de dados do Adobe Experience Manager.  A perda de arquivos do armazenamento de dados pode ocorrer devido a uma falha da coleta de lixo do Oak Blob, uma interrupção de espaço em disco, disco ou instabilidade do compartilhamento de rede. Ou pode ser devido a um usuário que excluiu arquivos incorretamente do servidor.

Para recuperar os arquivos ausentes, siga as etapas abaixo.

  1. Instalar o CFP/SP mais recente.

    Você pode encontrar os hotfixes mais recentes no Compartilhamento de pacotes do Adobe.

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

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

    code language-none
    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.

    Pesquisar a saída da verificação de consistência para todas as ocorrências do erro Registro não encontrado

    a. No Linux ou Unix: use este comando para enviar a lista de arquivos ausentes para um arquivo missing_ds_files.txt:

    code language-none
    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
    

    Observação - Se a instância do Adobe Experience Manager não estiver inicializando devido aos erros blobId, procure nos arquivos de log em crx-quickstart/logs todas as ocorrências do erro 'Error occurred while obtaining InputStream for blobId':

    code language-none
    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:

    code language-none
    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 encontrar todas essas ocorrências, extraia os nomes de arquivo usando uma macro, gravando 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: {dois primeiros caracteres da ID do registro}/{dois segundos caracteres da ID do registro}/{dois terceiros caracteres da ID do registro}/{ID do registro}

    Por exemplo, neste erro:

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

    a id do registro é add1dd8fc5093b27b1fae1b753cb48b24ef3231f e o caminho do arquivo é ad/d1/dd/add1dd8fc5093b27b1fae1b753cb48b24ef3231f

  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 não conseguir encontrar alguns dos arquivos em outras instâncias, pesquise seus backups e restaure-os a partir daí, se possível.

    No Linux, você pode fazer logon em cada uma das instâncias do Adobe Experience Manager em funcionamento e usar um comando como rsync para copiar qualquer um dos arquivos ausentes que existem nelas. Por exemplo, executando-o no diretório do armazenamento de dados no servidor que tem os arquivos ausentes:

    code language-none
    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 existam no servidor.

  5. Limpar referências de arquivo irrecuperáveis.

    Se não foi possível 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 conforme a executamos na etapa 4. Você obtém uma lista atual de arquivos ausentes.

    Revise cada um dos caminhos de nó listados que estão fazendo referência a arquivos de armazenamento de dados ausentes. Revise todos os ativos ou arquivos do DAM ausentes carregados nas páginas com o usuário. Faça com que eles façam o upload novamente dos arquivos que estiverem faltando. Qualquer item que não for necessário poderá ser excluído com segurança por meio da interface do usuário do Adobe Experience Manager. Se algo estiver ausente em /var/audit ou /var/eventing, poderá ser excluído com segurança. Para os arquivos que você não tem certeza, acesse aqui e entre em contato com a equipe de suporte do AEM para obter assistência.

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

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

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

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

    AVISO: esta operação é extremamente cara e requer um tempo de inatividade prolongado, que pode durar de 10 minutos a vários dias, dependendo do volume de conteúdo no sistema.

    Para reindexar os índices assíncronos:

    1. Baixe o oak-run 1.0.x que corresponda à versão instalada em 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 sua instância do Adobe Experience Manager:

      Comando TarMK:

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

      Comando MongoMK:

      code language-none
      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, vá para a interface do usuário /system/console/slinglog e habilite o log de nível de depuração para org.apache.jackrabbit.oak.plugins.index.

      Você deve ver mensagens de log como estas:

      code language-none
      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ê poderá vê-la em loop, repetindo esta mensagem de log:

      code language-none
      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]
      
recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f