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

Change-Id: I857daf1176a2242b88c5acd9d6aae82331327dd4
This commit is contained in:
Jordi Ortiz 2017-06-22 14:25:04 +02:00 committed by Yuta HIGUCHI
parent af75c13b9b
commit 205af45f1c

View File

@ -248,23 +248,34 @@ public class MeterManager
@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())))