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

Under certain SLA goals, changing UI language to French causes error in SLA

    XMLWordPrintable

Details

    Description

      Summary

      When a decimal number is entered in SLA goal, and user has changed UI language to "French", an exception will be thrown when accessing the SLA setting page and SLA metric will be missing for the newly created issue.

      Steps to Reproduce

      1. Create a Basic Service Desk project
      2. Create a "Number field" custom field called "test_nf"
      3. Modify the default "Time to resolution" SLA metric by adding a new goal with :
        • JQL : test_nf < 10.5
        • Goal : 50m
        • Calendar : 24/7 Calendar (Default)
      4. After saving the "Time to resolution" metric, goto user profile and change the Language Preference to French
      5. Go back to Project settings > SLAs

      Expected Results

      SLA setting page loaded correctly.

      Actual Results

      SLA setting page keeps loading and the below exception is thrown in the log file:

      2017-03-07 11:18:12,480 http-nio-8080-exec-1 ERROR admin 678x2601x1 1xdz9v7 0:0:0:0:0:0:0:1 /rest/servicedesk/1/servicedesk/agent/DDD/sla/metrics [c.a.p.r.c.error.jersey.ThrowableExceptionMapper] Uncaught exception thrown by REST service: '10.5' est un nombre invalide
      com.atlassian.jira.issue.customfields.impl.FieldValidationException: '10.5' est un nombre invalide
      	at com.atlassian.jira.issue.customfields.converters.DoubleConverterImpl.getDouble(DoubleConverterImpl.java:87)
      	at com.atlassian.jira.jql.query.AbstractNumberOperatorQueryFactory.getIndexValues(AbstractNumberOperatorQueryFactory.java:33)
      	at com.atlassian.jira.jql.query.NumberRelationalQueryFactory.createQueryForSingleValue(NumberRelationalQueryFactory.java:49)
      	at com.atlassian.jira.jql.query.GenericClauseQueryFactory.getQuery(GenericClauseQueryFactory.java:59)
      	at com.atlassian.jira.jql.query.NumberCustomFieldClauseQueryFactory.getQuery(NumberCustomFieldClauseQueryFactory.java:29)
      	at com.atlassian.jira.jql.query.ContextAwareQueryVisitor.visit(ContextAwareQueryVisitor.java:97)
      	at com.atlassian.jira.jql.query.ContextAwareQueryVisitor.visit(ContextAwareQueryVisitor.java:25)
      	at com.atlassian.query.clause.TerminalClauseImpl.accept(TerminalClauseImpl.java:143)
      	at com.atlassian.jira.jql.query.ContextAwareQueryVisitor.visit(ContextAwareQueryVisitor.java:55)
      	at com.atlassian.jira.jql.query.ContextAwareQueryVisitor.visit(ContextAwareQueryVisitor.java:25)
      	at com.atlassian.query.clause.AndClause.accept(AndClause.java:28)
      	at com.atlassian.jira.jql.query.QueryVisitor.createQuery(QueryVisitor.java:51)
      	at com.atlassian.jira.jql.query.DefaultLuceneQueryBuilder.createLuceneQuery(DefaultLuceneQueryBuilder.java:29)
      	at com.atlassian.jira.issue.search.providers.LuceneSearchProvider.search(LuceneSearchProvider.java:231)
      	at com.atlassian.jira.issue.search.providers.LuceneSearchProvider.search(LuceneSearchProvider.java:130)
      	... 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.$Proxy204.search(Unknown Source)
      	... 2 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
      	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:207)
      	at com.sun.proxy.$Proxy3113.search(Unknown Source)
      	at com.atlassian.pocketknife.internal.search.issue.service.IssueDataServiceImpl.findImpl(IssueDataServiceImpl.java:125)
      	at com.atlassian.pocketknife.internal.search.issue.service.IssueDataServiceImpl.find(IssueDataServiceImpl.java:65)
      	at com.atlassian.servicedesk.internal.sla.goal.GoalStatisticsServiceImpl.getAllRelevantIssues(GoalStatisticsServiceImpl.java:124)
      	at com.atlassian.servicedesk.internal.sla.goal.GoalStatisticsServiceImpl.getGoalSuccessStatistics(GoalStatisticsServiceImpl.java:79)
      	at com.atlassian.servicedesk.internal.rest.sla.agentview.ServiceDeskSlaHelper.toTimeMetricResponse(ServiceDeskSlaHelper.java:126)
      	at com.atlassian.servicedesk.internal.rest.sla.agentview.ServiceDeskSlaHelper.lambda$toTimeMetricEntries$1(ServiceDeskSlaHelper.java:120)
      	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
      	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
      	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
      	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
      	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
      	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
      	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
      	at com.atlassian.servicedesk.internal.rest.sla.agentview.ServiceDeskSlaHelper.toTimeMetricEntries(ServiceDeskSlaHelper.java:122)
      	at com.atlassian.servicedesk.internal.rest.sla.agentview.ServiceDeskSlaHelper.getTimeMetrics(ServiceDeskSlaHelper.java:115)
      	at com.atlassian.servicedesk.internal.rest.sla.agentview.ServiceDeskSlaHelper.getMetricParams(ServiceDeskSlaHelper.java:102)
      	at com.atlassian.servicedesk.internal.rest.sla.agentview.ServiceDeskSlaResource.lambda$getMetricsConfiguration$2(ServiceDeskSlaResource.java:71)
      	at com.atlassian.pocketknife.step.EitherStep3.lambda$null$0(EitherStep3.java:26)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
      	at io.atlassian.fugue.Either.flatMap(Either.java:230)
      	at com.atlassian.pocketknife.step.EitherStep3.lambda$null$1(EitherStep3.java:26)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
      	at io.atlassian.fugue.Either.flatMap(Either.java:230)
      	at com.atlassian.pocketknife.step.EitherStep3.lambda$then$2(EitherStep3.java:25)
      	at io.atlassian.fugue.Either$RightProjection.flatMap(Either.java:870)
      	at io.atlassian.fugue.Either.flatMap(Either.java:230)
      	at com.atlassian.pocketknife.step.EitherStep3.then(EitherStep3.java:24)
      	at com.atlassian.servicedesk.internal.rest.sla.agentview.ServiceDeskSlaResource.getMetricsConfiguration(ServiceDeskSlaResource.java:71)
      	... 3 filtered
      	at java.lang.reflect.Method.invoke(Method.java:498)
      	... 19 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:154)
      	... 1 filtered
      	at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:68)
      	... 32 filtered
      	at com.atlassian.servicedesk.internal.web.ExternalCustomerLockoutFilter.doFilter(ExternalCustomerLockoutFilter.java:56)
      	... 4 filtered
      	at com.atlassian.servicedesk.internal.web.UrlOperationalStatusCheckFilter.doFilterWhenLicensed(UrlOperationalStatusCheckFilter.java:38)
      	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilter(OperationalStatusAwareHttpFilter.java:27)
      	... 4 filtered
      	at com.atlassian.servicedesk.internal.web.PopulateEyeballForRestFilter.doFilterWhenLicensed(PopulateEyeballForRestFilter.java:36)
      	at com.atlassian.servicedesk.internal.web.OperationalStatusAwareHttpFilter.doFilter(OperationalStatusAwareHttpFilter.java:27)
      	... 8 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 53 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:80)
      	... 1 filtered
      	at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:78)
      	... 16 filtered
      	at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:37)
      	... 20 filtered
      	at com.atlassian.jira.servermetrics.CorrelationIdPopulatorFilter.doFilter(CorrelationIdPopulatorFilter.java:30)
      	... 5 filtered
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.lambda$invokeFilterChain$0(CustomerContextSettingFilter.java:181)
      	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:139)
      	at com.atlassian.servicedesk.internal.utils.context.ReentrantThreadLocalBasedCodeContext.runOutOfContext(ReentrantThreadLocalBasedCodeContext.java:92)
      	at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runOutOfCustomerContext(CustomerContextServiceImpl.java:64)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.outOfCustomerContext(CustomerContextSettingFilter.java:174)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:130)
      	at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:121)
      	... 4 filtered
      	at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:32)
      	... 8 filtered
      	at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21)
      	... 4 filtered
      	at com.atlassian.web.servlet.plugin.LocationCleanerFilter.doFilter(LocationCleanerFilter.java:36)
      	... 29 filtered
      	at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25)
      	... 28 filtered
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
      	at java.lang.Thread.run(Thread.java:745)
      

      If a customer has set his/her UI language to any other Language but English, then SLA metric will be missing for the tickets raised by this customer.

      Workaround

      No workaround apart from using English as UI language

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              cmao Chen Mao (Inactive)
              Votes:
              2 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:

                Backbone Issue Sync