-
Type:
Suggestion
-
Resolution: Unresolved
-
Component/s: Space - Team Calendar
-
None
-
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
- Configure 2000 projects and 30,000 filters in Jira
- 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