Problem

Das Löschen oder Verschieben bestimmter Ordner oder Elemente in AEM über die /assets.html oder /damadmin ist entweder langsam oder schlägt fehl.

Wenn das Entfernen oder Verschieben fehlschlägt, finden Sie in der Protokolldatei diese [1] Protokollwarnmeldung: „The query read or traversed more than X nodes.“

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)

Ursache

Während bestimmter Aktionen in AEM Assets, führt das System die Suche unten aus, sie stammt von AssetReferenceResolverImpl.getReferences:

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

Wenn das System sehr viele Inhalte enthält, ist diese Suche nicht immer erfolgreich und schlägt möglicherweise mit dem oben genannten Fehler fehl.  

Lösung

Um dies zu beheben, können Sie einige Eigenschaften dem Out-of-the-box-Index /oak:index/ntBaseLucene hinzufügen.

  1. Gehen Sie zu http://aem-host:port/crx/de/index.jsp und melden Sie sich als Administrator an.

  2. Navigieren Sie zu /oak:index/ntBaseLucene/indexRules/nt:base/properties

  3. Fügen Sie zwei nt:unstrukturierte Knoten hinzu slingResource und damResolvedPath unter /oak:index/ntBaseLucene/indexRules/nt:base/properties.

  4. Legen Sie die folgenden Eigenschaften für die Knoten fest (bei denen dies angefordert wird und der Property-Index den booleschen Datentyp haben):

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

  5. Setzen Sie auf dem /oak:index/ntBaseLucene Knoten die Eigenschaft reindex=true.
    fest

  6. Klicken Sie auf Alle Speichern.

  7. Überwachen Sie den error.log, um festzustellen, wann die Indizierung abgeschlossen ist:

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

    Sie können auch sehen, ob die Indizierung abgeschlossen ist, indem Sie den /oak:index/ntBaseLucene Knoten im CRXDe aktualisieren, da die neu indexierte Eigenschaft auf falsch zurückspringen würde.

  8. Nachdem die Indizierung abgeschlossen ist, rufen Sie CRXDe erneut auf und setzen Sie den Eigenschaftswert „type“ auf den folgenden beiden Indizes auf „disabled“:

    • /oak:index/slingResource
    • /oak:index/damResolvedPath
  9. Klicken Sie auf „Alle Speichern“.

    Die Ordner- und Assetlöschung und die Bewegungen sollten nun schneller und stabiler sein.

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie