You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jb...@apache.org on 2019/04/23 13:26:12 UTC

[geode] branch develop updated: GEODE-6694: Use volatile access to read current state of BucketAdvisor

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

jbarrett pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new d746ec4  GEODE-6694: Use volatile access to read current state of BucketAdvisor
d746ec4 is described below

commit d746ec40ff4e2bf244d7b2474859f966b04d4e50
Author: Jacob Barrett <jb...@pivotal.io>
AuthorDate: Mon Apr 22 18:00:31 2019 -0700

    GEODE-6694: Use volatile access to read current state of BucketAdvisor
    
    Since that value can change immediately after we exit these methods,
    unless we already have the monitor, we can safely read the current value
    with the same staleness guarantee when exiting the method. Lock still
    acquired for composite checks and updating the value.
---
 .../apache/geode/internal/cache/BucketAdvisor.java | 30 ++++++++--------------
 1 file changed, 11 insertions(+), 19 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java
index 9112184..4be4296 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/BucketAdvisor.java
@@ -115,7 +115,7 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
    * The current state of this BucketAdvisor which tracks which member is primary and whether or not
    * this member is hosting a real Bucket.
    */
-  private byte primaryState = NO_PRIMARY_NOT_HOSTING;
+  private volatile byte primaryState = NO_PRIMARY_NOT_HOSTING;
 
   /**
    * This delegate handles all volunteering for primary status. Lazily created. Protected by
@@ -917,9 +917,7 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
    * @return true if this advisor has been closed
    */
   protected boolean isClosed() {
-    synchronized (this) {
-      return primaryState == CLOSED;
-    }
+    return primaryState == CLOSED;
   }
 
   /**
@@ -928,9 +926,7 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
    * @return true if this member is currently marked as primary
    */
   public boolean isPrimary() {
-    synchronized (this) {
-      return primaryState == IS_PRIMARY_HOSTING;
-    }
+    return primaryState == IS_PRIMARY_HOSTING;
   }
 
   /**
@@ -939,9 +935,7 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
    * @return true if this member is currently volunteering for primary
    */
   private boolean isVolunteering() {
-    synchronized (this) {
-      return primaryState == VOLUNTEERING_HOSTING;
-    }
+    return primaryState == VOLUNTEERING_HOSTING;
   }
 
   /**
@@ -962,11 +956,10 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
    * @return true if this member is currently hosting real bucket
    */
   public boolean isHosting() {
-    synchronized (this) {
-      return primaryState == NO_PRIMARY_HOSTING || primaryState == OTHER_PRIMARY_HOSTING
-          || primaryState == VOLUNTEERING_HOSTING || primaryState == BECOMING_HOSTING
-          || primaryState == IS_PRIMARY_HOSTING;
-    }
+    final byte primaryState = this.primaryState;
+    return primaryState == NO_PRIMARY_HOSTING || primaryState == OTHER_PRIMARY_HOSTING
+        || primaryState == VOLUNTEERING_HOSTING || primaryState == BECOMING_HOSTING
+        || primaryState == IS_PRIMARY_HOSTING;
   }
 
   /**
@@ -1601,10 +1594,9 @@ public class BucketAdvisor extends CacheDistributionAdvisor {
    * Returns true if the a primary is known.
    */
   private boolean hasPrimary() {
-    synchronized (this) {
-      return primaryState == OTHER_PRIMARY_NOT_HOSTING
-          || primaryState == OTHER_PRIMARY_HOSTING || primaryState == IS_PRIMARY_HOSTING;
-    }
+    final byte primaryState = this.primaryState;
+    return primaryState == OTHER_PRIMARY_NOT_HOSTING || primaryState == OTHER_PRIMARY_HOSTING
+        || primaryState == IS_PRIMARY_HOSTING;
   }
 
   @Override