ONOS-6625: Remove meters from device not present in onos

Change-Id: I857daf1176a2242b88c5acd9d6aae82331327dd4
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java
index 1fea477..255e2928 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/meter/impl/MeterManager.java
@@ -248,23 +248,34 @@
 
         @Override
         public void pushMeterMetrics(DeviceId deviceId, Collection<Meter> meterEntries) {
-            //FIXME: FOLLOWING CODE CANNOT BE TESTED UNTIL SOMETHING THAT
-            //FIXME: IMPLEMENTS METERS EXISTS
             Collection<Meter> allMeters = store.getAllMeters(deviceId);
 
             Map<MeterId, Meter> meterEntriesMap = meterEntries.stream()
                     .collect(Collectors.toMap(Meter::id, Meter -> Meter));
 
+            // Look for meters defined in onos and missing in the device (restore)
             allMeters.stream().forEach(m -> {
                 if ((m.state().equals(MeterState.PENDING_ADD) ||
                         m.state().equals(MeterState.ADDED)) &&
                         !meterEntriesMap.containsKey(m.id())) {
                     // The meter is missing in the device. Reinstall!
+                    log.debug("Adding meter missing in device {} {}", deviceId, m);
                     provider().performMeterOperation(deviceId,
                             new MeterOperation(m, MeterOperation.Type.ADD));
                 }
             });
 
+            // Look for meters defined in the device and not in onos (remove)
+            meterEntriesMap.entrySet().stream()
+                    .filter(md -> !allMeters.stream().anyMatch(m -> m.id().equals(md.getKey())))
+                    .forEach(mio -> {
+                        // The meter is missin in onos. Uninstall!
+                        log.debug("Remove meter in device not in onos {} {}", deviceId, mio.getKey());
+                        Meter meter = mio.getValue();
+                        provider().performMeterOperation(deviceId,
+                                new MeterOperation(meter, MeterOperation.Type.REMOVE));
+            });
+
             meterEntries.stream()
                     .filter(m -> allMeters.stream()
                             .anyMatch(sm -> sm.deviceId().equals(deviceId) && sm.id().equals(m.id())))