Use the memorized service reference
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / impl / ProviderNetworkManagerImpl.java
index 5f6eac6bdd20d8af0ac5c898822e7c7bea87455f..e7a4e370c1ffb1e1feb0d048d746f2e84dbc6ff3 100644 (file)
@@ -1,23 +1,23 @@
 /*
- * Copyright (C) 2013 Red Hat, Inc.
+ * Copyright (c) 2013, 2015 Red Hat, 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
- *
- * Authors : Madhu Venugopal, Brent Salisbury, Dave Tucker
  */
+
 package org.opendaylight.ovsdb.openstack.netvirt.impl;
 
-import java.util.HashMap;
 import java.util.Map;
 
 import org.opendaylight.ovsdb.openstack.netvirt.ConfigInterface;
 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;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -27,9 +27,10 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Maps;
 
 public class ProviderNetworkManagerImpl implements ConfigInterface, NetworkingProviderManager {
-    static final Logger logger = LoggerFactory.getLogger(ProviderNetworkManagerImpl.class);
-    private HashMap<Long, ProviderEntry> providers = Maps.newHashMap();
-    private HashMap<Node, NetworkingProvider> nodeToProviderMapping = Maps.newHashMap();
+    private static final Logger LOG = LoggerFactory.getLogger(ProviderNetworkManagerImpl.class);
+    private Map<Long, ProviderEntry> providers = Maps.newHashMap();
+    private Map<Node, NetworkingProvider> nodeToProviderMapping = Maps.newHashMap();
+    private volatile OvsdbInventoryService ovsdbInventoryService;
 
     @Override
     public NetworkingProvider getProvider(Node node) {
@@ -48,7 +49,7 @@ public class ProviderNetworkManagerImpl implements ConfigInterface, NetworkingPr
 
         Iterable<ProviderEntry> matchingProviders = Iterables.filter(providers.values(), providerEntryPredicate);
         if (!matchingProviders.iterator().hasNext()) {
-            logger.error("No providers matching {} found", targetVersion);
+            LOG.error("No providers matching {} found", targetVersion);
         }
 
         // Return the first match as only have one matching provider today
@@ -67,19 +68,22 @@ public class ProviderNetworkManagerImpl implements ConfigInterface, NetworkingPr
                 (String) ref.getProperty(Constants.OPENFLOW_VERSION_PROPERTY));
         properties.put(Constants.PROVIDER_TYPE_PROPERTY, (String) ref.getProperty(Constants.PROVIDER_TYPE_PROPERTY));
         providers.put(pid, new ProviderEntry(provider, properties));
-        logger.info("Neutron Networking Provider Registered: {}, with {} and pid={}",
+        LOG.info("Neutron Networking Provider Registered: {}, with {} and pid={}",
                 provider.getClass().getName(), properties.toString(), pid);
+
+        ovsdbInventoryService.providersReady();
     }
 
     public void providerRemoved(final ServiceReference ref){
         Long pid = (Long)ref.getProperty(org.osgi.framework.Constants.SERVICE_ID);
         providers.remove(pid);
-        logger.info("Neutron Networking Provider Removed: {}", pid);
+        LOG.info("Neutron Networking Provider Removed: {}", pid);
     }
 
     @Override
-    public void setDependencies(BundleContext bundleContext, ServiceReference serviceReference) {
-
+    public void setDependencies(ServiceReference serviceReference) {
+        ovsdbInventoryService =
+                (OvsdbInventoryService) ServiceHelper.getGlobalInstance(OvsdbInventoryService.class, this);
     }
 
     @Override