Add blueprint wiring for the table-miss-enforcer app 34/38834/4
authorTom Pantelis <tpanteli@brocade.com>
Tue, 10 May 2016 21:49:30 +0000 (17:49 -0400)
committerAnil Vishnoi <vishnoianil@gmail.com>
Fri, 3 Jun 2016 08:10:53 +0000 (08:10 +0000)
Change-Id: Ic257f017d95ff5c58c74a6a6abcb0045b31b68b1
Signed-off-by: Tom Pantelis <tpanteli@brocade.com>
applications/table-miss-enforcer/src/main/java/org/opendaylight/openflowplugin/applications/tableMissEnforcer/LLDPPacketPuntEnforcer.java
applications/table-miss-enforcer/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/openflow/applications/table/miss/enforcer/rev140326/LLDPPacketPuntEnforcerModule.java
applications/table-miss-enforcer/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/openflow/applications/table/miss/enforcer/rev140326/LLDPPacketPuntEnforcerModuleFactory.java
applications/table-miss-enforcer/src/main/resources/initial/69-table-miss-enforcer.xml
applications/table-miss-enforcer/src/main/resources/org/opendaylight/blueprint/table-miss-enforcer.xml [new file with mode: 0644]
applications/table-miss-enforcer/src/main/yang/table-miss-enforcer.yang
applications/table-miss-enforcer/src/test/java/org/opendaylight/openflowplugin/applications/tableMissEnforcer/LLDPDataChangeListenerTest.java

index be0c723edc094454e4765cbd99d426fe35a78dd0..f28add7a4f7d99fda4d52b5d9796ef64d257ad43 100644 (file)
@@ -12,15 +12,21 @@ import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.Callable;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.openflowplugin.api.OFConstants;
+import org.opendaylight.openflowplugin.common.wait.SimpleTaskRetryLooper;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
 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;
@@ -38,7 +44,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instru
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
@@ -46,14 +54,42 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
  * Created by Martin Bobak mbobak@cisco.com on 8/27/14.
  */
 public class LLDPPacketPuntEnforcer implements DataChangeListener {
-
+    private static final long STARTUP_LOOP_TICK = 500L;
+    private static final int STARTUP_LOOP_MAX_RETRIES = 8;
     private static final short TABLE_ID = (short) 0;
     private static final String LLDP_PUNT_WHOLE_PACKET_FLOW = "LLDP_PUNT_WHOLE_PACKET_FLOW";
     private static final String DEFAULT_FLOW_ID = "42";
     private final SalFlowService flowService;
+    private final DataBroker dataBroker;
+    private ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
 
-    public LLDPPacketPuntEnforcer(SalFlowService flowService) {
+    public LLDPPacketPuntEnforcer(SalFlowService flowService, DataBroker dataBroker) {
         this.flowService = flowService;
+        this.dataBroker = dataBroker;
+    }
+
+    public void start() {
+        final InstanceIdentifier<FlowCapableNode> path = InstanceIdentifier.create(Nodes.class).child(Node.class).
+                augmentation(FlowCapableNode.class);
+        SimpleTaskRetryLooper looper = new SimpleTaskRetryLooper(STARTUP_LOOP_TICK, STARTUP_LOOP_MAX_RETRIES);
+        try {
+            dataChangeListenerRegistration = looper.loopUntilNoException(new Callable<ListenerRegistration<DataChangeListener>>() {
+                @Override
+                public ListenerRegistration<DataChangeListener> call() throws Exception {
+                    return dataBroker.registerDataChangeListener(
+                            LogicalDatastoreType.OPERATIONAL,
+                            path, LLDPPacketPuntEnforcer.this, AsyncDataBroker.DataChangeScope.BASE);
+                }
+            });
+        } catch (Exception e) {
+            throw new IllegalStateException("registerDataChangeListener failed", e);
+        }
+    }
+
+    public void close() {
+        if(dataChangeListenerRegistration != null) {
+            dataChangeListenerRegistration.close();
+        }
     }
 
     @Override
index 488a63f3bb301ca38f5f645b1b9a3bf5cf0731eb..1f309ad6a9b0fc3a06ee93c6069b679ed95d1869 100644 (file)
@@ -1,25 +1,12 @@
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.applications.table.miss.enforcer.rev140326;
 
-import java.util.concurrent.Callable;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.openflowplugin.applications.tableMissEnforcer.LLDPPacketPuntEnforcer;
-import org.opendaylight.openflowplugin.common.wait.SimpleTaskRetryLooper;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class LLDPPacketPuntEnforcerModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.applications.table.miss.enforcer.rev140326.AbstractLLDPPacketPuntEnforcerModule {
-    private static final long STARTUP_LOOP_TICK = 500L;
-    private static final int STARTUP_LOOP_MAX_RETRIES = 8;
-    private static final Logger LOG = LoggerFactory.getLogger(LLDPPacketPuntEnforcerModule.class);
+import org.opendaylight.controller.sal.common.util.NoopAutoCloseable;
 
+/**
+ * @deprecated Replaced by blueprint wiring
+ */
+@Deprecated
+public class LLDPPacketPuntEnforcerModule extends AbstractLLDPPacketPuntEnforcerModule {
     public LLDPPacketPuntEnforcerModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
         super(identifier, dependencyResolver);
     }
@@ -29,34 +16,8 @@ public class LLDPPacketPuntEnforcerModule extends org.opendaylight.yang.gen.v1.u
     }
 
     @Override
-    public void customValidation() {
-        // add custom validation form module attributes here.
-    }
-
-    @Override
-    public java.lang.AutoCloseable createInstance() {
-        final InstanceIdentifier<FlowCapableNode> path = InstanceIdentifier.create(Nodes.class).child(Node.class).augmentation(FlowCapableNode.class);
-        final SalFlowService salFlowService = getRpcRegistryDependency().getRpcService(SalFlowService.class);
-
-        ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
-        SimpleTaskRetryLooper looper = new SimpleTaskRetryLooper(STARTUP_LOOP_TICK, STARTUP_LOOP_MAX_RETRIES);
-        try {
-            dataChangeListenerRegistration = looper.loopUntilNoException(new Callable<ListenerRegistration<DataChangeListener>>() {
-                @Override
-                public ListenerRegistration<DataChangeListener> call() throws Exception {
-                    return getDataBrokerDependency().registerDataChangeListener(
-                            LogicalDatastoreType.OPERATIONAL,
-                            path,
-                            new LLDPPacketPuntEnforcer(salFlowService),
-                            AsyncDataBroker.DataChangeScope.BASE);
-                }
-            });
-        } catch (Exception e) {
-            LOG.warn("data listener registration failed: {}", e.getMessage());
-            LOG.debug("data listener registration failed.. ", e);
-            throw new IllegalStateException("LLDPPacketPuntEnforcer startup fail! System needs restart.", e);
-        }
-        return dataChangeListenerRegistration;
+    public AutoCloseable createInstance() {
+        // LLDPPacketPuntEnforcer instance is created via blueprint so this in a no-op.
+        return NoopAutoCloseable.INSTANCE;
     }
-
 }
index 1ebc1f90ec9073b5df3ab7e30ab5aa27b82b4a45..d3d5885079e7d9e7db930c0e14361deec6a35a31 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.openflow.applications.table.miss.enforcer.rev140326;
-public class LLDPPacketPuntEnforcerModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.applications.table.miss.enforcer.rev140326.AbstractLLDPPacketPuntEnforcerModuleFactory {
+
+/**
+ * @deprecated Replaced by blueprint wiring
+ */
+@Deprecated
+public class LLDPPacketPuntEnforcerModuleFactory extends AbstractLLDPPacketPuntEnforcerModuleFactory {
 
 }
index 003b563bb659db39d51b3cecbaf327e6ec4b83a0..5feb7ca5ecd7b85593adf9795e18920bcfa338c3 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>
     <configuration>
diff --git a/applications/table-miss-enforcer/src/main/resources/org/opendaylight/blueprint/table-miss-enforcer.xml b/applications/table-miss-enforcer/src/main/resources/org/opendaylight/blueprint/table-miss-enforcer.xml
new file mode 100644 (file)
index 0000000..ff9ff6c
--- /dev/null
@@ -0,0 +1,15 @@
+<?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"/>
+
+  <odl:rpc-service id="flowService" interface="org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService"/>
+
+  <bean id="LLDPPacketPuntEnforcer" class="org.opendaylight.openflowplugin.applications.tableMissEnforcer.LLDPPacketPuntEnforcer"
+          init-method="start" destroy-method="close">
+    <argument ref="flowService"/>
+    <argument ref="dataBroker"/>
+  </bean>
+</blueprint>
\ No newline at end of file
index 139c5dc6528f12b7b7b3c2f44d67f6bbbf20df30..709f46cbfb59387c08d838325c34fa5bf938917a 100644 (file)
@@ -16,6 +16,7 @@ module table-miss-enforcer {
     identity table-miss-enforcer {
         base "config:module-type";
         config:java-name-prefix LLDPPacketPuntEnforcer;
+        status deprecated;
     }
 
     augment "/config:modules/config:module/config:configuration" {
index 4a05f25e3d9b812296c3b7aa9084021e08c27b9f..94dd5975d6aab86f2f8be4766a95c0e48a42b742 100644 (file)
@@ -34,7 +34,7 @@ public class LLDPDataChangeListenerTest {
      */
     @Test
     public void testCreateFlow() {
-        LLDPPacketPuntEnforcer lldpDataChangeListener = new LLDPPacketPuntEnforcer(flowService);
+        LLDPPacketPuntEnforcer lldpDataChangeListener = new LLDPPacketPuntEnforcer(flowService, null);
         evaluateFlow(lldpDataChangeListener.createFlow());
     }