openflowpluginProvider shifted to databroker, rpc provider and notification provider... 29/19029/2
authorMartin Bobak <mbobak@cisco.com>
Fri, 24 Apr 2015 15:06:57 +0000 (17:06 +0200)
committerMartin Bobak <mbobak@cisco.com>
Fri, 24 Apr 2015 18:19:29 +0000 (20:19 +0200)
Change-Id: I0c3e7e74b69cd0e60f1cae078266d3bc439b5e74
Signed-off-by: Martin Bobak <mbobak@cisco.com>
features/src/main/resources/features.xml
openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/OpenFlowPluginProvider.java
openflowplugin-controller-config/src/main/resources/initial/42-openflowplugin-new.xml
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/OpenFlowPluginProviderImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/rpc/RpcContextImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/rpc/RpcManagerImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/config/openflow/plugin/impl/rev150327/OpenFlowProviderModule.java
openflowplugin-impl/src/main/yang/openflow-plugin-impl.yang

index d92d6057d5c0286858a2e88e69c4e6bbac8a180d..4621f94f9f3c11aeeb8a4c97506023b945deb91d 100644 (file)
@@ -1,5 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
+<!--
+  ~ Copyright (c) 2015 Cisco Systems, 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
+  -->
+
 <features name="openflowplugin-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
         <feature version="${project.version}">odl-openflowplugin-flow-services-ui</feature>
     </feature>
 
-    <feature name='odl-openflowplugin-southbound' description="OpenDaylight :: Openflow Plugin :: SouthBound" version='${project.version}'>
+    <feature name='odl-openflowplugin-southbound' description="OpenDaylight :: Openflow Plugin :: Li southBound API implementation " version='${project.version}'>
         <feature version="${mdsal.version}">odl-mdsal-broker</feature>
-        <feature version="${project.version}">odl-openflowplugin-nsf-model</feature>
+        <feature version="${project.version}">odl-openflowplugin-nsf-services</feature>
         <feature version="${openflowjava.version}">odl-openflowjava-protocol</feature>
+        <!-- TODO : remove dependency on openflowplugin in the future -->
         <bundle>mvn:org.opendaylight.openflowplugin/openflowplugin/${project.version}</bundle>
+        <bundle>mvn:org.opendaylight.openflowplugin/openflowplugin-impl/${project.version}</bundle>
         <bundle>mvn:org.opendaylight.openflowplugin/openflowplugin-api/${project.version}</bundle>
         <bundle>mvn:org.opendaylight.openflowplugin/openflowplugin-extension-api/${project.version}</bundle>
         <bundle>mvn:org.opendaylight.controller/liblldp/${sal.api.version}</bundle>
-        <bundle>mvn:org.opendaylight.openflowplugin.applications/inventory-manager/${project.version}</bundle>
-        <bundle>mvn:org.opendaylight.openflowplugin.applications/statistics-manager/${project.version}</bundle>
-        <configfile finalname="etc/opendaylight/karaf/42-openflowplugin-He.xml">mvn:org.opendaylight.openflowplugin/openflowplugin-controller-config/${project.version}/xml/config-He</configfile>
-        <configfile finalname="etc/opendaylight/karaf/43-msg-spy.xml">mvn:org.opendaylight.openflowplugin/openflowplugin-controller-config/${project.version}/xml/configmsgspy</configfile>
+        <configfile finalname="etc/opendaylight/karaf/42-openflowplugin-Li.xml">mvn:org.opendaylight.openflowplugin/openflowplugin-controller-config/${project.version}/xml/config-Li</configfile>
     </feature>
 
     <feature name='odl-openflowplugin-flow-services' description="OpenDaylight :: Openflow Plugin :: Flow Services" version='${project.version}'>
@@ -44,8 +51,6 @@
         <feature version='${project.version}'>odl-openflowplugin-nsf-model</feature>
         <bundle>mvn:org.opendaylight.openflowplugin.applications/topology-manager/${project.version}</bundle>
         <bundle>mvn:org.opendaylight.openflowplugin.applications/topology-lldp-discovery/${project.version}</bundle>
-        <bundle>mvn:org.opendaylight.openflowplugin.applications/statistics-manager/${project.version}</bundle>
-        <bundle>mvn:org.opendaylight.openflowplugin.applications/inventory-manager/${project.version}</bundle>
         <bundle>mvn:org.opendaylight.openflowplugin.applications/forwardingrules-manager/${project.version}</bundle>
         <bundle>mvn:org.opendaylight.controller/liblldp/${sal.api.version}</bundle>
         <configfile finalname="etc/opendaylight/karaf/30-forwardingrules-manager.xml">
index 2b0a59c1c4fd00b3c06080b6a0fda802746e7bbf..71e3248387b4286f4c0cf8a7e4e75c024fb49970 100644 (file)
@@ -8,17 +8,18 @@
 
 package org.opendaylight.openflowplugin.api.openflow;
 
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-
 import java.util.Collection;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
+import org.opendaylight.controller.md.sal.binding.api.BindingService;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.api.types.rev150327.OfpRole;
 
 /**
  * Created by Martin Bobak &lt;mbobak@cisco.com&gt; on 27.3.2015.
  */
-public interface OpenFlowPluginProvider extends AutoCloseable, BindingAwareProvider {
+public interface OpenFlowPluginProvider extends AutoCloseable, BindingService {
 
     /**
      * Method sets openflow java's connection providers.
@@ -27,9 +28,14 @@ public interface OpenFlowPluginProvider extends AutoCloseable, BindingAwareProvi
 
     /**
      * setter
-     * @param bindingAwareBroker
+     *
+     * @param dataBroker
      */
-    void setBindingAwareBroker(BindingAwareBroker bindingAwareBroker);
+    void setDataBroker(DataBroker dataBroker);
+
+    void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry);
+
+    void setNotificationProviderService(NotificationProviderService notificationProviderService);
 
     /**
      * Method sets role of this application in clustered environment.
index f7acb2e237c8c950e7f5a4cb42d419a3b6c140e4..9bb96d49b56033901943dcbf4593586fe4368fb1 100644 (file)
@@ -65,13 +65,18 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
                         <name>openflow-switch-connection-provider-legacy</name>
                     </openflow-switch-connection-provider>
 
-                    <binding-aware-broker>
-                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">
-                            binding:binding-broker-osgi-registry
-                        </type>
-                        <name>binding-osgi-broker</name>
-                    </binding-aware-broker>
-
+                    <data-broker>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-async-data-broker</type>
+                        <name>pingpong-binding-data-broker</name>
+                    </data-broker>
+                    <rpc-registry>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+                        <name>binding-rpc-broker</name>
+                    </rpc-registry>
+                    <notification-service>
+                        <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-notification-service</type>
+                        <name>binding-notification-broker</name>
+                    </notification-service>
                     <rpc-requests-quota>20000</rpc-requests-quota>
                 </module>
             </modules>
index 7fee889d64021548b7420000e0c4aa664ee46860..81b12fcbc5b130d8e52ce0e1213cb628bdc4a5ac 100644 (file)
@@ -9,9 +9,6 @@
 package org.opendaylight.openflowplugin.impl;
 
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.api.types.rev150327.OfpRole;
-
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
@@ -20,8 +17,8 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.openflowjava.protocol.spi.connection.SwitchConnectionProvider;
 import org.opendaylight.openflowplugin.api.openflow.OpenFlowPluginProvider;
 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionManager;
@@ -33,6 +30,7 @@ import org.opendaylight.openflowplugin.impl.device.DeviceManagerImpl;
 import org.opendaylight.openflowplugin.impl.rpc.RpcManagerImpl;
 import org.opendaylight.openflowplugin.impl.statistics.StatisticsManagerImpl;
 import org.opendaylight.openflowplugin.impl.util.TranslatorLibraryUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.api.types.rev150327.OfpRole;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,10 +43,12 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider {
 
     private DeviceManager deviceManager;
     private RpcManager rpcManager;
+    private RpcProviderRegistry rpcProviderRegistry;
     private StatisticsManager statisticsManager;
     private ConnectionManager connectionManager;
-    private BindingAwareBroker bindingAwareBroker;
-    private ProviderContext providerContext;
+    private NotificationProviderService notificationProviderService;
+
+    private DataBroker dataBroker;
     private OfpRole role;
     private Collection<SwitchConnectionProvider> switchConnectionProviders;
     private Long rpcRequestsQuota;
@@ -57,26 +57,6 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider {
         this.rpcRequestsQuota = rpcRequestsQuota;
     }
 
-    @Override
-    public void onSessionInitiated(final ProviderContext providerContextArg) {
-        providerContext = providerContextArg;
-        final DataBroker dataBroker = providerContext.getSALService(DataBroker.class);
-        final NotificationProviderService notificationService = providerContext.getSALService(NotificationProviderService.class);
-
-        connectionManager = new ConnectionManagerImpl();
-        deviceManager = new DeviceManagerImpl(dataBroker);
-        statisticsManager = new StatisticsManagerImpl();
-        rpcManager = new RpcManagerImpl(providerContext, rpcRequestsQuota);
-
-        connectionManager.setDeviceConnectedHandler(deviceManager);
-        deviceManager.setDeviceInitializationPhaseHandler(statisticsManager);
-        deviceManager.setNotificationService(notificationService);
-        statisticsManager.setDeviceInitializationPhaseHandler(rpcManager);
-        rpcManager.setDeviceInitializationPhaseHandler(deviceManager);
-
-        TranslatorLibraryUtil.setBasicTranslatorLibrary(deviceManager);
-        startSwitchConnections();
-    }
 
     private void startSwitchConnections() {
         final List<ListenableFuture<Boolean>> starterChain = new ArrayList<>(switchConnectionProviders.size());
@@ -106,6 +86,16 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider {
         this.switchConnectionProviders = switchConnectionProviders;
     }
 
+    @Override
+    public void setDataBroker(final DataBroker dataBroker) {
+        this.dataBroker = dataBroker;
+    }
+
+    @Override
+    public void setRpcProviderRegistry(final RpcProviderRegistry rpcProviderRegistry) {
+        this.rpcProviderRegistry = rpcProviderRegistry;
+    }
+
     @Override
     public void setRole(final OfpRole role) {
         this.role = role;
@@ -113,15 +103,31 @@ public class OpenFlowPluginProviderImpl implements OpenFlowPluginProvider {
 
 
     @Override
-    public void setBindingAwareBroker(final BindingAwareBroker bindingAwareBroker) {
-        this.bindingAwareBroker = bindingAwareBroker;
+    public void initialize() {
+
+        Preconditions.checkNotNull(dataBroker, "missing data broker");
+        Preconditions.checkNotNull(rpcProviderRegistry, "missing RPC provider registry");
+        Preconditions.checkNotNull(notificationProviderService, "missing notification provider service");
+
+        connectionManager = new ConnectionManagerImpl();
+        deviceManager = new DeviceManagerImpl(dataBroker);
+        statisticsManager = new StatisticsManagerImpl();
+        rpcManager = new RpcManagerImpl(rpcProviderRegistry, rpcRequestsQuota);
+
+        connectionManager.setDeviceConnectedHandler(deviceManager);
+        deviceManager.setDeviceInitializationPhaseHandler(statisticsManager);
+        deviceManager.setNotificationService(this.notificationProviderService);
+        statisticsManager.setDeviceInitializationPhaseHandler(rpcManager);
+        rpcManager.setDeviceInitializationPhaseHandler(deviceManager);
+
+        TranslatorLibraryUtil.setBasicTranslatorLibrary(deviceManager);
+        startSwitchConnections();
 
     }
 
     @Override
-    public void initialize() {
-        Preconditions.checkNotNull(bindingAwareBroker, "missing bindingAwareBroker");
-        bindingAwareBroker.registerProvider(this);
+    public void setNotificationProviderService(final NotificationProviderService notificationProviderService) {
+        this.notificationProviderService = notificationProviderService;
     }
 
     @Override
index 40dafbb802a3ce31c1a1aff60a223eb719d8fd6b..bf4ade5e94cf018e3967e5d0f058db900549be56 100644 (file)
@@ -11,8 +11,8 @@ import com.google.common.util.concurrent.SettableFuture;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
@@ -27,7 +27,7 @@ import org.slf4j.Logger;
 public class RpcContextImpl implements RpcContext {
 
     private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(RpcContextImpl.class);
-    final ProviderContext providerContext;
+    final RpcProviderRegistry rpcProviderRegistry;
 
     // TODO: add private Sal salBroker
     private final DeviceContext deviceContext;
@@ -37,8 +37,8 @@ public class RpcContextImpl implements RpcContext {
 
     private int maxRequestsPerDevice;
 
-    public RpcContextImpl(final ProviderContext providerContext, final DeviceContext deviceContext) {
-        this.providerContext = providerContext;
+    public RpcContextImpl(final RpcProviderRegistry rpcProviderRegistry, final DeviceContext deviceContext) {
+        this.rpcProviderRegistry = rpcProviderRegistry;
         this.deviceContext = deviceContext;
     }
 
@@ -49,7 +49,7 @@ public class RpcContextImpl implements RpcContext {
     @Override
     public <S extends RpcService> void registerRpcServiceImplementation(final Class<S> serviceClass,
                                                                         final S serviceInstance) {
-        final RoutedRpcRegistration<S> routedRpcReg = providerContext.addRoutedRpcImplementation(serviceClass, serviceInstance);
+        final RoutedRpcRegistration<S> routedRpcReg = rpcProviderRegistry.addRoutedRpcImplementation(serviceClass, serviceInstance);
         routedRpcReg.registerPath(NodeContext.class, deviceContext.getDeviceState().getNodeInstanceIdentifier());
         rpcRegistrations.add(routedRpcReg);
     }
index d34914422e6dbfafbcf86b5cc82dda3e1202f404..b11bd30e6d9b46737b9fd08c460ec9fd153f3255 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.openflowplugin.impl.rpc;
 
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
 import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitializationPhaseHandler;
 import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext;
@@ -16,13 +17,13 @@ import org.opendaylight.openflowplugin.impl.util.MdSalRegistratorUtils;
 
 public class RpcManagerImpl implements RpcManager {
 
-    private final ProviderContext providerContext;
+    private final RpcProviderRegistry rpcProviderRegistry;
     private DeviceInitializationPhaseHandler deviceInitPhaseHandler;
     private final Long maxRequestsQuota;
 
-    public RpcManagerImpl(final ProviderContext providerContext,
+    public RpcManagerImpl(final RpcProviderRegistry rpcProviderRegistry,
                           final Long quotaValue) {
-        this.providerContext = providerContext;
+        this.rpcProviderRegistry = rpcProviderRegistry;
         maxRequestsQuota = quotaValue;
     }
 
@@ -33,7 +34,7 @@ public class RpcManagerImpl implements RpcManager {
 
     @Override
     public void onDeviceContextLevelUp(final DeviceContext deviceContext) {
-        final RpcContext rpcContext = new RpcContextImpl(providerContext, deviceContext);
+        final RpcContext rpcContext = new RpcContextImpl(rpcProviderRegistry, deviceContext);
         rpcContext.setRequestContextQuota(maxRequestsQuota.intValue());
         deviceContext.setDeviceDisconnectedHandler(rpcContext);
         MdSalRegistratorUtils.registerServices(rpcContext, deviceContext);
index e84dab5b9bdfcf4914cc8525a7276208e0da4e6f..a441031cd3ff87d4cc88e3da13056235213f72b2 100644 (file)
@@ -31,7 +31,10 @@ public class OpenFlowProviderModule extends org.opendaylight.yang.gen.v1.urn.ope
 
         openflowPluginProvider.setSwitchConnectionProviders(getOpenflowSwitchConnectionProviderDependency());
         openflowPluginProvider.setRole(getRole());
-        openflowPluginProvider.setBindingAwareBroker(getBindingAwareBrokerDependency());
+        openflowPluginProvider.setDataBroker(getDataBrokerDependency());
+        openflowPluginProvider.setRpcProviderRegistry(getRpcRegistryDependency());
+        openflowPluginProvider.setNotificationProviderService(getNotificationServiceDependency());
+
         openflowPluginProvider.initialize();
 
         return openflowPluginProvider;
index 4a4eafa325d60ab39e2b0ce0e6e678e79a238c6f..057e9b063d184548bb8a75f9baba0e7ff465a7cd 100644 (file)
@@ -28,11 +28,27 @@ module openflow-plugin-provider-impl {
         case openflow-plugin-provider-impl {
             when "/config:modules/config:module/config:type = 'openflow-plugin-provider-impl'";
 
-            container binding-aware-broker {
+            container data-broker {
                 uses config:service-ref {
                     refine type {
                         mandatory true;
-                        config:required-identity md-sal-binding:binding-broker-osgi-registry;
+                        config:required-identity md-sal-binding:binding-async-data-broker;
+                    }
+                }
+            }
+            container rpc-registry {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity md-sal-binding:binding-rpc-registry;
+                    }
+                }
+            }
+            container notification-service {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity md-sal-binding:binding-notification-service;
                     }
                 }
             }