You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Martin Wilhelm <ma...@researchgate.net> on 2012/11/05 15:29:56 UTC
Corrupt scheduler (kahadb) - recovery?
Hi,
we maybe got a corrupt scheduler after running activemq
under high load a while.
The symptom is:
0) ls -l scheduler/
total 181652
-rw-r--r-- 1 root root 33554516 2012-11-01 20:20 db-1.log
-rw-r--r-- 1 root root 33554677 2012-11-02 13:24 db-2.log
-rw-r--r-- 1 root root 33554541 2012-11-02 19:27 db-3.log
-rw-r--r-- 1 root root 33554496 2012-11-05 04:31 db-4.log
-rw-r--r-- 1 root root 33554992 2012-11-05 12:22 db-5.log
-rw-r--r-- 1 root root 33030144 2012-11-05 14:27 db-6.log
-rw-r--r-- 1 root root 0 2012-11-01 14:21 lock
-rw-r--r-- 1 root root 7303168 2012-11-05 14:27 scheduleDB.data
-rw-r--r-- 1 root root 102592 2012-11-05 14:27 scheduleDB.redo
1) Start activemq
2) Open http://<broker>:8161/admin/scheduled.jsp
3) The Browser gives an error-page:
Error!
Exception occurred while processing this request, check
the log for more information!
3) In activemq.log we can see:
=======================================================
2012-11-05 14:21:56,575 | WARN | /admin/scheduled.jsp |
org.eclipse.jetty.servlet.ServletHandler | qtp860405149-193781
javax.el.ELException:
javax.management.openmbean.KeyAlreadyExistsException: Argument value's
index, calculated according to this TabularData instance's tabularType,
already refers to a value in this table.
at javax.el.BeanELResolver.getValue(BeanELResolver.java:298)
at
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:175)
at com.sun.el.parser.AstValue.getValue(AstValue.java:138)
at
com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:206)
at
org.apache.jasper.runtime.PageContextImpl.evaluateExpression(PageContextImpl.java:1001)
at
org.apache.jsp.scheduled_jsp._jspx_meth_c_forEach_0(org.apache.jsp.scheduled_jsp:189)
at
org.apache.jsp.scheduled_jsp._jspx_meth_c_when_0(org.apache.jsp.scheduled_jsp:163)
at
org.apache.jsp.scheduled_jsp._jspx_meth_c_choose_0(org.apache.jsp.scheduled_jsp:115)
at
org.apache.jsp.scheduled_jsp._jspService(org.apache.jsp.scheduled_jsp:84)
at
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389)
at
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486)
at
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:652)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1329)
at
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1300)
at
org.apache.activemq.web.SessionFilter.doFilter(SessionFilter.java:45)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1300)
at
org.apache.activemq.web.filter.ApplicationContextFilter.doFilter(ApplicationContextFilter.java:96)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1300)
at
com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
at
com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1300)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:445)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:521)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1038)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:374)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:972)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:521)
at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:363)
at
org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:483)
at
org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:920)
at
org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:982)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
at
org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at
org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:627)
at
org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:51)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:662)
Caused by: javax.management.openmbean.KeyAlreadyExistsException:
Argument value's index, calculated according to this TabularData
instance's tabularType, already refers to a value in this table.
at
javax.management.openmbean.TabularDataSupport.checkValueAndIndex(TabularDataSupport.java:871)
at
javax.management.openmbean.TabularDataSupport.internalPut(TabularDataSupport.java:331)
at
javax.management.openmbean.TabularDataSupport.put(TabularDataSupport.java:323)
at
org.apache.activemq.broker.jmx.JobSchedulerView.getAllJobs(JobSchedulerView.java:46)
at sun.reflect.GeneratedMethodAccessor120.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:93)
at
com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:27)
at
com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:208)
at
com.sun.jmx.mbeanserver.PerInterface.getAttribute(PerInterface.java:65)
at
com.sun.jmx.mbeanserver.MBeanSupport.getAttribute(MBeanSupport.java:216)
at
javax.management.StandardMBean.getAttribute(StandardMBean.java:358)
at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:666)
at
com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:638)
at
javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:263)
at $Proxy5.getAllJobs(Unknown Source)
at
org.apache.activemq.web.BrokerFacadeSupport.getScheduledJobs(BrokerFacadeSupport.java:211)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:293)
... 51 more
=======================================================
In practice the scheduler *is* still working - we can see it
firing up jobs after the timer is expired. Is there a way to
"recover" this KeyAlreadyExistsException?
Should we wait for: https://issues.apache.org/jira/browse/AMQ-3758
Greetings,
Martin