[VOL-3260] Purging all meter state on OLT delete
Change-Id: I6323779d584b341d33cc91231197504b80a91fc4
diff --git a/app/src/main/java/org/opencord/olt/impl/OltFlowService.java b/app/src/main/java/org/opencord/olt/impl/OltFlowService.java
index b4dca74..a53e019 100644
--- a/app/src/main/java/org/opencord/olt/impl/OltFlowService.java
+++ b/app/src/main/java/org/opencord/olt/impl/OltFlowService.java
@@ -49,7 +49,6 @@
import org.onosproject.net.meter.MeterId;
import org.opencord.olt.internalapi.AccessDeviceFlowService;
import org.opencord.olt.internalapi.AccessDeviceMeterService;
-import org.opencord.olt.internalapi.DeviceBandwidthProfile;
import org.opencord.sadis.BandwidthProfileInformation;
import org.opencord.sadis.BaseInformationService;
import org.opencord.sadis.SadisService;
@@ -423,7 +422,6 @@
// check if meter exists and create it only for an install
final MeterId meterId = oltMeterService.getMeterIdFromBpMapping(devId, bpInfo.id());
- DeviceBandwidthProfile dm = new DeviceBandwidthProfile(devId, bpInfo);
if (meterId == null) {
if (install) {
log.debug("Need to install meter for EAPOL with bwp {}", bpInfo.id());
@@ -434,11 +432,12 @@
null, bpInfo.id());
pendingEapolForMeters.add(fi);
- if (oltMeterService.isMeterPending(dm)) {
- log.debug("Meter {} is already pending for EAPOL", dm);
+ if (oltMeterService.isMeterPending(devId, bpInfo)) {
+ log.debug("Meter is already pending for EAPOL on {} with bp {}",
+ devId, bpInfo);
return;
}
- oltMeterService.addToPendingMeters(dm);
+ oltMeterService.addToPendingMeters(devId, bpInfo);
MeterId innerMeterId = oltMeterService.createMeter(devId, bpInfo,
meterFuture);
fi.setUpMeterId(innerMeterId);
@@ -474,7 +473,7 @@
SubscriberFlowInfo fi = eapIterator.next();
if (result == null) {
MeterId mId = oltMeterService
- .getMeterIdFromBpMapping(dm.getDevId(), fi.getUpBpInfo());
+ .getMeterIdFromBpMapping(devId, fi.getUpBpInfo());
if (mId != null) {
handleEapol(filterFuture, install, cp, builder, treatmentBuilder, fi, mId);
eapIterator.remove();
@@ -484,8 +483,7 @@
"Result {} and MeterId {}", result, meterId);
eapIterator.remove();
}
- oltMeterService.removeFromPendingMeters(new DeviceBandwidthProfile(
- dm.getDevId(), dm.getBwInfo()));
+ oltMeterService.removeFromPendingMeters(devId, bpInfo);
}
});
}
@@ -518,8 +516,8 @@
.add(new ObjectiveContext() {
@Override
public void onSuccess(Objective objective) {
- log.info("Eapol filter for {} on {} {} with meter {}.",
- fi.getDevId(), fi.getUniPort(),
+ log.info("Eapol filter {} for {} on {} {} with meter {}.",
+ objective.id(), fi.getDevId(), fi.getUniPort(),
(install) ? INSTALLED : REMOVED, mId);
if (filterFuture != null) {
filterFuture.complete(null);
@@ -529,8 +527,8 @@
@Override
public void onError(Objective objective, ObjectiveError error) {
- log.error("Eapol filter for {} on {} with meter {} " +
- "failed {} because {}",
+ log.error("Eapol filter {} for {} on {} with meter {} " +
+ "failed {} because {}", objective.id(),
fi.getDevId(), fi.getUniPort(), mId,
(install) ? INSTALLATION : REMOVAL,
error);
@@ -708,6 +706,13 @@
return createForwardingObjectiveBuilder(selectorBuilder.build(), treatmentBuilder.build(), MIN_PRIORITY);
}
+ @Override
+ public void clearDeviceState(DeviceId deviceId) {
+ pendingEapolForMeters.removeIf(fi -> fi.getDevId().equals(deviceId));
+ pendingAddEapol.removeIf(connectPoint -> connectPoint.deviceId().equals(deviceId));
+
+ }
+
private DefaultForwardingObjective.Builder createForwardingObjectiveBuilder(TrafficSelector selector,
TrafficTreatment treatment,
Integer priority) {