[ https://issues.apache.org/jira/browse/GEODE-2109?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15773690#comment-15773690 ]
ASF subversion and git services commented on GEODE-2109: -------------------------------------------------------- Commit bb3d20f41d8b9f4e663d6ae7ddbd83ad8de01e77 in geode's branch refs/heads/feature/GEODE-2231 from [~deepak.dixit] [ https://git-wip-us.apache.org/repos/asf?p=geode.git;h=bb3d20f ] GEODE-2109: Replacing ExecutorService.submit calls with ExecutorService.execute call. This will allow exceptions from those threads to be logged. Refactored DiskStore task for delayed writes, we cannot replace expensive writes tasks submit call with execute as later we check if write call is completed or not. Replaced submit call by execute in case of DiskStore tasks like compactions, creating KRF's. Replaced submit call for GIITask and RemoveMember tasks. GIITask is used when adding member or starting managing activity when node becomes managing node. While adding member we can make the ExecutorService.execute call. Did not change the call for GIITask when invoked from managing activity as possible exception is handled. Added LoggingThreadGroup for SingleHopClientExecutor This closes #296 > 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 > Assignee: Deepak Dixit > Fix For: 1.1.0 > > > 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)