AEM+S3DataStore+Mongo cluster encounter S3 404

Problema

In un cluster AEM multi-nodo utilizzando S3DataStore, se si caricano immagini o video di grandi dimensioni (100 MB+) nell'interfaccia utente di Assets tramite un nodo topologico secondario, vengono registrati errori simili a quello sottostante. 

17.04.2017 23:53:27.106 *ERROR* [JobHandler: /etc/workflow/instances/server0/2017-04-17/update_asset_5:/content/dam/test.jpg/jcr:content/renditions/original] com.day.cq.dam.core.impl.cache.CQBufferedImageCache Error while loading image /content/dam/rrd/dsg/migration-test/to-rrd/aem-tester/Perf1492487597162_Performance_100MB_JPG.jpg/jcr:content/renditions/original
java.lang.RuntimeException: Error occurred while obtaining InputStream for blobId [c260220808fc2ee8550a97daea0444123b02f90b#103376192]
at org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob.getNewStream(BlobStoreBlob.java:49)
at org.apache.jackrabbit.oak.plugins.value.BinaryImpl.getStream(BinaryImpl.java:53)
at org.apache.sling.jcr.resource.internal.helper.LazyInputStream.getStream(LazyInputStream.java:106)
at org.apache.sling.jcr.resource.internal.helper.LazyInputStream.read(LazyInputStream.java:65)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1792)
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744)
at com.day.cq.dam.commons.handler.StandardImageHandler.getImage(StandardImageHandler.java:245)
at com.day.cq.dam.core.impl.handler.JpegHandler.getImage(JpegHandler.java:79)
at com.day.cq.dam.core.impl.cache.CQBufferedImageCache.getImage(CQBufferedImageCache.java:116)
at com.day.cq.dam.core.impl.gfx.CommonsGfxRenderer.createImageLayer(CommonsGfxRenderer.java:488)
at com.day.cq.dam.core.impl.gfx.CommonsGfxRenderer.createLayer(CommonsGfxRenderer.java:163)
at com.day.cq.dam.core.impl.gfx.CommonsGfxRenderer.render(CommonsGfxRenderer.java:116)
at com.day.cq.dam.core.impl.RenditionMakerImpl$PlanBasedTemplate.apply(RenditionMakerImpl.java:132)
at com.day.cq.dam.core.impl.RenditionMakerImpl.generateRenditions(RenditionMakerImpl.java:216)
at com.day.cq.dam.core.process.CreateWebEnabledImageProcess.createWebEnabledImage(CreateWebEnabledImageProcess.java:165)
at com.day.cq.dam.core.process.ThumbnailProcess.execute(ThumbnailProcess.java:82)
at com.day.cq.workflow.compatibility.CQWorkflowProcessRunner.execute(CQWorkflowProcessRunner.java:93)
...
Caused by: java.io.IOException: org.apache.jackrabbit.core.data.DataStoreException: Could not length of dataIdentifier c260220808fc2ee8550a97daea0444123b02f90b
at org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore.getStream(DataStoreBlobStore.java:539)
at org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore.getInputStream(DataStoreBlobStore.java:322)
at org.apache.jackrabbit.oak.plugins.blob.BlobStoreBlob.getNewStream(BlobStoreBlob.java:47)
... 26 common frames omitted
Caused by: org.apache.jackrabbit.core.data.DataStoreException: Could not length of dataIdentifier c260220808fc2ee8550a97daea0444123b02f90b
at org.apache.jackrabbit.oak.blob.cloud.aws.s3.S3Backend.getLength(S3Backend.java:485)
at org.apache.jackrabbit.core.data.CachingDataStore.getLength(CachingDataStore.java:671)
at org.apache.jackrabbit.core.data.CachingDataStore.getRecord(CachingDataStore.java:469)
at org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore.getDataRecord(DataStoreBlobStore.java:548)
at org.apache.jackrabbit.oak.plugins.blob.datastore.DataStoreBlobStore.getStream(DataStoreBlobStore.java:533)
... 28 common frames omitted
Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: Not Found (Service: Amazon S3; Status Code: 404; Error Code: 404 Not Found; Request ID: 09ED6CDC6129E1DA)
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1389)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:902)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:607)
at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:376)
at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:338)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:287)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3826)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1015)
at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:991)
at org.apache.jackrabbit.oak.blob.cloud.aws.s3.S3Backend.getLength(S3Backend.java:478)
... 32 common frames omitted

Ambiente

AEM Assets 6.1, 6.2 su MongoMK utilizzando S3DataStore

Causa

La causa di questo problema è dovuta al caricamento asincrono del binario su S3 che richiede più tempo dell'elaborazione del lavoro nel cluster. Il nodo leader elabora i lavori del flusso di lavoro DAM Update Asset, ma il lavoro viene elaborato prima che il file venga caricato in S3.  Consulta OAK-4903 per ulteriori dettagli.

Risoluzione

Questo problema è stato risolto in AEM6.3.

A. Disattiva S3 Async Uploads

Come soluzione ai punti AEM6.1 e 6.2, fai quanto segue:

  1.  Accedi al server AEM e apri il file crx-quickstart/install/org.apache.jackrabbit.oak.plugins.blob.datastore.S3DataStore.config in un editor

  2. Imposta questa proprietà

    asyncUploadLimit="0"
  3. Riavvia AEM

Nota:

L'impostazione di asyncUploadLimit a 0 avrà un impatto sulle prestazioni nel caricamento dei file delle risorse.  Dopo averlo impostato, sarà necessario eseguire prove di caricamento per assicurarsi che l'ambiente soddisfi ancora le esigenze di prestazioni. 

B. Attiva la distribuzione dei job

Un altro approccio per risolvere il problema senza successo di prestazioni è quello di consentire la distribuzione degli sling job. È quindi possibile elaborare gli
sling job direttamente sui nodi del cluster secondario in aggiunta a quello primario.

A tal fine, attieniti alla procedura riportata di seguito:

  1. Vai su http://aem-host:port/system/console/configMgr

  2. Trova l' Apache Sling Job Manager e fai clic su modifica (icona a matita a destra)

  3. Deseleziona Disattivare la distribuzione

  4. Fai clic su Salva

Logo Adobe

Accedi al tuo account