@@ -1412,23 +1412,6 @@ en_runtime_data_run(struct engine_node *node, void *data)
struct sset *local_lport_ids = &rt_data->local_lport_ids;
struct sset *active_tunnels = &rt_data->active_tunnels;
- /* Clear the (stale) tracked data if any. Even though the tracked data
- * gets cleared in the beginning of engine_init_run(),
- * any of the runtime data handler might have set some tracked
- * data and later another runtime data handler might return false
- * resulting in full recompute of runtime engine and rendering the tracked
- * data stale.
- *
- * It's possible that engine framework can be enhanced to indicate
- * the node handlers (in this case flow_output_runtime_data_handler)
- * that its input node had a full recompute. However we would still
- * need to clear the tracked data, because we don't want the
- * stale tracked data to be accessed outside of the engine, since the
- * tracked data is cleared in the engine_init_run() and not at the
- * end of the engine run.
- * */
- en_runtime_data_clear_tracked_data(data);
-
static bool first_run = true;
if (first_run) {
/* don't cleanup since there is no data yet */
@@ -327,6 +327,11 @@ engine_recompute(struct engine_node *node, bool forced, bool allowed)
}
/* Run the node handler which might change state. */
+ /* Clear tracked data before calling run() so that partially tracked data
+ * from some of the change handler executions are cleared. */
+ if (node->clear_tracked_data) {
+ node->clear_tracked_data(node->data);
+ }
node->run(node, node->data);
node->stats.recompute++;
}
Cleanup particially tracked data due to some of the change handler executions before falling back to recompute. This is done already in the en_runtime_data_run() implementation, but this patch makes it a generic behavior of the I-P engine. Signed-off-by: Han Zhou <hzhou@ovn.org> --- controller/ovn-controller.c | 17 ----------------- lib/inc-proc-eng.c | 5 +++++ 2 files changed, 5 insertions(+), 17 deletions(-)