Issue Details (XML | Word | Printable)

Key: CAL-246
Type: Bug Bug
Status: Open Open
Priority: Critical Critical
Assignee: Jonathan Nolen
Reporter: Ivan Benko
Votes: 5
Watchers: 3
Operations

If you were logged in you would be able to see more operations.
Confluence Calendar Plugin

Calendar db connections leaking - close/release ?

Created: 27/Mar/08 09:54 AM   Updated: 02/Jul/08 03:02 PM
Component/s: iCalendar
Affects Version/s: 2.6
Fix Version/s: None

Time Tracking:
Not Specified

File Attachments: 1. Java Archive File calendar-plugin-2.7-SNAPSHOT.jar (1.05 MB)

Issue Links:
Reference
 

Labels:


 Description  « Hide
As raised in the http://developer.atlassian.com/jira/browse/CAL-166 it seems as the new version of the plugin 2.6.1 is involved in leaking connections. Would you guys be willing to collaborate with us to try to resolve the problem as highlighted in the support case https://support.atlassian.com/browse/CSP-17117

Please do not hesitate to contact me for more details at ivan@atlassian.com

2008-03-27 05:06:05,039 ERROR [http-9081-Processor217] [sf.hibernate.util.JDBCExceptionReporter] logExceptions Cannot get a connection, pool error Timeout waiting for idle object
com.atlassian.confluence.extra.calendar.model.CalendarException: org.randombits.source.SourceException: Internal Server Error (500)
	at com.atlassian.confluence.extra.calendar.ical.model.ICalCalendar.readFromSource(ICalCalendar.java:472)
	at com.atlassian.confluence.extra.calendar.CalendarManager.getCalendar(CalendarManager.java:261)
	at com.atlassian.confluence.extra.calendar.CalendarManager.getCalendar(CalendarManager.java:242)
	at com.atlassian.confluence.extra.calendar.CalendarMacro.execute(CalendarMacro.java:113)
	at com.atlassian.renderer.v2.macro.ResourceAwareMacroDecorator.execute(ResourceAwareMacroDecorator.java:45)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.processMacro(MacroRendererComponent.java:340)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.makeMacro(MacroRendererComponent.java:241)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.makeMacro(MacroRendererComponent.java:130)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.handlePotentialMacro(MacroRendererComponent.java:115)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.render(MacroRendererComponent.java:77)
	at com.atlassian.renderer.v2.V2Renderer.render(V2Renderer.java:54)
	at com.atlassian.renderer.v2.V2SubRenderer.render(V2SubRenderer.java:44)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.processMacro(MacroRendererComponent.java:337)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.makeMacro(MacroRendererComponent.java:241)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.makeMacro(MacroRendererComponent.java:137)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.handlePotentialMacro(MacroRendererComponent.java:110)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.render(MacroRendererComponent.java:77)
	at com.atlassian.renderer.v2.V2Renderer.render(V2Renderer.java:54)
	at com.atlassian.renderer.v2.V2SubRenderer.render(V2SubRenderer.java:44)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.processMacro(MacroRendererComponent.java:337)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.makeMacro(MacroRendererComponent.java:241)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.makeMacro(MacroRendererComponent.java:137)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.handlePotentialMacro(MacroRendererComponent.java:110)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.render(MacroRendererComponent.java:77)
	at com.atlassian.renderer.v2.V2Renderer.render(V2Renderer.java:54)
	at com.atlassian.renderer.v2.V2SubRenderer.render(V2SubRenderer.java:44)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.processMacro(MacroRendererComponent.java:337)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.makeMacro(MacroRendererComponent.java:241)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.makeMacro(MacroRendererComponent.java:137)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.handlePotentialMacro(MacroRendererComponent.java:110)
	at com.atlassian.renderer.v2.components.MacroRendererComponent.render(MacroRendererComponent.java:77)
	at com.atlassian.renderer.v2.V2Renderer.render(V2Renderer.java:54)
	at com.atlassian.renderer.v2.V2RendererFacade.convertWikiToXHtml(V2RendererFacade.java:57)
	at sun.reflect.GeneratedMethodAccessor321.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:284)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
	at com.atlassian.spring.interceptors.SpringProfilingInterceptor.invoke(SpringProfilingInterceptor.java:20)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:56)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
	at $Proxy33.convertWikiToXHtml(Unknown Source)
	at com.atlassian.confluence.renderer.DefaultWikiStyleRenderer.convertWikiToXHtml(DefaultWikiStyleRenderer.java:23)
	at com.atlassian.confluence.pages.actions.ViewPageAction.execute(ViewPageAction.java:125)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:168)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.intercept(DefaultWorkflowInterceptor.java:55)
	at com.atlassian.confluence.core.ConfluenceWorkflowInterceptor.intercept(ConfluenceWorkflowInterceptor.java:39)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.atlassian.confluence.core.ConfluenceValidationInterceptor.intercept(ConfluenceValidationInterceptor.java:16)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.util.LoggingContextInterceptor.intercept(LoggingContextInterceptor.java:48)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.security.actions.PermissionCheckInterceptor.intercept(PermissionCheckInterceptor.java:47)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.pages.actions.PageAwareInterceptor.intercept(PageAwareInterceptor.java:114)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.spaces.actions.SpaceAwareInterceptor.intercept(SpaceAwareInterceptor.java:67)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.core.actions.LastModifiedInterceptor.intercept(LastModifiedInterceptor.java:39)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.confluence.core.ConfluenceAutowireInterceptor.intercept(ConfluenceAutowireInterceptor.java:25)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.atlassian.xwork.interceptors.XWorkTransactionInterceptor.intercept(XWorkTransactionInterceptor.java:98)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:165)
	at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:115)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:229)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:199)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:399)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
	at com.atlassian.confluence.servlet.simpledisplay.SimpleDisplayServlet.doGet(SimpleDisplayServlet.java:51)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:117)
	at com.atlassian.confluence.util.profiling.ProfilingPageFilter.parsePage(ProfilingPageFilter.java:137)
	at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:51)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.core.filters.ServletContextThreadLocalFilter.doFilter(ServletContextThreadLocalFilter.java:21)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.confluence.util.LoggingContextFilter.doFilter(LoggingContextFilter.java:46)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.confluence.util.UserThreadLocalFilter.doFilter(UserThreadLocalFilter.java:44)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:182)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.seraph.filter.LoginFilter.doFilter(LoginFilter.java:159)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.confluence.util.ClusterHeaderFilter.doFilter(ClusterHeaderFilter.java:35)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.johnson.filters.JohnsonFilter.doFilter(JohnsonFilter.java:96)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:172)
	at com.atlassian.spring.filter.FlushingSpringSessionInViewFilter.doFilterInternal(FlushingSpringSessionInViewFilter.java:29)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.util.profiling.filters.ProfilingFilter.doFilter(ProfilingFilter.java:140)
	at com.atlassian.core.filters.ProfilingAndErrorFilter.doFilter(ProfilingAndErrorFilter.java:27)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.confluence.util.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:25)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.core.filters.gzip.GzipFilter.doFilter(GzipFilter.java:61)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at com.atlassian.core.filters.AbstractEncodingFilter.doFilter(AbstractEncodingFilter.java:37)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
	at java.lang.Thread.run(Thread.java:595)
Caused by: org.randombits.source.SourceException: Internal Server Error (500)
	at org.randombits.source.URLSource.httpInputStream(URLSource.java:195)
	at org.randombits.source.URLSource.createInputStream(URLSource.java:172)
	at org.randombits.source.URLSource.createReader(URLSource.java:147)
	at org.randombits.source.BaseSource.openReader(BaseSource.java:63)
	at com.atlassian.confluence.extra.calendar.ical.model.ICalCalendar.readFromSource(ICalCalendar.java:455)
	... 150 more
2008-03-27 05:06:05,127 ERROR [http-9081-Processor219] [sf.hibernate.util.JDBCExceptionReporter] logExceptions Cannot get a connection, pool error Timeout waiting for idle object
2008-03-27 05:06:05,127 ERROR [http-9081-Processor219] [sf.hibernate.util.JDBCExceptionReporter] logExceptions Cannot get a connection, pool error Timeout waiting for idle object
2008-03-27 05:06:05,430 ERROR [http-9081-Processor8] [sf.hibernate.util.JDBCExceptionReporter] logExceptions Cannot get a connection, pool error Timeout waiting for idle object


 All   Comments   Work Log   Change History   FishEye   Crucible   Builds      Sort Order: Ascending order - Click to sort in descending order
David Peterson added a comment - 28/Mar/08 12:16 AM
Ok, I just checked the code for the URLSource which is timing out. There are two types of timeout values for URL Connections - the connection timeout and the read timeout. Currently, only the connection timeout is being set. It may be that the calendars which are causing problems are connecting, but then the read process is never returning. Adding a read timeout may help resolve the problem.

This will need to be resolved by adding a new property to the org.randombits.source.URLSource class to let it specify the read timeout for the URL connection.


Ivan Benko added a comment - 28/Mar/08 12:33 AM
David, is there a workaround that the client may apply? i.e. step-by-step instructions on where to set the read timeout value? So they can apply the change and monitor the effect?
Or do they have to wait till a new plugin release is available? Please advise.
Thanks
Ivan

David Peterson added a comment - 28/Mar/08 12:45 AM
A new plugin release will be required. The addition itself is fairly simple, but doing a formal plugin release is a bit of a process. However, I can probably arrange for a SNAPSHOT of the plugin with the modification in it so that the client can test if it resolves the issue.

Ivan Benko added a comment - 28/Mar/08 12:52 AM
That would be wonderful David.
What is the ETA for the formal release? How can it be tested to ensure that the problem that we think is occurring will not happen again?
Please advise
Ib

David Peterson added a comment - 28/Mar/08 02:17 AM
I have updated the code in SVN to set the read timeout to the same value as the connection time out. Theoretically, this means it could actually take double the timeout value to actually connect (connection timout + read timout), but usually it will just be one or the other. In either case, it's better than having an infinite timeout value.

Jonathan will have to schedule an actual release. In the meantime, I've attached a snapshot build of the calendar plugin. Please try it, test it and see if it resolves your issues.

Note: All new calendars will have the timeouts set by default, but any existing calendars will probably need to be edited, set the timeout value and save. Even if the timeout is displayed as 30 seconds already when you edit an old calendar, save it anyway to ensure the timeout value is getting to the back end.


Ernest Mueller added a comment - 02/Jul/08 03:02 PM
We are having the same problem with 2.6.1 - our production confluence started crashing all the time and it took us a while to get a suspicion it was the calendar plugin. We've disabled it and it's been OK since.

We have an open support ticket on our crashing problem (https://support.atlassian.com/browse/CSP-18504), they were at a loss no matter how many thread dumps we sent, we finally got our entire team together to hammer on the thing for an hour to try to suss it out.

What's up with this? Fix coming? Our users would like their calendars back... Reading the comments above I'm not sure exactly what's up.