@@ -20,6 +20,7 @@
#include "en-northd.h"
#include "lib/inc-proc-eng.h"
+#include "lib/ovn-nb-idl.h"
#include "openvswitch/list.h" /* TODO This is needed for ovn-parallel-hmap.h.
* lib/ovn-parallel-hmap.h should be updated
* to include this dependency itself */
@@ -122,6 +123,31 @@ void en_northd_run(struct engine_node *node, void *data)
engine_set_node_state(node, EN_UPDATED);
}
+
+bool
+northd_nb_nb_global_handler(struct engine_node *node,
+ void *data OVS_UNUSED)
+{
+ const struct nbrec_nb_global_table *nb_global_table
+ = EN_OVSDB_GET(engine_get_input("NB_nb_global", node));
+
+ const struct nbrec_nb_global *nb =
+ nbrec_nb_global_table_first(nb_global_table);
+
+ if (!nb) {
+ static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
+ VLOG_WARN_RL(&rl, "NB_Global is updated but has no record.");
+ return false;
+ }
+
+ /* We care about the 'options' and 'ipsec' columns only. */
+ if (nbrec_nb_global_is_updated(nb, NBREC_NB_GLOBAL_COL_OPTIONS) ||
+ nbrec_nb_global_is_updated(nb, NBREC_NB_GLOBAL_COL_IPSEC)) {
+ return false;
+ }
+ return true;
+}
+
void *en_northd_init(struct engine_node *node OVS_UNUSED,
struct engine_arg *arg OVS_UNUSED)
{
@@ -13,5 +13,6 @@ void en_northd_run(struct engine_node *node OVS_UNUSED, void *data OVS_UNUSED);
void *en_northd_init(struct engine_node *node OVS_UNUSED,
struct engine_arg *arg);
void en_northd_cleanup(void *data);
+bool northd_nb_nb_global_handler(struct engine_node *, void *data OVS_UNUSED);
#endif /* EN_NORTHD_H */
@@ -141,7 +141,8 @@ void inc_proc_northd_init(struct ovsdb_idl_loop *nb,
{
/* Define relationships between nodes where first argument is dependent
* on the second argument */
- engine_add_input(&en_northd, &en_nb_nb_global, NULL);
+ engine_add_input(&en_northd, &en_nb_nb_global,
+ northd_nb_nb_global_handler);
engine_add_input(&en_northd, &en_nb_logical_switch, NULL);
engine_add_input(&en_northd, &en_nb_port_group, NULL);
engine_add_input(&en_northd, &en_nb_load_balancer, NULL);
@@ -8657,11 +8657,11 @@ wait_column '20.0.0.4' Address_Set addresses name=pg1_ip4
recompute_stat=$(as northd ovn-appctl -t NORTHD_TYPE inc-engine/show-stats sync_to_sb_addr_set recompute)
AT_CHECK([test $recompute_stat -ge 1])
-# Any change to northd engine node should result in full recompute of sync_to_sb_addr_set node.
+# No change, no recompute
check as northd ovn-appctl -t NORTHD_TYPE inc-engine/clear-stats
check ovn-nbctl --wait=sb sync
-recompute_stat=$(as northd ovn-appctl -t NORTHD_TYPE inc-engine/show-stats sync_to_sb_addr_set recompute)
-AT_CHECK([test $recompute_stat -ge 1])
+AT_CHECK([as northd ovn-appctl -t NORTHD_TYPE inc-engine/show-stats sync_to_sb_addr_set recompute], [0], [0
+])
AT_CLEANUP
])
For changes such as nb_cfg related columns, don't trigger recompute. Signed-off-by: Han Zhou <hzhou@ovn.org> --- northd/en-northd.c | 26 ++++++++++++++++++++++++++ northd/en-northd.h | 1 + northd/inc-proc-northd.c | 3 ++- tests/ovn-northd.at | 6 +++--- 4 files changed, 32 insertions(+), 4 deletions(-)