Fix balance-masters functionality in the new LeadershipService based device mastership store

Change-Id: I9f64d514cee7d5a5383fd4c2fa30a8616c97785c
diff --git a/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java b/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java
index 85ebf9e..e34790d 100644
--- a/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java
+++ b/core/net/src/main/java/org/onosproject/cluster/impl/MastershipManager.java
@@ -24,8 +24,6 @@
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.Service;
 import org.onlab.metrics.MetricsService;
-import org.onosproject.cluster.ClusterEvent;
-import org.onosproject.cluster.ClusterEventListener;
 import org.onosproject.cluster.ClusterService;
 import org.onosproject.cluster.ControllerNode;
 import org.onosproject.cluster.NodeId;
@@ -52,8 +50,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
-
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Lists.newArrayList;
 import static org.onlab.metrics.MetricsUtil.startTimer;
@@ -91,7 +87,6 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected MetricsService metricsService;
 
-    private ClusterEventListener clusterListener = new InternalClusterEventListener();
     private Timer requestRoleTimer;
 
     @Activate
@@ -99,7 +94,6 @@
         requestRoleTimer = createTimer("Mastership", "requestRole", "responseTime");
 
         eventDispatcher.addSink(MastershipEvent.class, listenerRegistry);
-        clusterService.addListener(clusterListener);
         store.setDelegate(delegate);
         log.info("Started");
     }
@@ -107,7 +101,6 @@
     @Deactivate
     public void deactivate() {
         eventDispatcher.removeSink(MastershipEvent.class);
-        clusterService.removeListener(clusterListener);
         store.unsetDelegate(delegate);
         log.info("Stopped");
     }
@@ -282,52 +275,6 @@
         }
     }
 
-    //callback for reacting to cluster events
-    private class InternalClusterEventListener implements ClusterEventListener {
-
-        // A notion of a local maximum cluster size, used to tie-break.
-        // Think of a better way to do this.
-        private AtomicInteger clusterSize;
-
-        InternalClusterEventListener() {
-            clusterSize = new AtomicInteger(0);
-        }
-
-        @Override
-        public void event(ClusterEvent event) {
-            switch (event.type()) {
-                case INSTANCE_ADDED:
-                case INSTANCE_ACTIVATED:
-                    clusterSize.incrementAndGet();
-                    log.info("instance {} added/activated", event.subject());
-                    break;
-                case INSTANCE_REMOVED:
-                case INSTANCE_DEACTIVATED:
-                    ControllerNode node = event.subject();
-                    log.info("instance {} removed/deactivated", node);
-                    store.relinquishAllRole(node.id());
-
-                    clusterSize.decrementAndGet();
-                    break;
-                default:
-                    log.warn("unknown cluster event {}", event);
-            }
-        }
-
-        // Can be removed if we go with naive split-brain handling: only majority
-        // assigns mastership
-        private boolean isInMajority() {
-            if (clusterService.getNodes().size() > (clusterSize.intValue() / 2)) {
-                return true;
-            }
-
-             //FIXME: break tie for equal-sized clusters,
-
-            return false;
-        }
-
-    }
-
     public class InternalDelegate implements MastershipStoreDelegate {
 
         @Override
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index 58d0512..d975d8a 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -536,7 +536,7 @@
         if (myNextRole == NONE) {
             mastershipService.requestRoleFor(did);
             MastershipTerm term = termService.getMastershipTerm(did);
-            if (myNodeId.equals(term.master())) {
+            if (term != null && myNodeId.equals(term.master())) {
                 myNextRole = MASTER;
             } else {
                 myNextRole = STANDBY;