Merge "Fixed race condition in Activation."
authormichal rehak <mirehak@cisco.com>
Thu, 21 Nov 2013 16:24:54 +0000 (16:24 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 21 Nov 2013 16:24:54 +0000 (16:24 +0000)
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/internal/Activator.java
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/OpenflowPluginProvider.java

index 147569d8dee8778d69abc01d574fef856c514f6e..ec26c3f230787b35ac6bfcf7240a273a7f0997dc 100644 (file)
@@ -379,21 +379,15 @@ public class Activator extends ComponentActivatorAbstractBase {
                     .setCallbacks("setStatisticsManager", "unsetStatisticsManager").setRequired(false));
         } else
 
-        if (imp.equals(MDController.class)) {
-            // c.setInterface(new String[] { IDiscoveryListener.class.getName(),
-            // IContainerListener.class.getName(),
-            // IRefreshInternalProvider.class.getName(),
-            // IInventoryShimExternalListener.class.getName() }, null);
-            c.add(createServiceDependency().setService(SwitchConnectionProvider.class)
-                    .setCallbacks("setSwitchConnectionProvider", "unsetSwitchConnectionProvider").setRequired(true));
-            logger.debug("configuring MDController ..");
-        } else if (imp == pluginProvider) {
+         if (imp == pluginProvider) {
             // c.setInterface(new String[] { IDiscoveryListener.class.getName(),
             // IContainerListener.class.getName(),
             // IRefreshInternalProvider.class.getName(),
             // IInventoryShimExternalListener.class.getName() }, null);
             c.add(createServiceDependency().setService(BindingAwareBroker.class)
                     .setCallbacks("setBroker", "unsetBroker").setRequired(true));
+            c.add(createServiceDependency().setService(SwitchConnectionProvider.class)
+                    .setCallbacks("setSwitchConnectionProvider", "unsetSwitchConnectionProvider").setRequired(true));
             logger.debug("configuring Binding Aware Provider");
         }
     }
index 8e9cf612d958b0054759ce33b1a8c9312f1a5025..291af04874e9aa1b52d8ae8ea9282a9e5a5da4d2 100644 (file)
@@ -11,9 +11,11 @@ import java.util.Collection;
 import java.util.Collections;
 
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
+import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
+import org.opendaylight.openflowplugin.openflow.md.core.MDController;
 import org.opendaylight.yangtools.yang.binding.RpcService;
 import org.osgi.framework.BundleContext;
 
@@ -26,6 +28,20 @@ public class OpenflowPluginProvider implements BindingAwareProvider {
 
     private BundleContext context;
 
+    private SwitchConnectionProvider switchConnectionProvider;
+
+    private MDController mdController;
+
+    public void unsetSwitchConnectionProvider() {
+        switchConnectionProvider = null;
+    }
+
+    public void setSwitchConnectionProvider(
+            SwitchConnectionProvider switchConnectionProvider) {
+        this.switchConnectionProvider = switchConnectionProvider;
+        registerProvider();
+    }
+
     public BundleContext getContext() {
         return context;
     }
@@ -39,6 +55,10 @@ public class OpenflowPluginProvider implements BindingAwareProvider {
     @Override
     public void onSessionInitiated(ProviderContext session) {
         registrationManager.onSessionInitiated(session);
+        mdController = new MDController();
+        mdController.setSwitchConnectionProvider(switchConnectionProvider);
+        mdController.init();
+        mdController.start();
     }
 
     @Override
@@ -62,10 +82,22 @@ public class OpenflowPluginProvider implements BindingAwareProvider {
 
     public void setBroker(BindingAwareBroker broker) {
         this.broker = broker;
-        broker.registerProvider(this, context);
+        registerProvider();
     };
 
     public void unsetBroker(BindingAwareBroker broker) {
         this.broker = null;
     };
-}
+
+    private boolean hasAllDependencies(){
+        if(this.broker != null && this.switchConnectionProvider != null) {
+            return true;
+        }
+        return false;
+    }
+    private void registerProvider() {
+        if(hasAllDependencies()) {
+            this.broker.registerProvider(this,context);
+        }
+    }
+ }