Skip to content

Commit

Permalink
I-P engine: Provide the option for an engine to clear tracked engine …
Browse files Browse the repository at this point in the history
…data in every run.

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@redhat.com>
Acked-by: Han Zhou <hzhou@ovn.org>
Signed-off-by: Numan Siddique <numans@ovn.org>
  • Loading branch information
numansiddique committed Jun 25, 2020
1 parent 80f5055 commit c7ed2c7
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
8 changes: 8 additions & 0 deletions lib/inc-proc-eng.c
Expand Up @@ -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);
}
Expand Down Expand Up @@ -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);
}
}
}

Expand Down
9 changes: 9 additions & 0 deletions lib/inc-proc-eng.h
Expand Up @@ -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
Expand Down Expand Up @@ -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) \
Expand All @@ -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) \
Expand Down

0 comments on commit c7ed2c7

Please sign in to comment.