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) {