Problema

Borrar o mover ciertas carpetas o activos en AEM a través de /assets.html o /damadmin UI es lento o falla.

Si la operación de borrar o mover da error, verá en el archivo de registro este mensaje de registro de ADVERTENCIA [1], "La consulta ha leído o atravesado más de X nodos".

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)

Causa

Durante ciertas acciones en AEM Assets, el sistema realizará la búsqueda a continuación que se origina en AssetReferenceResolverImpl.getReferences:

//elemento(*, nt:no estructurado)[(jcr:like(@dam:resolvedPath, '/content/dam/geometrixx/services%') o jcr:like(@sling:resource, '/content/dam/geometrixx/services%'))]

Cuando el sistema tiene mucho contenido entonces esa búsqueda no siempre funciona bien y podría fallar con el error anterior.  

Resolución

Para resolver esto, podemos añadir algunas propiedades al índice /oak:index/ntBaseLucene.

  1. Vaya a http://aem-host:port/crx/de/index.jsp e inicie sesión como administrador.

  2. Busque /oak:index/ntBaseLucene/indexRules/nt:base/properties

  3. Añada dos nt:unstructured nodes slingResource and damResolvedPath under /oak:index/ntBaseLucene/indexRules/nt:base/properties.

  4. Defina las propiedades siguientes en los nodos (donde las propiedades ordenadas y propertyIndex son de tipo booleano):

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

  5. En el nodo /oak:index/ntBaseLucene, establezca la propiedad reindex=true.

  6. Haga clic en Guardar todo

  7. Supervise el archivo error.log para ver cuándo se completa la indexación:

    Se completa la reindexación de los índices: [/oak:index/ntBaseLucene]

    También puede ver que la indexación se completa actualizando el nodo /oak:index/ntBaseLucene en CRXDe ya que la propiedad reindex volvería a ser false.

  8. Una vez finalizada la indexación, vuelva al CRXDe y ajuste el valor de la propiedad "type" a "disabled" en estos dos índices:

    • /oak:index/slingResource
    • /oak:index/damResolvedPath
  9. Haga clic en "Guardar todo"

    Ahora, las operaciones de eliminación y desplazamiento de carpetas y activos deberían ser más rápidas y estables

Esta obra está autorizada con arreglo a la licencia de Reconocimiento-NoComercial-CompartirIgual 3.0 Unported de Creative Commons.  Los términos de Creative Commons no cubren las publicaciones en Twitter™ y Facebook.

Avisos legales   |   Política de privacidad en línea