Uploaded image for project: 'Jira Service Management Data Center'
  1. Jira Service Management Data Center
  2. JSDSERVER-6554

ConnectionPoolHealthSqlInterceptor logs dangerous use of multiple connections WARN messages when processing mail from service desk handler

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: Low Low
    • None
    • 3.8.2
    • Email - Incoming
    • None

      Summary

      The ConnectionPoolHealthSqlInterceptor logs dangerous use of multiple connections warnings for JIRA Service Desk mail processor

      Environment

      • JIRA Service Desk

      Steps to Reproduce

      1. Setup a Service Desk Mail Channel
      2. Send 10 emails at once to the email handler
      3. Wait for it to try to process the mail box to create tickets from email

      Expected Results

      There are no warnings about dangerous use of multiple connections.

      Actual Results

      It appears Service Desk mail processors is using multiple connections and WARN messages such as the following is thrown in the atlassian-jira.log file:

      2019-07-18 08:45:14,494 Caesium-1-2 WARN mrd43     [c.a.jira.ofbiz.ConnectionPoolHealthSqlInterceptor] Dangerous use of multiple connections: taken => count=3; marks=[2-3]; pool=3/30
      java.lang.AssertionError: Explicit stack trace requested
      	at com.atlassian.jira.util.log.RateLimitingLogger.warnWithTrace(RateLimitingLogger.java:124)
      	at com.atlassian.jira.ofbiz.ConnectionPoolHealthSqlInterceptor$CountHolder.logWarn(ConnectionPoolHealthSqlInterceptor.java:236)
      	at com.atlassian.jira.ofbiz.ConnectionPoolHealthSqlInterceptor$CountHolder.taken(ConnectionPoolHealthSqlInterceptor.java:252)
      	at com.atlassian.jira.ofbiz.ConnectionPoolHealthSqlInterceptor.onConnectionTaken(ConnectionPoolHealthSqlInterceptor.java:89)
      	at com.atlassian.jira.ofbiz.ChainedSQLInterceptor.lambda$onConnectionTaken$0(ChainedSQLInterceptor.java:64)
      	at com.atlassian.jira.ofbiz.ChainedSQLInterceptor.forEach(ChainedSQLInterceptor.java:93)
      	at com.atlassian.jira.ofbiz.ChainedSQLInterceptor.onConnectionTaken(ChainedSQLInterceptor.java:63)
      	at org.ofbiz.core.entity.jdbc.interceptors.connection.SafeDelegatingSqlConnectionInterceptor.onConnectionTaken(SafeDelegatingSqlConnectionInterceptor.java:30)
      	at org.ofbiz.core.entity.jdbc.interceptors.connection.ConnectionTracker.informInterceptor(ConnectionTracker.java:64)
      	at org.ofbiz.core.entity.jdbc.interceptors.connection.ConnectionTracker.trackConnection(ConnectionTracker.java:49)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory.trackConnection(DBCPConnectionFactory.java:283)
      	at org.ofbiz.core.entity.transaction.DBCPConnectionFactory.getConnection(DBCPConnectionFactory.java:80)
      	at org.ofbiz.core.entity.ConnectionFactory.tryGenericConnectionSources(ConnectionFactory.java:69)
      	at org.ofbiz.core.entity.transaction.JNDIFactory.getConnection(JNDIFactory.java:173)
      	at org.ofbiz.core.entity.TransactionFactory.getConnection(TransactionFactory.java:114)
      	at org.ofbiz.core.entity.ConnectionFactory.getConnection(ConnectionFactory.java:59)
      	at org.ofbiz.core.entity.SequenceUtil$SequenceBank.fillBank(SequenceUtil.java:195)
      	at org.ofbiz.core.entity.SequenceUtil$SequenceBank.getNextSeqId(SequenceUtil.java:147)
      	at org.ofbiz.core.entity.SequenceUtil.getNextSeqId(SequenceUtil.java:97)
      	at org.ofbiz.core.entity.GenericDelegator.getNextSeqId(GenericDelegator.java:2474)
      	at org.ofbiz.core.entity.DelegatorInterface.getNextSeqId(DelegatorInterface.java:266)
      	at com.atlassian.jira.ofbiz.DefaultOfBizDelegator.createValue(DefaultOfBizDelegator.java:291)
      	at com.atlassian.jira.ofbiz.WrappingOfBizDelegator.createValue(WrappingOfBizDelegator.java:172)
      	at com.atlassian.jira.issue.customfields.persistence.OfBizCustomFieldValuePersister.createValuesInt(OfBizCustomFieldValuePersister.java:129)
      	at com.atlassian.jira.issue.customfields.persistence.OfBizCustomFieldValuePersister.updateValues(OfBizCustomFieldValuePersister.java:139)
      	at com.atlassian.jira.issue.customfields.persistence.EagerLoadingOfBizCustomFieldPersister.updateValues(EagerLoadingOfBizCustomFieldPersister.java:48)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
      	at com.sun.proxy.$Proxy462.updateValues(Unknown Source)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
      	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
      	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
      	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
      	at com.sun.proxy.$Proxy3830.updateValues(Unknown Source)
      	at com.atlassian.jira.issue.customfields.impl.AbstractSingleFieldType.updateValue(AbstractSingleFieldType.java:151)
      	at com.atlassian.servicedesk.internal.sla.customfield.SLACFType.updateValue(SLACFType.java:235)
      	at com.atlassian.servicedesk.internal.sla.customfield.SLACFType.updateValue(SLACFType.java:86)
      	at com.atlassian.servicedesk.internal.sla.customfield.SLAFieldManagerImpl.setFieldValue(SLAFieldManagerImpl.java:217)
      	at com.atlassian.servicedesk.internal.sla.data.SlaDataManagerImpl.writeSlaValueData(SlaDataManagerImpl.java:449)
      	at com.atlassian.servicedesk.internal.sla.data.SlaDataManagerImpl.processSlaDataUpdate(SlaDataManagerImpl.java:247)
      	at com.atlassian.servicedesk.internal.sla.data.SlaDataManagerImpl.processSlasFromIssueEvent(SlaDataManagerImpl.java:115)
      	at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdaterImpl.processServiceDeskProjectEvent(SlaCycleUpdaterImpl.java:246)
      	at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdaterImpl.lambda$processEvent$11(SlaCycleUpdaterImpl.java:225)
      	at io.atlassian.fugue.Option$Some.fold(Option.java:444)
      	at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdaterImpl.processEvent(SlaCycleUpdaterImpl.java:223)
      	at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdaterImpl.runCycleUpdate(SlaCycleUpdaterImpl.java:209)
      	at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdaterImpl.lambda$null$0(SlaCycleUpdaterImpl.java:110)
      	at com.atlassian.servicedesk.internal.util.SafeRunner.lambda$run$0(SafeRunner.java:40)
      	at com.atlassian.servicedesk.bootstrap.lifecycle.LifecycleLock.lambda$withPluginLifecycleSafety$0(LifecycleLock.java:51)
      	at com.atlassian.ozymandias.SafePluginPointAccess.call(SafePluginPointAccess.java:263)
      	at com.atlassian.servicedesk.internal.util.SafeRunner.run(SafeRunner.java:44)
      	at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdaterImpl.lambda$onIssueEvent$1(SlaCycleUpdaterImpl.java:110)
      	at com.atlassian.servicedesk.api.util.fp.FpKit.lambda$runnableToNoExceptionsCallable$1(FpKit.java:116)
      	at com.atlassian.servicedesk.internal.utils.context.ServiceDeskOutsideCustomerPermissionContext.inOutsideCustomerContext(ServiceDeskOutsideCustomerPermissionContext.java:63)
      	at com.atlassian.servicedesk.internal.utils.context.OffThreadEventListenerContextHelper.lambda$buildWithContext$1(OffThreadEventListenerContextHelper.java:48)
      	at com.atlassian.servicedesk.api.util.fp.FpKit.lambda$runnableToNoExceptionsCallable$1(FpKit.java:116)
      	at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:137)
      	at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.runInContext(ReentrantThreadLocalBasedCodeContext.java:60)
      	at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runInCustomerContext(CustomerContextServiceImpl.java:37)
      	at com.atlassian.servicedesk.internal.utils.context.OffThreadEventListenerContextHelper.lambda$buildWithContext$2(OffThreadEventListenerContextHelper.java:52)
      	at com.atlassian.ozymandias.SafePluginPointAccess.runnable(SafePluginPointAccess.java:201)
      	at com.atlassian.servicedesk.plugins.base.internal.events.ServiceDeskOnCompletionExpectationManagerImpl.safeRun(ServiceDeskOnCompletionExpectationManagerImpl.java:474)
      	at com.atlassian.servicedesk.plugins.base.internal.events.ServiceDeskOnCompletionExpectationManagerImpl.runAndMarkEventExpectationMetOffThreadWithIssueStriping(ServiceDeskOnCompletionExpectationManagerImpl.java:220)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
      	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
      	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
      	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
      	at com.sun.proxy.$Proxy4104.runAndMarkEventExpectationMetOffThreadWithIssueStriping(Unknown Source)
      	at com.atlassian.servicedesk.internal.sla.listener.SlaCycleUpdaterImpl.onIssueEvent(SlaCycleUpdaterImpl.java:105)
      	at com.atlassian.servicedesk.bootstrap.listener.EventListenerLauncher.handleIssueEvent(EventListenerLauncher.java:345)
      	at com.atlassian.servicedesk.bootstrap.listener.EventListenerLauncher.lambda$onCommitEvent$0(EventListenerLauncher.java:157)
      	at io.atlassian.fugue.Option$Some.forEach(Option.java:468)
      	at com.atlassian.servicedesk.bootstrap.listener.EventListenerLauncher.onCommitEvent(EventListenerLauncher.java:155)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:40)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher$1$1.run(AsynchronousAbleEventDispatcher.java:38)
      	at com.google.common.util.concurrent.MoreExecutors$DirectExecutorService.execute(MoreExecutors.java:299)
      	at com.atlassian.event.internal.AsynchronousAbleEventDispatcher.dispatch(AsynchronousAbleEventDispatcher.java:88)
      	at com.atlassian.event.internal.EventPublisherImpl.invokeListeners(EventPublisherImpl.java:204)
      	at com.atlassian.event.internal.EventPublisherImpl.publish(EventPublisherImpl.java:115)
      	at com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.publishEvent(TxnAwareEventFactoryImpl.java:200)
      	at java.lang.Iterable.forEach(Iterable.java:75)
      	at com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.lambda$publishOnCommitIssueEventBundle$4(TxnAwareEventFactoryImpl.java:92)
      	at com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.lambda$runThisOnCommit$8(TxnAwareEventFactoryImpl.java:186)
      	at com.atlassian.ozymandias.SafePluginPointAccess.runnable(SafePluginPointAccess.java:201)
      	at com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.runThisOnCommit(TxnAwareEventFactoryImpl.java:186)
      	at com.atlassian.jira.event.issue.txnaware.TxnAwareEventFactoryImpl.publishOnCommitIssueEventBundle(TxnAwareEventFactoryImpl.java:76)
      	at com.atlassian.jira.event.issue.DefaultIssueEventManager.dispatchIssueEventBundleOnCommitIfNotificationsAreEnabled(DefaultIssueEventManager.java:186)
      	at com.atlassian.jira.event.issue.DefaultIssueEventManager.dispatchIssueEventBundleOnCommit(DefaultIssueEventManager.java:143)
      	at com.atlassian.jira.workflow.function.event.FireIssueEventFunction.execute(FireIssueEventFunction.java:69)
      	at com.opensymphony.workflow.AbstractWorkflow.executeFunction(AbstractWorkflow.java:1014)
      	at com.opensymphony.workflow.AbstractWorkflow.transitionWorkflow(AbstractWorkflow.java:1407)
      	at com.opensymphony.workflow.AbstractWorkflow.initialize(AbstractWorkflow.java:606)
      	at com.atlassian.jira.workflow.OSWorkflowManager.createIssue(OSWorkflowManager.java:742)
      	at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:580)
      	at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:494)
      	at com.atlassian.jira.issue.managers.RequestCachingIssueManager.createIssue(RequestCachingIssueManager.java:192)
      	at com.atlassian.jira.bc.issue.DefaultIssueService.create(DefaultIssueService.java:238)
      	at com.atlassian.jira.bc.issue.DefaultIssueService.create(DefaultIssueService.java:207)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
      	at com.sun.proxy.$Proxy445.create(Unknown Source)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302)
      	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:56)
      	at org.eclipse.gemini.blueprint.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:60)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:70)
      	at org.eclipse.gemini.blueprint.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:53)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.eclipse.gemini.blueprint.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:57)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
      	at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208)
      	at com.sun.proxy.$Proxy3611.create(Unknown Source)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManagerImpl.createCustomerRequest(CustomerRequestManagerImpl.java:292)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManagerImpl.lambda$createRequest$6(CustomerRequestManagerImpl.java:143)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886)
      	at io.atlassian.fugue.Either.flatMap(Either.java:231)
      	at com.atlassian.pocketknife.step.EitherStep1.then(EitherStep1.java:18)
      	at com.atlassian.servicedesk.internal.feature.customer.request.CustomerRequestManagerImpl.createRequest(CustomerRequestManagerImpl.java:143)
      	at com.atlassian.servicedesk.internal.feature.customer.request.InternalCustomerRequestServiceImpl.lambda$createRequest$35(InternalCustomerRequestServiceImpl.java:491)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886)
      	at io.atlassian.fugue.Either.flatMap(Either.java:231)
      	at com.atlassian.servicedesk.internal.feature.customer.request.InternalCustomerRequestServiceImpl.createRequest(InternalCustomerRequestServiceImpl.java:491)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailManagerImpl.lambda$createIssueInJiraContext$21(IncomingEmailManagerImpl.java:548)
      	at com.atlassian.pocketknife.step.EitherStep3.lambda$null$0(EitherStep3.java:26)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886)
      	at io.atlassian.fugue.Either.flatMap(Either.java:231)
      	at com.atlassian.pocketknife.step.EitherStep3.lambda$null$1(EitherStep3.java:26)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886)
      	at io.atlassian.fugue.Either.flatMap(Either.java:231)
      	at com.atlassian.pocketknife.step.EitherStep3.lambda$then$2(EitherStep3.java:25)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886)
      	at io.atlassian.fugue.Either.flatMap(Either.java:231)
      	at com.atlassian.pocketknife.step.EitherStep3.then(EitherStep3.java:24)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailManagerImpl.createIssueInJiraContext(IncomingEmailManagerImpl.java:547)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailManagerImpl.createIssueFromEmail(IncomingEmailManagerImpl.java:219)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewIssueWithRequestType(IncomingEmailServiceImpl.java:281)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$createNewIssueWithMailChannel$25(IncomingEmailServiceImpl.java:263)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886)
      	at io.atlassian.fugue.Either.flatMap(Either.java:231)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewIssueWithMailChannel(IncomingEmailServiceImpl.java:263)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$null$17(IncomingEmailServiceImpl.java:201)
      	at io.atlassian.fugue.Option$None.fold(Option.java:393)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$createNewOrCommentOnIssueWithMailChannelAsEmailSender$19(IncomingEmailServiceImpl.java:200)
      	at io.atlassian.fugue.Option$None.fold(Option.java:393)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewOrCommentOnIssueWithMailChannelAsEmailSender(IncomingEmailServiceImpl.java:225)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$null$14(IncomingEmailServiceImpl.java:187)
      	at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:137)
      	at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.runInContext(ReentrantThreadLocalBasedCodeContext.java:55)
      	at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runInCustomerContext(CustomerContextServiceImpl.java:37)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.inCustomerContext(IncomingEmailServiceImpl.java:511)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$inEmailContext$44(IncomingEmailServiceImpl.java:504)
      	at com.atlassian.pocketknife.internal.util.runner.AuthenticationContextUtilImpl.runAs(AuthenticationContextUtilImpl.java:56)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.inEmailContext(IncomingEmailServiceImpl.java:506)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$doCreateNewOrCommentOnIssueWithMailChannel$15(IncomingEmailServiceImpl.java:187)
      	at io.atlassian.fugue.Either$Right.fold(Either.java:620)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.doCreateNewOrCommentOnIssueWithMailChannel(IncomingEmailServiceImpl.java:185)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$createNewOrCommentOnIssueWithMailChannel$6(IncomingEmailServiceImpl.java:155)
      	at com.atlassian.pocketknife.step.EitherStep2.lambda$null$0(EitherStep2.java:20)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886)
      	at io.atlassian.fugue.Either.flatMap(Either.java:231)
      	at com.atlassian.pocketknife.step.EitherStep2.lambda$then$1(EitherStep2.java:20)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886)
      	at io.atlassian.fugue.Either.flatMap(Either.java:231)
      	at com.atlassian.pocketknife.step.EitherStep2.then(EitherStep2.java:20)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.createNewOrCommentOnIssueWithMailChannel(IncomingEmailServiceImpl.java:155)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.lambda$processEmailWithMailChannel$1(IncomingEmailServiceImpl.java:143)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:886)
      	at io.atlassian.fugue.Either.flatMap(Either.java:231)
      	at com.atlassian.pocketknife.step.EitherStep1.then(EitherStep1.java:18)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.IncomingEmailServiceImpl.processEmailWithMailChannel(IncomingEmailServiceImpl.java:143)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.emailplatform.handler.SDMailHandler.processMessage(SDMailHandler.java:76)
      	at com.atlassian.servicedesk.internal.feature.emailchannel.emailplatform.handler.SDMailHandler.handleNewMessage(SDMailHandler.java:50)
      	at com.atlassian.jira.internal.mail.processor.feature.processor.MailHandlerWorker.handle(MailHandlerWorker.java:64)
      	at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.processMailItem(MailProcessorWorker.java:108)
      	at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.lambda$process$0(MailProcessorWorker.java:85)
      	at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.lambda$execute$0(DatabaseAccessorImpl.java:69)
      	at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.executeInternal(DefaultTransactionalExecutor.java:86)
      	at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.lambda$execute$0(DefaultTransactionalExecutor.java:42)
      	at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.lambda$borrowConnectionAndExecute$0(JiraHostConnectionAccessor.java:95)
      	at com.atlassian.jira.database.DatabaseAccessorImpl.executeQuery(DatabaseAccessorImpl.java:68)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26)
      	at com.sun.proxy.$Proxy559.executeQuery(Unknown Source)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:136)
      	at com.sun.proxy.$Proxy559.executeQuery(Unknown Source)
      	at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.borrowConnectionAndExecute(JiraHostConnectionAccessor.java:84)
      	at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.execute(JiraHostConnectionAccessor.java:48)
      	at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.execute(DefaultTransactionalExecutor.java:39)
      	at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.execute(DatabaseAccessorImpl.java:67)
      	at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.runInNewTransaction(DatabaseAccessorImpl.java:38)
      	at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.process(MailProcessorWorker.java:82)
      	at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorWorker.processAllValidMailChannels(MailProcessorWorker.java:124)
      	at com.atlassian.jira.internal.mail.processor.feature.processor.MailProcessorService.run(MailProcessorService.java:25)
      	at com.atlassian.jira.internal.mail.processor.services.MailProcessorExecutor.run(MailProcessorExecutor.java:29)
      	at com.atlassian.jira.internal.mail.processor.services.AbstractMailExecutor.execute(AbstractMailExecutor.java:45)
      	at com.atlassian.jira.internal.mail.processor.services.MailJobRunner.runJob(MailJobRunner.java:35)
      	at com.atlassian.scheduler.core.JobLauncher.runJob(JobLauncher.java:153)
      	at com.atlassian.scheduler.core.JobLauncher.launchAndBuildResponse(JobLauncher.java:118)
      	at com.atlassian.scheduler.core.JobLauncher.launch(JobLauncher.java:97)
      	at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.launchJob(CaesiumSchedulerService.java:443)
      	at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJob(CaesiumSchedulerService.java:438)
      	at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeClusteredJobWithRecoveryGuard(CaesiumSchedulerService.java:462)
      	at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService.executeQueuedJob(CaesiumSchedulerService.java:390)
      	at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService$1.consume(CaesiumSchedulerService.java:285)
      	at com.atlassian.scheduler.caesium.impl.CaesiumSchedulerService$1.consume(CaesiumSchedulerService.java:282)
      	at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeJob(SchedulerQueueWorker.java:65)
      	at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.executeNextJob(SchedulerQueueWorker.java:59)
      	at com.atlassian.scheduler.caesium.impl.SchedulerQueueWorker.run(SchedulerQueueWorker.java:34)
      	at java.lang.Thread.run(Thread.java:745)
      

      Workaround

      No known workaround as yet

            [JSDSERVER-6554] ConnectionPoolHealthSqlInterceptor logs dangerous use of multiple connections WARN messages when processing mail from service desk handler

            Update: although I was not able to reproduce the issue by sending 10 emails at the same time, I suddenly stomped upon this warning message on my dev instance on the most recent Jira version.

            Let me first demystify the warning message itself:

            Dangerous use of multiple connections: taken => count=3; marks=[2-3]; pool=4/20
            

            (this is the message from my instance, although all of them follow the similar pattern)

            The message format is:

            Dangerous use of multiple connections: ${event} => count=${count}; marks=[${lowWaterMark}-${highWaterMark}]; pool=${borrowedCount}/${maxPoolSize}
            

            The parameters are:

            • event - the event which caused the logging; could be either taken or replaced
            • count - the number of database connections used by the current thread
            • lowWaterMark - the lowest number of connections since the thread was marked as having broken the rules
            • highWaterMark - the highest number of connections which current thread had opened ever since it was started
            • borrowedCount - the number of connections borrowed from the connection pool (by all threads running)
            • maxPoolSize - the maximum number of opened connections in the pool; essentially this is the connection pool size
            • dangerousZone (used down below) - the jira.db.counter.danger.zone Jira system property; defaults to 2
            • strictMode (used down below) - the boolean value of jira.db.counter.strict.mode Jira system property

            This message is being logged if one of these two applies:

            1. if the number of database connections opened by the current thread is in the "danger zone" - getting very close to the total connection pool size

            maxSize > 0 && count > 1 && borrowedCount + dangerousZone >= maxSize
            

            2. if the number of database connections opened by the current thread is greater than 2 and this number (the number of database connections owned by this thread) has never been seen before

            (count >= 2 && (count > 2 || strictMode)) && (count > highWaterMark)
            

            Hence in case of the message from above,

            Dangerous use of multiple connections: taken => count=3; marks=[2-3]; pool=4/20
            

            it means that there are three database connections opened by a certain thread and this has been never seen before. There also are four database connections open in total out of twenty available / allowed.

            This logic comes from Jira and is designed to notify customers of any potential problems - whenever one thread (coming from any plugin or Jira itself) is owning too many open database connections at a time.

            Hope this helps,
            Artem

            moofoo (Inactive) added a comment - Update: although I was not able to reproduce the issue by sending 10 emails at the same time, I suddenly stomped upon this warning message on my dev instance on the most recent Jira version. Let me first demystify the warning message itself: Dangerous use of multiple connections: taken => count=3; marks=[2-3]; pool=4/20 (this is the message from my instance, although all of them follow the similar pattern) The message format is: Dangerous use of multiple connections: ${event} => count=${count}; marks=[${lowWaterMark}-${highWaterMark}]; pool=${borrowedCount}/${maxPoolSize} The parameters are: event - the event which caused the logging; could be either taken or replaced count - the number of database connections used by the current thread lowWaterMark - the lowest number of connections since the thread was marked as having broken the rules highWaterMark - the highest number of connections which current thread had opened ever since it was started borrowedCount - the number of connections borrowed from the connection pool (by all threads running) maxPoolSize - the maximum number of opened connections in the pool; essentially this is the connection pool size dangerousZone (used down below) - the jira.db.counter.danger.zone Jira system property; defaults to 2 strictMode (used down below) - the boolean value of jira.db.counter.strict.mode Jira system property This message is being logged if one of these two applies: 1. if the number of database connections opened by the current thread is in the "danger zone" - getting very close to the total connection pool size maxSize > 0 && count > 1 && borrowedCount + dangerousZone >= maxSize 2. if the number of database connections opened by the current thread is greater than 2 and this number (the number of database connections owned by this thread) has never been seen before (count >= 2 && (count > 2 || strictMode)) && (count > highWaterMark) Hence in case of the message from above, Dangerous use of multiple connections: taken => count=3; marks=[2-3]; pool=4/20 it means that there are three database connections opened by a certain thread and this has been never seen before. There also are four database connections open in total out of twenty available / allowed. This logic comes from Jira and is designed to notify customers of any potential problems - whenever one thread (coming from any plugin or Jira itself) is owning too many open database connections at a time. Hope this helps, Artem

            I was not able to reproduce this on 3.16.8 - tried with exactly 10 emails. I highly recommend upgrading to at least 3.16 (since 3.9 is coming to its end of life very soon and 3.16 is the enterprise release).

            moofoo (Inactive) added a comment - I was not able to reproduce this on 3.16.8 - tried with exactly 10 emails. I highly recommend upgrading to at least 3.16 (since 3.9 is coming to its end of life very soon and 3.16 is the enterprise release).

              Unassigned Unassigned
              kmehta Krina
              Affected customers:
              1 This affects my team
              Watchers:
              7 Start watching this issue

                Created:
                Updated:
                Resolved: