Bug 3893: provide well known url to know that net-virt topology is ready
authorFlavio Fernandes <ffernand@redhat.com>
Tue, 30 Jun 2015 15:58:50 +0000 (11:58 -0400)
committerFlavio Fernandes <ffernand@redhat.com>
Tue, 30 Jun 2015 21:09:06 +0000 (17:09 -0400)
With this change, one can check the following url and know that ovsdb's netvirt
is up and functional:

   http://${ODL_IP}:8080/restconf/operational/network-topology:network-topology/topology/netvirt:1

Patch set 2: fix transaction
Patch set 3: code review, move new function to OvsdbInventoryServiceImpl
Patch set 4: typo (functional)

Change-Id: Ibe71d823b986fcdc9c12b6fa2a3994ae158fb696
Signed-off-by: Flavio Fernandes <ffernand@redhat.com>
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/Constants.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/OvsdbInventoryServiceImpl.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/impl/SouthboundImpl.java

index 36ce97190bed23e3828105aa79ac354e7a261d8a..4016e3b503f2780cad4fe64bfab91498f44ccd98 100644 (file)
@@ -66,6 +66,7 @@ public final class Constants {
      */
 
     public static final String OPENFLOW_NODE_PREFIX = "openflow:";
+    public static final String NETVIRT_TOPOLOGY_ID = "netvirt:1";
 
     /*
      * Ethertypes
index 41d192af1df8096373fce7ff12f710046f568f62..99af88140020b7303a5d7813efea1b398b96037d 100644 (file)
@@ -10,10 +10,19 @@ package org.opendaylight.ovsdb.openstack.netvirt.impl;
 import com.google.common.collect.Sets;
 import java.util.Set;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryService;
 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyBuilder;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
@@ -29,11 +38,13 @@ public class OvsdbInventoryServiceImpl implements ConfigInterface, OvsdbInventor
     private static DataBroker dataBroker = null;
     private static Set<OvsdbInventoryListener> ovsdbInventoryListeners = Sets.newCopyOnWriteArraySet();
     private OvsdbDataChangeListener ovsdbDataChangeListener = null;
+    private static MdsalUtils mdsalUtils = null;
 
     public OvsdbInventoryServiceImpl(ProviderContext providerContext) {
         dataBroker = providerContext.getSALService(DataBroker.class);
         LOG.info("OvsdbInventoryServiceImpl initialized");
         ovsdbDataChangeListener = new OvsdbDataChangeListener(dataBroker);
+        mdsalUtils = new MdsalUtils(dataBroker);
     }
 
     @Override
@@ -51,6 +62,7 @@ public class OvsdbInventoryServiceImpl implements ConfigInterface, OvsdbInventor
     @Override
     public void providersReady() {
         ovsdbDataChangeListener.start();
+        initializeNetvirtTopology();
     }
 
     public static Set<OvsdbInventoryListener> getOvsdbInventoryListeners() {
@@ -62,4 +74,15 @@ public class OvsdbInventoryServiceImpl implements ConfigInterface, OvsdbInventor
 
     @Override
     public void setDependencies(Object impl) {}
+
+    private void initializeNetvirtTopology() {
+        final TopologyId topologyId = new TopologyId(new Uri(Constants.NETVIRT_TOPOLOGY_ID));
+        InstanceIdentifier<Topology> path =
+                InstanceIdentifier.create(NetworkTopology.class).child(Topology.class, new TopologyKey(topologyId));
+        TopologyBuilder tpb = new TopologyBuilder();
+        tpb.setTopologyId(topologyId);
+        if (! mdsalUtils.put(LogicalDatastoreType.OPERATIONAL, path, tpb.build())) {
+            LOG.error("Error initializing netvirt topology");
+        }
+    }
 }
index d386836c4f2f1f04b2449f50f7c226b68198db3c..b127c64afa2d15882a9d2d7e9787ca228779ce6f 100644 (file)
@@ -7,7 +7,6 @@
  */
 package org.opendaylight.ovsdb.openstack.netvirt.impl;
 
-import com.google.common.base.Preconditions;
 import java.math.BigInteger;
 import java.security.InvalidParameterException;
 import java.util.ArrayList;