Improve Mastership logging

Logs only meaningful mastership changes

Change-Id: Ibbe4f85526df01b3c1b6eab317a2c15716098d80
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 f684d31..5b32187 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
@@ -19,6 +19,7 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.google.common.util.concurrent.Futures;
+import org.apache.commons.lang3.tuple.Pair;
 import org.onlab.packet.ChassisId;
 import org.onlab.util.ItemNotFoundException;
 import org.onlab.util.SharedScheduledExecutors;
@@ -192,6 +193,9 @@
     private StatsPoller statsPoller;
     private DeviceProviderService providerService;
 
+    private final Map<DeviceId, Pair<MastershipRole, Integer>> lastRoleRequest =
+            Maps.newConcurrentMap();
+
     public GeneralDeviceProvider() {
         super(new ProviderId(URI_SCHEME, DEVICE_PROVIDER_PACKAGE));
     }
@@ -329,7 +333,13 @@
                 break;
             case NONE:
                 // No preference for NONE, apply as is.
-                log.info("Notifying role {} to {}", newRole, deviceId);
+                Pair<MastershipRole, Integer> pairRolePref = Pair.of(newRole, -1);
+                if (log.isDebugEnabled()) {
+                    log.debug("Notifying role {} to {}", newRole, deviceId);
+                } else if (!pairRolePref.equals(lastRoleRequest.get(deviceId))) {
+                    log.info("Notifying role {} to {}", newRole, deviceId);
+                }
+                lastRoleRequest.put(deviceId, pairRolePref);
                 handshaker.roleChanged(newRole);
                 return;
             default:
@@ -337,8 +347,15 @@
                 return;
         }
 
-        log.info("Notifying role {} (preference {}) for term {} to {}",
-                 newRole, preference, mastershipInfo.term(), deviceId);
+        Pair<MastershipRole, Integer> pairRolePref = Pair.of(newRole, preference);
+        if (log.isDebugEnabled()) {
+            log.debug("Notifying role {} (preference {}) for term {} to {}",
+                    newRole, preference, mastershipInfo.term(), deviceId);
+        } else if (!pairRolePref.equals(lastRoleRequest.get(deviceId))) {
+            log.info("Notifying role {} (preference {}) for term {} to {}",
+                    newRole, preference, mastershipInfo.term(), deviceId);
+        }
+        lastRoleRequest.put(deviceId, pairRolePref);
 
         try {
             handshaker.roleChanged(preference, mastershipInfo.term());