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;