Improve Mastership logging

Logs only meaningful mastership changes

Change-Id: Ibbe4f85526df01b3c1b6eab317a2c15716098d80
diff --git a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
index e78e6d2..be114c4 100644
--- a/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
+++ b/core/net/src/main/java/org/onosproject/net/device/impl/DeviceManager.java
@@ -216,6 +216,10 @@
     private ScheduledExecutorService backgroundRoleChecker;
     private static final int ROLE_TIMEOUT_SECONDS = 10;
 
+    // FIXME join this map with roleToAcknowledge and fix the back to back event issue here
+    private final Map<DeviceId, MastershipRole> lastAcknowledgedRole =
+            Maps.newConcurrentMap();
+
     @Activate
     public void activate() {
         portAnnotationOp = new PortAnnotationOperator(networkConfigService);
@@ -566,11 +570,11 @@
             } else if (isReachable) {
                 // If this node is the master, ensure the device is marked online.
                 if (myRole == MASTER && canMarkOnline(device)) {
-                    log.info("Can mark online {}", deviceId);
+                    log.debug("Can mark online {}", deviceId);
                     post(store.markOnline(deviceId));
                 }
 
-                log.info("{} is reachable - reasserting the role", deviceId);
+                log.debug("{} is reachable - reasserting the role", deviceId);
 
                 // Device is still reachable. It is useful for some protocols
                 // to reassert the role. Note: NONE triggers request to MastershipService
@@ -913,8 +917,13 @@
 
             if (Objects.equals(requested, response)) {
                 if (Objects.equals(requested, expected)) {
-                    // Stop the timer
-                    log.info("Role has been acknowledged for device {}", deviceId);
+                    if (log.isDebugEnabled()) {
+                        log.debug("Role has been acknowledged for device {}", deviceId);
+                    } else if (!requested.equals(lastAcknowledgedRole.get(deviceId))) {
+                        log.info("Role has been acknowledged for device {}", deviceId);
+                    }
+                    // Update the last known role and stop the timer
+                    lastAcknowledgedRole.put(deviceId, requested);
                     roleToAcknowledge.remove(deviceId);
                 } else {
                     log.warn("Role mismatch on {}. Set to {}, but store demands {}",
@@ -1174,6 +1183,7 @@
                 // When device is administratively removed, force disconnect.
                 DeviceId deviceId = event.subject().id();
                 deviceLocalStatus.remove(deviceId);
+                lastAcknowledgedRole.remove(deviceId);
 
                 DeviceProvider provider = getProvider(deviceId);
                 if (provider != null) {