[JIRA-3148] install only one meter per bandwidth profile on eapol flows
Change-Id: Ie2f1922cf3854b47d9a2d34a44410ef883b3fe2e
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 be15854..65a72f0 100644
--- a/app/src/main/java/org/opencord/olt/impl/OltMeterService.java
+++ b/app/src/main/java/org/opencord/olt/impl/OltMeterService.java
@@ -43,6 +43,7 @@
import org.onosproject.store.service.Serializer;
import org.onosproject.store.service.StorageService;
import org.opencord.olt.internalapi.AccessDeviceMeterService;
+import org.opencord.olt.internalapi.DeviceBandwidthProfile;
import org.opencord.sadis.BandwidthProfileInformation;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
@@ -60,7 +61,9 @@
import java.util.Map;
import java.util.Optional;
import java.util.Properties;
+import java.util.Set;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
@@ -109,6 +112,8 @@
protected ExecutorService eventExecutor;
+ private Set<DeviceBandwidthProfile> pendingMeters;
+
@Activate
public void activate(ComponentContext context) {
eventExecutor = Executors.newFixedThreadPool(5, groupedThreads("onos/olt",
@@ -129,6 +134,7 @@
meterService.addListener(meterListener);
componentConfigService.registerProperties(getClass());
+ pendingMeters = ConcurrentHashMap.newKeySet();
log.info("Olt Meter service started");
}
@@ -195,6 +201,7 @@
@Override
public MeterId createMeter(DeviceId deviceId, BandwidthProfileInformation bpInfo,
CompletableFuture<Object> meterFuture) {
+ log.debug("Installing meter on {} for {}", deviceId, bpInfo);
if (bpInfo == null) {
log.warn("Requested bandwidth profile information is NULL");
meterFuture.complete(ObjectiveError.BADPARAMS);
@@ -218,7 +225,7 @@
@Override
public void onSuccess(MeterRequest op) {
log.debug("Meter {} is installed on the device {}",
- meterId, deviceId);
+ meterIdRef.get(), deviceId);
addMeterIdToBpMapping(deviceId, meterIdRef.get(), bpInfo.id());
meterFuture.complete(null);
}
@@ -244,6 +251,21 @@
}
@Override
+ public void addToPendingMeters(DeviceBandwidthProfile deviceBandwidthProfile) {
+ pendingMeters.add(deviceBandwidthProfile);
+ }
+
+ @Override
+ public void removeFromPendingMeters(DeviceBandwidthProfile deviceBandwidthProfile) {
+ pendingMeters.remove(deviceBandwidthProfile);
+ }
+
+ @Override
+ public boolean isMeterPending(DeviceBandwidthProfile deviceBandwidthProfile) {
+ return pendingMeters.contains(deviceBandwidthProfile);
+ }
+
+ @Override
public void clearMeters(DeviceId deviceId) {
List<Map.Entry<String, MeterKey>> meters = bpInfoToMeter.stream()
.filter(e -> e.getValue().deviceId().equals(deviceId))