You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Patrique Legault (Jira)" <ji...@apache.org> on 2026/08/07 13:50:00 UTC

[jira] [Created] (OAK-12341) Thread Contention authentication.external.impl.principal.SyncConfigTracker

Patrique Legault created OAK-12341:
--------------------------------------

             Summary: Thread Contention authentication.external.impl.principal.SyncConfigTracker
                 Key: OAK-12341
                 URL: https://issues.apache.org/jira/browse/OAK-12341
             Project: Jackrabbit Oak
          Issue Type: Bug
          Components: auth-external
            Reporter: Patrique Legault


When an external user needs to check permissions it requires requesting the OSGi services related to the external principal. This uses the [ServiceTracker|https://github.com/osgi/osgi/blob/8c7184dad43779668052afe5b29a2a201e527b52/org.osgi.util.tracker/src/org/osgi/util/tracker/ServiceTracker.java#L534-L541], which is a synchronized operation and should be used only when needed to prevent BLOCKING operations.

When the Oak repository is under heavy load and needs to perform permission looks up we can quickly flood the servlet container with BLOCKING permission lookups leading to slow operations.
{code:java}
java.lang.Thread.State: BLOCKED (on object monitor)
	at org.osgi.util.tracker.ServiceTracker.getServiceReferences(ServiceTracker.java:531)
	- waiting to lock <0x0000000206e9d158> (a org.osgi.util.tracker.ServiceTracker$Tracked)
	at org.apache.jackrabbit.oak.spi.security.authentication.external.impl.principal.SyncConfigTracker.getReferences(SyncConfigTracker.java:166)
	at org.apache.jackrabbit.oak.spi.security.authentication.external.impl.principal.SyncConfigTracker.isEnabled(SyncConfigTracker.java:59)
	at org.apache.jackrabbit.oak.spi.security.authentication.external.impl.principal.ExternalPrincipalConfiguration.dynamicMembershipEnabled(ExternalPrincipalConfiguration.java:260)
	at org.apache.jackrabbit.oak.spi.security.authentication.external.impl.principal.ExternalPrincipalConfiguration.getPrincipalProvider(ExternalPrincipalConfiguration.java:159)
	at org.apache.jackrabbit.oak.spi.security.principal.CompositePrincipalConfiguration.getPrincipalProvider(CompositePrincipalConfiguration.java:58)
	at org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.FilterProviderImpl.getFilter(FilterProviderImpl.java:104)
	at org.apache.jackrabbit.oak.spi.security.authorization.principalbased.impl.PrincipalBasedAuthorizationConfiguration.getPermissionProvider(PrincipalBasedAuthorizationConfiguration.java:127)
	at org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.getPermissionProvider(CompositeAuthorizationConfiguration.java:181)
	at org.apache.jackrabbit.oak.core.MutableRoot$1.createValue(MutableRoot.java:135)
	at org.apache.jackrabbit.oak.core.MutableRoot$1.createValue(MutableRoot.java:132)
	at org.apache.jackrabbit.oak.commons.LazyValue.get(LazyValue.java:56)
	- locked <0x00000006f006f138> (a org.apache.jackrabbit.oak.core.MutableRoot$1)
	at org.apache.jackrabbit.oak.core.SecureNodeBuilder.getTreePermission(SecureNodeBuilder.java:359)
	at org.apache.jackrabbit.oak.core.SecureNodeBuilder.getTreePermission(SecureNodeBuilder.java:363)
	at org.apache.jackrabbit.oak.core.SecureNodeBuilder.getTreePermission(SecureNodeBuilder.java:363)
	at org.apache.jackrabbit.oak.core.SecureNodeBuilder.getTreePermission(SecureNodeBuilder.java:363)
	at org.apache.jackrabbit.oak.core.SecureNodeBuilder.getTreePermission(SecureNodeBuilder.java:363)
	at org.apache.jackrabbit.oak.core.SecureNodeBuilder.getTreePermission(SecureNodeBuilder.java:363)
	at org.apache.jackrabbit.oak.core.SecureNodeBuilder.getTreePermission(SecureNodeBuilder.java:363)
	at org.apache.jackrabbit.oak.core.SecureNodeBuilder.getTreePermission(SecureNodeBuilder.java:363)
	at org.apache.jackrabbit.oak.core.SecureNodeBuilder.exists(SecureNodeBuilder.java:128)
	at org.apache.jackrabbit.oak.plugins.tree.impl.AbstractTree.exists(AbstractTree.java:206)
	at org.apache.jackrabbit.oak.core.MutableTree.exists(MutableTree.java:120)
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)