OPNFLWPLUG-999 Spec - Reconciliation CLI and alarm for openflow nodes 97/71097/13
authorD Arunprakash <d.arunprakash@ericsson.com>
Thu, 19 Apr 2018 06:48:27 +0000 (12:18 +0530)
committerD Arunprakash <d.arunprakash@ericsson.com>
Tue, 7 Aug 2018 06:14:38 +0000 (11:44 +0530)
Change-Id: I3ef028506c8aa833ef6911483efc745c9fb09f17
Signed-off-by: D Arunprakash <d.arunprakash@ericsson.com>
docs/specs/index.rst
docs/specs/reconciliation-cli.rst [new file with mode: 0644]

index 00e708b1f3d43ccae70c90f4e99084baee486083..b1a99f86e74f621a00acbe4fe702b4f7a0e5c3e8 100644 (file)
@@ -13,3 +13,4 @@ Contents:
    group-add-mod
    bundle-reconciliation
    southbound-cli
+   reconciliation-cli
diff --git a/docs/specs/reconciliation-cli.rst b/docs/specs/reconciliation-cli.rst
new file mode 100644 (file)
index 0000000..08d060b
--- /dev/null
@@ -0,0 +1,289 @@
+.. contents:: Table of Contents
+      :depth: 3
+
+============================
+Reconciliation CLI and Alarm
+============================
+
+This spec addresses following enhancement in Openflowplugin module:
+
+Addition of user triggered reconciliation via karaf cli command or rpc in Openflowplugin.
+
+Problem description
+===================
+Whenever there is a state (flow/group) mismatch between config inventory and Openflow switch, user has to either restart
+the Openflow switch or odl controller. This will sync the state again between odl controller and Openflow switch.
+
+Reconciliation
+==============
+User can trigger reconciliation to sync the state between controller and Openflow switch. It can be done either via
+karaf cli command or rest rpc.
+
+Reconciliation Alarm
+====================
+Reconciliation alarm will be generated whenever user trigger the reconciliation via cli command or rest rpc and the
+same will be cleared once reconciliation is completed.
+
+Use Cases
+---------
+
+a. Trigger reconciliation for a single Openflow switch
+b. Trigger reconciliation for a list of Openflow switch
+c. Trigger reconciliation for all the connected Openflow switches
+d. Raise alarm whenever user triggers reconciliation for a Openflow switch
+e. Clear the alarm when the reconciliation completed for a Openflow swtich
+
+Proposed change
+---------------
+Karaf CLI command will be added to trigger reconciliation for the given Openflow nodes.
+Rest rpc will be exposed to trigger reconciliation for the given Openflow nodes.
+
+Feature `odl-openflowplugin-app-southbound-cli` should be installed in order to get these karaf cli and rest rpc.
+This feature is not part of any existing openflowplugin features and has to be installed explicitly by user.
+
+Ref: `Southbound CLI <https://docs.opendaylight.org/projects/openflowplugin/en/latest/specs/southbound-cli.html>`__
+
+Below two CLIs will be added,
+
+* openflow:reconcile
+* openflow:getreconciliationcount
+
+Pipeline changes
+----------------
+None
+
+Yang changes
+------------
+
+.. code-block:: none
+   :caption: reconciliation.yang
+
+   container reconciliation-counter {
+       description "Number of reconciliation triggered for openflow nodes";
+       config false;
+       list reconcile-counter {
+           key node-id;
+           uses counter;
+       }
+   }
+
+   grouping counter {
+       leaf node-id {
+           type uint64;
+       }
+       leaf success-count {
+           type uint32;
+           default 0;
+       }
+       leaf failure-count {
+           type uint32;
+           default 0;
+       }
+       leaf last-request-time {
+           description "Timestamp when reconciliation was last requested";
+           type string;
+       }
+   }
+
+   container reconciliation-state {
+       description "Reconciliation state for the given openflow nodes";
+       config false;
+       list reconciliation-state-list {
+           key node-id;
+           uses node-reconcile-state;
+       }
+   }
+
+   grouping node-reconcile-state {
+       leaf node-id {
+           type uint64;
+       }
+       leaf state {
+           description "Expresses the current state of the reconcile on a specific NODE";
+           type enumeration {
+               enum IN_PROGRESS;
+               enum COMPLETED;
+               enum FAILED;
+           }
+       }
+   }
+
+   rpc reconcile {
+       description "Request the reconciliation for given device or set of devices to the controller."
+       input {
+           leaf-list nodes {
+               description "List of nodes to be reconciled";
+               type uint64;
+           }
+           leaf reconcile-all-nodes {
+               description "Flag to indicate that all nodes to be reconciled";
+               type boolean;
+               mandatory false;
+               default false;
+           }
+       }
+       output {
+           leaf result {
+               type boolean;
+           }
+           leaf-list inprogress-nodes {
+               description "List of nodes that are already in reconciling mode";
+               type uint64;
+           }
+       }
+   }
+
+Targeted Release
+----------------
+Flourine
+
+Alternatives
+------------
+Disconnect the device from controller and reconnect or restart the controller.
+
+REST API
+--------
+
+* POST: http://localhost:8181/restconf/operations/reconciliation:reconcile
+* GET: http://localhost:8181/restconf/operational/reconciliation:reconciliation-counter
+
+Usage
+=====
+Install ``odl-openflowplugin-app-southbound-cli`` feature.
+
+CLI:
+----
+Trigger reconciliation for a connected openflow node via cli command ``openflow:reconcile``.
+
+.. code-block:: bash
+   :caption: openflow:reconcile
+
+   opendaylight-user@root>openflow:reconcile 244711506862915
+   reconcile successfully completed for the nodes
+
+Trigger reconciliation for all the connected openflow nodes via cli command ``openflow:reconcile -all``.
+
+.. code-block:: bash
+   :caption: openflow:reconcile -all
+
+         opendaylight-user@root>openflow:reconcile -all
+         reconcile successfully completed for the nodes
+
+Get details about number of times user triggered reconciliation for openflow nodes via ``openflow:getreconciliationcount``.
+
+.. code-block:: bash
+   :caption: openflow:getreconciliationcount
+
+   opendaylight-user@root>openflow:getreconcilecount
+   NodeId              ReconcileSuccessCount     ReconcileFailureCount     LastReconcileTime
+   ------------------------------------------------------------------------------------------------
+   244711506862915     2                         0                         2018-06-06T11:51:51.989
+
+REST:
+-----
+Trigger reconciliation for a single datapath node.
+
+.. code-block:: bash
+   :caption: http://localhost:8181/restconf/operations/reconciliation:reconcile
+
+   POST /restconf/operations/reconciliation:reconcile
+   {
+     "input" :  {
+       "nodes":["244711506862915"]
+     }
+   }
+
+
+Get reconciliation counter details
+
+.. code-block:: bash
+   :caption: http://localhost:8181/restconf/operational/reconciliation:reconciliation-counter
+
+   GET /restconf/operational/reconciliation:reconciliation-counter
+
+   OUTPUT:
+   =======
+   Request URL
+   http://localhost:8181/restconf/operational/reconciliation:reconciliation-counter
+
+   Response Body
+   {
+     "reconciliation-counter": {
+       "reconcile-counter": [
+         {
+           "node-id": 244711506862915,
+           "success-count": 4,
+           "last-request-time": "2018-06-06T12:09:53.325"
+         }
+       ]
+     }
+   }
+
+
+Trigger reconciliation for a openflow switch using routed rpc. This rpc will be exposed without installing southbound-cli
+feature and user can trigger reconciliation for the given Openflow node. This will not affect the counter and alarm.
+
+.. code-block:: bash
+   :caption: http://localhost:8181/restconf/operations/reconciliation:reconcile-node
+
+   POST /restconf/operations/reconciliation:reconcile-node
+   {
+     "input": {
+       "nodeId": "244711506862915",
+       "node": "/opendaylight-inventory:nodes/opendaylight-inventory:node[opendaylight-inventory:id='openflow:244711506862915']"
+     }
+   }
+
+   Request URL
+   http://localhost:8181/restconf/operations/reconciliation:reconcile-node
+
+   Response Body
+   {
+     "output": {
+       "result": true
+     }
+   }
+
+Implementation
+==============
+Assignee(s)
+-----------
+Primary assignee:
+
+* Arunprakash D <d.arunprakash@ericsson.com>
+
+Contributors:
+
+* Suja T <suja.t@ericsson.com>
+* Somashekhar Javalagi <somashekhar.manohara.javalagi@ericsson.com>
+
+Work Items
+----------
+* Implementation of cli to trigger reconciliation for openflow node(s).
+* Implementation of reconciliation alarm for user triggered reconciliation.
+
+Dependencies
+============
+No new dependencies.
+
+Testing
+=======
+Unit Tests
+----------
+#. Verify reconciliation for single openflow node
+#. Verify reconciliation for list of openflow nodes
+#. Verify reconciliation for all the openflow nodes
+#. Verify reconciliation alarm generated for user triggered reconciliation node
+#. Verify reconciliation alarm cleared once the reconciliation completed
+
+CSIT
+----
+None
+
+Documentation Impact
+====================
+None
+
+References
+==========
+None
\ No newline at end of file