Relinquish mastership, tests, and few modifications to trivial MastershipStore
Change-Id: Iae29de010f13cb3ee02bcb316510cc254d5756fc
diff --git a/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java b/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java
index 2b9b048..8dd3379 100644
--- a/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java
+++ b/core/net/src/main/java/org/onlab/onos/cluster/impl/MastershipManager.java
@@ -72,9 +72,20 @@
checkNotNull(nodeId, NODE_ID_NULL);
checkNotNull(deviceId, DEVICE_ID_NULL);
checkNotNull(role, ROLE_NULL);
- //TODO figure out appropriate action for non-MASTER roles, if we even set those
- if (role.equals(MastershipRole.MASTER)) {
- MastershipEvent event = store.setMaster(nodeId, deviceId);
+
+ MastershipRole current = store.getRole(nodeId, deviceId);
+ if (role.equals(current)) {
+ return;
+ } else {
+ MastershipEvent event = null;
+ if (role.equals(MastershipRole.MASTER)) {
+ //current was STANDBY, wanted MASTER
+ event = store.setMaster(nodeId, deviceId);
+ } else {
+ //current was MASTER, wanted STANDBY
+ event = store.unsetMaster(nodeId, deviceId);
+ }
+
if (event != null) {
post(event);
}
@@ -90,7 +101,18 @@
@Override
public void relinquishMastership(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_ID_NULL);
- // FIXME: add method to store to give up mastership and trigger new master selection process
+
+ MastershipRole role = store.getRole(
+ clusterService.getLocalNode().id(), deviceId);
+ if (!role.equals(MastershipRole.MASTER)) {
+ return;
+ }
+
+ MastershipEvent event = store.unsetMaster(
+ clusterService.getLocalNode().id(), deviceId);
+ if (event != null) {
+ post(event);
+ }
}
@Override
@@ -159,10 +181,6 @@
break;
case INSTANCE_REMOVED:
case INSTANCE_DEACTIVATED:
- for (DeviceId d : getDevicesOf(event.subject().id())) {
- //this method should be an admin iface?
- relinquishMastership(d);
- }
break;
default:
log.warn("unknown cluster event {}", event);