Added graceful shutdown for upstart service.
Reworked slightly the mastership & device managers and stores to make it work (sort-of) in the distributed env.
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 8c3fd50..4ac6052 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
@@ -1,9 +1,5 @@
package org.onlab.onos.cluster.impl;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.Set;
-
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
@@ -14,8 +10,6 @@
import org.onlab.onos.cluster.MastershipAdminService;
import org.onlab.onos.cluster.MastershipEvent;
import org.onlab.onos.cluster.MastershipListener;
-import org.onlab.onos.cluster.MastershipProvider;
-import org.onlab.onos.cluster.MastershipProviderService;
import org.onlab.onos.cluster.MastershipService;
import org.onlab.onos.cluster.MastershipStore;
import org.onlab.onos.cluster.NodeId;
@@ -23,16 +17,16 @@
import org.onlab.onos.event.EventDeliveryService;
import org.onlab.onos.net.DeviceId;
import org.onlab.onos.net.MastershipRole;
-import org.onlab.onos.net.provider.AbstractProviderRegistry;
-import org.onlab.onos.net.provider.AbstractProviderService;
import org.slf4j.Logger;
+import java.util.Set;
+
import static com.google.common.base.Preconditions.checkNotNull;
+import static org.slf4j.LoggerFactory.getLogger;
@Component(immediate = true)
@Service
public class MastershipManager
- extends AbstractProviderRegistry<MastershipProvider, MastershipProviderService>
implements MastershipService, MastershipAdminService {
private static final String NODE_ID_NULL = "Node ID cannot be null";
@@ -77,6 +71,24 @@
}
@Override
+ public MastershipRole getLocalRole(DeviceId deviceId) {
+ checkNotNull(deviceId, DEVICE_ID_NULL);
+ return store.getRole(clusterService.getLocalNode().id(), deviceId);
+ }
+
+ @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
+ }
+
+ @Override
+ public MastershipRole requestRoleFor(DeviceId deviceId) {
+ checkNotNull(deviceId, DEVICE_ID_NULL);
+ return store.requestRole(deviceId);
+ }
+
+ @Override
public NodeId getMasterFor(DeviceId deviceId) {
checkNotNull(deviceId, DEVICE_ID_NULL);
return store.getMaster(deviceId);
@@ -89,13 +101,6 @@
}
@Override
- public MastershipRole requestRoleFor(DeviceId deviceId) {
- checkNotNull(deviceId, DEVICE_ID_NULL);
- NodeId id = clusterService.getLocalNode().id();
- return store.getRole(id, deviceId);
- }
-
- @Override
public void addListener(MastershipListener listener) {
checkNotNull(listener);
listenerRegistry.addListener(listener);
@@ -107,28 +112,7 @@
listenerRegistry.removeListener(listener);
}
- @Override
- protected MastershipProviderService createProviderService(
- MastershipProvider provider) {
- return new InternalMastershipProviderService(provider);
- }
-
- private class InternalMastershipProviderService
- extends AbstractProviderService<MastershipProvider>
- implements MastershipProviderService {
-
- protected InternalMastershipProviderService(MastershipProvider provider) {
- super(provider);
- }
-
- @Override
- public void roleChanged(NodeId nodeId, DeviceId deviceId, MastershipRole role) {
- // TODO Auto-generated method stub
- MastershipEvent event =
- store.addOrUpdateDevice(nodeId, deviceId, role);
- post(event);
- }
- }
+ // FIXME: provide wiring to allow events to be triggered by changes within the store
// Posts the specified event to the local event dispatcher.
private void post(MastershipEvent event) {