Merge changes from topic 'blueprint'
authorAnil Vishnoi <vishnoianil@gmail.com>
Tue, 7 Jun 2016 19:26:47 +0000 (19:26 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 7 Jun 2016 19:26:47 +0000 (19:26 +0000)
* changes:
  Add blueprint wiring for the topology manager app
  Add blueprint wiring for the TopologyLldpDiscovery app
  Add blueprint wiring for the ForwardingRulesManager app

30 files changed:
applications/forwardingrules-manager-config/src/main/resources/initial/30-forwardingrules-manager.xml
applications/forwardingrules-manager/pom.xml
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/config/yang/forwardingrules_manager/ForwardingRulesManagerModule.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/config/yang/forwardingrules_manager/ForwardingRulesManagerModuleFactory.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/ForwardingRulesManager.java
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/ForwardingRulesManagerConfig.java [deleted file]
applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/ForwardingRulesManagerImpl.java
applications/forwardingrules-manager/src/main/resources/org/opendaylight/blueprint/forwardingrules-manager.xml [new file with mode: 0644]
applications/forwardingrules-manager/src/main/yang/forwarding-manager.yang
applications/forwardingrules-manager/src/main/yang/forwardingrules-manager-config.yang [new file with mode: 0644]
applications/forwardingrules-manager/src/test/java/test/mock/FlowListenerTest.java
applications/forwardingrules-manager/src/test/java/test/mock/util/FRMTest.java
applications/topology-lldp-discovery/src/main/config/default-config.xml
applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/LLDPActivator.java
applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/LLDPDiscoveryListener.java
applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/LLDPDiscoveryProvider.java [deleted file]
applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/LLDPLinkAger.java
applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/utils/LLDPDiscoveryUtils.java
applications/topology-lldp-discovery/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/topology/lldp/discovery/impl/rev150530/TopologyLldpDiscoveryImplModule.java
applications/topology-lldp-discovery/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/topology/lldp/discovery/impl/rev150530/TopologyLldpDiscoveryImplModuleFactory.java
applications/topology-lldp-discovery/src/main/resources/org/opendaylight/blueprint/topology-lldp-discovery.xml [new file with mode: 0644]
applications/topology-lldp-discovery/src/main/yang/topology-lldp-discovery-config.yang [new file with mode: 0644]
applications/topology-lldp-discovery/src/main/yang/topology-lldp-discovery-impl.yang
applications/topology-manager/src/main/config/default-config.xml
applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/FlowCapableTopologyProvider.java
applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/OperationProcessor.java
applications/topology-manager/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/topology/manager/impl/rev150530/TopologyLldpDiscoveryImplModule.java
applications/topology-manager/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/topology/manager/impl/rev150530/TopologyLldpDiscoveryImplModuleFactory.java
applications/topology-manager/src/main/resources/org/opendaylight/blueprint/topology-manager.xml [new file with mode: 0644]
applications/topology-manager/src/main/yang/topology-manager-impl.yang

index 450ec70fc4d99f18b3938890c4cc44a069c28422..faebaf467170c2b5e1e84db2cc3ee4066a155b14 100644 (file)
@@ -6,6 +6,9 @@
  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
+
+ NOTE: This file is deprecated as wiring is now done via blueprint. This file is kept for
+       backwards compatibility. Runtime modifications are not honored.
 -->
 <snapshot>
     <configuration>
index d5ad08f08fd16471ad8b8e9143e4afd39280ad57..f10ac94bc8dbd99c7a5c61b04ff5ca91ed346dcf 100644 (file)
       <groupId>org.opendaylight.controller</groupId>
       <artifactId>config-api</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-common-util</artifactId>
+    </dependency>
 
     <dependency>
       <groupId>org.opendaylight.controller</groupId>
index d92645a21a48b4120b0d7085d89c61292fc7252d..65da14cffe1050a23a07a2a31daddd3f3a24f270 100644 (file)
@@ -8,16 +8,13 @@
 
 package org.opendaylight.openflowplugin.applications.config.yang.forwardingrules_manager;
 
-import org.opendaylight.openflowplugin.applications.frm.impl.ForwardingRulesManagerConfig;
-import org.opendaylight.openflowplugin.applications.frm.impl.ForwardingRulesManagerImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.opendaylight.controller.sal.common.util.NoopAutoCloseable;
 
-public class ForwardingRulesManagerModule extends org.opendaylight.openflowplugin.applications.config.yang.forwardingrules_manager.AbstractForwardingRulesManagerModule {
-
-    private static final Logger LOG = LoggerFactory.getLogger(ForwardingRulesManagerModule.class);
-    private static final boolean ENABLE_FGM_STALE_MARKING = false;
-    private static final int RECONCILIATION_RETRY_COUNT = 5;
+/**
+ * @deprecated Replaced by blueprint wiring
+ */
+@Deprecated
+public class ForwardingRulesManagerModule extends AbstractForwardingRulesManagerModule {
 
     public ForwardingRulesManagerModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
@@ -28,56 +25,8 @@ public class ForwardingRulesManagerModule extends org.opendaylight.openflowplugi
     }
 
     @Override
-    public void customValidation() {
-        // add custom validation form module attributes here.
-    }
-
-    @Override
-    public java.lang.AutoCloseable createInstance() {
-        LOG.info("FRM module initialization.");
-        final ForwardingRulesManagerConfig config = readConfig();
-        final ForwardingRulesManagerImpl forwardingrulessManagerProvider =
-                new ForwardingRulesManagerImpl(getDataBrokerDependency(), getRpcRegistryDependency(), config, getEntityOwnershipServiceDependency());
-        forwardingrulessManagerProvider.start();
-        LOG.info("FRM module started successfully.");
-        return new AutoCloseable() {
-            @Override
-            public void close() throws Exception {
-                try {
-                    forwardingrulessManagerProvider.close();
-                } catch (final Exception e) {
-                    LOG.warn("Unexpected error by stopping FRM", e);
-                }
-                LOG.info("FRM module stopped.");
-            }
-        };
-    }
-
-    private ForwardingRulesManagerConfig readConfig(){
-
-        final ForwardingRulesManagerConfig.ForwardingRulesManagerConfigBuilder fwdRulesMgrCfgBuilder = ForwardingRulesManagerConfig.builder();
-
-        if (getForwardingManagerSettings() != null && getForwardingManagerSettings().getStaleMarkingEnabled() != null){
-            fwdRulesMgrCfgBuilder.setStaleMarkingEnabled(getForwardingManagerSettings().getStaleMarkingEnabled());
-        }
-        else{
-            LOG.warn("Could not load XML configuration file via ConfigSubsystem! Fallback to default config value(s)");
-            fwdRulesMgrCfgBuilder.setStaleMarkingEnabled(ENABLE_FGM_STALE_MARKING);
-        }
-
-       if(getForwardingManagerSettings() != null && getForwardingManagerSettings().getReconciliationRetryCount()>0){
-                   fwdRulesMgrCfgBuilder.setReconciliationRetryCount(getForwardingManagerSettings().getReconciliationRetryCount());
-       }
-       else{
-             LOG.warn("Could not load XML configuration file via ConfigSubsystem for reconciliation retry! " +
-             "Fallback to default config value(s)");
-             fwdRulesMgrCfgBuilder.setReconciliationRetryCount(RECONCILIATION_RETRY_COUNT);
-            }
-
-
-
-        return fwdRulesMgrCfgBuilder.build();
-
+    public AutoCloseable createInstance() {
+        // FRM instance is created via blueprint so this in a no-op.
+        return NoopAutoCloseable.INSTANCE;
     }
-
 }
index 9a42dac24f111515d14e29e4bd26fed8bd0f930d..c58886050ba898dc24627997ddcc72735b9c6e12 100644 (file)
 * Do not modify this file unless it is present under src/main directory
 */
 package org.opendaylight.openflowplugin.applications.config.yang.forwardingrules_manager;
-public class ForwardingRulesManagerModuleFactory extends org.opendaylight.openflowplugin.applications.config.yang.forwardingrules_manager.AbstractForwardingRulesManagerModuleFactory {
+
+/**
+ * @deprecated Replaced by blueprint wiring
+ */
+@Deprecated
+public class ForwardingRulesManagerModuleFactory extends AbstractForwardingRulesManagerModuleFactory {
 
 }
index 286ffa1027db270863915fc5aaa6ec6c89e2ffb2..d6916d18e004c9fb080a6fd43f7e994b843a5abc 100644 (file)
@@ -8,11 +8,8 @@
 
 package org.opendaylight.openflowplugin.applications.frm;
 
-import org.opendaylight.openflowplugin.applications.frm.impl.ForwardingRulesManagerConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
-
-import org.opendaylight.openflowplugin.applications.frm.impl.FlowNodeConnectorInventoryTranslatorImpl;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.openflowplugin.applications.frm.impl.FlowNodeConnectorInventoryTranslatorImpl;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
@@ -20,7 +17,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalF
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.app.forwardingrules.manager.config.rev160511.ForwardingRulesManagerConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.SalTableService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 /**
@@ -161,7 +160,7 @@ public interface ForwardingRulesManager extends AutoCloseable {
      * @return True if owner, else false
      */
     public boolean isNodeOwner(InstanceIdentifier<FlowCapableNode> ident);
-     
+
     /**
      * Content definition method and prevent code duplicity
      * @return FlowNodeConnectorInventoryTranslatorImpl
diff --git a/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/ForwardingRulesManagerConfig.java b/applications/forwardingrules-manager/src/main/java/org/opendaylight/openflowplugin/applications/frm/impl/ForwardingRulesManagerConfig.java
deleted file mode 100644 (file)
index 0b4714e..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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
- */
-
-package org.opendaylight.openflowplugin.applications.frm.impl;
-
-/**
- * Created by efiijjp on 10/14/2015.
- */
-public class ForwardingRulesManagerConfig {
-
-    private final boolean m_staleMarkingEnabled;
-    private final int m_reconciliationRetryCount;
-
-    private ForwardingRulesManagerConfig(ForwardingRulesManagerConfigBuilder builder){
-        m_staleMarkingEnabled = builder.isStaleMarkingEnabled();
-        m_reconciliationRetryCount = builder.getReconciliationRetryCount();
-    }
-
-    public boolean isStaleMarkingEnabled(){
-        return m_staleMarkingEnabled;
-    }
-
-    public int getReconciliationRetryCount() {
-        return m_reconciliationRetryCount;
-    }
-
-
-    public static ForwardingRulesManagerConfigBuilder builder(){
-        return new ForwardingRulesManagerConfigBuilder();
-    }
-
-
-
-    public static class ForwardingRulesManagerConfigBuilder {
-        private boolean staleMarkingEnabled ;
-        private int reconciliationRetryCount ;
-
-        public boolean isStaleMarkingEnabled(){
-            return staleMarkingEnabled;
-        }
-        public int getReconciliationRetryCount() {return reconciliationRetryCount;}
-
-        public void setStaleMarkingEnabled(boolean staleMarkingEnabledFlag){
-            staleMarkingEnabled = staleMarkingEnabledFlag;
-        }
-
-        public void setReconciliationRetryCount(int retryCount ){
-            reconciliationRetryCount = retryCount;
-        }
-
-        public ForwardingRulesManagerConfig build(){
-            return new ForwardingRulesManagerConfig(this);
-        }
-    }
-
-}
index cd05e4e58412bba2be7fff9d3672092b3bb0af15..ef7ff256d76824c20c8eb12b5e3e6c7bd8ad28c8 100644 (file)
@@ -11,11 +11,10 @@ package org.opendaylight.openflowplugin.applications.frm.impl;
 import com.google.common.base.Optional;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Sets;
+import com.google.common.util.concurrent.CheckedFuture;
 import java.util.Collections;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
-
-import com.google.common.util.concurrent.CheckedFuture;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.common.api.clustering.Entity;
@@ -36,8 +35,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.app.forwardingrules.manager.config.rev160511.ForwardingRulesManagerConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.SalTableService;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -109,7 +109,7 @@ public class ForwardingRulesManagerImpl implements ForwardingRulesManager {
 
         this.tableListener = new TableForwarder(this, dataService);
         this.nodeListener = new FlowNodeReconciliationImpl(this, dataService);
-       flowNodeConnectorInventoryTranslatorImpl = 
+       flowNodeConnectorInventoryTranslatorImpl =
                            new FlowNodeConnectorInventoryTranslatorImpl(this,dataService);
         LOG.info("ForwardingRulesManager has started successfully.");
 
diff --git a/applications/forwardingrules-manager/src/main/resources/org/opendaylight/blueprint/forwardingrules-manager.xml b/applications/forwardingrules-manager/src/main/resources/org/opendaylight/blueprint/forwardingrules-manager.xml
new file mode 100644 (file)
index 0000000..1902cba
--- /dev/null
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+        odl:use-default-for-reference-types="true">
+
+  <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"/>
+  <reference id="rpcRegistry" interface="org.opendaylight.controller.sal.binding.api.RpcProviderRegistry"/>
+  <reference id="entityOwnershipService" interface="org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService"/>
+
+  <odl:clustered-app-config id="frmConfig"
+      binding-class="org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.app.forwardingrules.manager.config.rev160511.ForwardingRulesManagerConfig"/>
+
+  <bean id="frmManager" class="org.opendaylight.openflowplugin.applications.frm.impl.ForwardingRulesManagerImpl"
+          init-method="start" destroy-method="close">
+    <argument ref="dataBroker"/>
+    <argument ref="rpcRegistry"/>
+    <argument ref="frmConfig"/>
+    <argument ref="entityOwnershipService"/>
+  </bean>
+</blueprint>
\ No newline at end of file
index 0b40bb0a5d063ecbd6c21f31482dc44a5c65a642..7151141111a2a902513871538e2e3f6603e0659d 100644 (file)
@@ -20,6 +20,7 @@ module forwardingrules-manager {
     identity forwardingrules-manager {
             base config:module-type;
             config:java-name-prefix ForwardingRulesManager;
+            status deprecated;
     }
 
     augment "/config:modules/config:module/config:configuration" {
diff --git a/applications/forwardingrules-manager/src/main/yang/forwardingrules-manager-config.yang b/applications/forwardingrules-manager/src/main/yang/forwardingrules-manager-config.yang
new file mode 100644 (file)
index 0000000..f2772f8
--- /dev/null
@@ -0,0 +1,25 @@
+module forwarding-rules-manager-config {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:openflowplugin:app:forwardingrules-manager:config";
+    prefix "frm";
+
+    description
+        "Configuration for Forwarding Rules Manager application..";
+
+    revision "2016-05-11" {
+        description
+            "Initial revision.";
+    }
+
+    container forwarding-rules-manager-config {
+        leaf stale-marking-enabled {
+            type boolean;
+            default false;
+        }
+
+        leaf reconciliation-retry-count {
+            type uint16;
+            default 5;
+        }
+    }
+}
\ No newline at end of file
index 44cc0055163a93ef8545c883348d997011c71fa1..9eedf33a736099f1e57e064cd3016b45c52ba314 100644 (file)
@@ -7,12 +7,14 @@
  */
 package test.mock;
 
+import static org.junit.Assert.assertEquals;
+import java.util.Collections;
+import java.util.List;
 import org.junit.Test;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
-import org.opendaylight.openflowplugin.applications.frm.impl.ForwardingRulesManagerConfig;
 import org.opendaylight.openflowplugin.applications.frm.impl.ForwardingRulesManagerImpl;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
@@ -20,7 +22,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.Fl
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.*;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.StaleFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.StaleFlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.StaleFlowKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput;
@@ -33,17 +40,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatch;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
 import test.mock.util.EntityOwnershipServiceMock;
 import test.mock.util.FRMTest;
 import test.mock.util.RpcProviderRegistryMock;
 import test.mock.util.SalFlowServiceMock;
 
-import java.util.Collections;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-
 public class FlowListenerTest extends FRMTest {
     RpcProviderRegistry rpcProviderRegistryMock = new RpcProviderRegistryMock();
     EntityOwnershipService eos = new EntityOwnershipServiceMock();
index 4d45861a2eaa4ea3505f508c592bc1b07feee060..ca2d80771d9fa91cd47223f17d86e1307ddf6e00 100644 (file)
@@ -1,10 +1,5 @@
 package test.mock.util;
 
-import org.opendaylight.openflowplugin.applications.frm.impl.ForwardingRulesManagerConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 import java.util.Collections;
 import java.util.concurrent.ExecutionException;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
@@ -12,11 +7,17 @@ import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.app.forwardingrules.manager.config.rev160511.ForwardingRulesManagerConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.app.forwardingrules.manager.config.rev160511.ForwardingRulesManagerConfigBuilder;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 public abstract class FRMTest extends AbstractDataBrokerTest {
@@ -56,9 +57,9 @@ public abstract class FRMTest extends AbstractDataBrokerTest {
     }
 
     public ForwardingRulesManagerConfig getConfig(){
-        ForwardingRulesManagerConfig.ForwardingRulesManagerConfigBuilder cfgBuilder =
-                new ForwardingRulesManagerConfig.ForwardingRulesManagerConfigBuilder();
+        ForwardingRulesManagerConfigBuilder cfgBuilder = new ForwardingRulesManagerConfigBuilder();
         cfgBuilder.setStaleMarkingEnabled(false);
+        cfgBuilder.setReconciliationRetryCount(0);
         return cfgBuilder.build();
 
     }
index cf7005a47b79787b961807533ca6e952b253f724..1fc3a7af5e2ece5e8b4e706fe02dd8d899516c41 100644 (file)
@@ -6,6 +6,9 @@ Copyright (c) 2014 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
+
+NOTE: This file is deprecated as wiring is now done via blueprint. This file is kept for
+       backwards compatibility. Runtime modifications are not honored.
 -->
 <snapshot>
   <required-capabilities>
index 79f100fa0730915b80b8aa0238055afe28efc8fe..3e5fb3bf10b96a5f69302b7e73ac259d34ac7b88 100644 (file)
@@ -7,39 +7,35 @@
  */
 package org.opendaylight.openflowplugin.applications.topology.lldp;
 
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.NotificationListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class LLDPActivator implements BindingAwareProvider, AutoCloseable {
+public class LLDPActivator implements AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(LLDPActivator.class);
-    private static LLDPDiscoveryProvider provider = new LLDPDiscoveryProvider();
+
     private static String lldpSecureKey;
 
-    public LLDPActivator(String secureKey) {
+    private final ListenerRegistration<NotificationListener> lldpNotificationRegistration;
+
+    public LLDPActivator(NotificationProviderService notificationService, LLDPDiscoveryListener lldpDiscoveryListener,
+            String secureKey) {
         lldpSecureKey = secureKey;
-    }
 
-    public void onSessionInitiated(final ProviderContext session) {
-        DataProviderService dataService = session.<DataProviderService>getSALService(DataProviderService.class);
-        provider.setDataService(dataService);
-        NotificationProviderService notificationService = session.<NotificationProviderService>getSALService(NotificationProviderService.class);
-        provider.setNotificationService(notificationService);
-        provider.start();
+        LOG.info("Starting LLDPActivator with lldpSecureKey: {}", lldpSecureKey);
+
+        lldpNotificationRegistration = notificationService.registerNotificationListener(lldpDiscoveryListener);
+
+        LOG.info("LLDPDiscoveryListener started.");
     }
 
     @Override
-    public void close() throws Exception {
-        if(provider != null) {
-            try {
-                provider.close();
-            } catch (Exception e) {
-                LOG.warn("Exception when closing down topology-lldp-discovery",e);
-            }
-        }
+    public void close() {
+        lldpNotificationRegistration.close();
+
+        LOG.info("LLDPDiscoveryListener stopped.");
     }
 
     public static String getLldpSecureKey() {
index 08c3c9c4a9b196cb47517fbca2aafe7493efbb9e..097d0edc4ebc0089c11375afa782ad9577ccb387 100644 (file)
@@ -17,16 +17,18 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.Pa
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-class LLDPDiscoveryListener implements PacketProcessingListener {
+public class LLDPDiscoveryListener implements PacketProcessingListener {
     private static final Logger LOG = LoggerFactory.getLogger(LLDPDiscoveryListener.class);
 
-    private LLDPLinkAger lldpLinkAger;
-    private NotificationProviderService notificationService;
+    private final LLDPLinkAger lldpLinkAger;
+    private final NotificationProviderService notificationService;
 
-    LLDPDiscoveryListener(NotificationProviderService notificationService) {
+    public LLDPDiscoveryListener(NotificationProviderService notificationService, LLDPLinkAger lldpLinkAger) {
         this.notificationService = notificationService;
+        this.lldpLinkAger = lldpLinkAger;
     }
 
+    @Override
     public void onPacketReceived(PacketReceived lldp) {
         NodeConnectorRef src = LLDPDiscoveryUtils.lldpToNodeConnectorRef(lldp.getPayload(), true);
         if(src != null) {
@@ -39,8 +41,4 @@ class LLDPDiscoveryListener implements PacketProcessingListener {
             lldpLinkAger.put(ld);
         }
     }
-
-    public void setLldpLinkAger(LLDPLinkAger lldpLinkAger) {
-        this.lldpLinkAger = lldpLinkAger;
-    }
-}
+}
\ No newline at end of file
diff --git a/applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/LLDPDiscoveryProvider.java b/applications/topology-lldp-discovery/src/main/java/org/opendaylight/openflowplugin/applications/topology/lldp/LLDPDiscoveryProvider.java
deleted file mode 100644 (file)
index c6203ef..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Copyright (c) 2013 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
- */
-package org.opendaylight.openflowplugin.applications.topology.lldp;
-
-import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
-import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
-import org.opendaylight.openflowplugin.applications.topology.lldp.utils.LLDPDiscoveryUtils;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.NotificationListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class LLDPDiscoveryProvider implements AutoCloseable {
-    private static final Logger LOG = LoggerFactory.getLogger(LLDPDiscoveryProvider.class);
-    private DataProviderService dataService;
-    private NotificationProviderService notificationService;
-
-    private ListenerRegistration<NotificationListener> listenerRegistration;
-    private LLDPLinkAger lldpLinkAger;
-
-    public DataProviderService getDataService() {
-        return this.dataService;
-    }
-
-    public void setDataService(final DataProviderService dataService) {
-        this.dataService = dataService;
-    }
-
-    public NotificationProviderService getNotificationService() {
-        return this.notificationService;
-    }
-
-    public void setNotificationService(final NotificationProviderService notificationService) {
-        this.notificationService = notificationService;
-    }
-
-    public void start() {
-        lldpLinkAger = new LLDPLinkAger(LLDPDiscoveryUtils.LLDP_INTERVAL, LLDPDiscoveryUtils.LLDP_EXPIRATION_TIME);
-        lldpLinkAger.setNotificationService(notificationService);
-
-        LLDPDiscoveryListener committer = new LLDPDiscoveryListener(notificationService);
-        committer.setLldpLinkAger(lldpLinkAger);
-
-        ListenerRegistration<NotificationListener> registerNotificationListener =
-                notificationService.registerNotificationListener(committer);
-        this.listenerRegistration = registerNotificationListener;
-        LOG.info("LLDPDiscoveryListener Started.");
-    }
-
-    public void close() {
-        try {
-            LOG.info("LLDPDiscoveryListener stopped.");
-            if (this.listenerRegistration!=null) {
-                this.listenerRegistration.close();
-            }
-            lldpLinkAger.close();
-        } catch (Exception e) {
-            throw new Error(e);
-        }
-    }
-}
index 67b74995f78d6a0ee5566013ff15cab05628a089..9acd4b2de34251d1a1c4972ffba82cde103bf24d 100644 (file)
@@ -20,15 +20,17 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.topology.discovery.rev
 
 public class LLDPLinkAger implements AutoCloseable {
     private final long linkExpirationTime;
-    private Map<LinkDiscovered, Date> linkToDate;
-    private Timer timer;
-    private NotificationProviderService notificationService;
+    private final Map<LinkDiscovered, Date> linkToDate;
+    private final Timer timer;
+    private final NotificationProviderService notificationService;
 
     /**
      * default ctor - start timer
      */
-    public LLDPLinkAger(final long lldpInterval, final long linkExpirationTime) {
+    public LLDPLinkAger(final long lldpInterval, final long linkExpirationTime,
+            final NotificationProviderService notificationService) {
         this.linkExpirationTime = linkExpirationTime;
+        this.notificationService = notificationService;
         linkToDate = new ConcurrentHashMap<>();
         timer = new Timer();
         timer.schedule(new LLDPAgingTask(), 0, lldpInterval);
@@ -46,10 +48,6 @@ public class LLDPLinkAger implements AutoCloseable {
         linkToDate.clear();
     }
 
-    public void setNotificationService(NotificationProviderService notificationService) {
-        this.notificationService = notificationService;
-    }
-
     private class LLDPAgingTask extends TimerTask {
 
         @Override
index 8112bcc2df886f11d3f062f0b7f18d2ba60e2052..29c99eca6f725cb52ba6763d9081a3c39dd18b53 100644 (file)
@@ -7,31 +7,31 @@
  */
 package org.opendaylight.openflowplugin.applications.topology.lldp.utils;
 
-import org.apache.commons.lang3.ArrayUtils;
-import java.nio.charset.Charset;
 import com.google.common.hash.HashCode;
+import com.google.common.hash.HashFunction;
+import com.google.common.hash.Hasher;
+import com.google.common.hash.Hashing;
+import java.lang.management.ManagementFactory;
+import java.nio.charset.Charset;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import org.apache.commons.lang3.ArrayUtils;
+import org.opendaylight.controller.liblldp.BitBufferHelper;
+import org.opendaylight.controller.liblldp.CustomTLVKey;
 import org.opendaylight.controller.liblldp.Ethernet;
 import org.opendaylight.controller.liblldp.LLDP;
-import org.opendaylight.controller.liblldp.BitBufferHelper;
 import org.opendaylight.controller.liblldp.LLDPTLV;
 import org.opendaylight.controller.liblldp.NetUtils;
-import com.google.common.hash.Hasher;
-import com.google.common.hash.Hashing;
-import com.google.common.hash.HashFunction;
 import org.opendaylight.openflowplugin.applications.topology.lldp.LLDPActivator;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
-import java.util.Arrays;
-import java.security.NoSuchAlgorithmException;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
-import java.lang.management.ManagementFactory;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.controller.liblldp.CustomTLVKey;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -39,12 +39,6 @@ import org.slf4j.LoggerFactory;
 public class LLDPDiscoveryUtils {
     private static final Logger LOG = LoggerFactory.getLogger(LLDPDiscoveryUtils.class);
 
-    // Send LLDP every five seconds
-    public static final Long LLDP_INTERVAL = (long) (1000*5);
-
-    // Let up to three intervals pass before we decide we are expired.
-    public static final Long LLDP_EXPIRATION_TIME = LLDP_INTERVAL*3;
-
     public static String macToString(byte[] mac) {
         StringBuilder b = new StringBuilder();
         for (int i = 0; i < mac.length; i++) {
index eed30f9e4134febf29c2172e6e2efa8a5cf0eb37..447dda656c9ac7c568d2370024507a7aed6dc248 100644 (file)
@@ -1,8 +1,12 @@
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.lldp.discovery.impl.rev150530;
 
-import org.opendaylight.openflowplugin.applications.topology.lldp.LLDPActivator;
+import org.opendaylight.controller.sal.common.util.NoopAutoCloseable;
 
-public class TopologyLldpDiscoveryImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.lldp.discovery.impl.rev150530.AbstractTopologyLldpDiscoveryImplModule {
+/**
+ * @deprecated Replaced by blueprint wiring
+ */
+@Deprecated
+public class TopologyLldpDiscoveryImplModule extends AbstractTopologyLldpDiscoveryImplModule {
     public TopologyLldpDiscoveryImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
@@ -12,15 +16,8 @@ public class TopologyLldpDiscoveryImplModule extends org.opendaylight.yang.gen.v
     }
 
     @Override
-    public void customValidation() {
-        // add custom validation form module attributes here.
+    public AutoCloseable createInstance() {
+        // LLDPActivator instance is created via blueprint so this in a no-op.
+        return NoopAutoCloseable.INSTANCE;
     }
-
-    @Override
-    public java.lang.AutoCloseable createInstance() {
-        LLDPActivator provider = new LLDPActivator(getLldpSecureKey());
-        getBrokerDependency().registerProvider(provider);
-        return provider;
-    }
-
 }
index e9670e2f1205e93227e41229ffc156b161f5b059..d335fc564efd83b990683f8161ae49976045de53 100644 (file)
@@ -8,6 +8,11 @@
 * Do not modify this file unless it is present under src/main directory
 */
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.lldp.discovery.impl.rev150530;
-public class TopologyLldpDiscoveryImplModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.lldp.discovery.impl.rev150530.AbstractTopologyLldpDiscoveryImplModuleFactory {
+
+/**
+ * @deprecated Replaced by blueprint wiring
+ */
+@Deprecated
+public class TopologyLldpDiscoveryImplModuleFactory extends AbstractTopologyLldpDiscoveryImplModuleFactory {
 
 }
diff --git a/applications/topology-lldp-discovery/src/main/resources/org/opendaylight/blueprint/topology-lldp-discovery.xml b/applications/topology-lldp-discovery/src/main/resources/org/opendaylight/blueprint/topology-lldp-discovery.xml
new file mode 100644 (file)
index 0000000..12ac129
--- /dev/null
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+        odl:use-default-for-reference-types="true">
+
+  <reference id="notificationService" interface="org.opendaylight.controller.sal.binding.api.NotificationProviderService"/>
+
+  <odl:clustered-app-config id="topologyLLDPConfig"
+      binding-class="org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.lldp.discovery.config.rev160511.TopologyLldpDiscoveryConfig">
+    <odl:default-config><![CDATA[
+      <topology-lldp-discovery-config xmlns="urn:opendaylight:params:xml:ns:yang:topology-lldp-discovery:config">
+        <lldp-secure-key>aa9251f8-c7c0-4322-b8d6-c3a84593bda3</lldp-secure-key>
+      </topology-lldp-discovery-config>
+    ]]></odl:default-config>
+  </odl:clustered-app-config>
+
+  <bean id="lldpLinkAger" class="org.opendaylight.openflowplugin.applications.topology.lldp.LLDPLinkAger"
+          destroy-method="close">
+    <!-- Interval to send LLDP (five seconds) -->
+    <argument value="5000"/>
+    <!-- Expiration interval for aging out links (3 * the interval)  -->
+    <argument value="15000"/>
+    <argument ref="notificationService"/>
+  </bean>
+
+  <bean id="lldpDiscoveryListener" class="org.opendaylight.openflowplugin.applications.topology.lldp.LLDPDiscoveryListener">
+    <argument ref="notificationService"/>
+    <argument ref="lldpLinkAger"/>
+  </bean>
+
+  <bean id="LLDPActivator" class="org.opendaylight.openflowplugin.applications.topology.lldp.LLDPActivator"
+         destroy-method="close">
+    <argument ref="notificationService"/>
+    <argument ref="lldpDiscoveryListener"/>
+    <argument>
+      <bean factory-ref="topologyLLDPConfig" factory-method="getLldpSecureKey"/>
+    </argument>
+  </bean>
+</blueprint>
\ No newline at end of file
diff --git a/applications/topology-lldp-discovery/src/main/yang/topology-lldp-discovery-config.yang b/applications/topology-lldp-discovery/src/main/yang/topology-lldp-discovery-config.yang
new file mode 100644 (file)
index 0000000..0e1189e
--- /dev/null
@@ -0,0 +1,21 @@
+module topology-lldp-discovery-config {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:topology-lldp-discovery:config";
+    prefix "topology-lldp-discovery-config";
+
+    description
+        "Configuration for Topology LLDP discovery application.";
+
+    revision "2016-05-11" {
+        description
+            "Initial revision.";
+    }
+
+    container topology-lldp-discovery-config {
+        leaf lldp-secure-key {
+            description "Provided key will be used to generate LLDP custom security hash";
+            type string;
+            mandatory true;
+        }
+    }
+}
\ No newline at end of file
index 709da19ae0d180c4706eb907ef6f736fb6181834..8daf8761154505448f4e1b1d8472fd3a6f0d8e4e 100644 (file)
@@ -17,6 +17,7 @@ module topology-lldp-discovery-impl {
     identity topology-lldp-discovery-impl {
         base config:module-type;
         config:java-name-prefix TopologyLldpDiscoveryImpl;
+        status deprecated;
     }
 
     augment "/config:modules/config:module/config:configuration" {
index 4c21c68308a1525107306e410a9ea0a922667cc1..6a9478b9509995079d58d4d759295711cbf3b263 100644 (file)
@@ -6,6 +6,9 @@ Copyright (c) 2014 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
+
+NOTE: This file is deprecated as wiring is now done via blueprint. This file is kept for
+       backwards compatibility. Runtime modifications are not honored.
 -->
 <snapshot>
   <required-capabilities>
index 66168949ff76176ea6b4720a82905c4efd1f1328..f49d0f52c63a72d6ef306e5d704d00c023c887ab 100644 (file)
@@ -7,16 +7,13 @@
  */
 package org.opendaylight.openflowplugin.applications.topology.manager;
 
-import java.util.concurrent.ExecutionException;
-
 import com.google.common.base.Optional;
+import java.util.concurrent.ExecutionException;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
@@ -29,34 +26,33 @@ import org.opendaylight.yangtools.yang.binding.NotificationListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class FlowCapableTopologyProvider implements BindingAwareProvider, AutoCloseable {
+public class FlowCapableTopologyProvider implements AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(FlowCapableTopologyProvider.class);
-    private ListenerRegistration<NotificationListener> listenerRegistration;
-    private Thread thread;
-    private TerminationPointChangeListenerImpl terminationPointChangeListener;
-    private NodeChangeListenerImpl nodeChangeListener;
     static final String TOPOLOGY_ID = "flow:1";
 
+    private final DataBroker dataBroker;
+    private final NotificationProviderService notificationService;
+    private final OperationProcessor processor;
+    private ListenerRegistration<NotificationListener> listenerRegistration;
+
+    public FlowCapableTopologyProvider(DataBroker dataBroker, NotificationProviderService notificationService,
+            OperationProcessor processor) {
+        this.dataBroker = dataBroker;
+        this.notificationService = notificationService;
+        this.processor = processor;
+    }
+
     /**
      * Gets called on start of a bundle.
-     *
-     * @param session
      */
-    @Override
-    public synchronized void onSessionInitiated(final ProviderContext session) {
-        final DataBroker dataBroker = session.getSALService(DataBroker.class);
-        final NotificationProviderService notificationService = session.getSALService(NotificationProviderService.class);
-
+    public void start() {
         final TopologyKey key = new TopologyKey(new TopologyId(TOPOLOGY_ID));
         final InstanceIdentifier<Topology> path = InstanceIdentifier
                 .create(NetworkTopology.class)
                 .child(Topology.class, key);
 
-        final OperationProcessor processor = new OperationProcessor(dataBroker);
         final FlowCapableTopologyExporter listener = new FlowCapableTopologyExporter(processor, path);
         this.listenerRegistration = notificationService.registerNotificationListener(listener);
-        this.terminationPointChangeListener = new TerminationPointChangeListenerImpl(dataBroker, processor);
-        nodeChangeListener = new NodeChangeListenerImpl(dataBroker, processor);
 
         if(!isFlowTopologyExist(dataBroker, path)){
             final ReadWriteTransaction tx = dataBroker.newReadWriteTransaction();
@@ -68,14 +64,11 @@ public class FlowCapableTopologyProvider implements BindingAwareProvider, AutoCl
             }
         }
 
-        thread = new Thread(processor);
-        thread.setDaemon(true);
-        thread.setName("FlowCapableTopologyExporter-" + TOPOLOGY_ID);
-        thread.start();
+        LOG.info("FlowCapableTopologyProvider started");
     }
 
     @Override
-    public synchronized void close() throws InterruptedException {
+    public void close() {
         LOG.info("FlowCapableTopologyProvider stopped.");
         if (this.listenerRegistration != null) {
             try {
@@ -86,24 +79,6 @@ public class FlowCapableTopologyProvider implements BindingAwareProvider, AutoCl
             }
             listenerRegistration = null;
         }
-        unregisterListener(terminationPointChangeListener);
-        unregisterListener(nodeChangeListener);
-        if (thread != null) {
-            thread.interrupt();
-            thread.join();
-            thread = null;
-        }
-    }
-
-    private static void unregisterListener(final AutoCloseable listenerToClose) {
-        if (listenerToClose != null) {
-            try {
-                listenerToClose.close();
-            } catch (Exception e) {
-                LOG.warn("Failed to close listener registration: {}", e.getMessage());
-                LOG.debug("Failed to close listener registration.. ", e);
-            }
-        }
     }
 
     private boolean isFlowTopologyExist(final DataBroker dataBroker,
index 87fb7354debb21ac8a458f3a7c3c7cb3bd6de118..96365a338868467d728dcd204d384633be24c106 100644 (file)
@@ -20,19 +20,24 @@ import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFaile
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-final class OperationProcessor implements AutoCloseable, Runnable, TransactionChainListener {
+public final class OperationProcessor implements AutoCloseable, Runnable, TransactionChainListener {
     private static final Logger LOG = LoggerFactory.getLogger(OperationProcessor.class);
     private static final int MAX_TRANSACTION_OPERATIONS = 100;
     private static final int OPERATION_QUEUE_DEPTH = 500;
 
     private final BlockingQueue<TopologyOperation> queue = new LinkedBlockingQueue<>(OPERATION_QUEUE_DEPTH);
     private final DataBroker dataBroker;
+    private final Thread thread;
     private BindingTransactionChain transactionChain;
     private volatile boolean finishing = false;
 
-    OperationProcessor(final DataBroker dataBroker) {
+    public OperationProcessor(final DataBroker dataBroker) {
         this.dataBroker = Preconditions.checkNotNull(dataBroker);
         transactionChain = this.dataBroker.createTransactionChain(this);
+
+        thread = new Thread(this);
+        thread.setDaemon(true);
+        thread.setName("FlowCapableTopologyExporter-" + FlowCapableTopologyProvider.TOPOLOGY_ID);
     }
 
     void enqueueOperation(final TopologyOperation task) {
@@ -43,6 +48,10 @@ final class OperationProcessor implements AutoCloseable, Runnable, TransactionCh
         }
     }
 
+    public void start() {
+        thread.start();
+    }
+
     @Override
     public void run() {
             while (!finishing) {
@@ -84,7 +93,8 @@ final class OperationProcessor implements AutoCloseable, Runnable, TransactionCh
                     transactionChain = dataBroker.createTransactionChain(this);
                     cleanDataStoreOperQueue();
                 } catch (final InterruptedException e) {
-                    LOG.warn("Stat Manager DS Operation thread interupted!", e);
+                    // This should mean we're shutting down.
+                    LOG.debug("Stat Manager DS Operation thread interupted!", e);
                     finishing = true;
                 } catch (final Exception e) {
                     LOG.warn("Stat DataStore Operation executor fail!", e);
@@ -115,10 +125,18 @@ final class OperationProcessor implements AutoCloseable, Runnable, TransactionCh
     }
 
     @Override
-    public void close() throws Exception {
+    public void close() {
+        thread.interrupt();
+        try {
+            thread.join();
+        } catch(InterruptedException e) {
+            LOG.debug("Join of thread {} was interrupted", thread.getName(), e);
+        }
+
         if (transactionChain != null) {
             transactionChain.close();
         }
 
+        LOG.debug("OperationProcessor closed");
     }
 }
index fb0c504c6676e672551377680e5d313c161a8f7e..e5a3185942f9ff4b3dd6df704281da08d2056edd 100644 (file)
@@ -1,8 +1,12 @@
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.manager.impl.rev150530;
 
-import org.opendaylight.openflowplugin.applications.topology.manager.FlowCapableTopologyProvider;
+import org.opendaylight.controller.sal.common.util.NoopAutoCloseable;
 
-public class TopologyLldpDiscoveryImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.manager.impl.rev150530.AbstractTopologyLldpDiscoveryImplModule {
+/**
+ * @deprecated Replaced by blueprint wiring
+ */
+@Deprecated
+public class TopologyLldpDiscoveryImplModule extends AbstractTopologyLldpDiscoveryImplModule {
     public TopologyLldpDiscoveryImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
@@ -11,16 +15,9 @@ public class TopologyLldpDiscoveryImplModule extends org.opendaylight.yang.gen.v
         super(identifier, dependencyResolver, oldModule, oldInstance);
     }
 
-    @Override
-    public void customValidation() {
-        // add custom validation form module attributes here.
-    }
-
     @Override
     public java.lang.AutoCloseable createInstance() {
-        FlowCapableTopologyProvider provider = new FlowCapableTopologyProvider();
-        getBrokerDependency().registerProvider(provider);
-        return provider;
+        // FlowCapableTopologyProvider instance is created via blueprint so this in a no-op.
+        return NoopAutoCloseable.INSTANCE;
     }
-
 }
index a98e3802f54184699eba57667ff0c8b809fe28c9..32f92de96b2e9e0af0bd96a19f11e0ba245448e1 100644 (file)
@@ -8,6 +8,11 @@
 * Do not modify this file unless it is present under src/main directory
 */
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.manager.impl.rev150530;
-public class TopologyLldpDiscoveryImplModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.topology.manager.impl.rev150530.AbstractTopologyLldpDiscoveryImplModuleFactory {
+
+/**
+ * @deprecated Replaced by blueprint wiring
+ */
+@Deprecated
+public class TopologyLldpDiscoveryImplModuleFactory extends AbstractTopologyLldpDiscoveryImplModuleFactory {
 
 }
diff --git a/applications/topology-manager/src/main/resources/org/opendaylight/blueprint/topology-manager.xml b/applications/topology-manager/src/main/resources/org/opendaylight/blueprint/topology-manager.xml
new file mode 100644 (file)
index 0000000..97827a9
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:odl="http://opendaylight.org/xmlns/blueprint/v1.0.0"
+        odl:use-default-for-reference-types="true">
+
+  <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"/>
+  <reference id="notificationService" interface="org.opendaylight.controller.sal.binding.api.NotificationProviderService"/>
+
+  <bean id="operationProcessor" class="org.opendaylight.openflowplugin.applications.topology.manager.OperationProcessor"
+          init-method="start" destroy-method="close">
+    <argument ref="dataBroker"/>
+  </bean>
+
+  <bean id="termPointChangeListener" class="org.opendaylight.openflowplugin.applications.topology.manager.TerminationPointChangeListenerImpl"
+          destroy-method="close">
+    <argument ref="dataBroker"/>
+    <argument ref="operationProcessor"/>
+  </bean>
+
+  <bean id="nodeChangeListener" class="org.opendaylight.openflowplugin.applications.topology.manager.NodeChangeListenerImpl"
+          destroy-method="close">
+    <argument ref="dataBroker"/>
+    <argument ref="operationProcessor"/>
+  </bean>
+
+  <bean id="topologyProvider" class="org.opendaylight.openflowplugin.applications.topology.manager.FlowCapableTopologyProvider"
+          init-method="start" destroy-method="close">
+    <argument ref="dataBroker"/>
+    <argument ref="notificationService"/>
+    <argument ref="operationProcessor"/>
+  </bean>
+</blueprint>
\ No newline at end of file
index e6fe667f35003f04cb0a08f4f94019ff417bded6..35ea8cc85add188888c87dafb22151b98e4b1f10 100644 (file)
@@ -17,6 +17,7 @@ module topology-manager-impl {
     identity topology-manager-impl {
         base config:module-type;
         config:java-name-prefix TopologyLldpDiscoveryImpl;
+        status deprecated;
     }
 
     augment "/config:modules/config:module/config:configuration" {