Ignore device event if not master not to cause concurrent registrations

This patch resolves ONOS-4032

Change-Id: I12e2ed7d352928fe94559ab978f5db7e9f56f1b0
diff --git a/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java b/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java
index ac9f894..1792bce 100644
--- a/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java
+++ b/core/net/src/main/java/org/onosproject/net/newresource/impl/ResourceDeviceListener.java
@@ -21,6 +21,7 @@
 import org.onlab.packet.VlanId;
 import org.onlab.util.Bandwidth;
 import org.onlab.util.ItemNotFoundException;
+import org.onosproject.mastership.MastershipService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.Device;
 import org.onosproject.net.DeviceId;
@@ -67,6 +68,7 @@
     private final ResourceAdminService adminService;
     private final ResourceService resourceService;
     private final DeviceService deviceService;
+    private final MastershipService mastershipService;
     private final DriverService driverService;
     private final NetworkConfigService netcfgService;
     private final ExecutorService executor;
@@ -78,16 +80,19 @@
      * @param adminService instance invoked to register resources
      * @param resourceService {@link ResourceService} to be used
      * @param deviceService {@link DeviceService} to be used
+     * @param mastershipService {@link MastershipService} to be used
      * @param driverService {@link DriverService} to be used
      * @param netcfgService {@link NetworkConfigService} to be used.
      * @param executor executor used for processing resource registration
      */
     ResourceDeviceListener(ResourceAdminService adminService, ResourceService resourceService,
-                           DeviceService deviceService, DriverService driverService,
-                           NetworkConfigService netcfgService, ExecutorService executor) {
+                           DeviceService deviceService, MastershipService mastershipService,
+                           DriverService driverService, NetworkConfigService netcfgService,
+                           ExecutorService executor) {
         this.adminService = checkNotNull(adminService);
         this.resourceService = checkNotNull(resourceService);
         this.deviceService = checkNotNull(deviceService);
+        this.mastershipService = checkNotNull(mastershipService);
         this.driverService = checkNotNull(driverService);
         this.netcfgService = checkNotNull(netcfgService);
         this.executor = checkNotNull(executor);
@@ -96,6 +101,11 @@
     @Override
     public void event(DeviceEvent event) {
         Device device = event.subject();
+        // registration happens only when the caller is the master of the device
+        if (!mastershipService.isLocalMaster(device.id())) {
+            return;
+        }
+
         switch (event.type()) {
             case DEVICE_ADDED:
                 registerDeviceResource(device);