Added Meter object accounting
Change-Id: I2a3b88ffd1756b738e197943b3e02771f5729e45
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 4e75301..b48a25b 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
@@ -45,6 +45,8 @@
import org.slf4j.Logger;
import java.util.Collection;
+import java.util.Map;
+import java.util.stream.Collectors;
import static org.slf4j.LoggerFactory.getLogger;
@@ -170,7 +172,25 @@
@Override
public void pushMeterMetrics(DeviceId deviceId, Collection<Meter> meterEntries) {
- meterEntries.forEach(m -> store.updateMeterState(m));
+ //FIXME: FOLLOWING CODE CANNOT BE TESTED UNTIL SOMETHING THAT
+ //FIXME: IMPLEMENTS METERS EXISTS
+ Map<MeterId, Meter> storedMeterMap = store.getAllMeters().stream()
+ .collect(Collectors.toMap(Meter::id, m -> m));
+
+ meterEntries.stream()
+ .filter(m -> storedMeterMap.remove(m.id()) != null)
+ .forEach(m -> store.updateMeterState(m));
+
+ storedMeterMap.values().stream().forEach(m -> {
+ if (m.state() == MeterState.PENDING_ADD) {
+ provider().performMeterOperation(m.deviceId(),
+ new MeterOperation(m,
+ MeterOperation.Type.ADD,
+ null));
+ } else {
+ store.deleteMeterNow(m);
+ }
+ });
}
}