You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@geode.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2016/12/07 23:48:58 UTC

[jira] [Commented] (GEODE-2109) calling submit on ExecutionService can cause exceptions to be lost

    [ https://issues.apache.org/jira/browse/GEODE-2109?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15730340#comment-15730340 ] 

ASF GitHub Bot commented on GEODE-2109:
---------------------------------------

Github user upthewaterspout commented on the issue:

    https://github.com/apache/geode/pull/296
  
    I looking at pulling this, and I see what one of the unit tests failed for me. It's failing intermittently in the IDE:
        SingleHopClientExecutorSubmitTaskWithExceptionTest.submittedTaskShouldLogFailure
    
        java.lang.RuntimeException: I am expecting this to be logged
    	at  org.apache.geode.cache.client.internal.SingleHopClientExecutorSubmitTaskWithExceptionTest$1.run(SingleHopClientExecutorSubmitTaskWithExceptionTest.java:52)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at java.lang.Thread.run(Thread.java:745)


> calling submit on ExecutionService can cause exceptions to be lost
> ------------------------------------------------------------------
>
>                 Key: GEODE-2109
>                 URL: https://issues.apache.org/jira/browse/GEODE-2109
>             Project: Geode
>          Issue Type: Bug
>          Components: regions
>            Reporter: Darrel Schneider
>
> Geode has a number of places that call submit on ExecutionService. The submit method returns a Future object. If the caller makes sure it calls "get" on the Future then all is well. But in many places geode is not calling get. In that case if the Runnable that was submitted throws an exception it gets stored in the get and never logged. This can make it very hard to diagnose problems.
> If the caller does not want to call get on the returned Future then it should instead call the "execute" method. In that case the exception will be unhandled and the unhandled exception handler code we have on the LoggingThreadGroup class will cause the exception to be logged.
> Here are the places that should be changed to use execute instead of submit:
> org.apache.geode.internal.util.concurrent.CustomEntryConcurrentHashMap.clear()
> org.apache.geode.internal.cache.DiskStoreImpl.executeDiskStoreTask(Runnable)
> org.apache.geode.internal.cache.lru.HeapEvictor.onEvent(MemoryEvent)
> org.apache.geode.distributed.internal.InternalLocator.restartWithDS(InternalDistributedSystem, GemFireCacheImpl)
> org.apache.geode.distributed.internal.FunctionExecutionPooledExecutor.FunctionExecutionPooledExecutor(BlockingQueue<Runnable>, int, PoolStatHelper, ThreadFactory, int, boolean)
> org.apache.geode.internal.cache.PRHARedundancyProvider.scheduleCreateMissingBuckets()
> org.apache.geode.distributed.internal.InternalLocator.startSharedConfigurationService(GemFireCacheImpl)
> org.apache.geode.cache.client.internal.SingleHopClientExecutor.submitTask(Runnable)
> org.apache.geode.management.internal.FederatingManager.submitTask(Callable<DistributedMember>)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)