-
Bug
-
Resolution: Unresolved
-
Low (View bug fix roadmap)
-
None
-
9.12.11
-
9.12
-
1
-
Severity 3 - Minor
-
1
-
Issue Summary
DVCSMessageCountByStateStats uses RequestCache outside of a context.
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:
1912-06-23 00:00:00,000+0000 jira-stats-0 ERROR [c.a.j.cache.request.RequestCacheRecorderImpl] Invalid use of RequestCache by thread: jira-stats.Incorrect usage of JIRA API. You can only create/use: RequestCacheImpl inside a context (request or Jira-Thread-Local). Check: JiraThreadLocalUtil for details. This message will be logged once per thread. This ERROR should be fixed on the caller side (check the stack-trace or thread-name) as it is causing inconsistent data. java.lang.Throwable at com.atlassian.jira.cache.request.RequestCacheRecorderImpl.errorLogOOCThreadUsage(RequestCacheRecorderImpl.java:32) at com.atlassian.jira.cache.request.RequestCacheRecorderImpl.recordRequestCacheOOCUsage(RequestCacheRecorderImpl.java:25) at com.atlassian.jira.cache.request.RequestCacheImpl.get(RequestCacheImpl.java:47) at com.atlassian.jira.config.feature.DefaultFeatureManager.isFlagEnabledByExternalActivator(DefaultFeatureManager.java:331) at com.atlassian.jira.config.feature.DefaultFeatureManager.isEnabled(DefaultFeatureManager.java:116) at jdk.internal.reflect.GeneratedMethodAccessor128.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at com.atlassian.plugin.util.ContextClassLoaderSettingInvocationHandler.invoke(ContextClassLoaderSettingInvocationHandler.java:26) at com.sun.proxy.$Proxy645.isEnabled(Unknown Source) at jdk.internal.reflect.GeneratedMethodAccessor128.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:130) at com.sun.proxy.$Proxy645.isEnabled(Unknown Source) at com.atlassian.sal.jira.rdbms.JiraHostConnectionAccessor.execute(JiraHostConnectionAccessor.java:59) at com.atlassian.sal.core.rdbms.DefaultTransactionalExecutor.execute(DefaultTransactionalExecutor.java:61) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.execute(DatabaseAccessorImpl.java:53) at com.atlassian.pocketknife.internal.querydsl.DatabaseAccessorImpl.runInTransaction(DatabaseAccessorImpl.java:37) at com.atlassian.jira.plugins.dvcs.dao.impl.querydsl.MessageQueueItemDaoQueryDsl.getMessageQueueItemCountByState(MessageQueueItemDaoQueryDsl.java:372) at com.atlassian.jira.plugins.dvcs.stats.DVCSMessageCountByStateStats.getValueForSerialization(DVCSMessageCountByStateStats.java:19) at com.atlassian.jira.plugins.dvcs.stats.DVCSMessageCountByStateStats.getValueForSerialization(DVCSMessageCountByStateStats.java:9) at com.atlassian.jira.util.stats.GsonStatsSerializer.lambda$buildGson$3(GsonStatsSerializer.java:46) at com.google.gson.TreeTypeAdapter.write(TreeTypeAdapter.java:70) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) at com.google.gson.Gson.toJson(Gson.java:581) at com.google.gson.Gson.toJsonTree(Gson.java:474) at com.google.gson.Gson.toJsonTree(Gson.java:453) at com.atlassian.jira.util.stats.GsonStatsSerializer.serialize(GsonStatsSerializer.java:28) at com.atlassian.jira.util.stats.JiraStats.log(JiraStats.java:468) at com.atlassian.jira.util.stats.JiraStats.printAndReset(JiraStats.java:418) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)
Workaround
No workaround is required. This message will be logged only once for this thread.
It is advised not to turn off logging for RequestCacheRecorderImpl to avoid losing insight into this problem.
- links to