Search in sources :

Example 6 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)

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