public void testNetVirt2() throws InterruptedException {
Thread.sleep(60000);
}
+
+ @Test
+ public void testReadOvsdbTopologyNodes() throws InterruptedException {
+ Thread.sleep(10000);
+ List<Node> ovsdbNodes = org.opendaylight.ovsdb.openstack.netvirt.MdsalUtils.readOvsdbTopologyNodes();
+ for (Node node : ovsdbNodes) {
+ LOG.info(">>>>> node: {}", node);
+ }
+ }
}
return createManagedNodeId(key.getRemoteIp(), key.getRemotePort(), bridgeName);
}
+ public static InstanceIdentifier<Topology> createInstanceIdentifier() {
+ InstanceIdentifier<Topology> path = InstanceIdentifier
+ .create(NetworkTopology.class)
+ .child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID));
+ return path;
+ }
+
public static InstanceIdentifier<Node> createInstanceIdentifier(NodeId nodeId) {
InstanceIdentifier<Node> nodePath = InstanceIdentifier
.create(NetworkTopology.class)
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbTables;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeName;
return ovsdbNodeId;
}
+ public static List<Node> readOvsdbTopologyNodes() {
+ List<Node> ovsdbNodes = new ArrayList<>();
+ InstanceIdentifier<Topology> topologyInstanceIdentifier = MdsalHelper.createInstanceIdentifier();
+ Topology topology = read(LogicalDatastoreType.OPERATIONAL, topologyInstanceIdentifier);
+ if (topology != null && topology.getNode() != null) {
+ for (Node node : topology.getNode()) {
+ OvsdbNodeAugmentation ovsdbNodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
+ if (ovsdbNodeAugmentation != null) {
+ ovsdbNodes.add(node);
+ }
+ }
+ }
+ return ovsdbNodes;
+ }
+
public static OvsdbNodeAugmentation readOvsdbNode(Node bridgeNode) {
OvsdbNodeAugmentation nodeAugmentation = null;
OvsdbBridgeAugmentation bridgeAugmentation = extractBridgeAugmentation(bridgeNode);
return bridgeNode;
}
- public static Uuid getBridgeUuid(Node node, String name) {
- Uuid uuid = null;
+ public static String getBridgeUuid(Node node, String name) {
+ String uuid = null;
OvsdbBridgeAugmentation ovsdbBridgeAugmentation = readBridge(node, name);
if (ovsdbBridgeAugmentation != null) {
- uuid = ovsdbBridgeAugmentation.getBridgeUuid();
+ uuid = ovsdbBridgeAugmentation.getBridgeUuid().getValue();
}
return uuid;
}
private volatile EventDispatcher eventDispatcher;
private volatile OvsdbInventoryService ovsdbInventoryService;
- void start() {
- this.triggerUpdates();
- }
-
- /*void init() {
- logger.info(">>>>>> init {}", this.getClass());
- }*/
-
private SouthboundEvent.Type ovsdbTypeToSouthboundEventType(OvsdbType ovsdbType) {
SouthboundEvent.Type type = SouthboundEvent.Type.NODE;
}
}
- private void triggerUpdates() {
- List<Node> nodes = null; // nodeCacheManager.getBridgeNodes();
- if (nodes == null) return;
- for (Node node : nodes) {
- OvsdbBridgeAugmentation bridge = node.getAugmentation(OvsdbBridgeAugmentation.class);
- if (bridge != null) {
- processBridgeUpdate(node, bridge);
- }
-
- List<TerminationPoint> tps = MdsalUtils.extractTerminationPoints(node);
- for (TerminationPoint tp : tps) {
- OvsdbTerminationPointAugmentation port = tp.getAugmentation(OvsdbTerminationPointAugmentation.class);
- if (port != null) {
- processPortUpdate(node, port);
- }
- }
+ @Override
+ public void triggerUpdates() {
+ logger.info("triggerUpdates");
+ List<Node> ovsdbNodes = MdsalUtils.readOvsdbTopologyNodes();
+ for (Node node : ovsdbNodes) {
+ ovsdbUpdate(node, node.getAugmentation(OvsdbNodeAugmentation.class),
+ OvsdbInventoryListener.OvsdbType.NODE, Action.ADD);
}
}
PORT
}
public void ovsdbUpdate(Node node, DataObject augmentationDataChanges, OvsdbType type, Action action);
-
+ public void triggerUpdates();
}
public interface OvsdbInventoryService {
public void listenerAdded(OvsdbInventoryListener listener);
public void listenerRemoved(OvsdbInventoryListener listener);
+ public void providersReady();
}
public OvsdbDataChangeListener (DataBroker dataBroker) {
this.dataBroker = dataBroker;
+ }
+
+ public void start() {
InstanceIdentifier<Node> path = InstanceIdentifier
.create(NetworkTopology.class)
.child(Topology.class, new TopologyKey(MdsalHelper.OVSDB_TOPOLOGY_ID))
DataChangeScope.SUBTREE);
LOG.info("netvirt OvsdbDataChangeListener: dataBroker= {}, registration= {}",
dataBroker, registration);
+ triggerUpdates();
}
@Override
mdsalConsumerListener.ovsdbUpdate(node, resourceAugmentationDataChanges, ovsdbType, action);
}
}
+
+ private void triggerUpdates() {
+ Set<OvsdbInventoryListener> mdsalConsumerListeners = OvsdbInventoryServiceImpl.getMdsalConsumerListeners();
+ for (OvsdbInventoryListener mdsalConsumerListener : mdsalConsumerListeners) {
+ mdsalConsumerListener.triggerUpdates();
+ }
+ }
}
LOG.info("listenerRemoved: {}", listener);
}
+ @Override
+ public void providersReady() {
+ ovsdbDataChangeListener.start();
+ }
+
public static Set<OvsdbInventoryListener> getMdsalConsumerListeners() {
return mdsalConsumerListeners;
}
import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
+import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryService;
+import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
static final Logger logger = LoggerFactory.getLogger(ProviderNetworkManagerImpl.class);
private HashMap<Long, ProviderEntry> providers = Maps.newHashMap();
private HashMap<Node, NetworkingProvider> nodeToProviderMapping = Maps.newHashMap();
+ private volatile OvsdbInventoryService ovsdbInventoryService;
@Override
public NetworkingProvider getProvider(Node node) {
providers.put(pid, new ProviderEntry(provider, properties));
logger.info("Neutron Networking Provider Registered: {}, with {} and pid={}",
provider.getClass().getName(), properties.toString(), pid);
+
+ ovsdbInventoryService.providersReady();
}
public void providerRemoved(final ServiceReference ref){
@Override
public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-
+ ovsdbInventoryService =
+ (OvsdbInventoryService) ServiceHelper.getGlobalInstance(OvsdbInventoryService.class, this);
}
@Override