You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by es...@apache.org on 2019/08/14 20:35:16 UTC

[geode] 01/01: GEODE-7087: Reset flag after unlock bucket primary lock.

This is an automated email from the ASF dual-hosted git repository.

eshu11 pushed a commit to branch feature/GEODE-7087
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 6b7920745c7bf15ccf7edcc949f214ede50ddf12
Author: eshu <es...@pivotal.io>
AuthorDate: Wed Aug 14 13:33:08 2019 -0700

    GEODE-7087: Reset flag after unlock bucket primary lock.
---
 .../java/org/apache/geode/internal/cache/TXState.java     | 12 +++++++++---
 .../java/org/apache/geode/internal/cache/TXStateTest.java | 15 +++++++++++++++
 2 files changed, 24 insertions(+), 3 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/TXState.java b/geode-core/src/main/java/org/apache/geode/internal/cache/TXState.java
index 9ec621b..b040afc 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/TXState.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/TXState.java
@@ -139,7 +139,7 @@ public class TXState implements TXStateInterface {
   protected final TXStateProxy proxy;
   protected boolean firedWriter = false;
   protected final boolean onBehalfOfRemoteStub;
-  protected boolean gotBucketLocks = false;
+  private boolean gotBucketLocks = false;
   protected TXCommitMessage commitMessage = null;
   ClientProxyMembershipID bridgeContext = null;
   /** keeps track of events, so as not to re-apply events */
@@ -906,7 +906,7 @@ public class TXState implements TXStateInterface {
         /*
          * Need to unlock the primary lock for rebalancing so that rebalancing can resume.
          */
-        if (gotBucketLocks) {
+        if (isBucketLocks()) {
           if (r instanceof BucketRegion && (((BucketRegion) r).getBucketAdvisor().isPrimary())) {
             try {
               ((BucketRegion) r).doUnlockForPrimary();
@@ -932,13 +932,19 @@ public class TXState implements TXStateInterface {
       synchronized (this.completionGuard) {
         this.completionGuard.notifyAll();
       }
-
+      if (isBucketLocks()) {
+        gotBucketLocks = false;
+      }
       if (exception != null && !this.proxy.getCache().isClosed()) {
         throw exception;
       }
     }
   }
 
+  boolean isBucketLocks() {
+    return gotBucketLocks;
+  }
+
   /*
    * (non-Javadoc)
    *
diff --git a/geode-core/src/test/java/org/apache/geode/internal/cache/TXStateTest.java b/geode-core/src/test/java/org/apache/geode/internal/cache/TXStateTest.java
index 362ee5f..0da6aad 100644
--- a/geode-core/src/test/java/org/apache/geode/internal/cache/TXStateTest.java
+++ b/geode-core/src/test/java/org/apache/geode/internal/cache/TXStateTest.java
@@ -20,6 +20,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.assertj.core.api.Assertions.catchThrowable;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
@@ -29,6 +30,8 @@ import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import java.util.List;
+
 import javax.transaction.Status;
 
 import org.junit.Before;
@@ -298,4 +301,16 @@ public class TXStateTest {
     verify(regionState1).cleanup(region1);
   }
 
+  @Test
+  public void gotBucketLocksFlagIsResetAfterCommit() {
+    TXState txState = spy(new TXState(txStateProxy, false, disabledClock()));
+    List entries = mock(List.class);
+    doReturn(entries).when(txState).generateEventOffsets();
+    doNothing().when(txState).attachFilterProfileInformation(entries);
+    doNothing().when(txState).applyChanges(entries);
+    txState.commit();
+
+    assertThat(txState.isBucketLocks()).isFalse();
+  }
+
 }