Search in sources :

Example 16 with MeterKey

use of org.onosproject.net.meter.MeterKey in project onos by opennetworkinglab.

the class SimpleVirtualMeterStore method updateMeter.

@Override
public CompletableFuture<MeterStoreResult> updateMeter(NetworkId networkId, Meter meter) {
    ConcurrentMap<MeterKey, MeterData> meters = getMetersByNetwork(networkId);
    ConcurrentMap<MeterKey, CompletableFuture<MeterStoreResult>> futures = getFuturesByNetwork(networkId);
    CompletableFuture<MeterStoreResult> future = new CompletableFuture<>();
    MeterKey key = MeterKey.key(meter.deviceId(), meter.id());
    futures.put(key, future);
    MeterData data = new MeterData(meter, null, local);
    try {
        if (meters.computeIfPresent(key, (k, v) -> data) == null) {
            future.complete(MeterStoreResult.fail(MeterFailReason.INVALID_METER));
        }
    } catch (StorageException e) {
        future.completeExceptionally(e);
    }
    return future;
}
Also used : MeterKey(org.onosproject.net.meter.MeterKey) StorageException(org.onosproject.store.service.StorageException) DefaultMeter(org.onosproject.net.meter.DefaultMeter) MeterFeatures(org.onosproject.net.meter.MeterFeatures) CompletableFuture(java.util.concurrent.CompletableFuture) Collections2(com.google.common.collect.Collections2) MeterStoreDelegate(org.onosproject.net.meter.MeterStoreDelegate) ConcurrentMap(java.util.concurrent.ConcurrentMap) Component(org.osgi.service.component.annotations.Component) MeterStoreResult(org.onosproject.net.meter.MeterStoreResult) NetworkId(org.onosproject.incubator.net.virtual.NetworkId) Activate(org.osgi.service.component.annotations.Activate) MeterFailReason(org.onosproject.net.meter.MeterFailReason) NodeId(org.onosproject.cluster.NodeId) Meter(org.onosproject.net.meter.Meter) MeterEvent(org.onosproject.net.meter.MeterEvent) Logger(org.slf4j.Logger) MeterFeaturesKey(org.onosproject.net.meter.MeterFeaturesKey) MeterOperation(org.onosproject.net.meter.MeterOperation) Deactivate(org.osgi.service.component.annotations.Deactivate) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Maps(com.google.common.collect.Maps) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) VirtualNetworkMeterStore(org.onosproject.incubator.net.virtual.VirtualNetworkMeterStore) TIMEOUT(org.onosproject.net.meter.MeterFailReason.TIMEOUT) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) MeterKey(org.onosproject.net.meter.MeterKey) ClusterService(org.onosproject.cluster.ClusterService) DeviceId(org.onosproject.net.DeviceId) Reference(org.osgi.service.component.annotations.Reference) MeterStoreResult(org.onosproject.net.meter.MeterStoreResult) CompletableFuture(java.util.concurrent.CompletableFuture) StorageException(org.onosproject.store.service.StorageException)

Example 17 with MeterKey

use of org.onosproject.net.meter.MeterKey in project onos by opennetworkinglab.

the class DistributedMeterStoreTest method testDeleteMeterInUserDefinedIndexMode.

/**
 * Test delete meter in user defined index mode.
 */
@Test
public void testDeleteMeterInUserDefinedIndexMode() {
    initMeterStore(true);
    Meter meterOne = DefaultMeter.builder().forDevice(did3).fromApp(APP_ID).withCellId(cid4).withUnit(Meter.Unit.KB_PER_SEC).withBands(Collections.singletonList(b1)).build();
    ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD);
    meterStore.addOrUpdateMeter(meterOne);
    ((DefaultMeter) meterOne).setState(MeterState.PENDING_REMOVE);
    MeterKey meterKey = MeterKey.key(did3, cid4);
    meterStore.deleteMeter(meterOne);
    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> meterStore.purgeMeter(meterOne));
    try {
        future.get();
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
    assertThat(0, is(meterStore.getAllMeters().size()));
    assertThat(0, is(meterStore.getAllMeters(did3).size()));
    assertNull(meterStore.getMeter(meterKey));
    MeterTableKey globalKey = MeterTableKey.key(did1, MeterScope.globalScope());
    assertNotNull(meterStore.availableMeterIds.get(globalKey));
    assertTrue(meterStore.availableMeterIds.get(globalKey).isEmpty());
}
Also used : MeterKey(org.onosproject.net.meter.MeterKey) MeterTableKey(org.onosproject.net.meter.MeterTableKey) DefaultMeter(org.onosproject.net.meter.DefaultMeter) Meter(org.onosproject.net.meter.Meter) DefaultMeter(org.onosproject.net.meter.DefaultMeter) ExecutionException(java.util.concurrent.ExecutionException) Test(org.junit.Test)

Example 18 with MeterKey

use of org.onosproject.net.meter.MeterKey in project onos by opennetworkinglab.

the class DistributedMeterStoreTest method testPurgeMetersDeviceAndApp.

/**
 * Test purge meter given device and application.
 */
@Test
public void testPurgeMetersDeviceAndApp() {
    initMeterStore(false);
    ((DefaultMeter) m1).setState(MeterState.PENDING_ADD);
    ((DefaultMeter) m2).setState(MeterState.PENDING_ADD);
    ((DefaultMeter) m3).setState(MeterState.PENDING_ADD);
    meterStore.addOrUpdateMeter(m1);
    meterStore.addOrUpdateMeter(m2);
    meterStore.addOrUpdateMeter(m3);
    assertThat(3, is(meterStore.getAllMeters().size()));
    meterStore.purgeMeters(did1, APP_ID_2);
    MeterKey keyTwo = MeterKey.key(did1, mid2);
    assertThat(2, is(meterStore.getAllMeters().size()));
    assertThat(1, is(meterStore.getAllMeters(did1).size()));
    assertThat(1, is(meterStore.getAllMeters(did2).size()));
    assertNull(meterStore.getMeter(keyTwo));
}
Also used : MeterKey(org.onosproject.net.meter.MeterKey) DefaultMeter(org.onosproject.net.meter.DefaultMeter) Test(org.junit.Test)

Example 19 with MeterKey

use of org.onosproject.net.meter.MeterKey in project onos by opennetworkinglab.

the class DistributedMeterStoreTest method testStoreMeter.

/**
 * Test store meter.
 */
@Test
public void testStoreMeter() {
    initMeterStore(false);
    MeterCellId idOne = meterStore.allocateMeterId(did1, MeterScope.globalScope());
    assertThat(mid1, is(idOne));
    Meter meterOne = DefaultMeter.builder().forDevice(did1).fromApp(APP_ID).withId(mid1).withUnit(Meter.Unit.KB_PER_SEC).withBands(Collections.singletonList(b1)).build();
    ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD);
    meterStore.addOrUpdateMeter(meterOne);
    MeterKey meterKey = MeterKey.key(did1, mid1);
    assertThat(1, is(meterStore.getAllMeters().size()));
    assertThat(1, is(meterStore.getAllMeters(did1).size()));
    assertThat(m1, is(meterStore.getMeter(meterKey)));
}
Also used : MeterKey(org.onosproject.net.meter.MeterKey) DefaultMeter(org.onosproject.net.meter.DefaultMeter) Meter(org.onosproject.net.meter.Meter) DefaultMeter(org.onosproject.net.meter.DefaultMeter) PiMeterCellId(org.onosproject.net.pi.runtime.PiMeterCellId) MeterCellId(org.onosproject.net.meter.MeterCellId) Test(org.junit.Test)

Example 20 with MeterKey

use of org.onosproject.net.meter.MeterKey in project onos by opennetworkinglab.

the class DistributedMeterStoreTest method testDeleteMeter.

/**
 * Test delete meter.
 */
@Test
public void testDeleteMeter() {
    initMeterStore(false);
    MeterCellId idOne = meterStore.allocateMeterId(did1, MeterScope.globalScope());
    assertThat(mid1, is(idOne));
    Meter meterOne = DefaultMeter.builder().forDevice(did1).fromApp(APP_ID).withId(mid1).withUnit(Meter.Unit.KB_PER_SEC).withBands(Collections.singletonList(b1)).build();
    ((DefaultMeter) meterOne).setState(MeterState.PENDING_ADD);
    meterStore.addOrUpdateMeter(meterOne);
    ((DefaultMeter) meterOne).setState(MeterState.PENDING_REMOVE);
    MeterKey meterKey = MeterKey.key(did1, mid1);
    meterStore.deleteMeter(meterOne);
    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> meterStore.purgeMeter(meterOne));
    try {
        future.get();
    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
    assertThat(0, is(meterStore.getAllMeters().size()));
    assertThat(0, is(meterStore.getAllMeters(did1).size()));
    assertNull(meterStore.getMeter(meterKey));
    assertThat(mid1, is(meterStore.allocateMeterId(did1, MeterScope.globalScope())));
}
Also used : MeterKey(org.onosproject.net.meter.MeterKey) DefaultMeter(org.onosproject.net.meter.DefaultMeter) Meter(org.onosproject.net.meter.Meter) DefaultMeter(org.onosproject.net.meter.DefaultMeter) ExecutionException(java.util.concurrent.ExecutionException) PiMeterCellId(org.onosproject.net.pi.runtime.PiMeterCellId) MeterCellId(org.onosproject.net.meter.MeterCellId) Test(org.junit.Test)

Aggregations

MeterKey (org.onosproject.net.meter.MeterKey)20 DefaultMeter (org.onosproject.net.meter.DefaultMeter)11 Test (org.junit.Test)7 Meter (org.onosproject.net.meter.Meter)7 CompletableFuture (java.util.concurrent.CompletableFuture)6 StorageException (org.onosproject.store.service.StorageException)6 MeterStoreResult (org.onosproject.net.meter.MeterStoreResult)5 PiMeterCellId (org.onosproject.net.pi.runtime.PiMeterCellId)5 MeterCellId (org.onosproject.net.meter.MeterCellId)4 DeviceId (org.onosproject.net.DeviceId)3 Collections2 (com.google.common.collect.Collections2)2 Maps (com.google.common.collect.Maps)2 Collection (java.util.Collection)2 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)2 ConcurrentMap (java.util.concurrent.ConcurrentMap)2 ExecutionException (java.util.concurrent.ExecutionException)2 ClusterService (org.onosproject.cluster.ClusterService)2 NodeId (org.onosproject.cluster.NodeId)2 NetworkId (org.onosproject.incubator.net.virtual.NetworkId)2 VirtualNetworkMeterStore (org.onosproject.incubator.net.virtual.VirtualNetworkMeterStore)2