Error de incoherencia del almacén de datos al obtener "InputStream para blobId"

Descripción

Entorno

  • Experience Manager 6.4
  • Experience Manager 6.5

Problema/Síntomas

Tiene un FileDataStore configurado en su sistema Adobe Experience Manager 6.x / Oak 1.x y en el error.log puede ver lo siguiente:

Error al obtener 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`]`

Resolución

Este error significa que posiblemente falten archivos del directorio del almacén de datos de Adobe Experience Manager.  La pérdida de archivos del almacén de datos puede deberse a un error de la recolección de basura de Oak Blob, una interrupción del espacio en disco, un disco o una inestabilidad del recurso compartido de red. O bien, podría deberse a que un usuario ha eliminado archivos del servidor por error.

Para recuperar los archivos que faltan, siga los pasos a continuación.

  1. Instale el último CFP/SP de.

    Puede encontrar las correcciones rápidas más recientes en Uso compartido de paquetes Adobe.

  2. Ejecute la comprobación de consistencia del almacén de datos.

    Con oak-run jar 1.6.6 y versiones posteriores, ejecute el siguiente 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. Cree una lista de rutas de los archivos que faltan.

    El siguiente paso para recuperar los archivos que faltan es compilar una lista completa de las rutas de los archivos que faltan.

    Buscar en el resultado de la comprobación de coherencia todas las apariciones de errores Registro no encontrado

    a. En Linux o Unix: utilice este comando para generar la lista de archivos que faltan en un archivo 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 - Si la instancia de Adobe Experience Manager no se está iniciando debido a la blobId errores, busque los archivos de registro en crx-quickstart/logs para todas las incidencias del error 'Error occurred while obtaining InputStream for blobId' en su lugar:

    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
    

    Si el comando funcionó correctamente, el contenido de missing_ds_files.txt tendría un aspecto similar al siguiente:

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

    b. En Windows: utilice un editor de texto como Textpad o Notepad++ para buscar todas las ocurrencias de Registro no encontrado. A continuación, después de buscar todos estos casos, extraiga los nombres de archivo con una macro, escribiendo una secuencia de comandos o copiando y construyendo manualmente los nombres de archivo en un nuevo archivo de texto.

    Las rutas de archivo del DataStore se construyen a partir del nombre del registro con este formato: {dos primeros caracteres del id de registro}/{segundo par de caracteres del id de registro}/{dos terceros caracteres del id de registro}/{id de registro}

    Por ejemplo, en este error:

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

    el id de registro es add1dd8fc5093b27b1fae1b753cb48b24ef3231f y la ruta del archivo es ad/d1/dd/add1dd8fc5093b27b1fae1b753cb48b24ef3231f

  4. Recupere los archivos que faltan.

    Ahora utilice el resultado del último paso para buscar los mismos archivos en otras instancias de Adobe Experience Manager de su entorno. Dado que los archivos del almacén de datos se almacenan de forma exclusiva, puede copiarlos de otras instancias de Adobe Experience Manager de su entorno.

    Si no encuentra algunos de los archivos en otras instancias, busque las copias de seguridad y restáurelas desde allí, si es posible.

    En Linux, puede iniciar sesión en cada una de las instancias de Adobe Experience Manager en funcionamiento y utilizar un comando como rsync para copiar sobre cualquiera de los archivos que faltan en ellas. Por ejemplo, ejecutándolo desde el directorio del almacén de datos en el servidor que tiene los archivos que faltan:

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

    El comando ejecuta un rsync que copia sobre cualquier archivo listado en missing_ds_files.txt que exista en el servidor.

  5. Limpie las referencias de archivos no recuperables.

    Si no pudo recuperar algunos de los archivos de la copia de seguridad o de otras instancias de Adobe Experience Manager, limpie o corrija las referencias del almacén de datos incorrectas. Vuelva a ejecutar la comprobación de coherencia del DataStore cuando la ejecutemos en el paso 4. Obtendrá una lista actual de los archivos que faltan.

    Revise cada una de las rutas de nodos enumeradas que hacen referencia a los archivos del almacén de datos que faltan. Revise los recursos DAM o archivos cargados en las páginas con el usuario que faltan. Haga que vuelvan a cargar los que falten. Los que no necesiten se pueden eliminar de forma segura mediante la interfaz de usuario de Adobe Experience Manager. Si falta algo en /var/audit o /var/eventing, se puede eliminar sin problemas. Para cualquier archivo que no esté seguro, vaya a aquí AEM y póngase en contacto con el equipo de soporte técnico de para obtener ayuda.

  6. Reindexe todos los índices Oak asincrónicos.

    Dado que los archivos de índice se almacenan en el repositorio de Oak, también puede ser posible que falten algunos archivos en los índices basados en /oak:index lucene.

    Los archivos que faltan no se registrarán en la comprobación de coherencia /system/console/repositorycheck, ya que están ocultos en los recorridos del repositorio. AEM Desafortunadamente, estos archivos no coincidirán en diferentes instancias de la.

    Para corregir estas incoherencias, reindexe los índices asíncronos de Oak afectados.

    ADVERTENCIA: Esta operación es extremadamente costosa y requerirá un tiempo de inactividad prolongado, que puede oscilar entre 10 minutos y varios días, según el volumen de contenido del sistema.

    Para reindexar los índices asíncronos:

    1. Descargue oak-run 1.0.x que coincida con la versión que ha instalado en su entorno Oak: https://repo1.maven.org/maven2/org/apache/jackrabbit/oak-run/

    2. Cargue el oak-run al servidor de Adobe Experience Manager.

    3. Detenga todas las instancias de Adobe Experience Manager.

    4. Ejecute el siguiente comando, correspondiente al almacenamiento Oak de la instancia de Adobe Experience Manager:

      TarMK, comando:

      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 Adobe Experience Manager de nuevo y supervise los archivos de registro en busca de mensajes de registro INFO de org.apache.jackrabbit.oak.plugins.index. Si desea ver más detalles sobre la indexación, vaya a la interfaz de usuario /system/console/slinglog y habilite el registro de nivel de depuración para org.apache.jackrabbit.oak.plugins.index.

      Debería ver mensajes de registro como estos:

      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. Si la indexación falla por alguna razón, lo vería en bucle, repitiendo este mensaje de registro:

      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`]`
      

En esta página