Lenteur ou échec de la suppression ou du déplacement de dossiers ou de ressources dans AEM Assets

Problème

La suppression ou le déplacement de certains dossiers ou ressources dans AEM via l’interface utilisateur /assets.html ou /damadmin s'effectue lentement ou échoue.

Si l'opération de suppression ou de déplacement échoue, ce [1] message d'avertissement s'affiche dans le fichier journal, « La requête a lu ou traversé plus de X nœuds. »

java.lang.UnsupportedOperationException: The query read or traversed more than 100000 nodes. To avoid affecting other tasks, processing was stopped.
at org.apache.jackrabbit.oak.query.FilterIterators.checkReadLimit(FilterIterators.java:66)
at org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy$PathIterator.fetchNextPossiblyDuplicate(ContentMirrorStoreStrategy.java:422)
at org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy$PathIterator.fetchNext(ContentMirrorStoreStrategy.java:365)
at org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy$PathIterator.next(ContentMirrorStoreStrategy.java:449)
at org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy$PathIterator.next(ContentMirrorStoreStrategy.java:303)
at com.google.common.collect.Iterators$7.computeNext(Iterators.java:646)
at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
at org.apache.jackrabbit.oak.spi.query.Cursors$PathCursor.hasNext(Cursors.java:205)
at org.apache.jackrabbit.oak.query.ast.SelectorImpl.next(SelectorImpl.java:407)
at org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.fetchNext(QueryImpl.java:773)
at org.apache.jackrabbit.oak.query.QueryImpl$RowIterator.hasNext(QueryImpl.java:798)
at com.google.common.collect.Iterators$5.hasNext(Iterators.java:542)
at org.apache.jackrabbit.oak.query.FilterIterators$DistinctIterator.fetchNext(FilterIterators.java:137)
at org.apache.jackrabbit.oak.query.FilterIterators$DistinctIterator.hasNext(FilterIterators.java:151)
at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl$3.fetch(QueryResultImpl.java:181)
at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl$3.<init>(QueryResultImpl.java:176)
at org.apache.jackrabbit.oak.jcr.query.QueryResultImpl.getNodes(QueryResultImpl.java:170)
at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.findResources(JcrResourceProvider.java:346)
at org.apache.sling.resourceresolver.impl.tree.RootResourceProviderEntry$2.seek(RootResourceProviderEntry.java:148)
at org.apache.sling.resourceresolver.impl.tree.RootResourceProviderEntry$2.<init>(RootResourceProviderEntry.java:134)
at org.apache.sling.resourceresolver.impl.tree.RootResourceProviderEntry.findResources(RootResourceProviderEntry.java:132)
at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.findResources(ResourceResolverImpl.java:694)
at com.day.cq.dam.core.impl.AssetReferenceResolverImpl.getReferences(AssetReferenceResolverImpl.java:524)
at com.day.cq.wcm.core.impl.commands.DeletePageCommand.performCommand(DeletePageCommand.java:142)
at com.day.cq.wcm.core.impl.commands.WCMCommandServlet$CommandHolder.performCommand(WCMCommandServlet.java:161)
at com.day.cq.wcm.core.impl.commands.WCMCommandServlet.performCommand(WCMCommandServlet.java:264)
at com.day.cq.commons.servlets.AbstractCommandServlet.doPost(AbstractCommandServlet.java:49)

Cause

Lors de certaines actions dans AEM Assets, le système exécute la recherche ci-dessous à partir de AssetReferenceResolverImpl.getReferences :

//element(*, nt:unstructured)[(jcr:like(@dam:resolvedPath, '/content/dam/geometrixx/services%') or jcr:like(@sling:resource , '/content/dam/geometrixx/services%'))]

Lorsque le système comporte un grand nombre de contenus, cela signifie que la recherche ne s'effectue pas toujours correctement et peut échouer suite à l'erreur ci-dessus.  

Résolution

Pour résoudre ce problème, nous pouvons ajouter quelques propriétés à l'index out-of-the-box /oak:index/ntBaseLucene.

  1. Accédez à http://aem-host:port/crx/de/index.jsp et connectez-vous en tant qu'admin.

  2. Naviguez jusqu'à /oak:index/ntBaseLucene/indexRules/nt:base/properties

  3. Ajoutez deux nt:unstructured nœuds slingResource et damResolvedPath sous /oak:index/ntBaseLucene/indexRules/nt:base/properties.

  4. Définissez les propriétés ci-dessous sur les nœuds (où les propriétés classées et propertyIndex sont de type booléen) :

    slingResource
      name="sling:resource"
      ordered=false
      propertyIndex= true
      type="String"
    damResolvedPath
      name="dam:resolvedPath"
      ordered=false
      propertyIndex=true
      type="String"

  5. Dans le nœud /oak:index/ntBaseLucene, définissez la propriété reindex=true.

  6. Cliquez sur Tout sauvegarder.

  7. Surveiller le journal des erreurs pour voir quand l’indexation est terminée :

    Reindexing completed for indexes: [/oak:index/ntBaseLucene]

    Vous pouvez également vérifier si l'indexation est terminée en actualisant le nœud /oak:index/ntBaseLucene dans CRXDe car la propriété de la réindexation redeviendra false.

  8. Une fois l’indexation terminée, revenir à CRXDe et définir la valeur de propriété « type » sur « disabled » pour ces deux index :

    • /oak:index/slingResource
    • /oak:index/damResolvedPath
  9. Cliquez sur « Tout enregistrer ».

    A présent, la suppression de fichiers et de contenus et les opérations de déplacement devraient être plus rapides et plus stables.

Logo Adobe

Accéder à votre compte