-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Low
-
None
-
Affects Version/s: 10.3.22
-
Component/s: Data Center - Other
-
None
-
10.03
-
1
-
Severity 3 - Minor
Issue Summary
See JRASERVER-72963#comment-3059444 for more details.
Note: There is a whole family of "Invalid use of RequestCache by thread..." issues, one per thread. Find the one you need or file a new one.
Steps to Reproduce
Exact steps are unknown. Start Jira and after some time this error might be logged.
Expected Results
RequestCache is used inside a context and no error is logged.
Actual Results
RequestCache is used outside of a context, which risks an incorrect cache behaviour.
The following error appears in atlassian-jira.log file:
psmq-lock-lease-renewal-thread ERROR [c.a.j.cache.request.RequestCacheRecorderImpl] Invalid use of RequestCache by thread/stack: psmq-lock-lease-renewal--xggimt. Incorrect usage of JIRA API. You can only create/use: RequestCacheImpl inside a context (request or Jira-Thread-Local). Check JiraThreadLocalUtil and http://go/j/JRASERVER-72963 for details. This message will be logged once per thread/stacktrace. This ERROR should be fixed on the caller side (check the stack-trace or thread-name) as it is causing inconsistent data.com.atlassian.jira.cache.request.RequestCacheRecorderImpl$StackCollector: Stack trace of invalid RequestCache usage at com.atlassian.jira.cache.request.RequestCacheRecorderImpl$ExceptionPoint.errorLogOOCThreadUsage(RequestCacheRecorderImpl.java:56) at com.atlassian.jira.cache.request.RequestCacheRecorderImpl.recordRequestCacheOOCUsage(RequestCacheRecorderImpl.java:125) at com.atlassian.jira.cache.request.RequestCacheImpl.get(RequestCacheImpl.java:46) at com.atlassian.jira.transaction.RequestLocalTransactionRunnableQueueFactoryImpl.getRunnablesQueue(RequestLocalTransactionRunnableQueueFactoryImpl.java:21) at com.atlassian.jira.transaction.TransactionSupportImpl.begin(TransactionSupportImpl.java:30) at com.atlassian.jira.transaction.Txn.begin(Txn.java:17) at com.atlassian.jira.database.DatabaseAccessorImpl.runInManagedTransaction(DatabaseAccessorImpl.java:131) at jdk.internal.reflect.GeneratedMethodAccessor162.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) at jdk.proxy3/jdk.proxy3.$Proxy147.runInManagedTransaction(Unknown Source) at jdk.internal.reflect.GeneratedMethodAccessor162.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:134) at jdk.proxy3/jdk.proxy3.$Proxy147.runInManagedTransaction(Unknown Source) at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.runInStartedOrExistingTransaction(JiraHostConnectionAccessor.java:130) at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.execute(JiraHostConnectionAccessor.java:60) at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.execute(DefaultTransactionalExecutor.java:65) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.execute(DatabaseAccessorImpl.java:67) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.runInTransaction(DatabaseAccessorImpl.java:43) at com.atlassian.psmq.internal.io.TxnBoundaryAutoCommit.run(TxnBoundaryAutoCommit.java:23) at com.atlassian.psmq.internal.queue.QueueOperationsImpl.heartBeatQueue(QueueOperationsImpl.java:144) at com.atlassian.psmq.internal.QSessionImpl$1.heartBeatQueue(QSessionImpl.java:141) at com.atlassian.psmq.internal.queue.QueueHeartbeatRenewerImpl$RenewalTask.run(QueueHeartbeatRenewerImpl.java:125) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.base/java.lang.Thread.run(Unknown Source)
Workaround
Currently there is no known workaround for this behavior. A workaround will be added here when available