[SDFAB-935] Optimize and improve the p. mastership

This patch is the part 1 and contains the following:
- Make the GDP greedy by reasserting immediately the role

Change-Id: I7259d4ace4a3e58ae2d97b6e53a393c41d5c0df9
(cherry picked from commit d510b7db8aeafbb52b00982dacb1f1079b0cc4b2)
diff --git a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java
index 6ce3269..4c3018a 100644
--- a/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java
+++ b/providers/general/device/src/main/java/org/onosproject/provider/general/device/impl/GeneralDeviceProvider.java
@@ -797,14 +797,24 @@
         }
 
         final MastershipRole deviceRole = handshaker.getRole();
+        // FIXME: we should be checking the mastership term as well.
         if (expectedRole != deviceRole) {
-            // FIXME: we should be checking the mastership term as well.
-            log.debug("Detected role mismatch for {}, core expects {}, " +
-                             "but device reports {}, waiting for mastership " +
-                             "service  to fix this...",
-                     deviceId, expectedRole, deviceRole);
-            // Gentle nudge to fix things...
-            providerService.receivedRoleReply(deviceId, deviceRole);
+            // Let's be greedy, if the role is NONE likely is due to the lazy channel
+            if (deviceRole == MastershipRole.NONE) {
+                log.warn("Detected role mismatch for {}, core expects {}, " +
+                                "but device reports {}, reassert the role... ",
+                        deviceId, expectedRole, deviceRole);
+                /* If we are experience a severe issue, eventually
+                   the DeviceManager will move the mastership */
+                roleChanged(deviceId, expectedRole);
+            } else {
+                log.debug("Detected role mismatch for {}, core expects {}, " +
+                                "but device reports {}, waiting for mastership " +
+                                "service  to fix this...",
+                        deviceId, expectedRole, deviceRole);
+                // Gentle nudge to fix things...
+                providerService.receivedRoleReply(deviceId, deviceRole);
+            }
             return;
         }