You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by m....@icw.de on 2012/04/20 14:22:45 UTC
Gracefull shutdown timeouts due to NotifyBuilder blocks on context
Hi *,
We have have a rather annoying issue of a camel shutdown hanging when an
exception happens in a processor. See an abbreviated, numbered stack
below. Seems like a race condition, since it doesn't happen all the time.
We could provoke this simply by having a processor like this:
public class SingleKeyMappingProcessor implements Processor {
public void process(final Exchange exchange) {
throw new NullPointerException("BANG");
}
}
We have tried to work around this issue with various combinations of
ShutdownStrategies and
.shutdownRunningTask(ShutdownRunningTask.CompleteAllTasks) operations on
the route.
Env.: Camel 2.8.1, JDK 1.7.0_03 client 32Bit, KlingonXP SP3
Problem: If by chance the main thread shutting down the context happens to
aquire the context lock first (see line #73, id 0x28201580), the
NotifyBuilder blocks on this very lock (line #26, id 0x28201580). The
(unconfigured) shutdown thread waits it's 300 secs for the route to drain
it's inflight messages (line #4, DefaultShutdownStrategy.java:427).
Any ideas how to fix this or how to work around?
Cheers & thx,
Matthias
00000001 "Camel (camelContext) thread #5 - ShutdownTask" daemon prio=6
tid=0x0368cc00 nid=0x1494 waiting on condition [0x0423f000]
00000002 java.lang.Thread.State: TIMED_WAITING (sleeping)
00000003 at java.lang.Thread.sleep(Native Method)
00000004 at
org.apache.camel.impl.DefaultShutdownStrategy$ShutdownTask.run(DefaultShutdownStrategy.java:427)
00000005 at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
00000006 at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
00000007 at
java.util.concurrent.FutureTask.run(FutureTask.java:138)
00000008 at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
00000009 at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
00000010 at java.lang.Thread.run(Thread.java:619)
00000011
00000012 "Camel Thread 4 - ShutdownTask" daemon prio=6 tid=0x036cbc00
nid=0x1558 waiting on condition [0x041ef000]
00000013 java.lang.Thread.State: WAITING (parking)
00000014 at sun.misc.Unsafe.park(Native Method)
00000015 - parking to wait for <0x289370f8> (a
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
00000016 at
java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
00000017 at
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
00000018 at
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
00000019 at
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
00000020 at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
00000021 at java.lang.Thread.run(Thread.java:619)
00000022
00000023 "Camel (camelContext) thread #0 -
file://target/test-classes/testdata/testInput/lab21" daemon prio=6
tid=0x036a5400 nid=0x1534 waiting for monitor entry [0x040af000]
00000024 java.lang.Thread.State: BLOCKED (on object monitor)
00000025 at
org.apache.camel.impl.DefaultCamelContext.getRoutes(DefaultCamelContext.java:561)
00000026 - waiting to lock <0x28201580> (a
org.apache.camel.spring.SpringCamelContext)
00000027 at
org.apache.camel.util.EndpointHelper.getRouteIdFromEndpoint(EndpointHelper.java:358)
00000028 at
org.apache.camel.builder.NotifyBuilder$2.onExchange(NotifyBuilder.java:137)
00000029 at
org.apache.camel.builder.NotifyBuilder$EventPredicateSupport.onExchangeFailed(NotifyBuilder.java:1336)
00000030 at
org.apache.camel.builder.NotifyBuilder$CompoundEventPredicate.onExchangeFailed(NotifyBuilder.java:1420)
00000031 at
org.apache.camel.builder.NotifyBuilder$ExchangeNotifier.onExchangeFailed(NotifyBuilder.java:1222)
00000032 at
org.apache.camel.builder.NotifyBuilder$ExchangeNotifier.notify(NotifyBuilder.java:1197)
00000033 at
org.apache.camel.util.EventHelper.doNotifyEvent(EventHelper.java:576)
00000034 at
org.apache.camel.util.EventHelper.notifyExchangeFailed(EventHelper.java:355)
00000035 at
org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:219)
00000036 at
org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:156)
00000037 at
org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:36)
00000038 at
org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:109)
00000039 at
org.apache.camel.processor.Pipeline.process(Pipeline.java:105)
00000040 at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:102)
00000041 at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
00000042 at
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
00000043 at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
00000044 at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)
00000045 at
org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:315)
00000046 at
org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:151)
00000047 at
org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:117)
00000048 at
org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:133)
00000049 at
org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:88)
00000050 at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
00000051 at
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
00000052 at
java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
00000053 at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
00000054 at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
00000055 at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
00000056 at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
00000057 at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
00000058 at java.lang.Thread.run(Thread.java:619)
00000059
00000060 "main" prio=6 tid=0x003b7000 nid=0x9a4 waiting on condition
[0x009de000]
00000061 java.lang.Thread.State: TIMED_WAITING (parking)
00000062 at sun.misc.Unsafe.park(Native Method)
00000063 - parking to wait for <0x23195d68> (a
java.util.concurrent.FutureTask$Sync)
00000064 at
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
00000065 at
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1011)
00000066 at
java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1303)
00000067 at
java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:227)
00000068 at java.util.concurrent.FutureTask.get(FutureTask.java:91)
00000069 at
org.apache.camel.impl.DefaultShutdownStrategy.doShutdown(DefaultShutdownStrategy.java:129)
00000070 at
org.apache.camel.impl.DefaultShutdownStrategy.shutdown(DefaultShutdownStrategy.java:92)
00000071 at
org.apache.camel.impl.DefaultShutdownStrategy.shutdown(DefaultShutdownStrategy.java:84)
00000072 at
org.apache.camel.impl.DefaultCamelContext.doStop(DefaultCamelContext.java:1460)
00000073 - locked <0x28201580> (a
org.apache.camel.spring.SpringCamelContext)
00000074 at
org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100)
00000075 at
org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:124)
00000076 at
com.icw.cm.integration.CmApplicationTest.stopContext(CmApplicationTest.java:140)
00000077 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
00000078 at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
00000079 at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
00000080 at java.lang.reflect.Method.invoke(Method.java:597)
00000081 at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
00000082 at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
00000083 at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
00000084 at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37)
00000085 at
org.junit.runners.ParentRunner.run(ParentRunner.java:236)
00000086 at org.junit.runners.Suite.runChild(Suite.java:128)
00000087 at org.junit.runners.Suite.runChild(Suite.java:24)
00000088 at
org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
00000089 at
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
00000090 at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
00000091 at
org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
00000092 at
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
00000093 at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
00000094 at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
00000095 at
org.junit.runners.ParentRunner.run(ParentRunner.java:236)
00000096 at
org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
00000097 at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115)
00000098 at
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102)
00000099 at
org.apache.maven.surefire.Surefire.run(Surefire.java:180)
00000100 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
00000101 at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
00000102 at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
00000103 at java.lang.reflect.Method.invoke(Method.java:597)
00000104 at
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
00000105 at
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
Matthias Schmidt | Senior Software Engineer | Development & Delivery
InterComponentWare AG | Altrottstraße 31 | 69190 Walldorf (Baden) |
Germany
Tel.: +49 (0) 6227 385 333 81 | Fax: +49 (0) 6227 385 471
m.schmidt@icw.de | www.icw.de
**************************************************************************************************
conhIT 2012 ? ICW ist Bronzesponsor
Besuchen Sie uns auf der conhIT im Besprechungsraum Passau 14
Vereinbaren Sie schon jetzt Ihren Gesprächstermin unter:
www.icw-global.com/conhit
Unser conhIT-Programm finden Sie unter: www.icw-global.com/conhit-programm
**************************************************************************************************
InterComponentWare AG:
Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler
Aufsichtsratsvors.: Prof. Dr. Christof Hettich
Firmensitz: 69190 Walldorf, Altrottstraße 31
AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516
Re: Gracefull shutdown timeouts due to NotifyBuilder blocks on context
Posted by m....@icw.de.
Hi Claus,
thanks for this super-fast response & fix! I'm providing a junit4 testcase
ASAP.
cheers,
Matthias
Matthias Schmidt | Senior Software Engineer | Development & Delivery
InterComponentWare AG | Altrottstraße 31 | 69190 Walldorf (Baden) |
Germany
Tel.: +49 (0) 6227 385 333 81 | Fax: +49 (0) 6227 385 471
m.schmidt@icw.de | www.icw.de
**************************************************************************************************
conhIT 2012 ? ICW ist Bronzesponsor
Besuchen Sie uns auf der conhIT im Besprechungsraum Passau 14
Vereinbaren Sie schon jetzt Ihren Gesprächstermin unter:
www.icw-global.com/conhit
Unser conhIT-Programm finden Sie unter: www.icw-global.com/conhit-programm
**************************************************************************************************
Claus Ibsen <cl...@gmail.com> wrote on 21.04.2012 10:07:52:
> [image removed]
>
> Re: Gracefull shutdown timeouts due to NotifyBuilder blocks on context
>
> Claus Ibsen
>
> to:
>
> users
>
> 21.04.2012 10:09
>
> Please respond to users
>
> Hi
>
> I logged a ticket to get this fixed
> https://issues.apache.org/jira/browse/CAMEL-5200
>
> Can you reproduce the issue every time? If so it would be nice if you
> could create an unit test so we can add that to the code base
> to test against regressions.
>
>
>
> On Fri, Apr 20, 2012 at 7:49 PM, Claus Ibsen <cl...@gmail.com>
wrote:
> > Hi
> >
> > What version of Camel are you using?
> >
> > What are you using the NotifyBuilder for? Its intend is for
> testing purposes.
> >
> > But it seems maybe NotifyBuilder should possible ignore events when
> > the CamelContext is shutting down.
> >
> >
> > On Fri, Apr 20, 2012 at 2:22 PM, <m....@icw.de> wrote:
> >> Hi *,
> >>
> >> We have have a rather annoying issue of a camel shutdown hanging when
an
> >> exception happens in a processor. See an abbreviated, numbered stack
> >> below. Seems like a race condition, since it doesn't happen all the
time.
> >> We could provoke this simply by having a processor like this:
> >>
> >> public class SingleKeyMappingProcessor implements Processor {
> >>
> >> public void process(final Exchange exchange) {
> >>
> >> throw new NullPointerException("BANG");
> >> }
> >> }
> >>
> >> We have tried to work around this issue with various combinations of
> >> ShutdownStrategies and
> >> .shutdownRunningTask(ShutdownRunningTask.CompleteAllTasks) operations
on
> >> the route.
> >>
> >> Env.: Camel 2.8.1, JDK 1.7.0_03 client 32Bit, KlingonXP SP3
> >>
> >> Problem: If by chance the main thread shutting down the context
happens to
> >> aquire the context lock first (see line #73, id 0x28201580), the
> >> NotifyBuilder blocks on this very lock (line #26, id 0x28201580). The
> >> (unconfigured) shutdown thread waits it's 300 secs for the route to
drain
> >> it's inflight messages (line #4, DefaultShutdownStrategy.java:427).
> >>
> >> Any ideas how to fix this or how to work around?
> >>
> >> Cheers & thx,
> >>
> >> Matthias
> >>
> >> 00000001 "Camel (camelContext) thread #5 - ShutdownTask" daemon
prio=6
> >> tid=0x0368cc00 nid=0x1494 waiting on condition [0x0423f000]
> >> 00000002 java.lang.Thread.State: TIMED_WAITING (sleeping)
> >> 00000003 at java.lang.Thread.sleep(Native Method)
> >> 00000004 at
> >> org.apache.camel.impl.DefaultShutdownStrategy$ShutdownTask.run
> (DefaultShutdownStrategy.java:427)
> >> 00000005 at
> >>
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> >> 00000006 at
> >> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> >> 00000007 at
> >> java.util.concurrent.FutureTask.run(FutureTask.java:138)
> >> 00000008 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask
> (ThreadPoolExecutor.java:886)
> >> 00000009 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:908)
> >> 00000010 at java.lang.Thread.run(Thread.java:619)
> >> 00000011
> >> 00000012 "Camel Thread 4 - ShutdownTask" daemon prio=6 tid=0x036cbc00
> >> nid=0x1558 waiting on condition [0x041ef000]
> >> 00000013 java.lang.Thread.State: WAITING (parking)
> >> 00000014 at sun.misc.Unsafe.park(Native Method)
> >> 00000015 - parking to wait for <0x289370f8> (a
> >>
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
> >> 00000016 at
> >> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
> >> 00000017 at
> >> java.util.concurrent.locks.AbstractQueuedSynchronizer
> $ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
> >> 00000018 at
> >>
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
> >> 00000019 at
> >> java.util.concurrent.ThreadPoolExecutor.getTask
> (ThreadPoolExecutor.java:947)
> >> 00000020 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:907)
> >> 00000021 at java.lang.Thread.run(Thread.java:619)
> >> 00000022
> >> 00000023 "Camel (camelContext) thread #0 -
> >> file://target/test-classes/testdata/testInput/lab21" daemon prio=6
> >> tid=0x036a5400 nid=0x1534 waiting for monitor entry [0x040af000]
> >> 00000024 java.lang.Thread.State: BLOCKED (on object monitor)
> >> 00000025 at
> >> org.apache.camel.impl.DefaultCamelContext.getRoutes
> (DefaultCamelContext.java:561)
> >> 00000026 - waiting to lock <0x28201580> (a
> >> org.apache.camel.spring.SpringCamelContext)
> >> 00000027 at
> >> org.apache.camel.util.EndpointHelper.getRouteIdFromEndpoint
> (EndpointHelper.java:358)
> >> 00000028 at
> >>
org.apache.camel.builder.NotifyBuilder$2.onExchange(NotifyBuilder.java:137)
> >> 00000029 at
> >> org.apache.camel.builder.NotifyBuilder
> $EventPredicateSupport.onExchangeFailed(NotifyBuilder.java:1336)
> >> 00000030 at
> >> org.apache.camel.builder.NotifyBuilder
> $CompoundEventPredicate.onExchangeFailed(NotifyBuilder.java:1420)
> >> 00000031 at
> >> org.apache.camel.builder.NotifyBuilder
> $ExchangeNotifier.onExchangeFailed(NotifyBuilder.java:1222)
> >> 00000032 at
> >> org.apache.camel.builder.NotifyBuilder$ExchangeNotifier.notify
> (NotifyBuilder.java:1197)
> >> 00000033 at
> >> org.apache.camel.util.EventHelper.doNotifyEvent(EventHelper.java:576)
> >> 00000034 at
> >> org.apache.camel.util.EventHelper.notifyExchangeFailed
> (EventHelper.java:355)
> >> 00000035 at
> >>
org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:219)
> >> 00000036 at
> >> org.apache.camel.processor.UnitOfWorkProcessor.doneUow
> (UnitOfWorkProcessor.java:156)
> >> 00000037 at
> >> org.apache.camel.processor.UnitOfWorkProcessor.access$000
> (UnitOfWorkProcessor.java:36)
> >> 00000038 at
> >> org.apache.camel.processor.UnitOfWorkProcessor$1.done
> (UnitOfWorkProcessor.java:109)
> >> 00000039 at
> >> org.apache.camel.processor.Pipeline.process(Pipeline.java:105)
> >> 00000040 at
> >> org.apache.camel.processor.UnitOfWorkProcessor.process
> (UnitOfWorkProcessor.java:102)
> >> 00000041 at
> >> org.apache.camel.util.AsyncProcessorHelper.process
> (AsyncProcessorHelper.java:78)
> >> 00000042 at
> >> org.apache.camel.processor.DelegateAsyncProcessor.processNext
> (DelegateAsyncProcessor.java:98)
> >> 00000043 at
> >> org.apache.camel.processor.DelegateAsyncProcessor.process
> (DelegateAsyncProcessor.java:89)
> >> 00000044 at
> >> org.apache.camel.management.InstrumentationProcessor.process
> (InstrumentationProcessor.java:69)
> >> 00000045 at
> >>
> org.apache.camel.component.file.GenericFileConsumer.processExchange
> (GenericFileConsumer.java:315)
> >> 00000046 at
> >> org.apache.camel.component.file.GenericFileConsumer.processBatch
> (GenericFileConsumer.java:151)
> >> 00000047 at
> >> org.apache.camel.component.file.GenericFileConsumer.poll
> (GenericFileConsumer.java:117)
> >> 00000048 at
> >> org.apache.camel.impl.ScheduledPollConsumer.doRun
> (ScheduledPollConsumer.java:133)
> >> 00000049 at
> >> org.apache.camel.impl.ScheduledPollConsumer.run
> (ScheduledPollConsumer.java:88)
> >> 00000050 at
> >>
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> >> 00000051 at
> >>
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
> >> 00000052 at
> >> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
> >> 00000053 at
> >> java.util.concurrent.ScheduledThreadPoolExecutor
> $ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
> >> 00000054 at
> >> java.util.concurrent.ScheduledThreadPoolExecutor
> $ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
> >> 00000055 at
> >> java.util.concurrent.ScheduledThreadPoolExecutor
> $ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
> >> 00000056 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask
> (ThreadPoolExecutor.java:886)
> >> 00000057 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:908)
> >> 00000058 at java.lang.Thread.run(Thread.java:619)
> >> 00000059
> >> 00000060 "main" prio=6 tid=0x003b7000 nid=0x9a4 waiting on condition
> >> [0x009de000]
> >> 00000061 java.lang.Thread.State: TIMED_WAITING (parking)
> >> 00000062 at sun.misc.Unsafe.park(Native Method)
> >> 00000063 - parking to wait for <0x23195d68> (a
> >> java.util.concurrent.FutureTask$Sync)
> >> 00000064 at
> >>
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
> >> 00000065 at
> >>
>
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos
> (AbstractQueuedSynchronizer.java:1011)
> >> 00000066 at
> >>
>
java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos
> (AbstractQueuedSynchronizer.java:1303)
> >> 00000067 at
> >> java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:227)
> >> 00000068 at
java.util.concurrent.FutureTask.get(FutureTask.java:91)
> >> 00000069 at
> >> org.apache.camel.impl.DefaultShutdownStrategy.doShutdown
> (DefaultShutdownStrategy.java:129)
> >> 00000070 at
> >> org.apache.camel.impl.DefaultShutdownStrategy.shutdown
> (DefaultShutdownStrategy.java:92)
> >> 00000071 at
> >> org.apache.camel.impl.DefaultShutdownStrategy.shutdown
> (DefaultShutdownStrategy.java:84)
> >> 00000072 at
> >> org.apache.camel.impl.DefaultCamelContext.doStop
> (DefaultCamelContext.java:1460)
> >> 00000073 - locked <0x28201580> (a
> >> org.apache.camel.spring.SpringCamelContext)
> >> 00000074 at
> >> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100)
> >> 00000075 at
> >> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:124)
> >> 00000076 at
> >> com.icw.cm.integration.CmApplicationTest.stopContext
> (CmApplicationTest.java:140)
> >> 00000077 at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> >> Method)
> >> 00000078 at
> >> sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
> >> 00000079 at
> >> sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
> >> 00000080 at java.lang.reflect.Method.invoke(Method.java:597)
> >> 00000081 at
> >> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall
> (FrameworkMethod.java:44)
> >> 00000082 at
> >> org.junit.internal.runners.model.ReflectiveCallable.run
> (ReflectiveCallable.java:15)
> >> 00000083 at
> >> org.junit.runners.model.FrameworkMethod.invokeExplosively
> (FrameworkMethod.java:41)
> >> 00000084 at
> >>
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37)
> >> 00000085 at
> >> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >> 00000086 at org.junit.runners.Suite.runChild(Suite.java:128)
> >> 00000087 at org.junit.runners.Suite.runChild(Suite.java:24)
> >> 00000088 at
> >> org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >> 00000089 at
> >> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >> 00000090 at
> >> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >> 00000091 at
> >> org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >> 00000092 at
> >> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >> 00000093 at
> >> org.junit.internal.runners.statements.RunBefores.evaluate
> (RunBefores.java:28)
> >> 00000094 at
> >>
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> >> 00000095 at
> >> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >> 00000096 at
> >> org.apache.maven.surefire.junit4.JUnit4TestSet.execute
> (JUnit4TestSet.java:59)
> >> 00000097 at
> >>
>
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet
> (AbstractDirectoryTestSuite.java:115)
> >> 00000098 at
> >>
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute
> (AbstractDirectoryTestSuite.java:102)
> >> 00000099 at
> >> org.apache.maven.surefire.Surefire.run(Surefire.java:180)
> >> 00000100 at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> >> Method)
> >> 00000101 at
> >> sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
> >> 00000102 at
> >> sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
> >> 00000103 at java.lang.reflect.Method.invoke(Method.java:597)
> >> 00000104 at
> >>
> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess
> (SurefireBooter.java:350)
> >> 00000105 at
> >> org.apache.maven.surefire.booter.SurefireBooter.main
> (SurefireBooter.java:1021)
> >>
> >> Matthias Schmidt | Senior Software Engineer | Development & Delivery
> >> InterComponentWare AG | Altrottstraße 31 | 69190 Walldorf (Baden) |
> >> Germany
> >> Tel.: +49 (0) 6227 385 333 81 | Fax: +49 (0) 6227 385 471
> >> m.schmidt@icw.de | www.icw.de
> >>
> >>
>
**************************************************************************************************
> >> conhIT 2012 ? ICW ist Bronzesponsor
> >>
> >> Besuchen Sie uns auf der conhIT im Besprechungsraum Passau 14
> >> Vereinbaren Sie schon jetzt Ihren Gesprächstermin unter:
> >> www.icw-global.com/conhit
> >>
> >> Unser conhIT-Programm finden Sie unter:
www.icw-global.com/conhit-programm
> >>
>
**************************************************************************************************
> >>
> >>
> >>
> >>
> >>
> >>
> >> InterComponentWare AG:
> >> Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler
> >> Aufsichtsratsvors.: Prof. Dr. Christof Hettich
> >> Firmensitz: 69190 Walldorf, Altrottstraße 31
> >> AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516
> >
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
> > FuseSource
> > Email: cibsen@fusesource.com
> > Web: http://fusesource.com
> > Twitter: davsclaus, fusenews
> > Blog: http://davsclaus.blogspot.com/
> > Author of Camel in Action: http://www.manning.com/ibsen/
>
>
>
> --
> Claus Ibsen
> -----------------
> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
> FuseSource
> Email: cibsen@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
InterComponentWare AG:
Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler
Aufsichtsratsvors.: Prof. Dr. Christof Hettich
Firmensitz: 69190 Walldorf, Altrottstraße 31
AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516
Re: Gracefull shutdown timeouts due to NotifyBuilder blocks on context
Posted by Claus Ibsen <cl...@gmail.com>.
On Wed, Apr 25, 2012 at 1:29 PM, <m....@icw.de> wrote:
> Hi Claus,
>
> I've attached a Eclipse/Maven testcase which exposes the blocking thread
> state every time. At least for me ;-)
>
> Could you give it a go?
>
Thanks for the test case. I will take a look when I get some time.
> cheers,
>
> Matthias
>
> Matthias Schmidt | Senior Software Engineer | Development & Delivery
> InterComponentWare AG | Altrottstraße 31 | 69190 Walldorf (Baden) |
> Germany
> Tel.: +49 (0) 6227 385 333 81 | Fax: +49 (0) 6227 385 471
> m.schmidt@icw.de | www.icw.de
>
> **************************************************************************************************
> conhIT 2012 ? ICW ist Bronzesponsor
>
> Besuchen Sie uns auf der conhIT im Besprechungsraum Passau 14
> Vereinbaren Sie schon jetzt Ihren Gesprächstermin unter:
> www.icw-global.com/conhit
>
> Unser conhIT-Programm finden Sie unter: www.icw-global.com/conhit-programm
> **************************************************************************************************
>
>
>
>
> Claus Ibsen <cl...@gmail.com> wrote on 21.04.2012 10:07:52:
>
>> [image removed]
>>
>> Re: Gracefull shutdown timeouts due to NotifyBuilder blocks on context
>>
>> Claus Ibsen
>>
>> to:
>>
>> users
>>
>> 21.04.2012 10:09
>>
>> Please respond to users
>>
>> Hi
>>
>> I logged a ticket to get this fixed
>> https://issues.apache.org/jira/browse/CAMEL-5200
>>
>> Can you reproduce the issue every time? If so it would be nice if you
>> could create an unit test so we can add that to the code base
>> to test against regressions.
>>
>>
>>
>> On Fri, Apr 20, 2012 at 7:49 PM, Claus Ibsen <cl...@gmail.com>
> wrote:
>> > Hi
>> >
>> > What version of Camel are you using?
>> >
>> > What are you using the NotifyBuilder for? Its intend is for
>> testing purposes.
>> >
>> > But it seems maybe NotifyBuilder should possible ignore events when
>> > the CamelContext is shutting down.
>> >
>> >
>> > On Fri, Apr 20, 2012 at 2:22 PM, <m....@icw.de> wrote:
>> >> Hi *,
>> >>
>> >> We have have a rather annoying issue of a camel shutdown hanging when
> an
>> >> exception happens in a processor. See an abbreviated, numbered stack
>> >> below. Seems like a race condition, since it doesn't happen all the
> time.
>> >> We could provoke this simply by having a processor like this:
>> >>
>> >> public class SingleKeyMappingProcessor implements Processor {
>> >>
>> >> public void process(final Exchange exchange) {
>> >>
>> >> throw new NullPointerException("BANG");
>> >> }
>> >> }
>> >>
>> >> We have tried to work around this issue with various combinations of
>> >> ShutdownStrategies and
>> >> .shutdownRunningTask(ShutdownRunningTask.CompleteAllTasks) operations
> on
>> >> the route.
>> >>
>> >> Env.: Camel 2.8.1, JDK 1.7.0_03 client 32Bit, KlingonXP SP3
>> >>
>> >> Problem: If by chance the main thread shutting down the context
> happens to
>> >> aquire the context lock first (see line #73, id 0x28201580), the
>> >> NotifyBuilder blocks on this very lock (line #26, id 0x28201580). The
>> >> (unconfigured) shutdown thread waits it's 300 secs for the route to
> drain
>> >> it's inflight messages (line #4, DefaultShutdownStrategy.java:427).
>> >>
>> >> Any ideas how to fix this or how to work around?
>> >>
>> >> Cheers & thx,
>> >>
>> >> Matthias
>> >>
>> >> 00000001 "Camel (camelContext) thread #5 - ShutdownTask" daemon
> prio=6
>> >> tid=0x0368cc00 nid=0x1494 waiting on condition [0x0423f000]
>> >> 00000002 java.lang.Thread.State: TIMED_WAITING (sleeping)
>> >> 00000003 at java.lang.Thread.sleep(Native Method)
>> >> 00000004 at
>> >> org.apache.camel.impl.DefaultShutdownStrategy$ShutdownTask.run
>> (DefaultShutdownStrategy.java:427)
>> >> 00000005 at
>> >>
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>> >> 00000006 at
>> >> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>> >> 00000007 at
>> >> java.util.concurrent.FutureTask.run(FutureTask.java:138)
>> >> 00000008 at
>> >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask
>> (ThreadPoolExecutor.java:886)
>> >> 00000009 at
>> >> java.util.concurrent.ThreadPoolExecutor$Worker.run
>> (ThreadPoolExecutor.java:908)
>> >> 00000010 at java.lang.Thread.run(Thread.java:619)
>> >> 00000011
>> >> 00000012 "Camel Thread 4 - ShutdownTask" daemon prio=6 tid=0x036cbc00
>> >> nid=0x1558 waiting on condition [0x041ef000]
>> >> 00000013 java.lang.Thread.State: WAITING (parking)
>> >> 00000014 at sun.misc.Unsafe.park(Native Method)
>> >> 00000015 - parking to wait for <0x289370f8> (a
>> >>
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>> >> 00000016 at
>> >> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>> >> 00000017 at
>> >> java.util.concurrent.locks.AbstractQueuedSynchronizer
>> $ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
>> >> 00000018 at
>> >>
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
>> >> 00000019 at
>> >> java.util.concurrent.ThreadPoolExecutor.getTask
>> (ThreadPoolExecutor.java:947)
>> >> 00000020 at
>> >> java.util.concurrent.ThreadPoolExecutor$Worker.run
>> (ThreadPoolExecutor.java:907)
>> >> 00000021 at java.lang.Thread.run(Thread.java:619)
>> >> 00000022
>> >> 00000023 "Camel (camelContext) thread #0 -
>> >> file://target/test-classes/testdata/testInput/lab21" daemon prio=6
>> >> tid=0x036a5400 nid=0x1534 waiting for monitor entry [0x040af000]
>> >> 00000024 java.lang.Thread.State: BLOCKED (on object monitor)
>> >> 00000025 at
>> >> org.apache.camel.impl.DefaultCamelContext.getRoutes
>> (DefaultCamelContext.java:561)
>> >> 00000026 - waiting to lock <0x28201580> (a
>> >> org.apache.camel.spring.SpringCamelContext)
>> >> 00000027 at
>> >> org.apache.camel.util.EndpointHelper.getRouteIdFromEndpoint
>> (EndpointHelper.java:358)
>> >> 00000028 at
>> >>
> org.apache.camel.builder.NotifyBuilder$2.onExchange(NotifyBuilder.java:137)
>> >> 00000029 at
>> >> org.apache.camel.builder.NotifyBuilder
>> $EventPredicateSupport.onExchangeFailed(NotifyBuilder.java:1336)
>> >> 00000030 at
>> >> org.apache.camel.builder.NotifyBuilder
>> $CompoundEventPredicate.onExchangeFailed(NotifyBuilder.java:1420)
>> >> 00000031 at
>> >> org.apache.camel.builder.NotifyBuilder
>> $ExchangeNotifier.onExchangeFailed(NotifyBuilder.java:1222)
>> >> 00000032 at
>> >> org.apache.camel.builder.NotifyBuilder$ExchangeNotifier.notify
>> (NotifyBuilder.java:1197)
>> >> 00000033 at
>> >> org.apache.camel.util.EventHelper.doNotifyEvent(EventHelper.java:576)
>> >> 00000034 at
>> >> org.apache.camel.util.EventHelper.notifyExchangeFailed
>> (EventHelper.java:355)
>> >> 00000035 at
>> >>
> org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:219)
>> >> 00000036 at
>> >> org.apache.camel.processor.UnitOfWorkProcessor.doneUow
>> (UnitOfWorkProcessor.java:156)
>> >> 00000037 at
>> >> org.apache.camel.processor.UnitOfWorkProcessor.access$000
>> (UnitOfWorkProcessor.java:36)
>> >> 00000038 at
>> >> org.apache.camel.processor.UnitOfWorkProcessor$1.done
>> (UnitOfWorkProcessor.java:109)
>> >> 00000039 at
>> >> org.apache.camel.processor.Pipeline.process(Pipeline.java:105)
>> >> 00000040 at
>> >> org.apache.camel.processor.UnitOfWorkProcessor.process
>> (UnitOfWorkProcessor.java:102)
>> >> 00000041 at
>> >> org.apache.camel.util.AsyncProcessorHelper.process
>> (AsyncProcessorHelper.java:78)
>> >> 00000042 at
>> >> org.apache.camel.processor.DelegateAsyncProcessor.processNext
>> (DelegateAsyncProcessor.java:98)
>> >> 00000043 at
>> >> org.apache.camel.processor.DelegateAsyncProcessor.process
>> (DelegateAsyncProcessor.java:89)
>> >> 00000044 at
>> >> org.apache.camel.management.InstrumentationProcessor.process
>> (InstrumentationProcessor.java:69)
>> >> 00000045 at
>> >>
>> org.apache.camel.component.file.GenericFileConsumer.processExchange
>> (GenericFileConsumer.java:315)
>> >> 00000046 at
>> >> org.apache.camel.component.file.GenericFileConsumer.processBatch
>> (GenericFileConsumer.java:151)
>> >> 00000047 at
>> >> org.apache.camel.component.file.GenericFileConsumer.poll
>> (GenericFileConsumer.java:117)
>> >> 00000048 at
>> >> org.apache.camel.impl.ScheduledPollConsumer.doRun
>> (ScheduledPollConsumer.java:133)
>> >> 00000049 at
>> >> org.apache.camel.impl.ScheduledPollConsumer.run
>> (ScheduledPollConsumer.java:88)
>> >> 00000050 at
>> >>
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>> >> 00000051 at
>> >>
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
>> >> 00000052 at
>> >> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>> >> 00000053 at
>> >> java.util.concurrent.ScheduledThreadPoolExecutor
>> $ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
>> >> 00000054 at
>> >> java.util.concurrent.ScheduledThreadPoolExecutor
>> $ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
>> >> 00000055 at
>> >> java.util.concurrent.ScheduledThreadPoolExecutor
>> $ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
>> >> 00000056 at
>> >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask
>> (ThreadPoolExecutor.java:886)
>> >> 00000057 at
>> >> java.util.concurrent.ThreadPoolExecutor$Worker.run
>> (ThreadPoolExecutor.java:908)
>> >> 00000058 at java.lang.Thread.run(Thread.java:619)
>> >> 00000059
>> >> 00000060 "main" prio=6 tid=0x003b7000 nid=0x9a4 waiting on condition
>> >> [0x009de000]
>> >> 00000061 java.lang.Thread.State: TIMED_WAITING (parking)
>> >> 00000062 at sun.misc.Unsafe.park(Native Method)
>> >> 00000063 - parking to wait for <0x23195d68> (a
>> >> java.util.concurrent.FutureTask$Sync)
>> >> 00000064 at
>> >>
> java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
>> >> 00000065 at
>> >>
>>
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos
>> (AbstractQueuedSynchronizer.java:1011)
>> >> 00000066 at
>> >>
>>
> java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos
>> (AbstractQueuedSynchronizer.java:1303)
>> >> 00000067 at
>> >> java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:227)
>> >> 00000068 at
> java.util.concurrent.FutureTask.get(FutureTask.java:91)
>> >> 00000069 at
>> >> org.apache.camel.impl.DefaultShutdownStrategy.doShutdown
>> (DefaultShutdownStrategy.java:129)
>> >> 00000070 at
>> >> org.apache.camel.impl.DefaultShutdownStrategy.shutdown
>> (DefaultShutdownStrategy.java:92)
>> >> 00000071 at
>> >> org.apache.camel.impl.DefaultShutdownStrategy.shutdown
>> (DefaultShutdownStrategy.java:84)
>> >> 00000072 at
>> >> org.apache.camel.impl.DefaultCamelContext.doStop
>> (DefaultCamelContext.java:1460)
>> >> 00000073 - locked <0x28201580> (a
>> >> org.apache.camel.spring.SpringCamelContext)
>> >> 00000074 at
>> >> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100)
>> >> 00000075 at
>> >> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:124)
>> >> 00000076 at
>> >> com.icw.cm.integration.CmApplicationTest.stopContext
>> (CmApplicationTest.java:140)
>> >> 00000077 at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> >> Method)
>> >> 00000078 at
>> >> sun.reflect.NativeMethodAccessorImpl.invoke
>> (NativeMethodAccessorImpl.java:39)
>> >> 00000079 at
>> >> sun.reflect.DelegatingMethodAccessorImpl.invoke
>> (DelegatingMethodAccessorImpl.java:25)
>> >> 00000080 at java.lang.reflect.Method.invoke(Method.java:597)
>> >> 00000081 at
>> >> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall
>> (FrameworkMethod.java:44)
>> >> 00000082 at
>> >> org.junit.internal.runners.model.ReflectiveCallable.run
>> (ReflectiveCallable.java:15)
>> >> 00000083 at
>> >> org.junit.runners.model.FrameworkMethod.invokeExplosively
>> (FrameworkMethod.java:41)
>> >> 00000084 at
>> >>
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37)
>> >> 00000085 at
>> >> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> >> 00000086 at org.junit.runners.Suite.runChild(Suite.java:128)
>> >> 00000087 at org.junit.runners.Suite.runChild(Suite.java:24)
>> >> 00000088 at
>> >> org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>> >> 00000089 at
>> >> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>> >> 00000090 at
>> >> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>> >> 00000091 at
>> >> org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>> >> 00000092 at
>> >> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>> >> 00000093 at
>> >> org.junit.internal.runners.statements.RunBefores.evaluate
>> (RunBefores.java:28)
>> >> 00000094 at
>> >>
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
>> >> 00000095 at
>> >> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> >> 00000096 at
>> >> org.apache.maven.surefire.junit4.JUnit4TestSet.execute
>> (JUnit4TestSet.java:59)
>> >> 00000097 at
>> >>
>>
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet
>> (AbstractDirectoryTestSuite.java:115)
>> >> 00000098 at
>> >>
>> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute
>> (AbstractDirectoryTestSuite.java:102)
>> >> 00000099 at
>> >> org.apache.maven.surefire.Surefire.run(Surefire.java:180)
>> >> 00000100 at
> sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> >> Method)
>> >> 00000101 at
>> >> sun.reflect.NativeMethodAccessorImpl.invoke
>> (NativeMethodAccessorImpl.java:39)
>> >> 00000102 at
>> >> sun.reflect.DelegatingMethodAccessorImpl.invoke
>> (DelegatingMethodAccessorImpl.java:25)
>> >> 00000103 at java.lang.reflect.Method.invoke(Method.java:597)
>> >> 00000104 at
>> >>
>> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess
>> (SurefireBooter.java:350)
>> >> 00000105 at
>> >> org.apache.maven.surefire.booter.SurefireBooter.main
>> (SurefireBooter.java:1021)
>> >>
>> >> Matthias Schmidt | Senior Software Engineer | Development & Delivery
>> >> InterComponentWare AG | Altrottstraße 31 | 69190 Walldorf (Baden) |
>> >> Germany
>> >> Tel.: +49 (0) 6227 385 333 81 | Fax: +49 (0) 6227 385 471
>> >> m.schmidt@icw.de | www.icw.de
>> >>
>> >>
>>
> **************************************************************************************************
>> >> conhIT 2012 ? ICW ist Bronzesponsor
>> >>
>> >> Besuchen Sie uns auf der conhIT im Besprechungsraum Passau 14
>> >> Vereinbaren Sie schon jetzt Ihren Gesprächstermin unter:
>> >> www.icw-global.com/conhit
>> >>
>> >> Unser conhIT-Programm finden Sie unter:
> www.icw-global.com/conhit-programm
>> >>
>>
> **************************************************************************************************
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> InterComponentWare AG:
>> >> Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler
>> >> Aufsichtsratsvors.: Prof. Dr. Christof Hettich
>> >> Firmensitz: 69190 Walldorf, Altrottstraße 31
>> >> AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516
>> >
>> >
>> >
>> > --
>> > Claus Ibsen
>> > -----------------
>> > CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
>> > FuseSource
>> > Email: cibsen@fusesource.com
>> > Web: http://fusesource.com
>> > Twitter: davsclaus, fusenews
>> > Blog: http://davsclaus.blogspot.com/
>> > Author of Camel in Action: http://www.manning.com/ibsen/
>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
>> FuseSource
>> Email: cibsen@fusesource.com
>> Web: http://fusesource.com
>> Twitter: davsclaus, fusenews
>> Blog: http://davsclaus.blogspot.com/
>> Author of Camel in Action: http://www.manning.com/ibsen/
>
>
>
>
> InterComponentWare AG:
> Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler
> Aufsichtsratsvors.: Prof. Dr. Christof Hettich
> Firmensitz: 69190 Walldorf, Altrottstraße 31
> AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516
--
Claus Ibsen
-----------------
CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/
Re: Gracefull shutdown timeouts due to NotifyBuilder blocks on context
Posted by m....@icw.de.
Hi Claus,
I've attached a Eclipse/Maven testcase which exposes the blocking thread
state every time. At least for me ;-)
Could you give it a go?
cheers,
Matthias
Matthias Schmidt | Senior Software Engineer | Development & Delivery
InterComponentWare AG | Altrottstraße 31 | 69190 Walldorf (Baden) |
Germany
Tel.: +49 (0) 6227 385 333 81 | Fax: +49 (0) 6227 385 471
m.schmidt@icw.de | www.icw.de
**************************************************************************************************
conhIT 2012 ? ICW ist Bronzesponsor
Besuchen Sie uns auf der conhIT im Besprechungsraum Passau 14
Vereinbaren Sie schon jetzt Ihren Gesprächstermin unter:
www.icw-global.com/conhit
Unser conhIT-Programm finden Sie unter: www.icw-global.com/conhit-programm
**************************************************************************************************
Claus Ibsen <cl...@gmail.com> wrote on 21.04.2012 10:07:52:
> [image removed]
>
> Re: Gracefull shutdown timeouts due to NotifyBuilder blocks on context
>
> Claus Ibsen
>
> to:
>
> users
>
> 21.04.2012 10:09
>
> Please respond to users
>
> Hi
>
> I logged a ticket to get this fixed
> https://issues.apache.org/jira/browse/CAMEL-5200
>
> Can you reproduce the issue every time? If so it would be nice if you
> could create an unit test so we can add that to the code base
> to test against regressions.
>
>
>
> On Fri, Apr 20, 2012 at 7:49 PM, Claus Ibsen <cl...@gmail.com>
wrote:
> > Hi
> >
> > What version of Camel are you using?
> >
> > What are you using the NotifyBuilder for? Its intend is for
> testing purposes.
> >
> > But it seems maybe NotifyBuilder should possible ignore events when
> > the CamelContext is shutting down.
> >
> >
> > On Fri, Apr 20, 2012 at 2:22 PM, <m....@icw.de> wrote:
> >> Hi *,
> >>
> >> We have have a rather annoying issue of a camel shutdown hanging when
an
> >> exception happens in a processor. See an abbreviated, numbered stack
> >> below. Seems like a race condition, since it doesn't happen all the
time.
> >> We could provoke this simply by having a processor like this:
> >>
> >> public class SingleKeyMappingProcessor implements Processor {
> >>
> >> public void process(final Exchange exchange) {
> >>
> >> throw new NullPointerException("BANG");
> >> }
> >> }
> >>
> >> We have tried to work around this issue with various combinations of
> >> ShutdownStrategies and
> >> .shutdownRunningTask(ShutdownRunningTask.CompleteAllTasks) operations
on
> >> the route.
> >>
> >> Env.: Camel 2.8.1, JDK 1.7.0_03 client 32Bit, KlingonXP SP3
> >>
> >> Problem: If by chance the main thread shutting down the context
happens to
> >> aquire the context lock first (see line #73, id 0x28201580), the
> >> NotifyBuilder blocks on this very lock (line #26, id 0x28201580). The
> >> (unconfigured) shutdown thread waits it's 300 secs for the route to
drain
> >> it's inflight messages (line #4, DefaultShutdownStrategy.java:427).
> >>
> >> Any ideas how to fix this or how to work around?
> >>
> >> Cheers & thx,
> >>
> >> Matthias
> >>
> >> 00000001 "Camel (camelContext) thread #5 - ShutdownTask" daemon
prio=6
> >> tid=0x0368cc00 nid=0x1494 waiting on condition [0x0423f000]
> >> 00000002 java.lang.Thread.State: TIMED_WAITING (sleeping)
> >> 00000003 at java.lang.Thread.sleep(Native Method)
> >> 00000004 at
> >> org.apache.camel.impl.DefaultShutdownStrategy$ShutdownTask.run
> (DefaultShutdownStrategy.java:427)
> >> 00000005 at
> >>
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> >> 00000006 at
> >> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> >> 00000007 at
> >> java.util.concurrent.FutureTask.run(FutureTask.java:138)
> >> 00000008 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask
> (ThreadPoolExecutor.java:886)
> >> 00000009 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:908)
> >> 00000010 at java.lang.Thread.run(Thread.java:619)
> >> 00000011
> >> 00000012 "Camel Thread 4 - ShutdownTask" daemon prio=6 tid=0x036cbc00
> >> nid=0x1558 waiting on condition [0x041ef000]
> >> 00000013 java.lang.Thread.State: WAITING (parking)
> >> 00000014 at sun.misc.Unsafe.park(Native Method)
> >> 00000015 - parking to wait for <0x289370f8> (a
> >>
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
> >> 00000016 at
> >> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
> >> 00000017 at
> >> java.util.concurrent.locks.AbstractQueuedSynchronizer
> $ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
> >> 00000018 at
> >>
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
> >> 00000019 at
> >> java.util.concurrent.ThreadPoolExecutor.getTask
> (ThreadPoolExecutor.java:947)
> >> 00000020 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:907)
> >> 00000021 at java.lang.Thread.run(Thread.java:619)
> >> 00000022
> >> 00000023 "Camel (camelContext) thread #0 -
> >> file://target/test-classes/testdata/testInput/lab21" daemon prio=6
> >> tid=0x036a5400 nid=0x1534 waiting for monitor entry [0x040af000]
> >> 00000024 java.lang.Thread.State: BLOCKED (on object monitor)
> >> 00000025 at
> >> org.apache.camel.impl.DefaultCamelContext.getRoutes
> (DefaultCamelContext.java:561)
> >> 00000026 - waiting to lock <0x28201580> (a
> >> org.apache.camel.spring.SpringCamelContext)
> >> 00000027 at
> >> org.apache.camel.util.EndpointHelper.getRouteIdFromEndpoint
> (EndpointHelper.java:358)
> >> 00000028 at
> >>
org.apache.camel.builder.NotifyBuilder$2.onExchange(NotifyBuilder.java:137)
> >> 00000029 at
> >> org.apache.camel.builder.NotifyBuilder
> $EventPredicateSupport.onExchangeFailed(NotifyBuilder.java:1336)
> >> 00000030 at
> >> org.apache.camel.builder.NotifyBuilder
> $CompoundEventPredicate.onExchangeFailed(NotifyBuilder.java:1420)
> >> 00000031 at
> >> org.apache.camel.builder.NotifyBuilder
> $ExchangeNotifier.onExchangeFailed(NotifyBuilder.java:1222)
> >> 00000032 at
> >> org.apache.camel.builder.NotifyBuilder$ExchangeNotifier.notify
> (NotifyBuilder.java:1197)
> >> 00000033 at
> >> org.apache.camel.util.EventHelper.doNotifyEvent(EventHelper.java:576)
> >> 00000034 at
> >> org.apache.camel.util.EventHelper.notifyExchangeFailed
> (EventHelper.java:355)
> >> 00000035 at
> >>
org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:219)
> >> 00000036 at
> >> org.apache.camel.processor.UnitOfWorkProcessor.doneUow
> (UnitOfWorkProcessor.java:156)
> >> 00000037 at
> >> org.apache.camel.processor.UnitOfWorkProcessor.access$000
> (UnitOfWorkProcessor.java:36)
> >> 00000038 at
> >> org.apache.camel.processor.UnitOfWorkProcessor$1.done
> (UnitOfWorkProcessor.java:109)
> >> 00000039 at
> >> org.apache.camel.processor.Pipeline.process(Pipeline.java:105)
> >> 00000040 at
> >> org.apache.camel.processor.UnitOfWorkProcessor.process
> (UnitOfWorkProcessor.java:102)
> >> 00000041 at
> >> org.apache.camel.util.AsyncProcessorHelper.process
> (AsyncProcessorHelper.java:78)
> >> 00000042 at
> >> org.apache.camel.processor.DelegateAsyncProcessor.processNext
> (DelegateAsyncProcessor.java:98)
> >> 00000043 at
> >> org.apache.camel.processor.DelegateAsyncProcessor.process
> (DelegateAsyncProcessor.java:89)
> >> 00000044 at
> >> org.apache.camel.management.InstrumentationProcessor.process
> (InstrumentationProcessor.java:69)
> >> 00000045 at
> >>
> org.apache.camel.component.file.GenericFileConsumer.processExchange
> (GenericFileConsumer.java:315)
> >> 00000046 at
> >> org.apache.camel.component.file.GenericFileConsumer.processBatch
> (GenericFileConsumer.java:151)
> >> 00000047 at
> >> org.apache.camel.component.file.GenericFileConsumer.poll
> (GenericFileConsumer.java:117)
> >> 00000048 at
> >> org.apache.camel.impl.ScheduledPollConsumer.doRun
> (ScheduledPollConsumer.java:133)
> >> 00000049 at
> >> org.apache.camel.impl.ScheduledPollConsumer.run
> (ScheduledPollConsumer.java:88)
> >> 00000050 at
> >>
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> >> 00000051 at
> >>
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
> >> 00000052 at
> >> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
> >> 00000053 at
> >> java.util.concurrent.ScheduledThreadPoolExecutor
> $ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
> >> 00000054 at
> >> java.util.concurrent.ScheduledThreadPoolExecutor
> $ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
> >> 00000055 at
> >> java.util.concurrent.ScheduledThreadPoolExecutor
> $ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
> >> 00000056 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.runTask
> (ThreadPoolExecutor.java:886)
> >> 00000057 at
> >> java.util.concurrent.ThreadPoolExecutor$Worker.run
> (ThreadPoolExecutor.java:908)
> >> 00000058 at java.lang.Thread.run(Thread.java:619)
> >> 00000059
> >> 00000060 "main" prio=6 tid=0x003b7000 nid=0x9a4 waiting on condition
> >> [0x009de000]
> >> 00000061 java.lang.Thread.State: TIMED_WAITING (parking)
> >> 00000062 at sun.misc.Unsafe.park(Native Method)
> >> 00000063 - parking to wait for <0x23195d68> (a
> >> java.util.concurrent.FutureTask$Sync)
> >> 00000064 at
> >>
java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
> >> 00000065 at
> >>
>
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos
> (AbstractQueuedSynchronizer.java:1011)
> >> 00000066 at
> >>
>
java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos
> (AbstractQueuedSynchronizer.java:1303)
> >> 00000067 at
> >> java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:227)
> >> 00000068 at
java.util.concurrent.FutureTask.get(FutureTask.java:91)
> >> 00000069 at
> >> org.apache.camel.impl.DefaultShutdownStrategy.doShutdown
> (DefaultShutdownStrategy.java:129)
> >> 00000070 at
> >> org.apache.camel.impl.DefaultShutdownStrategy.shutdown
> (DefaultShutdownStrategy.java:92)
> >> 00000071 at
> >> org.apache.camel.impl.DefaultShutdownStrategy.shutdown
> (DefaultShutdownStrategy.java:84)
> >> 00000072 at
> >> org.apache.camel.impl.DefaultCamelContext.doStop
> (DefaultCamelContext.java:1460)
> >> 00000073 - locked <0x28201580> (a
> >> org.apache.camel.spring.SpringCamelContext)
> >> 00000074 at
> >> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100)
> >> 00000075 at
> >> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:124)
> >> 00000076 at
> >> com.icw.cm.integration.CmApplicationTest.stopContext
> (CmApplicationTest.java:140)
> >> 00000077 at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> >> Method)
> >> 00000078 at
> >> sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
> >> 00000079 at
> >> sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
> >> 00000080 at java.lang.reflect.Method.invoke(Method.java:597)
> >> 00000081 at
> >> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall
> (FrameworkMethod.java:44)
> >> 00000082 at
> >> org.junit.internal.runners.model.ReflectiveCallable.run
> (ReflectiveCallable.java:15)
> >> 00000083 at
> >> org.junit.runners.model.FrameworkMethod.invokeExplosively
> (FrameworkMethod.java:41)
> >> 00000084 at
> >>
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37)
> >> 00000085 at
> >> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >> 00000086 at org.junit.runners.Suite.runChild(Suite.java:128)
> >> 00000087 at org.junit.runners.Suite.runChild(Suite.java:24)
> >> 00000088 at
> >> org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> >> 00000089 at
> >> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> >> 00000090 at
> >> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> >> 00000091 at
> >> org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> >> 00000092 at
> >> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> >> 00000093 at
> >> org.junit.internal.runners.statements.RunBefores.evaluate
> (RunBefores.java:28)
> >> 00000094 at
> >>
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> >> 00000095 at
> >> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> >> 00000096 at
> >> org.apache.maven.surefire.junit4.JUnit4TestSet.execute
> (JUnit4TestSet.java:59)
> >> 00000097 at
> >>
>
org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet
> (AbstractDirectoryTestSuite.java:115)
> >> 00000098 at
> >>
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute
> (AbstractDirectoryTestSuite.java:102)
> >> 00000099 at
> >> org.apache.maven.surefire.Surefire.run(Surefire.java:180)
> >> 00000100 at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> >> Method)
> >> 00000101 at
> >> sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
> >> 00000102 at
> >> sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
> >> 00000103 at java.lang.reflect.Method.invoke(Method.java:597)
> >> 00000104 at
> >>
> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess
> (SurefireBooter.java:350)
> >> 00000105 at
> >> org.apache.maven.surefire.booter.SurefireBooter.main
> (SurefireBooter.java:1021)
> >>
> >> Matthias Schmidt | Senior Software Engineer | Development & Delivery
> >> InterComponentWare AG | Altrottstraße 31 | 69190 Walldorf (Baden) |
> >> Germany
> >> Tel.: +49 (0) 6227 385 333 81 | Fax: +49 (0) 6227 385 471
> >> m.schmidt@icw.de | www.icw.de
> >>
> >>
>
**************************************************************************************************
> >> conhIT 2012 ? ICW ist Bronzesponsor
> >>
> >> Besuchen Sie uns auf der conhIT im Besprechungsraum Passau 14
> >> Vereinbaren Sie schon jetzt Ihren Gesprächstermin unter:
> >> www.icw-global.com/conhit
> >>
> >> Unser conhIT-Programm finden Sie unter:
www.icw-global.com/conhit-programm
> >>
>
**************************************************************************************************
> >>
> >>
> >>
> >>
> >>
> >>
> >> InterComponentWare AG:
> >> Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler
> >> Aufsichtsratsvors.: Prof. Dr. Christof Hettich
> >> Firmensitz: 69190 Walldorf, Altrottstraße 31
> >> AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516
> >
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
> > FuseSource
> > Email: cibsen@fusesource.com
> > Web: http://fusesource.com
> > Twitter: davsclaus, fusenews
> > Blog: http://davsclaus.blogspot.com/
> > Author of Camel in Action: http://www.manning.com/ibsen/
>
>
>
> --
> Claus Ibsen
> -----------------
> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
> FuseSource
> Email: cibsen@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
InterComponentWare AG:
Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler
Aufsichtsratsvors.: Prof. Dr. Christof Hettich
Firmensitz: 69190 Walldorf, Altrottstraße 31
AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516
Re: Gracefull shutdown timeouts due to NotifyBuilder blocks on context
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
I logged a ticket to get this fixed
https://issues.apache.org/jira/browse/CAMEL-5200
Can you reproduce the issue every time? If so it would be nice if you
could create an unit test so we can add that to the code base
to test against regressions.
On Fri, Apr 20, 2012 at 7:49 PM, Claus Ibsen <cl...@gmail.com> wrote:
> Hi
>
> What version of Camel are you using?
>
> What are you using the NotifyBuilder for? Its intend is for testing purposes.
>
> But it seems maybe NotifyBuilder should possible ignore events when
> the CamelContext is shutting down.
>
>
> On Fri, Apr 20, 2012 at 2:22 PM, <m....@icw.de> wrote:
>> Hi *,
>>
>> We have have a rather annoying issue of a camel shutdown hanging when an
>> exception happens in a processor. See an abbreviated, numbered stack
>> below. Seems like a race condition, since it doesn't happen all the time.
>> We could provoke this simply by having a processor like this:
>>
>> public class SingleKeyMappingProcessor implements Processor {
>>
>> public void process(final Exchange exchange) {
>>
>> throw new NullPointerException("BANG");
>> }
>> }
>>
>> We have tried to work around this issue with various combinations of
>> ShutdownStrategies and
>> .shutdownRunningTask(ShutdownRunningTask.CompleteAllTasks) operations on
>> the route.
>>
>> Env.: Camel 2.8.1, JDK 1.7.0_03 client 32Bit, KlingonXP SP3
>>
>> Problem: If by chance the main thread shutting down the context happens to
>> aquire the context lock first (see line #73, id 0x28201580), the
>> NotifyBuilder blocks on this very lock (line #26, id 0x28201580). The
>> (unconfigured) shutdown thread waits it's 300 secs for the route to drain
>> it's inflight messages (line #4, DefaultShutdownStrategy.java:427).
>>
>> Any ideas how to fix this or how to work around?
>>
>> Cheers & thx,
>>
>> Matthias
>>
>> 00000001 "Camel (camelContext) thread #5 - ShutdownTask" daemon prio=6
>> tid=0x0368cc00 nid=0x1494 waiting on condition [0x0423f000]
>> 00000002 java.lang.Thread.State: TIMED_WAITING (sleeping)
>> 00000003 at java.lang.Thread.sleep(Native Method)
>> 00000004 at
>> org.apache.camel.impl.DefaultShutdownStrategy$ShutdownTask.run(DefaultShutdownStrategy.java:427)
>> 00000005 at
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>> 00000006 at
>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
>> 00000007 at
>> java.util.concurrent.FutureTask.run(FutureTask.java:138)
>> 00000008 at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> 00000009 at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> 00000010 at java.lang.Thread.run(Thread.java:619)
>> 00000011
>> 00000012 "Camel Thread 4 - ShutdownTask" daemon prio=6 tid=0x036cbc00
>> nid=0x1558 waiting on condition [0x041ef000]
>> 00000013 java.lang.Thread.State: WAITING (parking)
>> 00000014 at sun.misc.Unsafe.park(Native Method)
>> 00000015 - parking to wait for <0x289370f8> (a
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
>> 00000016 at
>> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>> 00000017 at
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
>> 00000018 at
>> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
>> 00000019 at
>> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
>> 00000020 at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>> 00000021 at java.lang.Thread.run(Thread.java:619)
>> 00000022
>> 00000023 "Camel (camelContext) thread #0 -
>> file://target/test-classes/testdata/testInput/lab21" daemon prio=6
>> tid=0x036a5400 nid=0x1534 waiting for monitor entry [0x040af000]
>> 00000024 java.lang.Thread.State: BLOCKED (on object monitor)
>> 00000025 at
>> org.apache.camel.impl.DefaultCamelContext.getRoutes(DefaultCamelContext.java:561)
>> 00000026 - waiting to lock <0x28201580> (a
>> org.apache.camel.spring.SpringCamelContext)
>> 00000027 at
>> org.apache.camel.util.EndpointHelper.getRouteIdFromEndpoint(EndpointHelper.java:358)
>> 00000028 at
>> org.apache.camel.builder.NotifyBuilder$2.onExchange(NotifyBuilder.java:137)
>> 00000029 at
>> org.apache.camel.builder.NotifyBuilder$EventPredicateSupport.onExchangeFailed(NotifyBuilder.java:1336)
>> 00000030 at
>> org.apache.camel.builder.NotifyBuilder$CompoundEventPredicate.onExchangeFailed(NotifyBuilder.java:1420)
>> 00000031 at
>> org.apache.camel.builder.NotifyBuilder$ExchangeNotifier.onExchangeFailed(NotifyBuilder.java:1222)
>> 00000032 at
>> org.apache.camel.builder.NotifyBuilder$ExchangeNotifier.notify(NotifyBuilder.java:1197)
>> 00000033 at
>> org.apache.camel.util.EventHelper.doNotifyEvent(EventHelper.java:576)
>> 00000034 at
>> org.apache.camel.util.EventHelper.notifyExchangeFailed(EventHelper.java:355)
>> 00000035 at
>> org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:219)
>> 00000036 at
>> org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:156)
>> 00000037 at
>> org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:36)
>> 00000038 at
>> org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:109)
>> 00000039 at
>> org.apache.camel.processor.Pipeline.process(Pipeline.java:105)
>> 00000040 at
>> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:102)
>> 00000041 at
>> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
>> 00000042 at
>> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
>> 00000043 at
>> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
>> 00000044 at
>> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)
>> 00000045 at
>> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:315)
>> 00000046 at
>> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:151)
>> 00000047 at
>> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:117)
>> 00000048 at
>> org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:133)
>> 00000049 at
>> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:88)
>> 00000050 at
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
>> 00000051 at
>> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
>> 00000052 at
>> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
>> 00000053 at
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
>> 00000054 at
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
>> 00000055 at
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
>> 00000056 at
>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> 00000057 at
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> 00000058 at java.lang.Thread.run(Thread.java:619)
>> 00000059
>> 00000060 "main" prio=6 tid=0x003b7000 nid=0x9a4 waiting on condition
>> [0x009de000]
>> 00000061 java.lang.Thread.State: TIMED_WAITING (parking)
>> 00000062 at sun.misc.Unsafe.park(Native Method)
>> 00000063 - parking to wait for <0x23195d68> (a
>> java.util.concurrent.FutureTask$Sync)
>> 00000064 at
>> java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
>> 00000065 at
>> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1011)
>> 00000066 at
>> java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1303)
>> 00000067 at
>> java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:227)
>> 00000068 at java.util.concurrent.FutureTask.get(FutureTask.java:91)
>> 00000069 at
>> org.apache.camel.impl.DefaultShutdownStrategy.doShutdown(DefaultShutdownStrategy.java:129)
>> 00000070 at
>> org.apache.camel.impl.DefaultShutdownStrategy.shutdown(DefaultShutdownStrategy.java:92)
>> 00000071 at
>> org.apache.camel.impl.DefaultShutdownStrategy.shutdown(DefaultShutdownStrategy.java:84)
>> 00000072 at
>> org.apache.camel.impl.DefaultCamelContext.doStop(DefaultCamelContext.java:1460)
>> 00000073 - locked <0x28201580> (a
>> org.apache.camel.spring.SpringCamelContext)
>> 00000074 at
>> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100)
>> 00000075 at
>> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:124)
>> 00000076 at
>> com.icw.cm.integration.CmApplicationTest.stopContext(CmApplicationTest.java:140)
>> 00000077 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> Method)
>> 00000078 at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> 00000079 at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> 00000080 at java.lang.reflect.Method.invoke(Method.java:597)
>> 00000081 at
>> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
>> 00000082 at
>> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>> 00000083 at
>> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
>> 00000084 at
>> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37)
>> 00000085 at
>> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> 00000086 at org.junit.runners.Suite.runChild(Suite.java:128)
>> 00000087 at org.junit.runners.Suite.runChild(Suite.java:24)
>> 00000088 at
>> org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>> 00000089 at
>> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>> 00000090 at
>> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>> 00000091 at
>> org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>> 00000092 at
>> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>> 00000093 at
>> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>> 00000094 at
>> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
>> 00000095 at
>> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> 00000096 at
>> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
>> 00000097 at
>> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115)
>> 00000098 at
>> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102)
>> 00000099 at
>> org.apache.maven.surefire.Surefire.run(Surefire.java:180)
>> 00000100 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
>> Method)
>> 00000101 at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> 00000102 at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> 00000103 at java.lang.reflect.Method.invoke(Method.java:597)
>> 00000104 at
>> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
>> 00000105 at
>> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
>>
>> Matthias Schmidt | Senior Software Engineer | Development & Delivery
>> InterComponentWare AG | Altrottstraße 31 | 69190 Walldorf (Baden) |
>> Germany
>> Tel.: +49 (0) 6227 385 333 81 | Fax: +49 (0) 6227 385 471
>> m.schmidt@icw.de | www.icw.de
>>
>> **************************************************************************************************
>> conhIT 2012 ? ICW ist Bronzesponsor
>>
>> Besuchen Sie uns auf der conhIT im Besprechungsraum Passau 14
>> Vereinbaren Sie schon jetzt Ihren Gesprächstermin unter:
>> www.icw-global.com/conhit
>>
>> Unser conhIT-Programm finden Sie unter: www.icw-global.com/conhit-programm
>> **************************************************************************************************
>>
>>
>>
>>
>>
>>
>> InterComponentWare AG:
>> Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler
>> Aufsichtsratsvors.: Prof. Dr. Christof Hettich
>> Firmensitz: 69190 Walldorf, Altrottstraße 31
>> AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516
>
>
>
> --
> Claus Ibsen
> -----------------
> CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
> FuseSource
> Email: cibsen@fusesource.com
> Web: http://fusesource.com
> Twitter: davsclaus, fusenews
> Blog: http://davsclaus.blogspot.com/
> Author of Camel in Action: http://www.manning.com/ibsen/
--
Claus Ibsen
-----------------
CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/
Re: Gracefull shutdown timeouts due to NotifyBuilder blocks on context
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
What version of Camel are you using?
What are you using the NotifyBuilder for? Its intend is for testing purposes.
But it seems maybe NotifyBuilder should possible ignore events when
the CamelContext is shutting down.
On Fri, Apr 20, 2012 at 2:22 PM, <m....@icw.de> wrote:
> Hi *,
>
> We have have a rather annoying issue of a camel shutdown hanging when an
> exception happens in a processor. See an abbreviated, numbered stack
> below. Seems like a race condition, since it doesn't happen all the time.
> We could provoke this simply by having a processor like this:
>
> public class SingleKeyMappingProcessor implements Processor {
>
> public void process(final Exchange exchange) {
>
> throw new NullPointerException("BANG");
> }
> }
>
> We have tried to work around this issue with various combinations of
> ShutdownStrategies and
> .shutdownRunningTask(ShutdownRunningTask.CompleteAllTasks) operations on
> the route.
>
> Env.: Camel 2.8.1, JDK 1.7.0_03 client 32Bit, KlingonXP SP3
>
> Problem: If by chance the main thread shutting down the context happens to
> aquire the context lock first (see line #73, id 0x28201580), the
> NotifyBuilder blocks on this very lock (line #26, id 0x28201580). The
> (unconfigured) shutdown thread waits it's 300 secs for the route to drain
> it's inflight messages (line #4, DefaultShutdownStrategy.java:427).
>
> Any ideas how to fix this or how to work around?
>
> Cheers & thx,
>
> Matthias
>
> 00000001 "Camel (camelContext) thread #5 - ShutdownTask" daemon prio=6
> tid=0x0368cc00 nid=0x1494 waiting on condition [0x0423f000]
> 00000002 java.lang.Thread.State: TIMED_WAITING (sleeping)
> 00000003 at java.lang.Thread.sleep(Native Method)
> 00000004 at
> org.apache.camel.impl.DefaultShutdownStrategy$ShutdownTask.run(DefaultShutdownStrategy.java:427)
> 00000005 at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> 00000006 at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
> 00000007 at
> java.util.concurrent.FutureTask.run(FutureTask.java:138)
> 00000008 at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 00000009 at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 00000010 at java.lang.Thread.run(Thread.java:619)
> 00000011
> 00000012 "Camel Thread 4 - ShutdownTask" daemon prio=6 tid=0x036cbc00
> nid=0x1558 waiting on condition [0x041ef000]
> 00000013 java.lang.Thread.State: WAITING (parking)
> 00000014 at sun.misc.Unsafe.park(Native Method)
> 00000015 - parking to wait for <0x289370f8> (a
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
> 00000016 at
> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
> 00000017 at
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
> 00000018 at
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
> 00000019 at
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
> 00000020 at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> 00000021 at java.lang.Thread.run(Thread.java:619)
> 00000022
> 00000023 "Camel (camelContext) thread #0 -
> file://target/test-classes/testdata/testInput/lab21" daemon prio=6
> tid=0x036a5400 nid=0x1534 waiting for monitor entry [0x040af000]
> 00000024 java.lang.Thread.State: BLOCKED (on object monitor)
> 00000025 at
> org.apache.camel.impl.DefaultCamelContext.getRoutes(DefaultCamelContext.java:561)
> 00000026 - waiting to lock <0x28201580> (a
> org.apache.camel.spring.SpringCamelContext)
> 00000027 at
> org.apache.camel.util.EndpointHelper.getRouteIdFromEndpoint(EndpointHelper.java:358)
> 00000028 at
> org.apache.camel.builder.NotifyBuilder$2.onExchange(NotifyBuilder.java:137)
> 00000029 at
> org.apache.camel.builder.NotifyBuilder$EventPredicateSupport.onExchangeFailed(NotifyBuilder.java:1336)
> 00000030 at
> org.apache.camel.builder.NotifyBuilder$CompoundEventPredicate.onExchangeFailed(NotifyBuilder.java:1420)
> 00000031 at
> org.apache.camel.builder.NotifyBuilder$ExchangeNotifier.onExchangeFailed(NotifyBuilder.java:1222)
> 00000032 at
> org.apache.camel.builder.NotifyBuilder$ExchangeNotifier.notify(NotifyBuilder.java:1197)
> 00000033 at
> org.apache.camel.util.EventHelper.doNotifyEvent(EventHelper.java:576)
> 00000034 at
> org.apache.camel.util.EventHelper.notifyExchangeFailed(EventHelper.java:355)
> 00000035 at
> org.apache.camel.impl.DefaultUnitOfWork.done(DefaultUnitOfWork.java:219)
> 00000036 at
> org.apache.camel.processor.UnitOfWorkProcessor.doneUow(UnitOfWorkProcessor.java:156)
> 00000037 at
> org.apache.camel.processor.UnitOfWorkProcessor.access$000(UnitOfWorkProcessor.java:36)
> 00000038 at
> org.apache.camel.processor.UnitOfWorkProcessor$1.done(UnitOfWorkProcessor.java:109)
> 00000039 at
> org.apache.camel.processor.Pipeline.process(Pipeline.java:105)
> 00000040 at
> org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:102)
> 00000041 at
> org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)
> 00000042 at
> org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)
> 00000043 at
> org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)
> 00000044 at
> org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)
> 00000045 at
> org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:315)
> 00000046 at
> org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:151)
> 00000047 at
> org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:117)
> 00000048 at
> org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:133)
> 00000049 at
> org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:88)
> 00000050 at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
> 00000051 at
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
> 00000052 at
> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
> 00000053 at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
> 00000054 at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:181)
> 00000055 at
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:205)
> 00000056 at
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 00000057 at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 00000058 at java.lang.Thread.run(Thread.java:619)
> 00000059
> 00000060 "main" prio=6 tid=0x003b7000 nid=0x9a4 waiting on condition
> [0x009de000]
> 00000061 java.lang.Thread.State: TIMED_WAITING (parking)
> 00000062 at sun.misc.Unsafe.park(Native Method)
> 00000063 - parking to wait for <0x23195d68> (a
> java.util.concurrent.FutureTask$Sync)
> 00000064 at
> java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
> 00000065 at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1011)
> 00000066 at
> java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1303)
> 00000067 at
> java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:227)
> 00000068 at java.util.concurrent.FutureTask.get(FutureTask.java:91)
> 00000069 at
> org.apache.camel.impl.DefaultShutdownStrategy.doShutdown(DefaultShutdownStrategy.java:129)
> 00000070 at
> org.apache.camel.impl.DefaultShutdownStrategy.shutdown(DefaultShutdownStrategy.java:92)
> 00000071 at
> org.apache.camel.impl.DefaultShutdownStrategy.shutdown(DefaultShutdownStrategy.java:84)
> 00000072 at
> org.apache.camel.impl.DefaultCamelContext.doStop(DefaultCamelContext.java:1460)
> 00000073 - locked <0x28201580> (a
> org.apache.camel.spring.SpringCamelContext)
> 00000074 at
> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:100)
> 00000075 at
> org.apache.camel.impl.ServiceSupport.stop(ServiceSupport.java:124)
> 00000076 at
> com.icw.cm.integration.CmApplicationTest.stopContext(CmApplicationTest.java:140)
> 00000077 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> 00000078 at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 00000079 at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 00000080 at java.lang.reflect.Method.invoke(Method.java:597)
> 00000081 at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
> 00000082 at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
> 00000083 at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
> 00000084 at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:37)
> 00000085 at
> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> 00000086 at org.junit.runners.Suite.runChild(Suite.java:128)
> 00000087 at org.junit.runners.Suite.runChild(Suite.java:24)
> 00000088 at
> org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
> 00000089 at
> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
> 00000090 at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
> 00000091 at
> org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
> 00000092 at
> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
> 00000093 at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
> 00000094 at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
> 00000095 at
> org.junit.runners.ParentRunner.run(ParentRunner.java:236)
> 00000096 at
> org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:59)
> 00000097 at
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:115)
> 00000098 at
> org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:102)
> 00000099 at
> org.apache.maven.surefire.Surefire.run(Surefire.java:180)
> 00000100 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
> Method)
> 00000101 at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> 00000102 at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> 00000103 at java.lang.reflect.Method.invoke(Method.java:597)
> 00000104 at
> org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:350)
> 00000105 at
> org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1021)
>
> Matthias Schmidt | Senior Software Engineer | Development & Delivery
> InterComponentWare AG | Altrottstraße 31 | 69190 Walldorf (Baden) |
> Germany
> Tel.: +49 (0) 6227 385 333 81 | Fax: +49 (0) 6227 385 471
> m.schmidt@icw.de | www.icw.de
>
> **************************************************************************************************
> conhIT 2012 ? ICW ist Bronzesponsor
>
> Besuchen Sie uns auf der conhIT im Besprechungsraum Passau 14
> Vereinbaren Sie schon jetzt Ihren Gesprächstermin unter:
> www.icw-global.com/conhit
>
> Unser conhIT-Programm finden Sie unter: www.icw-global.com/conhit-programm
> **************************************************************************************************
>
>
>
>
>
>
> InterComponentWare AG:
> Vorstand: Peter Kirschbauer (Vors.), Jörg Stadler
> Aufsichtsratsvors.: Prof. Dr. Christof Hettich
> Firmensitz: 69190 Walldorf, Altrottstraße 31
> AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516
--
Claus Ibsen
-----------------
CamelOne 2012 Conference, May 15-16, 2012: http://camelone.com
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/
Re: Gracefull shutdown timeouts due to NotifyBuilder blocks on context
Posted by m....@icw.de.
I'm attaching the stacktrace as textfile since it got accidentally
wrapped. Sorry for the noise.
cheers,
Matthias
��
InterComponentWare AG:
Vorstand: Peter Kirschbauer (Vors.), J�rg Stadler
Aufsichtsratsvors.: Prof. Dr. Christof Hettich
Firmensitz: 69190 Walldorf, Altrottstra�e 31
AG Mannheim HRB 351761 / USt.-IdNr.: DE 198388516