Uploaded image for project: 'Jira Data Center'
  1. Jira Data Center
  2. JRASERVER-39651

Jira is returning server error (500 status code) as a part of the response to Parse Exception

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • Low
    • None
    • 8.5.4
    • JQL

    Description

      Summary

      Jira is returning server error (500) as a part of the response to Parse Exception thrown when typing some characters string in JQL. For example, when there is parseException while invoking /rest/api/2/jql/autocompletedata/suggestions API, Jira is returning "Returning internal server error in responsejava.lang.reflect.InvocationTargetException"

      How to Replicate

      1. If you do a JQL search for:
      2. filter = "some filter name"/asdasd

      OR

      1. Setup a Jira env, I used 8.5.4;
      2. Create 1 filter called "FilterOne"
      3. Open jira-application.logs (tail -f)
      4. Open a JQL advanced search and write: filter = FilterOne
      5. Then, insert in the final a double-quotes, and then it appears:

      We are apparently still doing a lookup for each character added to the end of the string after the endquote, causing a ParseException to be thrown in the logs:

      2021-06-11 16:37:00,756-0300 http-nio-8854-exec-19 ERROR mcardoso2 997x393x1 y9rkp 0:0:0:0:0:0:0:1 /rest/api/2/jql/autocompletedata/suggestions [c.a.j.rest.exception.ExceptionInterceptor] Returning internal server error in response2021-06-11 16:37:00,756-0300 http-nio-8854-exec-19 ERROR mcardoso2 997x393x1 y9rkp 0:0:0:0:0:0:0:1 /rest/api/2/jql/autocompletedata/suggestions [c.a.j.rest.exception.ExceptionInterceptor] Returning internal server error in responsejava.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.atlassian.plugins.rest.common.interceptor.impl.DispatchProviderHelper$ResponseOutInvoker$1.invoke(DispatchProviderHelper.java:192) ... 4 filtered at com.atlassian.jira.rest.exception.ExceptionInterceptor.intercept(ExceptionInterceptor.java:55) ... 1 filtered at com.atlassian.jira.rest.v2.issue.scope.RequestScopeInterceptor.intercept(RequestScopeInterceptor.java:39) ... 15 filtered at com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:159) ... 1 filtered at com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:69) ... 32 filtered at com.atlassian.servicedesk.internal.web.ExternalCustomerLockoutFilter.doFilter(ExternalCustomerLockoutFilter.java:55) ... 8 filtered at com.atlassian.jira.plugin.mobile.web.filter.MobileAppRequestFilter.doFilter(MobileAppRequestFilter.java:37) ... 4 filtered at com.atlassian.jira.plugin.mobile.login.MobileLoginSuccessFilter.doFilter(MobileLoginSuccessFilter.java:54) ... 3 filtered at com.atlassian.diagnostics.internal.platform.monitor.http.HttpRequestMonitoringFilter.doFilter(HttpRequestMonitoringFilter.java:55) ... 8 filtered at com.atlassian.web.servlet.plugin.request.RedirectInterceptingFilter.doFilter(RedirectInterceptingFilter.java:21) ... 57 filtered at com.atlassian.jira.security.JiraSecurityFilter.lambda$doFilter$0(JiraSecurityFilter.java:66) ... 1 filtered at com.atlassian.jira.security.JiraSecurityFilter.doFilter(JiraSecurityFilter.java:64) ... 16 filtered at com.atlassian.plugins.rest.module.servlet.RestSeraphFilter.doFilter(RestSeraphFilter.java:37) ... 19 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:213) at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.rteInvoke(ReentrantThreadLocalBasedCodeContext.java:136) at com.atlassian.servicedesk.internal.api.util.context.ReentrantThreadLocalBasedCodeContext.runOutOfContext(ReentrantThreadLocalBasedCodeContext.java:89) at com.atlassian.servicedesk.internal.utils.context.CustomerContextServiceImpl.runOutOfCustomerContext(CustomerContextServiceImpl.java:47) at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.outOfCustomerContext(CustomerContextSettingFilter.java:204) at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilterImpl(CustomerContextSettingFilter.java:135) at com.atlassian.servicedesk.internal.web.CustomerContextSettingFilter.doFilter(CustomerContextSettingFilter.java:124) ... 4 filtered at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:37) ... 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) ... 26 filtered at com.atlassian.jira.servermetrics.MetricsCollectorFilter.doFilter(MetricsCollectorFilter.java:25) ... 25 filtered at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)Caused by: com.atlassian.jira.sharing.search.SearchParseException: org.apache.lucene.queryparser.classic.ParseException: Cannot parse 'FilterOne"': Lexical error at line 1, column 11.  Encountered: <EOF> after : "" at com.atlassian.jira.sharing.index.QueryBuilder.parseQuery(QueryBuilder.java:178) at com.atlassian.jira.sharing.index.QueryBuilder.addParsedQuery(QueryBuilder.java:101) at com.atlassian.jira.sharing.index.DefaultQueryFactory$Builder.addParsedQueries(DefaultQueryFactory.java:113) at com.atlassian.jira.sharing.index.DefaultQueryFactory$Builder.build(DefaultQueryFactory.java:99) at com.atlassian.jira.sharing.index.DefaultQueryFactory.create(DefaultQueryFactory.java:49) at com.atlassian.jira.issue.search.DefaultSearchRequestManager.lambda$search$2(DefaultSearchRequestManager.java:337) at com.atlassian.jira.sharing.index.DefaultSharedEntityIndexer.withSearcher(DefaultSharedEntityIndexer.java:188) at com.atlassian.jira.issue.search.DefaultSearchRequestManager.search(DefaultSearchRequestManager.java:337) at com.atlassian.jira.bc.filter.DefaultSearchRequestService.search(DefaultSearchRequestService.java:396) at com.atlassian.jira.jql.values.SavedFilterValuesGenerator.getPossibleValues(SavedFilterValuesGenerator.java:33) at com.atlassian.jira.rest.internal.jql.FieldAndPredicateAutoCompleteResultGenerator.generateResults(FieldAndPredicateAutoCompleteResultGenerator.java:82) at com.atlassian.jira.rest.internal.jql.FieldAndPredicateAutoCompleteResultGenerator.getAutoCompleteResultsForField(FieldAndPredicateAutoCompleteResultGenerator.java:53) at com.atlassian.jira.rest.v2.search.SearchAutoCompleteResource.getFieldAutoCompleteForQueryString(SearchAutoCompleteResource.java:135) ... 274 moreCaused by: org.apache.lucene.queryparser.classic.ParseException: Cannot parse 'FilterOne"': Lexical error at line 1, column 11.  Encountered: <EOF> after : "" at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:114) at com.atlassian.jira.sharing.index.QueryBuilder.parseQuery(QueryBuilder.java:176) ... 287 moreCaused by: org.apache.lucene.queryparser.classic.TokenMgrError: Lexical error at line 1, column 11.  Encountered: <EOF> after : "" at org.apache.lucene.queryparser.classic.QueryParserTokenManager.getNextToken(QueryParserTokenManager.java:1119) at org.apache.lucene.queryparser.classic.QueryParser.jj_3R_3(QueryParser.java:668) at org.apache.lucene.queryparser.classic.QueryParser.jj_3_1(QueryParser.java:702) at org.apache.lucene.queryparser.classic.QueryParser.jj_2_1(QueryParser.java:646) at org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:225) at org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:215) at org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:109) ... 288 more 
      

      Investigation Done

      After some research, it seems Lucene has problems parsing terms that end with special characters like double-quotes, blankets, and backslash. So, Jira might need to treats it at the code level.

      Workaround for Monitoring Tools

      You have to adapt your monitoring tools to rule this out on the monitoring tool level itself for the time being, until we can have a code fix.
      For example, rule out any internal server error associated with ParseException.

      Suggestion

      Our suggestion is that nowhere in the REST API should return 500 responses unless Jira is down. Various 4xx would be much better for a parseException.

      Attachments

        Activity

          People

            Unassigned Unassigned
            esoares@atlassian.com samurai (Inactive)
            Votes:
            8 Vote for this issue
            Watchers:
            10 Start watching this issue

            Dates

              Created:
              Updated: