[ovs-dev] [PATCH ovn v13 1/7] I-P engine: Provide the option for an engine to clear tracked engine data in every run.

numans at ovn.org numans at ovn.org
Fri Jun 19 11:10:08 UTC 2020


From: Numan Siddique <numans at ovn.org>

A new function is added in the engine node called - clear_tracked_data() to
clear any engine data which was tracked during the engine run. This tracked data
has to be part of the engine 'data'. engine_init_run() calls clear_tracked_data()
and each engine node interested in tracking the data needs to implement the
en_<ENGINE_NODE_NAME>clear_tracked_data() function.

With this patch, an engine node can store any changes done to the engine data
separately in the engine change handlers. The parent of this engine node
can use this tracked data for incrementally processing the changes. Upcoming
patches in the series will make use of this.

Acked-by: Dumitru Ceara <dceara at redhat.com>
Acked-by: Han Zhou <hzhou at ovn.org>
Signed-off-by: Numan Siddique <numans at ovn.org>
---
 lib/inc-proc-eng.c | 8 ++++++++
 lib/inc-proc-eng.h | 9 +++++++++
 2 files changed, 17 insertions(+)

diff --git a/lib/inc-proc-eng.c b/lib/inc-proc-eng.c
index 9b1479a1c..8b56cbaec 100644
--- a/lib/inc-proc-eng.c
+++ b/lib/inc-proc-eng.c
@@ -121,6 +121,10 @@ void
 engine_cleanup(void)
 {
     for (size_t i = 0; i < engine_n_nodes; i++) {
+        if (engine_nodes[i]->clear_tracked_data) {
+            engine_nodes[i]->clear_tracked_data(engine_nodes[i]->data);
+        }
+
         if (engine_nodes[i]->cleanup) {
             engine_nodes[i]->cleanup(engine_nodes[i]->data);
         }
@@ -260,6 +264,10 @@ engine_init_run(void)
     VLOG_DBG("Initializing new run");
     for (size_t i = 0; i < engine_n_nodes; i++) {
         engine_set_node_state(engine_nodes[i], EN_STALE);
+
+        if (engine_nodes[i]->clear_tracked_data) {
+            engine_nodes[i]->clear_tracked_data(engine_nodes[i]->data);
+        }
     }
 }
 
diff --git a/lib/inc-proc-eng.h b/lib/inc-proc-eng.h
index 8606a360b..e25bcb29c 100644
--- a/lib/inc-proc-eng.h
+++ b/lib/inc-proc-eng.h
@@ -149,6 +149,10 @@ struct engine_node {
      * doesn't store pointers to DB records it's still safe to use).
      */
     bool (*is_valid)(struct engine_node *);
+
+    /* Method to clear up tracked data maintained by the engine node in the
+     * engine 'data'. It may be NULL. */
+    void (*clear_tracked_data)(void *tracked_data);
 };
 
 /* Initialize the data for the engine nodes. It calls each node's
@@ -282,6 +286,7 @@ void engine_ovsdb_node_add_index(struct engine_node *, const char *name,
         .run = en_##NAME##_run, \
         .cleanup = en_##NAME##_cleanup, \
         .is_valid = en_##NAME##_is_valid, \
+        .clear_tracked_data = NULL, \
     };
 
 #define ENGINE_NODE_CUSTOM_DATA(NAME, NAME_STR) \
@@ -291,6 +296,10 @@ void engine_ovsdb_node_add_index(struct engine_node *, const char *name,
     static bool (*en_##NAME##_is_valid)(struct engine_node *node) = NULL; \
     ENGINE_NODE_DEF(NAME, NAME_STR)
 
+#define ENGINE_NODE_WITH_CLEAR_TRACK_DATA(NAME, NAME_STR) \
+    ENGINE_NODE(NAME, NAME_STR) \
+    en_##NAME.clear_tracked_data = en_##NAME##_clear_tracked_data;
+
 /* Macro to define member functions of an engine node which represents
  * a table of OVSDB */
 #define ENGINE_FUNC_OVSDB(DB_NAME, TBL_NAME) \
-- 
2.26.2



More information about the dev mailing list