In this commit: CORD-799
   Bug fix for host-update to not remove and add the same IP addr
   NPE fix in ofdpa3pipeline
   Removing unused code in ofdpa2pipeline
   Ability to add or revoke port filters for port-updates
   Retry filters retry for a longer time
   Bug fix for suppress ports to not suppress filters
   Filters now sent only by master instance
   Removing the MPLS BOS=0 rules for now until inconsitent hardware behavior is fixed

Change-Id: I8b4ee4af6de263531e0696af86e65f1c502f5f85
diff --git a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/HostHandler.java b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/HostHandler.java
index cf49c52..62ab1ce 100644
--- a/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/HostHandler.java
+++ b/apps/segmentrouting/src/main/java/org/onosproject/segmentrouting/HostHandler.java
@@ -39,6 +39,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.collect.Sets;
 import java.util.Set;
 
 /**
@@ -83,7 +84,7 @@
         DeviceId deviceId = location.deviceId();
         PortNumber port = location.port();
         Set<IpAddress> ips = host.ipAddresses();
-        log.debug("Host {}/{} is added at {}:{}", mac, vlanId, deviceId, port);
+        log.info("Host {}/{} is added at {}:{}", mac, vlanId, deviceId, port);
 
         if (accepted(host)) {
             // Populate bridging table entry
@@ -122,7 +123,7 @@
         DeviceId deviceId = location.deviceId();
         PortNumber port = location.port();
         Set<IpAddress> ips = host.ipAddresses();
-        log.debug("Host {}/{} is removed from {}:{}", mac, vlanId, deviceId, port);
+        log.info("Host {}/{} is removed from {}:{}", mac, vlanId, deviceId, port);
 
         if (accepted(host)) {
             // Revoke bridging table entry
@@ -159,7 +160,7 @@
         DeviceId newDeviceId = newLocation.deviceId();
         PortNumber newPort = newLocation.port();
         Set<IpAddress> newIps = event.subject().ipAddresses();
-        log.debug("Host {}/{} is moved from {}:{} to {}:{}",
+        log.info("Host {}/{} is moved from {}:{} to {}:{}",
                 mac, vlanId, prevDeviceId, prevPort, newDeviceId, newPort);
 
         if (accepted(event.prevSubject())) {
@@ -220,12 +221,13 @@
         DeviceId newDeviceId = newLocation.deviceId();
         PortNumber newPort = newLocation.port();
         Set<IpAddress> newIps = event.subject().ipAddresses();
-        log.debug("Host {}/{} is updated", mac, vlanId);
+        log.info("Host {}/{} is updated", mac, vlanId);
 
         if (accepted(event.prevSubject())) {
             // Revoke previous IP table entry
-            prevIps.forEach(ip -> {
+            Sets.difference(prevIps, newIps).forEach(ip -> {
                 if (srManager.deviceConfiguration.inSameSubnet(prevLocation, ip)) {
+                    log.info("revoking previous IP rule:{}", ip);
                     srManager.routingRulePopulator.revokeRoute(
                             prevDeviceId, ip.toIpPrefix(), mac, prevPort);
                 }
@@ -234,8 +236,9 @@
 
         if (accepted(event.subject())) {
             // Populate new IP table entry
-            newIps.forEach(ip -> {
+            Sets.difference(newIps, prevIps).forEach(ip -> {
                 if (srManager.deviceConfiguration.inSameSubnet(newLocation, ip)) {
+                    log.info("populating new IP rule:{}", ip);
                     srManager.routingRulePopulator.populateRoute(
                             newDeviceId, ip.toIpPrefix(), mac, newPort);
                 }