Need to change API endpoint for Jira DC Ical.

XMLWordPrintable

    • 1
    • 2

      As a part of https://jira.atlassian.com/browse/CONFCLOUD-77103, we need the API endpoint being used by Confluence to be rechecked and explore options for a new endpoint as the current one is non performant for large sites/

      REST API request */rest/ical/1.0/ical/config/query/options*takes a long time to return the full set of data

      Environment

      Large Jira instance with

      • 2000+ projects, or
      • 30000+ search filters

      Steps to Reproduce

      1. Configure 2000 projects and 30,000 filters in Jira
      2. Go to Confluence, create a Calendar event that pulls in Jira projects.

      Logs

      Inspecting browser's Developer Tools, you could see the request https://yourDomain.atlassian.net/wiki/rest/calendar-services/1.0/calendar/jira/<CalendarID>/query/options.json is returning HTTP 500 Internal Server Error.

      ["java.net.SocketTimeoutException: Read timed out"]
      

      While the back-end Confluence log, reported:

        env: prod-eucentral
         err: { [-]
           class: [ [-]
             com.atlassian.sal.api.net.ResponseException
             java.net.SocketTimeoutException
           ]
      
        stack: com.atlassian.sal.api.net.ResponseException: java.net.SocketTimeoutException: Read timed out
      com.atlassian.sal.core.net.HttpClientRequest.executeAndReturn(HttpClientRequest.java:140)
      com.atlassian.plugins.rest.module.jersey.JerseyRequest.executeAndReturn(JerseyRequest.java:128)
      com.atlassian.applinks.core.auth.ApplicationLinkRequestAdaptor.execute(ApplicationLinkRequestAdaptor.java:56)
      com.atlassian.applinks.oauth.auth.ThreeLeggedOAuthRequest.execute(ThreeLeggedOAuthRequest.java:82)
      com.atlassian.confluence.extra.calendar3.calendarstore.DefaultJiraAccessor.getQueryOptionsInternal(DefaultJiraAccessor.java:221)
      com.atlassian.confluence.extra.calendar3.calendarstore.DefaultJiraAccessor.lambda$getQueryOptions$0(DefaultJiraAccessor.java:188)
      com.atlassian.vcache.internal.core.metrics.TimedSupplier.get(TimedSupplier.java:32)
      com.atlassian.vcache.internal.core.service.DefaultRequestCache.lambda$get$2(DefaultRequestCache.java:53)
      java.base/java.util.Optional.orElseGet(Unknown Source)
      com.atlassian.vcache.internal.core.service.DefaultRequestCache.get(DefaultRequestCache.java:51)
      com.atlassian.vcache.internal.core.metrics.TimedLocalCacheOperations.get(TimedLocalCacheOperations.java:65)
      com.atlassian.confluence.extra.calendar3.calendarstore.DefaultJiraAccessor.lambda$getQueryOptions$1(DefaultJiraAccessor.java:202)
      java.base/java.util.Optional.map(Unknown Source)
      com.atlassian.confluence.extra.calendar3.calendarstore.DefaultJiraAccessor.getQueryOptions(DefaultJiraAccessor.java:200)
      com.atlassian.confluence.extra.calendar3.rest.JiraCalendarResource.getJiraQueryOptions(JiraCalendarResource.java:105)
      java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
      java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
      java.base/java.lang.reflect.Method.invoke(Unknown Source)javax.servlet.http.HttpFilter.doFilter(HttpFilter.java:53)
      org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
      org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
      org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
      org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
      com.atlassian.confluence.servlet.filter.VCacheRequestContextFilter.lambda$doFilter$1(VCacheRequestContextFilter.java:71)
      com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContext(VCacheRequestContextManager.java:89)
      com.atlassian.confluence.impl.vcache.VCacheRequestContextManager.doInRequestContext(VCacheRequestContextManager.java:78)
      com.atlassian.confluence.servlet.filter.VCacheRequestContextFilter.doFilter(VCacheRequestContextFilter.java:66)
      javax.servlet.http.HttpFilter.doFilter(HttpFilter.java:53)
      org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354)
      org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267)
      org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
      org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
      com.atlassian.confluence.web.filter.ThreadLocalCacheFilter.doFilter(ThreadLocalCacheFilter.java:32)
      com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:35)
      org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
      org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
      org.apache.struts2.dispatcher.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:96)
      org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:168)
      org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
      com.atlassian.confluence.servlet.filter.ReadOnlyRequestFilter.doFilter(ReadOnlyRequestFilter.java:74)
      javax.servlet.http.HttpFilter.doFilter(HttpFilter.java:53)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
      org.apache.catalina.valves.VertigoStuckThreadDetectionValve.invoke(VertigoStuckThreadDetectionValve.java:164)
      org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
      org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:761)
      org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
      org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:396)
      org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
      org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:937)
      org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1793)
      org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
      org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
      org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
      org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
      java.base/java.lang.Thread.run(Unknown Source)Caused by: java.net.SocketTimeoutException: Read timed out
      java.base/sun.nio.ch.NioSocketImpl.timedRead(Unknown Source)
      java.base/sun.nio.ch.NioSocketImpl.implRead(Unknown Source)
      java.base/sun.nio.ch.NioSocketImpl.read(Unknown Source)
      java.base/sun.nio.ch.NioSocketImpl$1.read(Unknown Source)
      java.base/java.net.Socket$SocketInputStream.read(Unknown Source)
      org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137)
      org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153)
      org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280)
      org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138)
      org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
      org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
      org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
      org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157)
      org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
      org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
      org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
      org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
      org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
      org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
      org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
      org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
      com.atlassian.sal.core.net.HttpClientRequest.executeAndReturn(HttpClientRequest.java:129)
      ... 393 more
         }
         ext: { [-]
           accessStatus: LICENSED_USE_ACCESS
           accountId: abcdefghijk
           apiPath: calendar_jira_applicationId_query_options
           codeowner: @teams/virality
           confluenceVersion: 1000.0.0-6394529604e8
           experience: unknown
           experienceId: unknown
           httpMethod: GET
           methodName: getJiraQueryOptions
           requestType: UserSession
           resourceClass: JiraCalendarResource
           traceId: 2e8c61e8dcba4f779b0sssssssssss6c
         }
         hostname: abcderfhghg
         level: ERROR
         logger: com.atlassian.confluence.extra.calendar3.rest.ExceptionMappers.GeneralExceptionMapper
         m: { [+]
         }
         message: General exception happen on calendar resources
         micros_container: confluence
         product: confluence 

      Notes

      /rest/ical/1.0/ical/config/query/options contains the following data

      • List of projects
      • List of Search filters
      • Names of viewable fields

              Assignee:
              Unassigned
              Reporter:
              Bharath Kumar
              Votes:
              1 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated: