Search in sources :

Example 1 with FlowRuleBatchOperation

use of org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation in project onos by opennetworkinglab.

the class FlowRuleBatchOperationTest method testEquals.

/**
 * Tests the equals(), hashCode() and toString() methods.
 */
@Test
public void testEquals() {
    final FlowRule rule = new IntentTestsMocks.MockFlowRule(1);
    final FlowRuleBatchEntry entry1 = new FlowRuleBatchEntry(FlowRuleBatchEntry.FlowRuleOperation.ADD, rule);
    final FlowRuleBatchEntry entry2 = new FlowRuleBatchEntry(FlowRuleBatchEntry.FlowRuleOperation.MODIFY, rule);
    final FlowRuleBatchEntry entry3 = new FlowRuleBatchEntry(FlowRuleBatchEntry.FlowRuleOperation.REMOVE, rule);
    final LinkedList<FlowRuleBatchEntry> ops1 = new LinkedList<>();
    ops1.add(entry1);
    final LinkedList<FlowRuleBatchEntry> ops2 = new LinkedList<>();
    ops1.add(entry2);
    final LinkedList<FlowRuleBatchEntry> ops3 = new LinkedList<>();
    ops3.add(entry3);
    final FlowRuleBatchOperation operation1 = new FlowRuleBatchOperation(ops1, null, 0);
    final FlowRuleBatchOperation sameAsOperation1 = new FlowRuleBatchOperation(ops1, null, 0);
    final FlowRuleBatchOperation operation2 = new FlowRuleBatchOperation(ops2, null, 0);
    final FlowRuleBatchOperation operation3 = new FlowRuleBatchOperation(ops3, null, 0);
    new EqualsTester().addEqualityGroup(operation1, sameAsOperation1).addEqualityGroup(operation2).addEqualityGroup(operation3).testEquals();
}
Also used : FlowRuleBatchOperation(org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation) EqualsTester(com.google.common.testing.EqualsTester) FlowRuleBatchEntry(org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry) LinkedList(java.util.LinkedList) Test(org.junit.Test)

Example 2 with FlowRuleBatchOperation

use of org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation in project onos by opennetworkinglab.

the class FlowRuleBatchRequestTest method testConstruction.

/**
 * Tests that construction of FlowRuleBatchRequest objects returns the
 * correct objects.
 */
@Test
public void testConstruction() {
    final FlowRule rule1 = new IntentTestsMocks.MockFlowRule(1);
    final FlowRule rule2 = new IntentTestsMocks.MockFlowRule(2);
    final Set<FlowRuleBatchEntry> batch = new HashSet<>();
    batch.add(new FlowRuleBatchEntry(ADD, rule1));
    batch.add(new FlowRuleBatchEntry(REMOVE, rule2));
    final FlowRuleBatchRequest request = new FlowRuleBatchRequest(1, batch);
    assertThat(request.ops(), hasSize(2));
    assertThat(request.batchId(), is(1L));
    final FlowRuleBatchOperation op = request.asBatchOperation(rule1.deviceId());
    assertThat(op.size(), is(2));
    final List<FlowRuleBatchEntry> ops = op.getOperations();
    assertThat(ops, hasSize(2));
}
Also used : FlowRuleBatchOperation(org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation) FlowRuleBatchEntry(org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry) HashSet(java.util.HashSet) FlowRuleBatchRequest(org.onosproject.net.flow.oldbatch.FlowRuleBatchRequest) Test(org.junit.Test)

Example 3 with FlowRuleBatchOperation

use of org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation in project onos by opennetworkinglab.

the class ECFlowRuleStoreTest method testStoreBatch.

/**
 * Tests initial state of flowrule.
 */
@Test
public void testStoreBatch() {
    FlowRuleOperation op = new FlowRuleOperation(flowRule, FlowRuleOperation.Type.ADD);
    Multimap<DeviceId, FlowRuleBatchEntry> perDeviceBatches = ArrayListMultimap.create();
    perDeviceBatches.put(op.rule().deviceId(), new FlowRuleBatchEntry(FlowRuleBatchEntry.FlowRuleOperation.ADD, op.rule()));
    FlowRuleBatchOperation b = new FlowRuleBatchOperation(perDeviceBatches.get(deviceId), deviceId, 1);
    flowStoreImpl.storeBatch(b);
    FlowEntry flowEntry1 = flowStoreImpl.getFlowEntry(flowRule);
    assertEquals("PENDING_ADD", flowEntry1.state().toString());
}
Also used : FlowRuleBatchOperation(org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation) DeviceId(org.onosproject.net.DeviceId) FlowRuleBatchEntry(org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry) FlowEntry(org.onosproject.net.flow.FlowEntry) DefaultFlowEntry(org.onosproject.net.flow.DefaultFlowEntry) FlowRuleOperation(org.onosproject.net.flow.FlowRuleOperation) Test(org.junit.Test)

Example 4 with FlowRuleBatchOperation

use of org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation in project onos by opennetworkinglab.

the class ECFlowRuleStore method storeBatch.

@Override
public void storeBatch(FlowRuleBatchOperation operation) {
    if (operation.getOperations().isEmpty()) {
        notifyDelegate(FlowRuleBatchEvent.completed(new FlowRuleBatchRequest(operation.id(), Collections.emptySet()), new CompletedBatchOperation(true, Collections.emptySet(), operation.deviceId())));
        return;
    }
    DeviceId deviceId = operation.deviceId();
    NodeId master = mastershipService.getMasterFor(deviceId);
    if (master == null) {
        log.warn("Failed to storeBatch: No master for {}", deviceId);
        Set<FlowRule> allFailures = operation.getOperations().stream().map(op -> op.target()).collect(Collectors.toSet());
        notifyDelegate(FlowRuleBatchEvent.completed(new FlowRuleBatchRequest(operation.id(), Collections.emptySet()), new CompletedBatchOperation(false, allFailures, deviceId)));
        return;
    }
    if (Objects.equals(local, master)) {
        storeBatchInternal(operation);
        return;
    }
    log.trace("Forwarding storeBatch to {}, which is the primary (master) for device {}", master, deviceId);
    clusterCommunicator.unicast(operation, APPLY_BATCH_FLOWS, serializer::encode, master).whenComplete((result, error) -> {
        if (error != null) {
            log.warn("Failed to storeBatch: {} to {}", operation, master, error);
            Set<FlowRule> allFailures = operation.getOperations().stream().map(op -> op.target()).collect(Collectors.toSet());
            notifyDelegate(FlowRuleBatchEvent.completed(new FlowRuleBatchRequest(operation.id(), Collections.emptySet()), new CompletedBatchOperation(false, allFailures, deviceId)));
        }
    });
}
Also used : FlowRuleBatchOperation(org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation) FlowEntryState(org.onosproject.net.flow.FlowEntry.FlowEntryState) DefaultFlowRule(org.onosproject.net.flow.DefaultFlowRule) REMOVE_FLOW_ENTRY(org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.REMOVE_FLOW_ENTRY) DeviceService(org.onosproject.net.device.DeviceService) FlowEntry(org.onosproject.net.flow.FlowEntry) FlowRuleService(org.onosproject.net.flow.FlowRuleService) StorageService(org.onosproject.store.service.StorageService) Pair(org.apache.commons.lang3.tuple.Pair) Map(java.util.Map) ApplicationId(org.onosproject.core.ApplicationId) KryoNamespaces(org.onosproject.store.serializers.KryoNamespaces) MastershipService(org.onosproject.mastership.MastershipService) EventuallyConsistentMapEvent(org.onosproject.store.service.EventuallyConsistentMapEvent) Deactivate(org.osgi.service.component.annotations.Deactivate) Set(java.util.Set) WallClockTimestamp(org.onosproject.store.service.WallClockTimestamp) Executors(java.util.concurrent.Executors) RULE_REMOVED(org.onosproject.net.flow.FlowRuleEvent.Type.RULE_REMOVED) FlowRuleBatchEntry(org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry) FlowRuleOperation(org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry.FlowRuleOperation) OrderedExecutor(org.onlab.util.OrderedExecutor) DeviceEvent(org.onosproject.net.device.DeviceEvent) DeviceId(org.onosproject.net.DeviceId) REMOTE_APPLY_COMPLETED(org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.REMOTE_APPLY_COMPLETED) Dictionary(java.util.Dictionary) Tools(org.onlab.util.Tools) FlowRuleEvent(org.onosproject.net.flow.FlowRuleEvent) ComponentContext(org.osgi.service.component.ComponentContext) Strings.isNullOrEmpty(com.google.common.base.Strings.isNullOrEmpty) KryoNamespace(org.onlab.util.KryoNamespace) MapEventListener(org.onosproject.store.service.MapEventListener) Component(org.osgi.service.component.annotations.Component) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) StreamSupport(java.util.stream.StreamSupport) FlowRuleStore(org.onosproject.net.flow.FlowRuleStore) GET_FLOW_ENTRY(org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.GET_FLOW_ENTRY) ComponentConfigService(org.onosproject.cfg.ComponentConfigService) DeviceListener(org.onosproject.net.device.DeviceListener) FLOW_TABLE_BACKUP(org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.FLOW_TABLE_BACKUP) OsgiPropertyConstants(org.onosproject.store.OsgiPropertyConstants) APPLY_BATCH_FLOWS(org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.APPLY_BATCH_FLOWS) ExecutionException(java.util.concurrent.ExecutionException) MapEvent(org.onosproject.store.service.MapEvent) AbstractStore(org.onosproject.store.AbstractStore) FlowRuleBatchEvent(org.onosproject.net.flow.oldbatch.FlowRuleBatchEvent) CompletedBatchOperation(org.onosproject.net.flow.CompletedBatchOperation) PersistenceService(org.onosproject.persistence.PersistenceService) CoreService(org.onosproject.core.CoreService) Tools.groupedThreads(org.onlab.util.Tools.groupedThreads) TimeoutException(java.util.concurrent.TimeoutException) TableStatisticsEntry(org.onosproject.net.flow.TableStatisticsEntry) Type(org.onosproject.net.flow.FlowRuleEvent.Type) PURGE_FLOW_RULES(org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.PURGE_FLOW_RULES) GET_DEVICE_FLOW_COUNT(org.onosproject.store.flow.impl.ECFlowRuleStoreMessageSubjects.GET_DEVICE_FLOW_COUNT) FlowRuleBatchRequest(org.onosproject.net.flow.oldbatch.FlowRuleBatchRequest) AsyncConsistentMap(org.onosproject.store.service.AsyncConsistentMap) NodeId(org.onosproject.cluster.NodeId) Serializer(org.onosproject.store.service.Serializer) FlowRuleStoreDelegate(org.onosproject.net.flow.FlowRuleStoreDelegate) Tools.get(org.onlab.util.Tools.get) AbstractListenerManager(org.onosproject.event.AbstractListenerManager) ReplicaInfoService(org.onosproject.store.flow.ReplicaInfoService) IdGenerator(org.onosproject.core.IdGenerator) Math.min(java.lang.Math.min) Streams(com.google.common.collect.Streams) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) FlowRule(org.onosproject.net.flow.FlowRule) ClusterCommunicationService(org.onosproject.store.cluster.messaging.ClusterCommunicationService) Math.max(java.lang.Math.max) ClusterService(org.onosproject.cluster.ClusterService) StoredFlowEntry(org.onosproject.net.flow.StoredFlowEntry) ReplicaInfoEventListener(org.onosproject.store.flow.ReplicaInfoEventListener) Function(java.util.function.Function) HashSet(java.util.HashSet) ImmutableList(com.google.common.collect.ImmutableList) Activate(org.osgi.service.component.annotations.Activate) EventuallyConsistentMap(org.onosproject.store.service.EventuallyConsistentMap) EventuallyConsistentMapListener(org.onosproject.store.service.EventuallyConsistentMapListener) ExecutorService(java.util.concurrent.ExecutorService) DefaultFlowEntry(org.onosproject.net.flow.DefaultFlowEntry) Logger(org.slf4j.Logger) Iterator(java.util.Iterator) ReplicaInfo(org.onosproject.store.flow.ReplicaInfo) ClusterMessageHandler(org.onosproject.store.cluster.messaging.ClusterMessageHandler) MastershipBasedTimestamp(org.onosproject.store.impl.MastershipBasedTimestamp) ReplicaInfoEvent(org.onosproject.store.flow.ReplicaInfoEvent) Maps(com.google.common.collect.Maps) FlowRuleStoreException(org.onosproject.net.flow.FlowRuleStoreException) ImmutablePair(org.apache.commons.lang3.tuple.ImmutablePair) ClusterMessage(org.onosproject.store.cluster.messaging.ClusterMessage) TimeUnit(java.util.concurrent.TimeUnit) ReferenceCardinality(org.osgi.service.component.annotations.ReferenceCardinality) Modified(org.osgi.service.component.annotations.Modified) LoggerFactory.getLogger(org.slf4j.LoggerFactory.getLogger) Reference(org.osgi.service.component.annotations.Reference) Collections(java.util.Collections) DeviceId(org.onosproject.net.DeviceId) NodeId(org.onosproject.cluster.NodeId) DefaultFlowRule(org.onosproject.net.flow.DefaultFlowRule) FlowRule(org.onosproject.net.flow.FlowRule) CompletedBatchOperation(org.onosproject.net.flow.CompletedBatchOperation) FlowRuleBatchRequest(org.onosproject.net.flow.oldbatch.FlowRuleBatchRequest)

Example 5 with FlowRuleBatchOperation

use of org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation in project onos by opennetworkinglab.

the class ECFlowRuleStoreTest method testAddFlow.

/**
 * Tests adding a flowrule.
 */
@Test
public void testAddFlow() {
    FlowEntry flowEntry = new DefaultFlowEntry(flowRule);
    FlowRuleOperation op = new FlowRuleOperation(flowRule, FlowRuleOperation.Type.ADD);
    Multimap<DeviceId, FlowRuleBatchEntry> perDeviceBatches = ArrayListMultimap.create();
    perDeviceBatches.put(op.rule().deviceId(), new FlowRuleBatchEntry(FlowRuleBatchEntry.FlowRuleOperation.ADD, op.rule()));
    FlowRuleBatchOperation b = new FlowRuleBatchOperation(perDeviceBatches.get(deviceId), deviceId, 1);
    flowStoreImpl.storeBatch(b);
    FlowEntry flowEntry1 = flowStoreImpl.getFlowEntry(flowRule);
    assertEquals("PENDING_ADD", flowEntry1.state().toString());
    flowStoreImpl.addOrUpdateFlowRule(flowEntry);
    assertFlowsOnDevice(deviceId, 1);
    FlowEntry flowEntry2 = flowStoreImpl.getFlowEntry(flowRule);
    assertEquals("ADDED", flowEntry2.state().toString());
    assertThat(flowStoreImpl.getTableStatistics(deviceId), notNullValue());
}
Also used : FlowRuleBatchOperation(org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation) DefaultFlowEntry(org.onosproject.net.flow.DefaultFlowEntry) DeviceId(org.onosproject.net.DeviceId) FlowRuleBatchEntry(org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry) FlowEntry(org.onosproject.net.flow.FlowEntry) DefaultFlowEntry(org.onosproject.net.flow.DefaultFlowEntry) FlowRuleOperation(org.onosproject.net.flow.FlowRuleOperation) Test(org.junit.Test)

Aggregations

FlowRuleBatchEntry (org.onosproject.net.flow.oldbatch.FlowRuleBatchEntry)6 FlowRuleBatchOperation (org.onosproject.net.flow.oldbatch.FlowRuleBatchOperation)6 DeviceId (org.onosproject.net.DeviceId)4 FlowEntry (org.onosproject.net.flow.FlowEntry)4 Test (org.junit.Test)3 DefaultFlowEntry (org.onosproject.net.flow.DefaultFlowEntry)3 Strings.isNullOrEmpty (com.google.common.base.Strings.isNullOrEmpty)2 Maps (com.google.common.collect.Maps)2 Collections (java.util.Collections)2 Dictionary (java.util.Dictionary)2 List (java.util.List)2 Map (java.util.Map)2 Objects (java.util.Objects)2 Set (java.util.Set)2 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)2 TimeUnit (java.util.concurrent.TimeUnit)2 Collectors (java.util.stream.Collectors)2 Tools.get (org.onlab.util.Tools.get)2 Tools.groupedThreads (org.onlab.util.Tools.groupedThreads)2 ComponentConfigService (org.onosproject.cfg.ComponentConfigService)2