[ 
https://issues.apache.org/jira/browse/EDGENT-258?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dale LaBossiere closed EDGENT-258.
----------------------------------
    Resolution: Duplicate

Duplicate of EDGENT-435

> testMultiTopologyPollWithError failure; CME in 
> TrackingScheduledExecutor.cancelAllAsyncTasks()
> ----------------------------------------------------------------------------------------------
>
>                 Key: EDGENT-258
>                 URL: https://issues.apache.org/jira/browse/EDGENT-258
>             Project: Edgent
>          Issue Type: Bug
>          Components: Runtime, Test
>            Reporter: Dale LaBossiere
>
> This happened in an (ant) travis-ci run.
> The DirectTStreamTest.testMultiTopologyPollWithError() test failed with a 
> CancellationException (end of the traces below).  Perhaps that was fallout 
> from a CME reported within TrackingScheduledExecutor.cancelAllAsyncTasks() on 
> the iteration of asyncTasks @ TrackingScheduledExecutor:121 which is the line:
>             for (RunnableScheduledFuture<?> task : asyncTasks) {
> (there's also an InterruptedException below)
> But I don't see how that CME can happen.  asyncTasks is a (private) 
> SynchronizedSet and all iteration on it in TrackingScheduledExecutor does the 
> required "synchronized(asyncTasks) { iterate... }" pattern.  The 
> SynchronizedSet methods all synchronize on the SynchronizedSet object 
> (asyncTasks) too so 
> an operation like add() or remove() can't occur during that synchronized 
> iteration. All access to the underlying set is via the SynchronizedSet.  So 
> how can that CME happen???
> The only possible non-CME-inducing flaw I see is in removeTrack() where 
> there's the non-synchronized sequential access:
>     asyncTasks.remove();
>     if (asyncTasks.isEmpty() ...   // hence may not reflect state following 
> preceeding remove()
> Note, there should normally only be 4 instances reporting "Expected Test 
> Exception" but there a 8 (maybe due to removeTrack()?).  Trust me, they're 
> all from this test method execution.  I've triple checked :-)
> I'm also confused a bit by the thread pool/thread ids reported on those 8 
> instances.  Would have expected them to all be associated with the test's 
> allocated fixed thread pool and would have expected that to have a single 
> pool with 4 thread.  But that doesn't seem to be the case?
> Here's the various msgs from the test's execution.  Maybe someone else can 
> figure it out.  From 
> https://travis-ci.org/apache/incubator-edgent/builds/164076026
>     [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor afterExecute
>     [junit] SEVERE: Thread: 
> pool-5-thread-7-0a765e86-37c1-4299-9655-118420e3f1be: task terminated with 
> exception : 
>     [junit] java.lang.RuntimeException: java.lang.RuntimeException: Expected 
> Test Exception
>     [junit]   at 
> org.apache.edgent.oplet.core.PeriodicSource.run(PeriodicSource.java:83)
>     [junit]   at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>     [junit]   at 
> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
>     [junit]   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
>     [junit]   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor$TrackedFuture.run(TrackingScheduledExecutor.java:205)
>     [junit]   at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>     [junit]   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.ThreadFactoryTracker$2.run(ThreadFactoryTracker.java:87)
>     [junit]   at java.lang.Thread.run(Thread.java:745)
>     [junit] Caused by: java.lang.RuntimeException: Expected Test Exception
>     [junit]   at 
> org.apache.edgent.test.topology.TStreamTest.lambda$null$5f279479$1(TStreamTest.java:774)
>     [junit]   at 
> org.apache.edgent.test.topology.TStreamTest$$Lambda$8/2070622949.accept(Unknown
>  Source)
>     [junit]   at 
> org.apache.edgent.function.Functions$ThreadSafeConsumer.accept(Functions.java:204)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.SettableForwarder.accept(SettableForwarder.java:54)
>     [junit]   at org.apache.edgent.oplet.core.FanOut.accept(FanOut.java:50)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.SettableForwarder.accept(SettableForwarder.java:54)
>     [junit]   at org.apache.edgent.oplet.core.Source.submit(Source.java:47)
>     [junit]   at 
> org.apache.edgent.oplet.functional.SupplierPeriodicSource.fetchTuples(SupplierPeriodicSource.java:52)
>     [junit]   at 
> org.apache.edgent.oplet.core.PeriodicSource.run(PeriodicSource.java:81)
>     [junit]   ... 9 more
>    [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.ThreadFactoryTracker 
> trackedThreadUncaughtException
>     [junit] SEVERE: Uncaught exception in thread 
> pool-5-thread-7-0a765e86-37c1-4299-9655-118420e3f1be
>     [junit] java.util.ConcurrentModificationException
>     [junit]   at java.util.HashMap$HashIterator.nextNode(HashMap.java:1429)
>     [junit]   at java.util.HashMap$KeyIterator.next(HashMap.java:1453)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor.cancelAllAsyncTasks(TrackingScheduledExecutor.java:121)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor.cleanup(TrackingScheduledExecutor.java:115)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor.afterExecute(TrackingScheduledExecutor.java:88)
>     [junit]   at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1150)
>     [junit]   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.ThreadFactoryTracker$2.run(ThreadFactoryTracker.java:87)
>     [junit]   at java.lang.Thread.run(Thread.java:745)
>     [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor afterExecute
>     [junit] SEVERE: Thread: 
> pool-4-thread-15-79a62c35-c201-4800-b5fe-0981a922a901: task terminated with 
> exception : 
>     [junit] java.lang.RuntimeException: java.lang.RuntimeException: Expected 
> Test Exception
> ...  like the first above
>     [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor afterExecute
>     [junit] SEVERE: Thread: 
> pool-5-thread-11-0a765e86-37c1-4299-9655-118420e3f1be: task terminated with 
> exception : 
>     [junit] java.lang.RuntimeException: java.lang.RuntimeException: Expected 
> Test Exception
> ...
>     [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.Executable invokeAction
>     [junit] SEVERE: Exception caught while waiting for future to complete
>     [junit] java.lang.InterruptedException
>     [junit]   at 
> java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1220)
>     [junit]   at 
> java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:335)
>     [junit]   at 
> java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:462)
>     [junit]   at 
> java.util.concurrent.ExecutorCompletionService.poll(ExecutorCompletionService.java:202)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.Executable.invokeAction(Executable.java:222)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.Executable.start(Executable.java:180)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.EtiaoJob.stateChange(EtiaoJob.java:107)
>     [junit]   at 
> org.apache.edgent.providers.direct.DirectTopology.execute(DirectTopology.java:110)
>     [junit]   at 
> org.apache.edgent.providers.direct.DirectTopology.access$000(DirectTopology.java:46)
>     [junit]   at 
> org.apache.edgent.providers.direct.DirectTopology$1.call(DirectTopology.java:89)
>     [junit]   at 
> org.apache.edgent.providers.direct.DirectTopology$1.call(DirectTopology.java:85)
>     [junit]   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>     [junit]   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
>     [junit]   at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor$TrackedFuture.run(TrackingScheduledExecutor.java:205)
>     [junit]   at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>     [junit]   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.ThreadFactoryTracker$2.run(ThreadFactoryTracker.java:87)
>     [junit]   at java.lang.Thread.run(Thread.java:745)
>    [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor afterExecute
>     [junit] SEVERE: Thread: 
> pool-5-thread-9-0a765e86-37c1-4299-9655-118420e3f1be: task terminated with 
> exception : 
>     [junit] java.lang.RuntimeException: java.lang.RuntimeException: Expected 
> Test Exception
> ...
>    [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor afterExecute
>     [junit] SEVERE: Thread: 
> pool-4-thread-7-79a62c35-c201-4800-b5fe-0981a922a901: task terminated with 
> exception : 
>     [junit] java.lang.RuntimeException: java.lang.RuntimeException: Expected 
> Test Exception
> ... 
>    [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor afterExecute
>     [junit] SEVERE: Thread: 
> pool-5-thread-8-0a765e86-37c1-4299-9655-118420e3f1be: task terminated with 
> exception : 
>     [junit] java.lang.RuntimeException: java.lang.RuntimeException: Expected 
> Test Exception
> ...
>     [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor afterExecute
>     [junit] SEVERE: Thread: 
> pool-4-thread-8-79a62c35-c201-4800-b5fe-0981a922a901: task terminated with 
> exception : 
>     [junit] java.lang.RuntimeException: java.lang.RuntimeException: Expected 
> Test Exception
> ...
>    [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor afterExecute
>     [junit] SEVERE: Thread: 
> pool-4-thread-1-79a62c35-c201-4800-b5fe-0981a922a901: task terminated with 
> exception : 
>     [junit] java.lang.RuntimeException: java.lang.RuntimeException: Expected 
> Test Exception
> ...
>    [junit] Sep 30, 2016 4:37:46 PM 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor afterExecute
>     [junit] SEVERE: Thread: 
> pool-2-thread-1-b0a11f1a-309f-48d3-a0cc-72ccd245fefd: task terminated with 
> exception : 
>     [junit] java.lang.RuntimeException: java.lang.RuntimeException: Expected 
> Test Exception
> ... 
> ==================================
> Reported test failure:
>     [junit] Testcase: 
> testMultiTopologyPollWithError(org.apache.edgent.test.providers.direct.topology.DirectTStreamTest):
>      Caused an ERROR
>     [junit] java.util.concurrent.CancellationException
>     [junit] java.util.concurrent.ExecutionException: 
> java.util.concurrent.CancellationException
>     [junit]   at java.util.concurrent.FutureTask.report(FutureTask.java:122)
>     [junit]   at java.util.concurrent.FutureTask.get(FutureTask.java:192)
>     [junit]   at 
> org.apache.edgent.test.topology.TStreamTest.waitForCompletion(TStreamTest.java:867)
>     [junit]   at 
> org.apache.edgent.test.topology.TStreamTest.testMultiTopologyPollWithError(TStreamTest.java:781)
>     [junit] Caused by: java.util.concurrent.CancellationException
>     [junit]   at java.util.concurrent.FutureTask.report(FutureTask.java:121)
>     [junit]   at java.util.concurrent.FutureTask.get(FutureTask.java:206)
>     [junit]   at 
> org.apache.edgent.runtime.etiao.TrackingScheduledExecutor$TrackedFuture.get(TrackingScheduledExecutor.java:255)
>     [junit]   at 
> org.apache.edgent.topology.spi.tester.AbstractTester.complete(AbstractTester.java:46)
>     [junit]   at 
> org.apache.edgent.test.topology.TopologyAbstractTest.complete(TopologyAbstractTest.java:72)
>     [junit]   at 
> org.apache.edgent.test.topology.TopologyAbstractTest.complete(TopologyAbstractTest.java:76)
>     [junit]   at 
> org.apache.edgent.test.topology.TStreamTest.lambda$testMultiTopologyPollWithError$2(TStreamTest.java:777)
>     [junit]   at 
> org.apache.edgent.test.topology.TStreamTest$$Lambda$1/1233595751.call(Unknown 
> Source)
>     [junit]   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>     [junit]   at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>     [junit]   at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>     [junit]   at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>     [junit]   at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>     [junit]   at java.lang.Thread.run(Thread.java:745)
>     [junit] 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to