On 9/9/22 07:26, Han Zhou wrote: > Thanks for the review and sorry for the late response. > > On Tue, Aug 23, 2022 at 5:22 AM Dumitru Ceara <dce...@redhat.com> wrote: >> >> Hi Han, >> >> On 8/23/22 06:44, Han Zhou wrote: >>> On Tue, Jul 5, 2022 at 3:41 PM Han Zhou <hz...@ovn.org> wrote: >>>> >>>> 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 part seems good to me. To nit-pick I'd add: >> >> Fixes: ca278d98a4f5 ("ovn-controller: Initial use of incremental engine - > quiet mode.") >> > Ack > >>>> >>>> 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. >>>> >> >> I would argue that the problem is not that the IDL overwrites the track >> flag but that ovn-controller registers to monitor the same column in >> multiple ways. >> > Maybe. The IDL document didn't define this clearly, but it seems to me more > natural to add the bit flags without clearing existing ones when calling > ovsdb_idl_add_column() after ovsdb_idl_track_add_column(), because the > names don't indicate they are mutually exclusive. If a user really wants to > untrack a monitored column, it would be better to do so through a separate > API such as "ovsdb_idl_untrack_column()". The ovsdb_idl_add_column() was > implemented before the tracking support so it seemed more like a small > omission when adding support for tracking. >
Ok, this is also a valid way to look at it. >> Unfortunately, I think at this point we should aggregate all the idl >> registering inside the ctrl_register_ovs_idl() function and not do it >> from other modules. In my opinion it's becoming complicated to follow >> especially because all the DB I-P nodes (OVS_NODES, SB_NODES) are >> defined in ovn-controller.c. > > I agree it is a little complicated, but the intention of maintaining the > usage of OVS tables and columns from each module is still valid. Although > it is straightforward to add in the ovn-controller.c for a new column to be > monitored/tracked, it would be more difficult when removing. For example, > if a column is not used anymore in physical.c, we could simply remove the > monitoring from physical_register_ovs_idl() and not worry about other > modules. However, if we put them all in one place in ovn-controller.c, we > will need to check for every module and make sure none of them are using > the column before removing it. Of course, this approach may not work if the > ovsdb_idl_add_column() is overwriting the flags. > > It is true that OVS_NODES are defined in ovn-controller.c but they don't > really define which columns are monitored. > > So, for this bug fix, I was trying to keep the original approach, with the > assumption that the ovsdb_idl_add_column will be updated to keep the > tracking flag (although not urgent). > >> >> In any case, shall we split out this second part into a separate patch? > > Yes, it is better to split this part to a separate patch that solves the > order problem, but it will be the first patch and the real change "track > open_vswitch:external_ids" will depend on it. So we still need to make a > decision whether it is just an order change or aggregating monitoring. I > will send v2 when we make the decision. Please let me know if you still > prefer the "aggregation" approach with the above considerations. > Let's go for changing of the order like you initially suggested because it seems like we'd get a smaller patch. But I think we need to revisit this in the future. For example the 'ovsrec_port_col_external_ids' column is tracked in ovn-controller.c but also in encaps.c and physical.c. Shouldn't we remove it from ovn-controller.c? I didn't check closely but it seems to me that quite a few others are not really used in ovn-controller.c and could just be removed from ctrl_register_ovs_idl(). >> >>>> 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, >> >> Isn't "when the same column is monitored in different modes by different >> modules" more accurate? > > Absolutely. > > Thanks, > Han > Regards, Dumitru _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev