removeDevice on non-master node to silently ignore the request
instead of throwing IllegalState exception
Change-Id: Ida778ec112e80507fb05921e49297350d74dc519
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/device/impl/GossipDeviceStore.java b/core/store/dist/src/main/java/org/onlab/onos/store/device/impl/GossipDeviceStore.java
index fdc0827..ac9fc3e 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/device/impl/GossipDeviceStore.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/device/impl/GossipDeviceStore.java
@@ -16,6 +16,7 @@
import org.onlab.onos.cluster.ClusterService;
import org.onlab.onos.cluster.ControllerNode;
import org.onlab.onos.cluster.NodeId;
+import org.onlab.onos.mastership.MastershipService;
import org.onlab.onos.net.AnnotationsUtil;
import org.onlab.onos.net.DefaultAnnotations;
import org.onlab.onos.net.DefaultDevice;
@@ -114,6 +115,9 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected ClusterService clusterService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected MastershipService mastershipService;
+
protected static final KryoSerializer SERIALIZER = new KryoSerializer() {
@Override
protected void setupKryoPool() {
@@ -664,6 +668,14 @@
@Override
public synchronized DeviceEvent removeDevice(DeviceId deviceId) {
+ final NodeId master = mastershipService.getMasterFor(deviceId);
+ if (!clusterService.getLocalNode().id().equals(master)) {
+ log.info("remove Device {} requested on non master node", deviceId);
+ // FIXME silently ignoring. Should be forwarding or broadcasting to
+ // master.
+ return null;
+ }
+
Timestamp timestamp = deviceClockService.getTimestamp(deviceId);
DeviceEvent event = removeDeviceInternal(deviceId, timestamp);
if (event != null) {