From 004d312539727d26bc7d9dbd6a453f516867cd3f Mon Sep 17 00:00:00 2001 From: Ed Warnicke Date: Thu, 21 Nov 2013 06:44:13 -0800 Subject: [PATCH] Fixed race condition in Activation. Change-Id: I79d9c80a66d7a380eb9eeb122ee7bc0eae6d31e1 Signed-off-by: Ed Warnicke --- .../openflow/internal/Activator.java | 12 ++---- .../md/core/sal/OpenflowPluginProvider.java | 38 +++++++++++++++++-- 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/internal/Activator.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/internal/Activator.java index 147569d8de..ec26c3f230 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/internal/Activator.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/internal/Activator.java @@ -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"); } } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/OpenflowPluginProvider.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/OpenflowPluginProvider.java index 8e9cf612d9..291af04874 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/OpenflowPluginProvider.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/OpenflowPluginProvider.java @@ -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); + } + } + } -- 2.36.6