問題点

/assets.html または /damadmin UI を使用して AEM の特定のフォルダーまたはアセットを削除または移動する操作が遅いか、失敗します。

削除または移動操作が失敗した場合、ログファイルにこの [1] WARN ログメッセージ「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)

原因

AEM Assets で特定のアクションの実行中に、システムが AssetReferenceResolverImpl.getReferences から次の検索を実行します。

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

システムに大量のコンテンツがある場合、この検索が必ずしも正常に実行されるとは限らず、上記のエラーで失敗する可能性があります。  

解決策

これを解決するには、デフォルトの /oak:index/ntBaseLucene インデックスにいくつかのプロパティを追加します。

  1. http://aem-host:port/crx/de/index.jsp に移動し、管理者としてログインします。

  2. /oak:index/ntBaseLucene/indexRules/nt:base/properties
    を参照します。

  3. 2 つの nt:unstructured ノード(slingResource および damResolvedPath)を /oak:index/ntBaseLucene/indexRules/nt:base/properties の下に追加します。

  4. これらのノードに次のプロパティを設定します(ordered および propertyIndex プロパティはブール型です)。

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

  5. /oak:index/ntBaseLucene ノードで、プロパティ reindex=true を設定します。

  6. すべて保存」をクリックします。

  7. error.log を監視して、インデックス作成が完了したことを確認します。

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

    また、CRXDe で /oak:index/ntBaseLucene ノードを更新したときに reindex プロパティが false に戻っていれば、インデックス作成が完了しています。

  8. インデックス作成が完了したら、CRXDe に戻り、次の 2 つのインデックスの「type」プロパティの値を「disabled」に設定します。

    • /oak:index/slingResource
    • /oak:index/damResolvedPath
  9. 「すべて保存」をクリックします。

    これで、フォルダーおよびアセットの削除および移動操作がより高速になり、安定性が向上します。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー