[VOL-3086][VOLT-3087] Removing flows from all ONOS instances, withdrawing meters

Every instance needs to explicilty purge the local DeviceFlowTable cache because the
FlowRuleManager does not comunicate with the cluster the request to remove all flows
when a device is disconnected.

With this patch also Meters get into PENDING_REMOVE state and get removed upon
VOLTHA/OLT re-connection. A better implementation is to have a new API in ONOS
to forcefully remove the meters.

Change-Id: Ic7afa06e5d7e71017e9b8b795d341058ecbfd054
diff --git a/app/src/main/java/org/opencord/olt/impl/OltMeterService.java b/app/src/main/java/org/opencord/olt/impl/OltMeterService.java
index 7a3a3a3..3e3962c 100644
--- a/app/src/main/java/org/opencord/olt/impl/OltMeterService.java
+++ b/app/src/main/java/org/opencord/olt/impl/OltMeterService.java
@@ -15,6 +15,7 @@
  */
 package org.opencord.olt.impl;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
@@ -243,6 +244,13 @@
                 .collect(Collectors.toList());
 
         meters.forEach(e -> bpInfoToMeter.remove(e.getKey(), e.getValue()));
+        List<Meter> metersToRemove = ImmutableList.copyOf(meterService.getMeters(deviceId));
+        metersToRemove.forEach(meter -> {
+            MeterRequest mq = DefaultMeterRequest.builder().fromApp(appId)
+                    .forDevice(deviceId).withBands(meter.bands())
+                    .withUnit(meter.unit()).remove();
+            meterService.withdraw(mq, meter.id());
+        });
     }
 
     private List<Band> createMeterBands(BandwidthProfileInformation bpInfo) {