Initial implementation of Meter Service (needs testing)
Change-Id: Ie07bd3e2bd7c67a6499c965d8926eb361ad16462
store impl started
Change-Id: Ib8b474f40dcecff335a421c12ad149fe9830c427
full implementation
Change-Id: Ie59fd61d02972bd04d887bdcca9745793b880681
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 6039247..b0726d6 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
@@ -21,6 +21,7 @@
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
+import org.onosproject.incubator.net.meter.DefaultMeter;
import org.onosproject.incubator.net.meter.Meter;
import org.onosproject.incubator.net.meter.MeterEvent;
import org.onosproject.incubator.net.meter.MeterFailReason;
@@ -31,6 +32,8 @@
import org.onosproject.incubator.net.meter.MeterProviderRegistry;
import org.onosproject.incubator.net.meter.MeterProviderService;
import org.onosproject.incubator.net.meter.MeterService;
+import org.onosproject.incubator.net.meter.MeterState;
+import org.onosproject.incubator.net.meter.MeterStore;
import org.onosproject.incubator.net.meter.MeterStoreDelegate;
import org.onosproject.net.DeviceId;
import org.onosproject.net.provider.AbstractListenerProviderRegistry;
@@ -41,6 +44,7 @@
import java.util.Collection;
+import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
@@ -60,6 +64,9 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected StorageService storageService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ MeterStore store;
+
private AtomicCounter meterIdCounter;
@Activate
@@ -82,27 +89,35 @@
@Override
public void addMeter(Meter meter) {
-
+ DefaultMeter m = (DefaultMeter) meter;
+ m.setState(MeterState.PENDING_ADD);
+ store.storeMeter(m);
}
@Override
public void updateMeter(Meter meter) {
-
+ DefaultMeter m = (DefaultMeter) meter;
+ m.setState(MeterState.PENDING_ADD);
+ store.updateMeter(m);
}
@Override
public void removeMeter(Meter meter) {
-
+ DefaultMeter m = (DefaultMeter) meter;
+ m.setState(MeterState.PENDING_REMOVE);
+ store.deleteMeter(m);
}
@Override
public void removeMeter(MeterId id) {
-
+ DefaultMeter meter = (DefaultMeter) store.getMeter(id);
+ checkNotNull(meter, "No such meter {}", id);
+ removeMeter(meter);
}
@Override
public Meter getMeter(MeterId id) {
- return null;
+ return store.getMeter(id);
}
@Override
@@ -125,13 +140,14 @@
}
@Override
- public void meterOperationFailed(MeterOperation operation, MeterFailReason reason) {
-
+ public void meterOperationFailed(MeterOperation operation,
+ MeterFailReason reason) {
+ store.failedMeter(operation, reason);
}
@Override
public void pushMeterMetrics(DeviceId deviceId, Collection<Meter> meterEntries) {
-
+ meterEntries.forEach(m -> store.updateMeterState(m));
}
}
@@ -139,6 +155,21 @@
@Override
public void notify(MeterEvent event) {
+ DeviceId deviceId = event.subject().meter().deviceId();
+ MeterProvider p = getProvider(event.subject().meter().deviceId());
+ switch (event.type()) {
+ case METER_UPDATED:
+ break;
+ case METER_OP_FAILED:
+ event.subject().meter().context().ifPresent(c ->
+ c.onError(event.subject(), event.reason()));
+ break;
+ case METER_OP_REQ:
+ p.performMeterOperation(deviceId, event.subject());
+ break;
+ default:
+ log.warn("Unknown meter event {}", event.type());
+ }
}
}