[ https://issues.apache.org/jira/browse/OAK-10578?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Joerg Hoh updated OAK-10578: ---------------------------- Description: The OSGI Service Registry of Apache Felix uses synchronization to maintain its consistency. I have seen a number of cases, where this can lead to lock contention. Now I have a case where code opens and closes a lot of JCR Sessions, which in the context of Adobe AEM/Sling can also trigger a number of access to this Registry. Not all cases are easy to fix, as there is other functionality (for example Sling Models) as well which is doing a lot of requests to that Service Registry. {noformat} java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.felix.framework.EventDispatcher.updateListener(EventDispatcher.java:397) - waiting to lock <0x0000000590bc43d8> (a org.apache.felix.framework.EventDispatcher) at org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:183) at org.apache.felix.framework.Felix.addServiceListener(Felix.java:3642) at org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259) at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:298) - locked <0x00000007c0e6bf40> (a org.osgi.util.tracker.ServiceTracker$Tracked) - locked <0x00000007c0e6bd08> (a org.osgi.util.tracker.ServiceTracker) at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:265) at org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:161) at org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:113) at org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:108) at org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:185) at org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:144) at org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalLoginModule.initialize(ExternalLoginModule.java:165) at org.apache.felix.jaas.boot.ProxyLoginModule.initialize(ProxyLoginModule.java:47) at javax.security.auth.login.LoginContext.invoke(java.base@11.0.19/LoginContext.java:737) at javax.security.auth.login.LoginContext$4.run(java.base@11.0.19/LoginContext.java:672) at javax.security.auth.login.LoginContext$4.run(java.base@11.0.19/LoginContext.java:670) at java.security.AccessController.doPrivileged(java.base@11.0.19/Native Method) at javax.security.auth.login.LoginContext.invokePriv(java.base@11.0.19/LoginContext.java:670) at javax.security.auth.login.LoginContext.login(java.base@11.0.19/LoginContext.java:581) at org.apache.jackrabbit.oak.core.ContentRepositoryImpl.login(ContentRepositoryImpl.java:170) at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:297) at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:240) at org.apache.jackrabbit.oak.jcr.session.SessionImpl.impersonate(SessionImpl.java:312) at com.adobe.granite.repository.impl.CRX3SessionImpl.impersonate(CRX3SessionImpl.java:161) at org.apache.sling.jcr.base.AbstractSlingRepository2.createServiceSession(AbstractSlingRepository2.java:205) at com.adobe.granite.repository.impl.SlingRepositoryImpl.createServiceSession(SlingRepositoryImpl.java:140) at org.apache.sling.jcr.base.AbstractSlingRepository2.createServiceSession(AbstractSlingRepository2.java:170) at org.apache.sling.jcr.base.AbstractSlingRepository2.loginService(AbstractSlingRepository2.java:383) at org.apache.sling.jcr.resource.internal.helper.jcr.JcrProviderStateFactory.createProviderState(JcrProviderStateFactory.java:114) at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.authenticate(JcrResourceProvider.java:322) at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.authenticate(JcrResourceProvider.java:85) at org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager.authenticate(ProviderManager.java:166) at org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager.getOrCreateProvider(ProviderManager.java:89) at org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager.authenticateAll(ProviderManager.java:133) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.createControl(ResourceResolverImpl.java:152) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.<init>(ResourceResolverImpl.java:113) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.<init>(ResourceResolverImpl.java:107) at org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolverInternal(CommonResourceResolverFactoryImpl.java:273) at org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getServiceResourceResolver(ResourceResolverFactoryImpl.java:89) {noformat} The was: The OSGI Service Registry of Apache Felix uses synchronization to maintain its consistency. I have seen a number of cases, where this can lead to lock contention. Now I have a case where code opens and closes a lot of JCR Sessions, which in the context of Adobe AEM/Sling can also trigger a number of access to this Registry. Not all cases are easy to fix, as there is other functionality (for example Sling Models) as well which is doing a lot of requests to that Service Registry. We should explore if it's possible to cache the resolved services and reuse them. That could increase the scalability especially under load. {noformat} java.lang.Thread.State: BLOCKED (on object monitor) at org.apache.felix.framework.EventDispatcher.updateListener(EventDispatcher.java:397) - waiting to lock <0x0000000590bc43d8> (a org.apache.felix.framework.EventDispatcher) at org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:183) at org.apache.felix.framework.Felix.addServiceListener(Felix.java:3642) at org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259) at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:298) - locked <0x00000007c0e6bf40> (a org.osgi.util.tracker.ServiceTracker$Tracked) - locked <0x00000007c0e6bd08> (a org.osgi.util.tracker.ServiceTracker) at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:265) at org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:161) at org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:113) at org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:108) at org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:185) at org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:144) at org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalLoginModule.initialize(ExternalLoginModule.java:165) at org.apache.felix.jaas.boot.ProxyLoginModule.initialize(ProxyLoginModule.java:47) at javax.security.auth.login.LoginContext.invoke(java.base@11.0.19/LoginContext.java:737) at javax.security.auth.login.LoginContext$4.run(java.base@11.0.19/LoginContext.java:672) at javax.security.auth.login.LoginContext$4.run(java.base@11.0.19/LoginContext.java:670) at java.security.AccessController.doPrivileged(java.base@11.0.19/Native Method) at javax.security.auth.login.LoginContext.invokePriv(java.base@11.0.19/LoginContext.java:670) at javax.security.auth.login.LoginContext.login(java.base@11.0.19/LoginContext.java:581) at org.apache.jackrabbit.oak.core.ContentRepositoryImpl.login(ContentRepositoryImpl.java:170) at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:297) at org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:240) at org.apache.jackrabbit.oak.jcr.session.SessionImpl.impersonate(SessionImpl.java:312) at com.adobe.granite.repository.impl.CRX3SessionImpl.impersonate(CRX3SessionImpl.java:161) at org.apache.sling.jcr.base.AbstractSlingRepository2.createServiceSession(AbstractSlingRepository2.java:205) at com.adobe.granite.repository.impl.SlingRepositoryImpl.createServiceSession(SlingRepositoryImpl.java:140) at org.apache.sling.jcr.base.AbstractSlingRepository2.createServiceSession(AbstractSlingRepository2.java:170) at org.apache.sling.jcr.base.AbstractSlingRepository2.loginService(AbstractSlingRepository2.java:383) at org.apache.sling.jcr.resource.internal.helper.jcr.JcrProviderStateFactory.createProviderState(JcrProviderStateFactory.java:114) at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.authenticate(JcrResourceProvider.java:322) at org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.authenticate(JcrResourceProvider.java:85) at org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager.authenticate(ProviderManager.java:166) at org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager.getOrCreateProvider(ProviderManager.java:89) at org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager.authenticateAll(ProviderManager.java:133) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.createControl(ResourceResolverImpl.java:152) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.<init>(ResourceResolverImpl.java:113) at org.apache.sling.resourceresolver.impl.ResourceResolverImpl.<init>(ResourceResolverImpl.java:107) at org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolverInternal(CommonResourceResolverFactoryImpl.java:273) at org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getServiceResourceResolver(ResourceResolverFactoryImpl.java:89) {noformat} > Reduce number of access to OSGI registry > ---------------------------------------- > > Key: OAK-10578 > URL: https://issues.apache.org/jira/browse/OAK-10578 > Project: Jackrabbit Oak > Issue Type: Task > Components: jcr > Reporter: Joerg Hoh > Priority: Major > > The OSGI Service Registry of Apache Felix uses synchronization to maintain > its consistency. I have seen a number of cases, where this can lead to lock > contention. > Now I have a case where code opens and closes a lot of JCR Sessions, which in > the context of Adobe AEM/Sling can also trigger a number of access to this > Registry. Not all cases are easy to fix, as there is other functionality (for > example Sling Models) as well which is doing a lot of requests to that > Service Registry. > {noformat} > java.lang.Thread.State: BLOCKED (on object monitor) > at > org.apache.felix.framework.EventDispatcher.updateListener(EventDispatcher.java:397) > - waiting to lock <0x0000000590bc43d8> (a > org.apache.felix.framework.EventDispatcher) > at > org.apache.felix.framework.EventDispatcher.addListener(EventDispatcher.java:183) > at > org.apache.felix.framework.Felix.addServiceListener(Felix.java:3642) > at > org.apache.felix.framework.BundleContextImpl.addServiceListener(BundleContextImpl.java:259) > at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:298) > - locked <0x00000007c0e6bf40> (a > org.osgi.util.tracker.ServiceTracker$Tracked) > - locked <0x00000007c0e6bd08> (a org.osgi.util.tracker.ServiceTracker) > at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:265) > at > org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:161) > at > org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:113) > at > org.apache.jackrabbit.oak.osgi.OsgiWhiteboard.track(OsgiWhiteboard.java:108) > at > org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:185) > at > org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils.getService(WhiteboardUtils.java:144) > at > org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalLoginModule.initialize(ExternalLoginModule.java:165) > at > org.apache.felix.jaas.boot.ProxyLoginModule.initialize(ProxyLoginModule.java:47) > at > javax.security.auth.login.LoginContext.invoke(java.base@11.0.19/LoginContext.java:737) > at > javax.security.auth.login.LoginContext$4.run(java.base@11.0.19/LoginContext.java:672) > at > javax.security.auth.login.LoginContext$4.run(java.base@11.0.19/LoginContext.java:670) > at > java.security.AccessController.doPrivileged(java.base@11.0.19/Native Method) > at > javax.security.auth.login.LoginContext.invokePriv(java.base@11.0.19/LoginContext.java:670) > at > javax.security.auth.login.LoginContext.login(java.base@11.0.19/LoginContext.java:581) > at > org.apache.jackrabbit.oak.core.ContentRepositoryImpl.login(ContentRepositoryImpl.java:170) > at > org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:297) > at > org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl.login(RepositoryImpl.java:240) > at > org.apache.jackrabbit.oak.jcr.session.SessionImpl.impersonate(SessionImpl.java:312) > at > com.adobe.granite.repository.impl.CRX3SessionImpl.impersonate(CRX3SessionImpl.java:161) > at > org.apache.sling.jcr.base.AbstractSlingRepository2.createServiceSession(AbstractSlingRepository2.java:205) > at > com.adobe.granite.repository.impl.SlingRepositoryImpl.createServiceSession(SlingRepositoryImpl.java:140) > at > org.apache.sling.jcr.base.AbstractSlingRepository2.createServiceSession(AbstractSlingRepository2.java:170) > at > org.apache.sling.jcr.base.AbstractSlingRepository2.loginService(AbstractSlingRepository2.java:383) > at > org.apache.sling.jcr.resource.internal.helper.jcr.JcrProviderStateFactory.createProviderState(JcrProviderStateFactory.java:114) > at > org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.authenticate(JcrResourceProvider.java:322) > at > org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.authenticate(JcrResourceProvider.java:85) > at > org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager.authenticate(ProviderManager.java:166) > at > org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager.getOrCreateProvider(ProviderManager.java:89) > at > org.apache.sling.resourceresolver.impl.providers.stateful.ProviderManager.authenticateAll(ProviderManager.java:133) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.createControl(ResourceResolverImpl.java:152) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.<init>(ResourceResolverImpl.java:113) > at > org.apache.sling.resourceresolver.impl.ResourceResolverImpl.<init>(ResourceResolverImpl.java:107) > at > org.apache.sling.resourceresolver.impl.CommonResourceResolverFactoryImpl.getResourceResolverInternal(CommonResourceResolverFactoryImpl.java:273) > at > org.apache.sling.resourceresolver.impl.ResourceResolverFactoryImpl.getServiceResourceResolver(ResourceResolverFactoryImpl.java:89) > {noformat} > The -- This message was sent by Atlassian Jira (v8.20.10#820010)