Great. I”ll submit an RFE today.  (about to go for a walk).

The recovery I just did was taking up to an hour so I just killed it.

My startup times are taking a while so I’m trying to step through and
figure out at what places we need to tighten up ship to make things a bit
easier to manage!

Thanks!

On Sun, Feb 1, 2015 at 6:21 AM, Tim Bain <tb...@alumni.duke.edu> wrote:

> Kevin,
>
> This sounds like a reasonable enhancement; can you submit it via JIRA?
>
> Having a log line when you start and finish recovery sounds easy to do,
> though have you checked that there isn't already one at DEBUG or TRACE?
> (INFO does seem like the right level, though.)
>
> Logging percent complete would be useful, but whether it's possible will
> depend on how the LevelDB code works.  Please make sure your JIRA describes
> how to recreate the slow behavior you saw, so someone can figure out
> whether it's possible to get status as it runs.  Also suggest what options
> you think would be useful to control how much logging occurs (to give
> enough detail without spamming the log).  I'd think logging based on time
> rather than based on hitting some percentage would be most useful, and that
> there should be a configurable "quiet period" before the first status line
> so you only give updates for long-running recoveries like yours, but that's
> just off the cuff and you might have better ideas of what would have been
> useful to you when this happened.
>
> Tim
> On Jan 31, 2015 4:56 PM, "Kevin Burton" <bur...@spinn3r.com> wrote:
>
> > Right now, after a restart, my AMQ server is at 100% CPU and has been so
> > for about 10 minutes now.
> >
> > It should really print that it’s doing recovery and have some sort of
> > progress indicator ideally.
> >
> > Here’s the stack trace where it’s been for a long time now...
> >
> >
> >    java.lang.Thread.State: RUNNABLE
> > at org.iq80.leveldb.table.BlockIterator.next(BlockIterator.java:88)
> > at
> > org.iq80.leveldb.util.TableIterator.getNextElement(TableIterator.java:72)
> > at
> >
> >
> org.iq80.leveldb.util.AbstractSeekingIterator.hasNext(AbstractSeekingIterator.java:30)
> > at
> >
> >
> org.iq80.leveldb.util.InternalTableIterator.getNextElement(InternalTableIterator.java:32)
> > at
> >
> >
> org.iq80.leveldb.util.AbstractSeekingIterator.hasNext(AbstractSeekingIterator.java:30)
> > at
> > org.iq80.leveldb.util.LevelIterator.getNextElement(LevelIterator.java:90)
> > at
> >
> >
> org.iq80.leveldb.util.AbstractSeekingIterator.hasNext(AbstractSeekingIterator.java:30)
> > at
> >
> >
> org.iq80.leveldb.util.DbIterator$ComparableIterator.next(DbIterator.java:234)
> > at org.iq80.leveldb.util.DbIterator.getNextElement(DbIterator.java:105)
> > at
> >
> >
> org.iq80.leveldb.util.AbstractSeekingIterator.hasNext(AbstractSeekingIterator.java:30)
> > at
> >
> >
> org.iq80.leveldb.impl.SnapshotSeekingIterator.findNextUserEntry(SnapshotSeekingIterator.java:103)
> > at
> >
> >
> org.iq80.leveldb.impl.SnapshotSeekingIterator.seekInternal(SnapshotSeekingIterator.java:57)
> > at
> >
> >
> org.iq80.leveldb.impl.SnapshotSeekingIterator.seekInternal(SnapshotSeekingIterator.java:28)
> > at
> >
> >
> org.iq80.leveldb.util.AbstractSeekingIterator.seek(AbstractSeekingIterator.java:23)
> > at
> >
> >
> org.iq80.leveldb.impl.SeekingIteratorAdapter.seek(SeekingIteratorAdapter.java:30)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$RichDB$$anonfun$cursorPrefixed$1.apply$mcV$sp(LevelDBClient.scala:282)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$RichDB$$anonfun$cursorPrefixed$1.apply(LevelDBClient.scala:282)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$RichDB$$anonfun$cursorPrefixed$1.apply(LevelDBClient.scala:282)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$RichDB.might_trigger_compaction(LevelDBClient.scala:391)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$RichDB.cursorPrefixed(LevelDBClient.scala:282)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$$anonfun$replay_from$1$$anonfun$apply$mcV$sp$4.apply(LevelDBClient.scala:747)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$$anonfun$replay_from$1$$anonfun$apply$mcV$sp$4.apply(LevelDBClient.scala:730)
> > at scala.Option.map(Option.scala:145)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$$anonfun$replay_from$1.apply$mcV$sp(LevelDBClient.scala:730)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$$anonfun$replay_from$1.apply(LevelDBClient.scala:697)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient$$anonfun$replay_from$1.apply(LevelDBClient.scala:697)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient.might_fail(LevelDBClient.scala:549)
> > at
> >
> >
> org.apache.activemq.leveldb.LevelDBClient.replay_from(LevelDBClient.scala:696)
> > at
> org.apache.activemq.leveldb.LevelDBClient.start(LevelDBClient.scala:562)
> > at org.apache.activemq.leveldb.DBManager.start(DBManager.scala:648)
> > at
> org.apache.activemq.leveldb.LevelDBStore.doStart(LevelDBStore.scala:235)
> > at org.apache.activemq.util.ServiceSupport.start(ServiceSupport.java:55)
> > at
> >
> >
> org.apache.activemq.broker.BrokerService.doStartPersistenceAdapter(BrokerService.java:640)
> > at
> >
> >
> org.apache.activemq.broker.BrokerService.startPersistenceAdapter(BrokerService.java:629)
> > at org.apache.activemq.broker.BrokerService.start(BrokerService.java:594)
> > at
> >
> >
> org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:73)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> > at
> >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > at java.lang.reflect.Method.invoke(Method.java:606)
> > at
> >
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1638)
> > at
> >
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1579)
> > at
> >
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1509)
> > at
> >
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:521)
> > at
> >
> >
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
> > at
> >
> >
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
> > at
> >
> >
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
> > - locked <0x00000005cd868d60> (a java.util.concurrent.ConcurrentHashMap)
> > at
> >
> >
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
> > at
> >
> >
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
> > at
> >
> >
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
> > at
> >
> >
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
> > at
> >
> >
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
> > - locked <0x00000005cd868e58> (a java.lang.Object)
> > at
> >
> >
> org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:64)
> > at
> >
> >
> org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:52)
> > at
> >
> >
> org.apache.activemq.xbean.XBeanBrokerFactory$1.<init>(XBeanBrokerFactory.java:104)
> > at
> >
> >
> org.apache.activemq.xbean.XBeanBrokerFactory.createApplicationContext(XBeanBrokerFactory.java:104)
> > at
> >
> >
> org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:67)
> > at
> >
> >
> org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:71)
> > at
> >
> >
> org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:54)
> > at
> >
> >
> org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:87)
> > at
> >
> >
> org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:57)
> > at
> >
> >
> org.apache.activemq.console.command.ShellCommand.runTask(ShellCommand.java:150)
> > at
> >
> >
> org.apache.activemq.console.command.AbstractCommand.execute(AbstractCommand.java:57)
> > at
> >
> >
> org.apache.activemq.console.command.ShellCommand.main(ShellCommand.java:104)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at
> >
> >
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> > at
> >
> >
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > at java.lang.reflect.Method.invoke(Method.java:606)
> > at org.apache.activemq.console.Main.runTaskClass(Main.java:262)
> > at org.apache.activemq.console.Main.main(Main.java:115)
> >
> > --
> >
> > Founder/CEO Spinn3r.com
> > Location: *San Francisco, CA*
> > blog: http://burtonator.wordpress.com
> > … or check out my Google+ profile
> > <https://plus.google.com/102718274791889610666/posts>
> > <http://spinn3r.com>
> >
>



-- 

Founder/CEO Spinn3r.com
Location: *San Francisco, CA*
blog: http://burtonator.wordpress.com
… or check out my Google+ profile
<https://plus.google.com/102718274791889610666/posts>
<http://spinn3r.com>

Reply via email to