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
Error al obtener InputStream para blobId

Tiene un FileDataStore configurado en su sistema Adobe Experience Manager 6.x/Oak 1.x y en el archivo error.log verá "Error ocurrido al obtener 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

Resolución

Este error significa que es posible que 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 fallo en la colección de residuos de Oak Blob, a una interrupción del espacio en disco, al disco o a la inestabilidad de la red compartida. O bien, podría deberse a que un usuario elimina erróneamente los archivos del servidor.

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

1. Instale el CFP/SP más reciente

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

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

Usando oak-run jar 1.6.6 y superior, 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. Crear 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.

  1. Busque en el resultado de la comprobación de consistencia todas las ocurrencias del error "Registro no encontrado".

a. En Linux o Unix: Utilice este comando para incluir 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 |
| — |


\*\* Si la instancia de Adobe Experience Manager no se está iniciando debido a los errores "blobId", busque en sus archivos de registro en crx-quickstart/logs todas las ocurrencias del error "Error ocurrido al obtener InputStream para 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 funcionara correctamente, el contenido de missing_ds_files.txt sería 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 encontrar todas las ocurrencias de "Registro no encontrado".  A continuación, después de encontrar todas estas ocurrencias, extraiga los nombres de archivo utilizando 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 almacén de datos se construyen a partir del nombre del registro con este formato:
{primeros dos caracteres del registro id}/{segundos dos caracteres del registro id}/{terceros dos caracteres del registro id}/{registro id}

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/add1dd8fc5093b27b1fae1b753cb 48b24ef3231f*
4. Recuperar 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 única, 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 restablézcalas 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 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 enumerado en missing_ds_files.txt que exista en el servidor.
5. Limpiar referencias de archivos irrecuperables
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 incorrectas del almacén de datos.  Vuelva a ejecutar la comprobación de coherencia del almacén de datos tal y como lo hicimos en el paso 4.  Se obtiene una lista actual de archivos que faltan.

Revise cada una de las rutas de nodos enumeradas que hacen referencia a archivos del almacén de datos que faltan.  Revise los recursos DAM que faltan o los archivos cargados en páginas con su usuario.  Haga que vuelvan a cargar los que faltan y que necesiten.  Cualquier cosa que no necesiten se puede eliminar de forma segura a través de la interfaz de usuario de Adobe Experience Manager.  Si falta algo en /var/audit o /var/eventing puede ser borrado con seguridad.  Para cualquier archivo del que no esté seguro, vaya here y póngase en contacto con el equipo de asistencia de AEM para obtener ayuda.

 6. Reindexar todos los índices asíncronos de Oak

Dado que los archivos de índice se almacenan dentro del repositorio Oak, también podría ser posible que algunos archivos no estén en los índices basados en /oak:index lucene.

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

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

ADVERTENCIA: Esta operación es extremadamente costosa y requerirá tiempo de inactividad prolongado, desde 10 minutos hasta varios días, para completarse 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 oak-run en el servidor de Adobe Experience Manager.

  3. Detenga todas las instancias de Adobe Experience Manager.

  4. Ejecute el siguiente comando correspondiente al almacenamiento Oak de su instancia de 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. Vuelva a iniciar Adobe Experience Manager y supervise los archivos de registro para ver los mensajes de registro INFO desde 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 los siguientes:

 

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, entonces 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