adding device specific counters for meter ids in
the meter service.
Change-Id: I38d38a0a85024927f5a74013b2b4d9efa9b32d22
diff --git a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java
index 32890cb..c09b1ac 100644
--- a/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java
+++ b/incubator/store/src/main/java/org/onosproject/incubator/store/meter/impl/DistributedMeterStore.java
@@ -33,6 +33,7 @@
import org.onosproject.net.meter.MeterEvent;
import org.onosproject.net.meter.MeterFailReason;
import org.onosproject.net.meter.MeterId;
+import org.onosproject.net.meter.MeterKey;
import org.onosproject.net.meter.MeterOperation;
import org.onosproject.net.meter.MeterState;
import org.onosproject.net.meter.MeterStore;
@@ -78,12 +79,12 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
private ClusterService clusterService;
- private ConsistentMap<MeterId, MeterData> meters;
+ private ConsistentMap<MeterKey, MeterData> meters;
private NodeId local;
private MapEventListener mapListener = new InternalMapEventListener();
- private Map<MeterId, CompletableFuture<MeterStoreResult>> futures =
+ private Map<MeterKey, CompletableFuture<MeterStoreResult>> futures =
Maps.newConcurrentMap();
@Activate
@@ -92,9 +93,10 @@
local = clusterService.getLocalNode().id();
- meters = storageService.<MeterId, MeterData>consistentMapBuilder()
+ meters = storageService.<MeterKey, MeterData>consistentMapBuilder()
.withName(METERSTORE)
.withSerializer(Serializer.using(Arrays.asList(KryoNamespaces.API),
+ MeterKey.class,
MeterData.class,
DefaultMeter.class,
DefaultBand.class,
@@ -120,11 +122,12 @@
@Override
public CompletableFuture<MeterStoreResult> storeMeter(Meter meter) {
CompletableFuture<MeterStoreResult> future = new CompletableFuture<>();
- futures.put(meter.id(), future);
+ MeterKey key = MeterKey.key(meter.deviceId(), meter.id());
+ futures.put(key, future);
MeterData data = new MeterData(meter, null, local);
try {
- meters.put(meter.id(), data);
+ meters.put(key, data);
} catch (StorageException e) {
future.completeExceptionally(e);
}
@@ -136,14 +139,15 @@
@Override
public CompletableFuture<MeterStoreResult> deleteMeter(Meter meter) {
CompletableFuture<MeterStoreResult> future = new CompletableFuture<>();
- futures.put(meter.id(), future);
+ MeterKey key = MeterKey.key(meter.deviceId(), meter.id());
+ futures.put(key, future);
MeterData data = new MeterData(meter, null, local);
// update the state of the meter. It will be pruned by observing
// that it has been removed from the dataplane.
try {
- if (meters.computeIfPresent(meter.id(), (k, v) -> data) == null) {
+ if (meters.computeIfPresent(key, (k, v) -> data) == null) {
future.complete(MeterStoreResult.success());
}
} catch (StorageException e) {
@@ -157,11 +161,12 @@
@Override
public CompletableFuture<MeterStoreResult> updateMeter(Meter meter) {
CompletableFuture<MeterStoreResult> future = new CompletableFuture<>();
- futures.put(meter.id(), future);
+ MeterKey key = MeterKey.key(meter.deviceId(), meter.id());
+ futures.put(key, future);
MeterData data = new MeterData(meter, null, local);
try {
- if (meters.computeIfPresent(meter.id(), (k, v) -> data) == null) {
+ if (meters.computeIfPresent(key, (k, v) -> data) == null) {
future.complete(MeterStoreResult.fail(MeterFailReason.INVALID_METER));
}
} catch (StorageException e) {
@@ -172,7 +177,8 @@
@Override
public void updateMeterState(Meter meter) {
- meters.computeIfPresent(meter.id(), (id, v) -> {
+ MeterKey key = MeterKey.key(meter.deviceId(), meter.id());
+ meters.computeIfPresent(key, (k, v) -> {
DefaultMeter m = (DefaultMeter) v.meter();
m.setState(meter.state());
m.setProcessedPackets(meter.packetsSeen());
@@ -185,8 +191,8 @@
}
@Override
- public Meter getMeter(MeterId meterId) {
- MeterData data = Versioned.valueOrElse(meters.get(meterId), null);
+ public Meter getMeter(MeterKey key) {
+ MeterData data = Versioned.valueOrElse(meters.get(key), null);
return data == null ? null : data.meter();
}
@@ -198,14 +204,16 @@
@Override
public void failedMeter(MeterOperation op, MeterFailReason reason) {
- meters.computeIfPresent(op.meter().id(), (k, v) ->
+ MeterKey key = MeterKey.key(op.meter().deviceId(), op.meter().id());
+ meters.computeIfPresent(key, (k, v) ->
new MeterData(v.meter(), reason, v.origin()));
}
@Override
public void deleteMeterNow(Meter m) {
- futures.remove(m.id());
- meters.remove(m.id());
+ MeterKey key = MeterKey.key(m.deviceId(), m.id());
+ futures.remove(key);
+ meters.remove(key);
}
private class InternalMapEventListener implements MapEventListener<MeterId, MeterData> {