X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fforwardingrules-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Ffrm%2Fimpl%2FFlowNodeReconciliationImpl.java;fp=opendaylight%2Fmd-sal%2Fforwardingrules-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Ffrm%2Fimpl%2FFlowNodeReconciliationImpl.java;h=0000000000000000000000000000000000000000;hp=f1e8dfe070111b9ccd2d37f85e0efbed6a7b27eb;hb=8644c0d5f1b10c02f68702f023c07ea939885176;hpb=fdda2ebadfe3729e21448fe8f44a506aa67b5da9 diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/impl/FlowNodeReconciliationImpl.java b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/impl/FlowNodeReconciliationImpl.java deleted file mode 100644 index f1e8dfe070..0000000000 --- a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/impl/FlowNodeReconciliationImpl.java +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - */ - -package org.opendaylight.controller.frm.impl; - -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import org.opendaylight.controller.frm.FlowNodeReconciliation; -import org.opendaylight.controller.frm.ForwardingRulesManager; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; -import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.MeterKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow; -import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group; -import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; -import org.opendaylight.yangtools.concepts.ListenerRegistration; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; - -/** - * forwardingrules-manager - * org.opendaylight.controller.frm - * - * FlowNode Reconciliation Listener - * Reconciliation for a new FlowNode - * - * @author Vaclav Demcak - * - * Created: Jun 13, 2014 - */ -public class FlowNodeReconciliationImpl implements FlowNodeReconciliation { - - private static final Logger LOG = LoggerFactory.getLogger(FlowNodeReconciliationImpl.class); - - private final ForwardingRulesManager provider; - - private ListenerRegistration listenerRegistration; - - public FlowNodeReconciliationImpl (final ForwardingRulesManager manager, final DataBroker db) { - this.provider = Preconditions.checkNotNull(manager, "ForwardingRulesManager can not be null!"); - Preconditions.checkNotNull(db, "DataBroker can not be null!"); - /* Build Path */ - InstanceIdentifier flowNodeWildCardIdentifier = InstanceIdentifier.create(Nodes.class) - .child(Node.class).augmentation(FlowCapableNode.class); - this.listenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL, - flowNodeWildCardIdentifier, FlowNodeReconciliationImpl.this, DataChangeScope.BASE); - } - - @Override - public void close() { - if (listenerRegistration != null) { - try { - listenerRegistration.close(); - } catch (Exception e) { - LOG.error("Error by stop FRM FlowNodeReconilListener.", e); - } - listenerRegistration = null; - } - } - - @Override - public void onDataChanged(final AsyncDataChangeEvent, DataObject> changeEvent) { - Preconditions.checkNotNull(changeEvent,"Async ChangeEvent can not be null!"); - /* All DataObjects for create */ - final Set> createdData = changeEvent.getCreatedData() != null - ? changeEvent.getCreatedData().keySet() : Collections.> emptySet(); - /* All DataObjects for remove */ - final Set> removeData = changeEvent.getRemovedPaths() != null - ? changeEvent.getRemovedPaths() : Collections.> emptySet(); - - for (InstanceIdentifier entryKey : removeData) { - final InstanceIdentifier nodeIdent = entryKey - .firstIdentifierOf(FlowCapableNode.class); - if ( ! nodeIdent.isWildcarded()) { - flowNodeDisconnected(nodeIdent); - } - } - for (InstanceIdentifier entryKey : createdData) { - final InstanceIdentifier nodeIdent = entryKey - .firstIdentifierOf(FlowCapableNode.class); - if ( ! nodeIdent.isWildcarded()) { - flowNodeConnected(nodeIdent); - } - } - } - - @Override - public void flowNodeDisconnected(InstanceIdentifier disconnectedNode) { - provider.unregistrateNode(disconnectedNode); - } - - @Override - public void flowNodeConnected(InstanceIdentifier connectedNode) { - if ( ! provider.isNodeActive(connectedNode)) { - provider.registrateNewNode(connectedNode); - reconciliation(connectedNode); - } - } - - private void reconciliation(final InstanceIdentifier nodeIdent) { - - ReadOnlyTransaction trans = provider.getReadTranaction(); - Optional flowNode = Optional.absent(); - - try { - flowNode = trans.read(LogicalDatastoreType.CONFIGURATION, nodeIdent).get(); - } - catch (Exception e) { - LOG.error("Fail with read Config/DS for Node {} !", nodeIdent, e); - } - - if (flowNode.isPresent()) { - /* Groups - have to be first */ - List groups = flowNode.get().getGroup() != null - ? flowNode.get().getGroup() : Collections. emptyList(); - for (Group group : groups) { - final KeyedInstanceIdentifier groupIdent = - nodeIdent.child(Group.class, group.getKey()); - this.provider.getGroupCommiter().add(groupIdent, group, nodeIdent); - } - /* Meters */ - List meters = flowNode.get().getMeter() != null - ? flowNode.get().getMeter() : Collections. emptyList(); - for (Meter meter : meters) { - final KeyedInstanceIdentifier meterIdent = - nodeIdent.child(Meter.class, meter.getKey()); - this.provider.getMeterCommiter().add(meterIdent, meter, nodeIdent); - } - /* Flows */ - List tables = flowNode.get().getTable() != null - ? flowNode.get().getTable() : Collections.
emptyList(); - for (Table table : tables) { - final KeyedInstanceIdentifier tableIdent = - nodeIdent.child(Table.class, table.getKey()); - List flows = table.getFlow() != null ? table.getFlow() : Collections. emptyList(); - for (Flow flow : flows) { - final KeyedInstanceIdentifier flowIdent = - tableIdent.child(Flow.class, flow.getKey()); - this.provider.getFlowCommiter().add(flowIdent, flow, nodeIdent); - } - } - } - /* clean transaction */ - trans.close(); - } -} -