Uploaded image for project: 'Confluence Data Center'
  1. Confluence Data Center
  2. CONFSERVER-81262

Lock contention causes slow reindexing in Confluence

    XMLWordPrintable

Details

    Description

      Issue Summary

      Reindexing Confluence is taking a lot more time because of lock contention in Antisamy cleaner.

      This is reproducible on Data Center: yes

      Steps to Reproduce

      1. Run reindexing a large instance
      2. Taking threaddump

      Expected Results

      Reindexing should finish in reasonable time.

      Actual Results

      Reindexing is very slow.

      Similar stacktrace could be found in the Threaddump file

      "Indexer: 22" #1365 prio=5 os_prio=0 cpu=224693.69ms elapsed=1370.60s tid=0x00007fe578558000 nid=0x530b waiting for monitor entry  [0x00007fe3ffb62000]
         java.lang.Thread.State: BLOCKED (on object monitor)
          at java.util.Hashtable.get(java.base@11.0.16.1/Hashtable.java:379)
          - waiting to lock <0x0000001074589ea0> (a java.util.Hashtable)
          at org.apache.xml.serialize.HTMLdtd.fromChar(Unknown Source)
          at org.apache.xml.serialize.HTMLSerializer.getEntityRef(Unknown Source)
          at org.owasp.validator.html.scan.ASXHTMLSerializer.getEntityRef(ASXHTMLSerializer.java:33)
          at org.apache.xml.serialize.BaseMarkupSerializer.printEscaped(Unknown Source)
          at org.apache.xml.serialize.BaseMarkupSerializer.printEscaped(Unknown Source)
          at org.apache.xml.serialize.HTMLSerializer.startElement(Unknown Source)
          at org.apache.xalan.transformer.TransformerIdentityImpl.startElement(TransformerIdentityImpl.java:1073)
          at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
          at org.cyberneko.html.filters.DefaultFilter.startElement(DefaultFilter.java:136)
          at org.owasp.validator.html.scan.MagicSAXFilter.updateEmptyTagStatus(MagicSAXFilter.java:505)
          at org.owasp.validator.html.scan.MagicSAXFilter.characters(MagicSAXFilter.java:104)
          at org.cyberneko.html.HTMLTagBalancer.characters(HTMLTagBalancer.java:975)
          at com.atlassian.xhtml.parsing.BlockIsolatingTagBalancer.characters(BlockIsolatingTagBalancer.java:169)
          at com.atlassian.xhtml.parsing.BlockIsolatingTagBalancer.characters(BlockIsolatingTagBalancer.java:167)
          at com.atlassian.xhtml.parsing.BlockIsolatingTagBalancer.characters(BlockIsolatingTagBalancer.java:167)
          at com.atlassian.xhtml.parsing.BlockIsolatingTagBalancer.characters(BlockIsolatingTagBalancer.java:167)
          at org.cyberneko.html.HTMLScanner$ContentScanner.scanCharacters(HTMLScanner.java:2378)
          at org.cyberneko.html.HTMLScanner$ContentScanner.scan(HTMLScanner.java:2066)
          at org.cyberneko.html.HTMLScanner.scanDocument(HTMLScanner.java:920)
          at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:499)
          at org.cyberneko.html.HTMLConfiguration.parse(HTMLConfiguration.java:452)
          at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
          at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
          at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:485)
          at org.owasp.validator.html.scan.AntiSamySAXScanner.scan(AntiSamySAXScanner.java:144)
          at org.owasp.validator.html.AntiSamy.scan(AntiSamy.java:101)
          at org.owasp.validator.html.AntiSamy.scan(AntiSamy.java:78)
          at com.atlassian.confluence.content.render.xhtml.PolicyConfiguredCleaner.antiSamyClean(PolicyConfiguredCleaner.java:174)
          at com.atlassian.confluence.content.render.xhtml.PolicyConfiguredCleaner.cleanEntityBody(PolicyConfiguredCleaner.java:140)
          at com.atlassian.confluence.content.render.xhtml.PolicyConfiguredCleaner.cleanQuietlyWithLogging(PolicyConfiguredCleaner.java:149)
          at com.atlassian.confluence.content.render.xhtml.PolicyConfiguredCleaner.cleanQuietly(PolicyConfiguredCleaner.java:76)
          at com.atlassian.confluence.content.render.xhtml.storage.XhtmlCleaningInterceptor$1.clean(XhtmlCleaningInterceptor.java:32)
          at com.atlassian.confluence.content.render.xhtml.storage.XhtmlCleaningInterceptor.onLoad(XhtmlCleaningInterceptor.java:77)
          at com.atlassian.confluence.core.persistence.hibernate.CompositeInterceptor.onLoad(CompositeInterceptor.java:32)
          at org.hibernate.event.internal.DefaultPreLoadEventListener.onPreLoad(DefaultPreLoadEventListener.java:25)
          at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:185)
          at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:128)
          at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1152)
          at org.hibernate.loader.Loader.processResultSet(Loader.java:1011)
          at org.hibernate.loader.Loader.doQuery(Loader.java:949)
          at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
          at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:311)
          at org.hibernate.loader.Loader.loadCollectionBatch(Loader.java:2439)
          at org.hibernate.loader.collection.plan.LegacyBatchingCollectionInitializerBuilder$LegacyBatchingCollectionInitializer.initialize(LegacyBatchingCollectionInitializerBuilder.java:83)
          at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:688)
          at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:75)
          at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:2223)
          at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:570)
          at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:248)
          at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:566)
          at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:133)
          at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:162)
          at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:147)
          at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:248)
          at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:146)
          at org.hibernate.collection.internal.PersistentBag.isEmpty(PersistentBag.java:266)
          at com.atlassian.confluence.core.ContentEntityObject.getBodyContent(ContentEntityObject.java:256)

       

      Workaround

      Currently there is no known workaround for this behavior. A workaround will be added here when available. Reducing number of indexing thread could make the reindexing process a bit faster.

      Attachments

        Issue Links

          Activity

            People

              dluong Duy Truong Luong
              dluong Duy Truong Luong
              Votes:
              12 Vote for this issue
              Watchers:
              47 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: