[ 
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)

Reply via email to