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

Última atualização em 2023-10-19

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

Ambiente

  • Experience Manager 6.4
  • Experience Manager 6.5

Problema/Sintomas

Você tem um ArmazenamentoDeDadosDeArquivo configurados no sistema Adobe Experience Manager 6.x / Oak 1.x e no error.log, você verá o seguinte:

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]

Resolução

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. Instale o CFP/SP mais recente.

    Você pode encontrar os hot fixes mais recentes em Compartilhamento de pacotes Adobe.

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

    Usando 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.

    Pesquisar a saída da verificação de consistência para todas as ocorrências de 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:

    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
    

    Nota - Se a instância do Adobe Experience Manager não estiver inicializando devido à blobId erros e, em seguida, pesquise seus arquivos de log em crx-quickstart/logs para todas as ocorrências do erro 'Error occurred while obtaining InputStream for blobId' em vez disso:

    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 funcionou 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 Textpad ou 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 de registro}/{dois segundos caracteres da id de registro}/{dois terceiros caracteres da id de registro}/{id do registro}

    Por exemplo, neste erro:

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

    a id do registro é add1dd8fc5093b27b1fae1b753cb48b24ef3231f e o caminho do arquivo for 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:

    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. Reindexe todos os índices Oak assíncronos.

    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 Oak assíncronos afetados.

    AVISO: Essa operação é extremamente cara e exigirá 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 correspondente à versão instalada no 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:

      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 mensagens de log INFO do org.apache.jackrabbit.oak.plugins.index. Se quiser ver mais detalhes sobre a indexação, acesse a interface do usuário /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ê poderá vê-la 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