The column was not tracked before while it should. The column includes many ovn-controller global configurations that could impact the way flows are computed. It worked before because lots of the configurations are also populated to OVN-SB DB's chassis table, and as a result the SB DB change would notify back to the ovn-controller itself, thus triggering a recompute to make the configure change effective. However, this is not the way it is supposed to work. We should track the open_vswitch:external_ids column directly, and the I-P engine would immediately recompute and apply the change.
This patch also adjust the order of adding tracked and untracked columns to monitoring, to workaround a problem in OVS IDL that could end up overwriting the track flag. A XXX comment is added for future improvement. Signed-off-by: Han Zhou <hz...@ovn.org> --- controller/ovn-controller.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index 69615308e..dacef0204 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -922,23 +922,19 @@ static void ctrl_register_ovs_idl(struct ovsdb_idl *ovs_idl) { /* We do not monitor all tables by default, so modules must register - * their interest explicitly. */ + * their interest explicitly. + * XXX: when there are overlapping columns monitored by different modules, + * there is a chance that "track" flag added by ovsdb_idl_track_add_column + * by one module being overwritten by a following ovsdb_idl_add_column by + * another module. Before this is fixed in OVSDB IDL, we need to be careful + * about the order so that the "track" calls are after the "non-track" + * calls. */ ovsdb_idl_add_table(ovs_idl, &ovsrec_table_open_vswitch); - ovsdb_idl_add_column(ovs_idl, &ovsrec_open_vswitch_col_external_ids); ovsdb_idl_add_column(ovs_idl, &ovsrec_open_vswitch_col_other_config); ovsdb_idl_add_column(ovs_idl, &ovsrec_open_vswitch_col_bridges); ovsdb_idl_add_column(ovs_idl, &ovsrec_open_vswitch_col_datapaths); ovsdb_idl_add_table(ovs_idl, &ovsrec_table_interface); - ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_name); - ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_bfd); - ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_bfd_status); - ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_type); - ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_options); - ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_ofport); ovsdb_idl_add_table(ovs_idl, &ovsrec_table_port); - ovsdb_idl_track_add_column(ovs_idl, &ovsrec_port_col_name); - ovsdb_idl_track_add_column(ovs_idl, &ovsrec_port_col_interfaces); - ovsdb_idl_track_add_column(ovs_idl, &ovsrec_port_col_external_ids); ovsdb_idl_add_table(ovs_idl, &ovsrec_table_bridge); ovsdb_idl_add_column(ovs_idl, &ovsrec_bridge_col_ports); ovsdb_idl_add_column(ovs_idl, &ovsrec_bridge_col_name); @@ -958,6 +954,16 @@ ctrl_register_ovs_idl(struct ovsdb_idl *ovs_idl) bfd_register_ovs_idl(ovs_idl); physical_register_ovs_idl(ovs_idl); vif_plug_register_ovs_idl(ovs_idl); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_open_vswitch_col_external_ids); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_name); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_bfd); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_bfd_status); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_type); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_options); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_interface_col_ofport); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_port_col_name); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_port_col_interfaces); + ovsdb_idl_track_add_column(ovs_idl, &ovsrec_port_col_external_ids); } #define SB_NODES \ -- 2.30.2 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev