Uploaded image for project: 'Nuxeo Platform'
  1. Nuxeo Platform
  2. NXP-17957

Reduce contention on repository getSession

    XMLWordPrintable

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 6.0
    • Fix Version/s: 9.3
    • Component/s: Core VCS

      Description

      The .RepositoryService.getSession(String) use synchronization and is subject to contention on high concurrency.

      Java Monitor Blocked
       at org.nuxeo.ecm.core.repository.RepositoryService.getSession(String)
       at org.nuxeo.ecm.core.api.local.LocalSession.createSession()
       at org.nuxeo.ecm.core.api.local.LocalSession.connect(String, NuxeoPrincipal)
      

      Note that when using validation query things may be worth because the validation query is done in getSession:

      	at com.mysql.jdbc.StatementImpl.execute(StatementImpl.java:681)
      	at org.nuxeo.runtime.jtajca.NuxeoValidationSupport$QuerySQLConnection.validate(NuxeoValidationSupport.java:86)
      	at org.nuxeo.runtime.jtajca.NuxeoValidationSupport$ValidationInterceptor.getConnection(NuxeoValidationSupport.java:116)
      	at org.apache.geronimo.connector.outbound.TransactionEnlistingInterceptor.getConnection(TransactionEnlistingInterceptor.java:49)
      	at org.apache.geronimo.connector.outbound.TransactionCachingInterceptor.getConnection(TransactionCachingInterceptor.java:101)
      	at org.apache.geronimo.connector.outbound.ConnectionHandleInterceptor.getConnection(ConnectionHandleInterceptor.java:43)
      	at org.apache.geronimo.connector.outbound.TCCLInterceptor.getConnection(TCCLInterceptor.java:39)
      	at org.apache.geronimo.connector.outbound.ConnectionTrackingInterceptor.getConnection(ConnectionTrackingInterceptor.java:66)
      	at org.apache.geronimo.connector.outbound.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:77)
      	at org.nuxeo.runtime.jtajca.NuxeoContainer$ConnectionManagerWrapper.allocateConnection(NuxeoContainer.java:739)
      	at org.tranql.connector.jdbc.TranqlDataSource.getConnection(TranqlDataSource.java:62)
      	at org.nuxeo.runtime.datasource.PooledDataSourceFactory$1NuxeoDataSource.getConnection(PooledDataSourceFactory.java:94)
      	at org.nuxeo.runtime.datasource.ConnectionHelper.getConnection(ConnectionHelper.java:823)
      	at org.nuxeo.ecm.core.storage.sql.jdbc.JDBCConnection.openBaseConnection(JDBCConnection.java:147)
      	at org.nuxeo.ecm.core.storage.sql.jdbc.JDBCConnection.openConnections(JDBCConnection.java:136)
      	at org.nuxeo.ecm.core.storage.sql.jdbc.JDBCMapper.connect(JDBCMapper.java:1413)
      	at org.nuxeo.ecm.core.storage.sql.jdbc.JDBCMapperConnector.invoke(JDBCMapperConnector.java:65)
      	at com.sun.proxy.$Proxy55.setTransactionTimeout(Unknown Source)
      	at org.nuxeo.ecm.core.storage.sql.SoftRefCachingMapper.setTransactionTimeout(SoftRefCachingMapper.java:201)
      	at org.nuxeo.ecm.core.storage.sql.SessionImpl.setTransactionTimeout(SessionImpl.java:1500)
      	at org.apache.geronimo.transaction.manager.WrapperNamedXAResource.setTransactionTimeout(WrapperNamedXAResource.java:104)
      	at org.apache.geronimo.transaction.manager.TransactionImpl.enlistResource(TransactionImpl.java:204)
      	- locked <0x00000006b9860f90> (a org.apache.geronimo.transaction.manager.TransactionImpl)
      	at org.apache.geronimo.connector.outbound.TransactionEnlistingInterceptor.getConnection(TransactionEnlistingInterceptor.java:60)
      	at org.apache.geronimo.connector.outbound.TransactionCachingInterceptor.getConnection(TransactionCachingInterceptor.java:101)
      	at org.apache.geronimo.connector.outbound.ConnectionHandleInterceptor.getConnection(ConnectionHandleInterceptor.java:43)
      	at org.apache.geronimo.connector.outbound.TCCLInterceptor.getConnection(TCCLInterceptor.java:39)
      	at org.apache.geronimo.connector.outbound.ConnectionTrackingInterceptor.getConnection(ConnectionTrackingInterceptor.java:66)
      	at org.apache.geronimo.connector.outbound.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:77)
      	at org.nuxeo.runtime.jtajca.NuxeoContainer$ConnectionManagerWrapper.allocateConnection(NuxeoContainer.java:739)
      	at org.nuxeo.ecm.core.storage.sql.ra.ConnectionFactoryImpl.getConnection(ConnectionFactoryImpl.java:96)
      	at org.nuxeo.ecm.core.storage.sql.ra.ConnectionFactoryImpl.getSession(ConnectionFactoryImpl.java:159)
      	at org.nuxeo.ecm.core.repository.RepositoryService.getSession(RepositoryService.java:230)
      

        Attachments

          Issue Links

            Activity

              People

              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0 minutes
                  0m
                  Logged:
                  Time Spent - 4 hours
                  4h