X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=southbound%2Fsouthbound-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fovsdb%2Fsouthbound%2Ftransactions%2Fmd%2FOvsdbBridgeUpdateCommand.java;h=83facc2ab003fb3703e7433b3dec00d167b094d6;hb=50e7f939993fa9da3c80a1c8d166629a4868af9c;hp=765f18ac54bccde9304bef5d97367868c7836994;hpb=d99552bda73322e2f32fc81e5b823dea00d1248a;p=ovsdb.git diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java index 765f18ac5..83facc2ab 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java @@ -1,5 +1,18 @@ +/* + * Copyright (c) 2015 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.ovsdb.southbound.transactions.md; +import static org.opendaylight.ovsdb.southbound.SouthboundUtil.schemaMismatchLog; + +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.net.InetAddresses; import java.net.InetAddress; import java.net.NetworkInterface; import java.util.ArrayList; @@ -8,11 +21,9 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; - import org.apache.commons.lang3.math.NumberUtils; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.ovsdb.lib.error.SchemaVersionMismatchException; import org.opendaylight.ovsdb.lib.message.TableUpdates; import org.opendaylight.ovsdb.lib.notation.UUID; @@ -23,6 +34,7 @@ import org.opendaylight.ovsdb.schema.openvswitch.Controller; import org.opendaylight.ovsdb.southbound.OvsdbConnectionInstance; import org.opendaylight.ovsdb.southbound.SouthboundConstants; import org.opendaylight.ovsdb.southbound.SouthboundMapper; +import org.opendaylight.ovsdb.southbound.SouthboundUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; @@ -49,15 +61,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.net.InetAddresses; - public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { private static final Logger LOG = LoggerFactory.getLogger(OvsdbBridgeUpdateCommand.class); private Map updatedBridgeRows; @@ -79,8 +88,8 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { private void updateBridge(ReadWriteTransaction transaction, Bridge bridge) { - final InstanceIdentifier connectionIId = SouthboundMapper.createInstanceIdentifier(getConnectionInfo()); - Optional connection = readNode(transaction, connectionIId); + final InstanceIdentifier connectionIId = getOvsdbConnectionInstance().getInstanceIdentifier(); + Optional connection = SouthboundUtil.readNode(transaction, connectionIId); if (connection.isPresent()) { LOG.debug("Connection {} is present",connection); @@ -89,7 +98,7 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { transaction.merge(LogicalDatastoreType.OPERATIONAL, connectionIId, connectionNode); // Update the bridge node with whatever data we are getting - InstanceIdentifier bridgeIid = SouthboundMapper.createInstanceIdentifier(getConnectionInfo(),bridge); + InstanceIdentifier bridgeIid = getInstanceIdentifier(bridge); Node bridgeNode = buildBridgeNode(bridge); transaction.merge(LogicalDatastoreType.OPERATIONAL, bridgeIid, bridgeNode); deleteEntries(transaction, protocolEntriesToRemove(bridgeIid,bridge)); @@ -109,8 +118,7 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { InstanceIdentifier bridgeIid, Bridge bridge) { Preconditions.checkNotNull(bridgeIid); Preconditions.checkNotNull(bridge); - List> result = - new ArrayList>(); + List> result = new ArrayList<>(); Bridge oldBridge = oldBridgeRows.get(bridge.getUuid()); @@ -134,8 +142,7 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { InstanceIdentifier bridgeIid, Bridge bridge) { Preconditions.checkNotNull(bridgeIid); Preconditions.checkNotNull(bridge); - List> result = - new ArrayList>(); + List> result = new ArrayList<>(); Bridge oldBridge = oldBridgeRows.get(bridge.getUuid()); @@ -159,8 +166,7 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { InstanceIdentifier bridgeIid, Bridge bridge) { Preconditions.checkNotNull(bridgeIid); Preconditions.checkNotNull(bridge); - List> result = - new ArrayList>(); + List> result = new ArrayList<>(); Bridge oldBridge = oldBridgeRows.get(bridge.getUuid()); try { @@ -179,32 +185,21 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { } } } catch (SchemaVersionMismatchException e) { - LOG.warn("protocol not supported by this version of ovsdb", e); + schemaMismatchLog("protocols", "Bridge", e); } return result; } - private Optional readNode(ReadWriteTransaction transaction, - final InstanceIdentifier connectionIid) { - Optional node = Optional.absent(); - try { - node = transaction.read(LogicalDatastoreType.OPERATIONAL, connectionIid).checkedGet(); - } catch (final ReadFailedException e) { - LOG.warn("Read Operational/DS for Node fail! {}", connectionIid, e); - } - return node; - } - private Node buildConnectionNode( Bridge bridge) { //Update node with managed node reference NodeBuilder connectionNode = new NodeBuilder(); - connectionNode.setNodeId(SouthboundMapper.createNodeId(getConnectionInfo().getRemoteIp(), - getConnectionInfo().getRemotePort())); + connectionNode.setNodeId(getOvsdbConnectionInstance().getNodeId()); OvsdbNodeAugmentationBuilder ovsdbConnectionAugmentationBuilder = new OvsdbNodeAugmentationBuilder(); - List managedBridges = new ArrayList(); - InstanceIdentifier bridgeIid = SouthboundMapper.createInstanceIdentifier(getConnectionInfo(),bridge); + List managedBridges = new ArrayList<>(); + InstanceIdentifier bridgeIid = SouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(), + bridge); ManagedNodeEntry managedBridge = new ManagedNodeEntryBuilder().setBridgeRef( new OvsdbBridgeRef(bridgeIid)).build(); managedBridges.add(managedBridge); @@ -212,14 +207,14 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { connectionNode.addAugmentation(OvsdbNodeAugmentation.class, ovsdbConnectionAugmentationBuilder.build()); - LOG.debug("Update node with bridge node ref {}",ovsdbConnectionAugmentationBuilder.toString()); + LOG.debug("Update node with bridge node ref {}", + ovsdbConnectionAugmentationBuilder.getManagedNodeEntry().iterator().next()); return connectionNode.build(); } private Node buildBridgeNode(Bridge bridge) { NodeBuilder bridgeNodeBuilder = new NodeBuilder(); - InstanceIdentifier bridgeIid = SouthboundMapper.createInstanceIdentifier(getConnectionInfo(),bridge); - NodeId bridgeNodeId = SouthboundMapper.createManagedNodeId(bridgeIid); + NodeId bridgeNodeId = getNodeId(bridge); bridgeNodeBuilder.setNodeId(bridgeNodeId); OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder(); ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(bridge.getName())); @@ -232,15 +227,32 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { setFailMode(ovsdbBridgeAugmentationBuilder, bridge); setOpenFlowNodeRef(ovsdbBridgeAugmentationBuilder, bridge); setManagedBy(ovsdbBridgeAugmentationBuilder); + setAutoAttach(ovsdbBridgeAugmentationBuilder, bridge); bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbBridgeAugmentationBuilder.build()); LOG.debug("Built with the intent to store bridge data {}", - ovsdbBridgeAugmentationBuilder.toString()); + ovsdbBridgeAugmentationBuilder.build()); return bridgeNodeBuilder.build(); } + private void setAutoAttach(OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder, + Bridge bridge) { + try { + if (bridge.getAutoAttachColumn() != null + && bridge.getAutoAttachColumn().getData() != null + && !bridge.getAutoAttachColumn().getData().isEmpty()) { + Set uuids = bridge.getAutoAttachColumn().getData(); + for (UUID uuid : uuids) { + ovsdbBridgeAugmentationBuilder.setAutoAttach(new Uuid(uuid.toString())); + } + } + } catch (SchemaVersionMismatchException e) { + schemaMismatchLog("auto_attach", "Bridge", e); + } + } + private void setManagedBy(OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder) { - InstanceIdentifier connectionNodePath = SouthboundMapper.createInstanceIdentifier(getConnectionInfo()); + InstanceIdentifier connectionNodePath = getOvsdbConnectionInstance().getInstanceIdentifier(); ovsdbBridgeAugmentationBuilder.setManagedBy(new OvsdbNodeRef(connectionNodePath)); } @@ -268,7 +280,7 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { .getOtherConfigColumn().getData(); if (otherConfigs != null && !otherConfigs.isEmpty()) { Set otherConfigKeys = otherConfigs.keySet(); - List otherConfigList = new ArrayList(); + List otherConfigList = new ArrayList<>(); String otherConfigValue; for (String otherConfigKey : otherConfigKeys) { otherConfigValue = otherConfigs.get(otherConfigKey); @@ -289,7 +301,7 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { .getData(); if (externalIds != null && !externalIds.isEmpty()) { Set externalIdKeys = externalIds.keySet(); - List externalIdsList = new ArrayList(); + List externalIdsList = new ArrayList<>(); String externalIdValue; for (String externalIdKey : externalIdKeys) { externalIdValue = externalIds.get(externalIdKey); @@ -353,16 +365,25 @@ public class OvsdbBridgeUpdateCommand extends AbstractTransactionCommand { if (bridgeControllerIpAddress.getIpv4Address().getValue() .equals(networkInterfaceAddress.getHostAddress())) { ovsdbBridgeAugmentationBuilder.setBridgeOpenflowNodeRef( - SouthboundMapper.createInstanceIdentifier(bridgeControllerIpAddress, - bridgeControllerPortNumber)); + getOvsdbConnectionInstance().getInstanceIdentifier()); break networkInterfacesLoop; } } } } catch (Exception e) { - LOG.warn("Error getting local ip address {}", e); + LOG.warn("Error getting local ip address", e); } } } } + + private InstanceIdentifier getInstanceIdentifier(Bridge bridge) { + return SouthboundMapper.createInstanceIdentifier(getOvsdbConnectionInstance(), + bridge); + } + + private NodeId getNodeId(Bridge bridge) { + NodeKey nodeKey = getInstanceIdentifier(bridge).firstKeyOf(Node.class, NodeKey.class); + return nodeKey.getNodeId(); + } }