Details
-
Bug
-
Resolution: Fixed
-
High
-
7.13.11, 7.19.0, 7.19.1, 7.19.2, 7.19.3, 7.19.4, 8.0.1, 7.20.3
-
19
-
Severity 2 - Major
-
156
-
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
- Run reindexing a large instance
- 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.