[ https://issues.apache.org/jira/browse/GEODE-8771?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17246784#comment-17246784 ]
ASF GitHub Bot commented on GEODE-8771: --------------------------------------- dschneider-pivotal commented on a change in pull request #5823: URL: https://github.com/apache/geode/pull/5823#discussion_r539607568 ########## File path: geode-core/src/main/java/org/apache/geode/internal/cache/AbstractRegionMap.java ########## @@ -1282,14 +1282,18 @@ public boolean invalidate(EntryEventImpl event, boolean invokeCallbacks, boolean DiskRegion dr = owner.getDiskRegion(); boolean ownerIsInitialized = owner.isInitialized(); + // lock before waitForIndexInit so that we should wait + // till a concurrent clear to finish + lockForCacheModification(owner, event); Review comment: Since you moved this up to be before "waitForIndexInit" is called you need to add a try/finally that started right after lockForCacheModification returns and the finally should be way down past the finally for the try that started right after "lockWhenRegionIsInitializing" returns. If you look at the finally for that try you will see it calls releaseCacheModificationLock. This needs to instead be called in your new finally block so that it corresponds to the lockForCacheModification call. It should have probably been done this way already (two finally blocks; one that calls releaseCacheModificationLock and another that calls unlockWhenRegionIsInitializing) but it is needed now because waitForIndexInit can throw an exception because it calls checkCancelInProgress. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org > concurrent puts and invalidates will cause PR clear to hang > ----------------------------------------------------------- > > Key: GEODE-8771 > URL: https://issues.apache.org/jira/browse/GEODE-8771 > Project: Geode > Issue Type: Sub-task > Components: core > Reporter: Jinmei Liao > Assignee: Jinmei Liao > Priority: Major > Labels: GeodeOperationAPI, pull-request-available > > On current feature/GEODE-7665 feature branch. The below test will hang: > {quote}public class PRClearIntegrationTest { > @Rule > public ServerStarterRule server = new ServerStarterRule().withAutoStart(); > @Rule > public ExecutorServiceRule executor = new ExecutorServiceRule(); > @Test > public void test() throws Exception { > InternalCache cache = server.getCache(); > Region<Object, Object> region = server.createPartitionRegion("regionA", > f->{}, f->f.setTotalNumBuckets(1)); > cache.getQueryService().createIndex("indexA", "r", "/regionA r"); > region.put(0, "value0"); > CompletableFuture<Void> put = executor.runAsync(() -> > { > Thread.currentThread().setName("put-Thread"); > IntStream.range(0, 1).forEach(i-> region.invalidate(i, i)); } > ); > CompletableFuture<Void> invalidate = executor.runAsync(() -> > { > Thread.currentThread().setName("invalidate-Thread"); > IntStream.range(0, 1).forEach(i-> region.invalidate(0)); } > ); > CompletableFuture<Void> clear = executor.runAsync(() -> > { > Thread.currentThread().setName("Clear-Thread"); > region.clear(); } > ); > put.get(); > clear.get(); > invalidate.get(); > } > } > {quote} -- This message was sent by Atlassian Jira (v8.3.4#803005)