[ONOS-8087] Per device purgeOnDisconnection Flag
Change-Id: I7cb1db12a4d910d70123f116107a898bf9e6d278
diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java
index cdc3244..03f4889 100644
--- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java
+++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java
@@ -20,6 +20,8 @@
import org.onosproject.cfg.ComponentConfigService;
import org.onosproject.mastership.MastershipService;
import org.onosproject.net.DeviceId;
+import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.config.basics.BasicDeviceConfig;
import org.onosproject.net.device.DeviceEvent;
import org.onosproject.net.device.DeviceListener;
import org.onosproject.net.device.DeviceService;
@@ -114,6 +116,9 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY)
protected MastershipService mastershipService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY)
+ protected NetworkConfigRegistry netCfgService;
+
/** Number of worker threads. */
private int numThreads = MM_NUM_THREADS_DEFAULT;
@@ -189,11 +194,11 @@
flag = Tools.isPropertyEnabled(properties, MM_PURGE_ON_DISCONNECTION);
if (flag == null) {
log.info("PurgeOnDisconnection is not configured," +
- "using current value of {}", purgeOnDisconnection);
+ "using current value of {}", purgeOnDisconnection);
} else {
purgeOnDisconnection = flag;
log.info("Configured. PurgeOnDisconnection is {}",
- purgeOnDisconnection ? "enabled" : "disabled");
+ purgeOnDisconnection ? "enabled" : "disabled");
}
String s = get(properties, MM_FALLBACK_METER_POLL_FREQUENCY);
@@ -442,7 +447,14 @@
case DEVICE_AVAILABILITY_CHANGED:
DeviceId deviceId = event.subject().id();
if (!deviceService.isAvailable(deviceId)) {
- if (purgeOnDisconnection) {
+ BasicDeviceConfig cfg = netCfgService.getConfig(deviceId, BasicDeviceConfig.class);
+ //if purgeOnDisconnection is set for the device or it's a global configuration
+ // lets remove the meters.
+ boolean purge = cfg != null && cfg.isPurgeOnDisconnectionConfigured() ?
+ cfg.purgeOnDisconnection() : purgeOnDisconnection;
+ if (purge) {
+ log.info("PurgeOnDisconnection is requested for device {}, " +
+ "removing meters", deviceId);
store.purgeMeter(deviceId);
}
}