Details
-
Bug
-
Resolution: Fixed
-
Medium
-
2.5.0
Description
Summary
When attempting to access JIRA Service Desk Automation Settings, The browser becomes unresponsive and fails to return anything. (The page is grayed out). When this occurs an exception is thrown in the logs:
2015-06-25 08:11:21,047 http-bio-8080-exec-24 ERROR captainplannet 491x1855x1 1r3cawh 192.168.0.1 /rest/servicedesk/automation/1/pages/settings/automation/ABC [common.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: java.lang.NullPointerException: null value com.atlassian.cache.CacheException: java.lang.NullPointerException: null value at com.atlassian.cache.memory.DelegatingCache$DelegatingLoadingCache.get(DelegatingCache.java:322) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.RuleSetManagerImpl.getAllActiveRuleSets(RuleSetManagerImpl.java:153) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.RuleSetManagerImpl.getActiveRuleSetsByProject(RuleSetManagerImpl.java:137) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.RuleSetServiceImpl.getActiveRuleSetsByProject(RuleSetServiceImpl.java:144) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.RuleSetServiceImpl.getActiveRuleSetsByProject(RuleSetServiceImpl.java:152) at com.atlassian.servicedesk.plugins.automation.internal.rest.AutomationSettingsPageResource.getAutomationPage(AutomationSettingsPageResource.java:99) <+3> (NativeMethodAccessorImpl.java:57) (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) <+18> (DispatchProviderHelper.java:234) (DispatchProviderHelper.java:100) (DefaultMethodInvocation.java:61) (ExpandInterceptor.java:38) (DefaultMethodInvocation.java:61) (DispatchProviderHelper.java:132) (DispatchProviderHelper.java:230) (ResourceJavaMethodDispatcher.java:75) (HttpMethodRule.java:288) (ResourceClassRule.java:108) (RightHandPathRule.java:147) (RootResourceClassesRule.java:84) (WebApplicationImpl.java:1469) (WebApplicationImpl.java:1400) (WebApplicationImpl.java:1349) (WebApplicationImpl.java:1339) (WebComponent.java:416) (ServletContainer.java:537) at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:178) <+1> (ServletContainer.java:795) at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:73) <+16> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) (RestServletUtilsUpdaterFilter.java:26) (RestServletUtilsUpdaterFilter.java:40) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) (ContextFilter.java:25) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.servicedesk.internal.web.RedirectExternalCustomerToPortalFilter.doFilter(RedirectExternalCustomerToPortalFilter.scala:18) <+4> (AbstractHttpFilter.java:31) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.mywork.client.filter.ServingRequestsFilter.doFilter(ServingRequestsFilter.java:37) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.plugins.cors.CorsFilter.doFilter(CorsFilter.java:65) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFixupFilter.doFilter(PrettyUrlsSiteMeshFixupFilter.java:36) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsDispatcherFilter.doFilter(PrettyUrlsDispatcherFilter.java:60) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsSiteMeshFilter.doFilter(PrettyUrlsSiteMeshFilter.java:92) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsMatcherFilter.doFilter(PrettyUrlsMatcherFilter.java:56) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.labs.botkiller.BotKillerFilter.doFilter(BotKillerFilter.java:36) <+21> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AccessLogFilter.java:107) (AccessLogFilter.java:91) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (XsrfTokenAdditionRequestFilter.java:54) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (PageBuilderFilter.java:90) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (CommittedResponseHtmlErrorRecoveryFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) <+22> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (SecurityFilter.java:239) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (TrustedApplicationsFilter.java:100) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (BaseLoginFilter.java:172) (JiraLoginFilter.java:70) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) (OAuthFilter.java:79) (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:40) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) <+9> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractJohnsonFilter.java:71) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) <+5> (UrlRewriteFilter.java:394) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (IteratingFilterChain.java:46) (DelegatingPluginFilter.java:70) at com.atlassian.analytics.client.filter.JiraAnalyticsFilter.doFilter(JiraAnalyticsFilter.java:40) at com.atlassian.analytics.client.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:32) <+3> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (DelegatingPluginFilter.java:70) at com.atlassian.prettyurls.filter.PrettyUrlsCombinedMatchDispatcherFilter.doFilter(PrettyUrlsCombinedMatchDispatcherFilter.java:61) <+45> (DelegatingPluginFilter.java:78) (IteratingFilterChain.java:42) (ServletFilterModuleContainerFilter.java:77) (ServletFilterModuleContainerFilter.java:63) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractCachingFilter.java:33) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (AbstractEncodingFilter.java:41) (AbstractHttpFilter.java:31) (PathMatchingEncodingFilter.java:45) (AbstractHttpFilter.java:31) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (JiraStartupChecklistFilter.java:79) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (MultipartBoundaryCheckFilter.java:41) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (ChainedFilterStepRunner.java:87) (JiraFirstFilter.java:61) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (GzipFilter.java:115) (GzipFilter.java:92) (JiraGzipFilter.java:56) (ApplicationFilterChain.java:241) (ApplicationFilterChain.java:208) (StandardWrapperValve.java:220) (StandardContextValve.java:122) (AuthenticatorBase.java:501) (StandardHostValve.java:171) (ErrorReportValve.java:103) (StandardEngineValve.java:116) (AccessLogValve.java:950) (CoyoteAdapter.java:408) (AbstractHttp11Processor.java:1070) (AbstractProtocol.java:611) (JIoEndpoint.java:316) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NullPointerException: null value at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:204) at com.google.common.collect.ImmutableMap.entryOf(ImmutableMap.java:139) at com.google.common.collect.ImmutableMap$Builder.put(ImmutableMap.java:178) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.IfConditionConfigDataDao.loadConfigDataFromDbRows(IfConditionConfigDataDao.java:79) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.IfConditionConfigDataDao.getForIfConditionConfigWithId(IfConditionConfigDataDao.java:71) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.IfConditionConfigDao.loadIfConditionConfigsFromDbRows(IfConditionConfigDao.java:101) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.IfConditionConfigDao.getAllForIfThenWithId(IfConditionConfigDao.java:93) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.IfThenDao.loadIfThenFromDbRow(IfThenDao.java:149) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.IfThenDao.loadIfThensFromDbRows(IfThenDao.java:139) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.IfThenDao.getAllForRuleWithId(IfThenDao.java:131) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.RuleDao.loadRuleFromDbRow(RuleDao.java:141) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.RuleDao.loadRulesFromDbRows(RuleDao.java:130) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.RuleDao.getAllForRuleSetRevisionWithId(RuleDao.java:122) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.RuleSetRevisionDao.buildRuleSetRevision(RuleSetRevisionDao.java:193) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.RuleSetRevisionDao.getRuleSetRevision(RuleSetRevisionDao.java:188) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.dao.querydsl.RuleSetDaoImpl.getRuleSetRevision(RuleSetDaoImpl.java:204) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.RuleSetManagerImpl$RuleSetByRevisionIdCacheLoader.load(RuleSetManagerImpl.java:342) at com.atlassian.servicedesk.plugins.automation.internal.configuration.ruleset.RuleSetManagerImpl$RuleSetByRevisionIdCacheLoader.load(RuleSetManagerImpl.java:336) at com.atlassian.cache.memory.MemoryCacheManager$3$1.load(MemoryCacheManager.java:137) at com.atlassian.cache.memory.BlockingCacheLoader.load(BlockingCacheLoader.java:51) at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3573) at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2350) at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2313) at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2228) at com.google.common.cache.LocalCache.get(LocalCache.java:3970) at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3974) at com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4834) at com.atlassian.cache.memory.DelegatingCache$DelegatingLoadingCache.get(DelegatingCache.java:316) ... 197 more
Environment
This issue is experienced when using Oracle as a Database.
Steps to Reproduce
- Attempt to access the 'Automation' section of JIRA Service Desk as in: Automating your service desk
- Observe that the area is inaccessible, and the browser fails to respond after clicking the 'Automation' link.
Expected Results
The Automation configuration should be shown when clicking the 'Automation' link.
Actual Results
The Screen greys out, and the user is unable to modify the automations of any service desk, an error is shown in the atlassian-jira.log
Notes and Workaround.
This is caused by an empty value in the following table: AO_9B2E3B_IF_COND_CONF_DATA on in the CONFIG_DATA_VALUE column. Oracle is treating this as a null value as per http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements005.htm#SQLRF51081 and subsequently users experience this bug.
To check if this issue applies to your instance, run the following SQL:
select NVL("CONFIG_DATA_VALUE",'-NULL-') AS "CONFIG_DATA_VALUE" from "AO_9B2E3B_IF_COND_CONF_DATA";
And check for a NULL value (shown as NULL in the CONFIG_DATA_VALUE column.
If you identify that there are any 'null' values, modify the database so that the 'null' value is set to an empty value.
The following example (you will need to change this for your database) will update the NULL value for the record with the ID=10:
update "AO_9B2E3B_IF_COND_CONF_DATA" set "CONFIG_DATA_VALUE"='' where "ID" =10;
Note: We recommend backing up your database before modifying the database.
Additionally, direct database Modifications are not supported, however if you need assistance with determining the correct query to run, please contact Atlassian Support.
The root cause of this issue is unknown at this time. Please feel free to vote, comment or discuss any observation of this issue in your environment or contact Atlassian Support as we would like to get to the bottom of this issue.