Dynamic Clustering fixes

Addresses [ONOS-4501] and maybe [ONOS-4404]

Change-Id: I2bce2d60106e6887d692de484d22b109678ffd46
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartition.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartition.java
index 5565481..7ed275a 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartition.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/impl/StoragePartition.java
@@ -200,18 +200,24 @@
         return server != null && server.isOpen() ? Optional.of(server.info()) : Optional.empty();
     }
 
+    /**
+     * Process updates to partitions and handles joining or leaving a partition.
+     * @param newValue new Partition
+     */
     public void onUpdate(Partition newValue) {
-        if (partition.getMembers().contains(localNodeId) && newValue.getMembers().contains(localNodeId)) {
-            return;
-        }
-        if (!partition.getMembers().contains(localNodeId) && !newValue.getMembers().contains(localNodeId)) {
-            return;
-        }
+
+        boolean wasPresent = partition.getMembers().contains(localNodeId);
+        boolean isPresent = newValue.getMembers().contains(localNodeId);
         this.partition = newValue;
-        if (partition.getMembers().contains(localNodeId)) {
-            joinCluster();
-        } else if (!partition.getMembers().contains(localNodeId)) {
+        if ((wasPresent && isPresent) || (!wasPresent && !isPresent)) {
+            // no action needed
+            return;
+        }
+        //only need to do action if our membership changed
+        if (wasPresent) {
             leaveCluster();
+        } else if (isPresent) {
+            joinCluster();
         }
     }
 }