On Feb 04, Xavier Simonart via dev wrote: > Both ovn-ic and ovn-northod were trying to update Service_Monitor options > az-name, but their updates were differing by the _comment. > This resulted in 100% CPU use by ovn-northd and ovn-ic. > > The test "Service Monitor synchronization" was hitting the issue, but was > successful. The test has been updated to detect the issue and fail if the > issue > is still encountered. > > Reported-at: https://issues.redhat.com/browse/FDP-2657 > Fixes: f40a5c3c803a ("ic: Implement cross-AZ service monitor > synchronization.") > Signed-off-by: Xavier Simonart <[email protected]>
Acked-by: Lorenzo Bianconi <[email protected]> > --- > ic/ovn-ic.c | 21 ++++++++++++--------- > tests/ovn-ic.at | 8 ++++++++ > 2 files changed, 20 insertions(+), 9 deletions(-) > > diff --git a/ic/ovn-ic.c b/ic/ovn-ic.c > index fd5ecefb3..95d73cb4b 100644 > --- a/ic/ovn-ic.c > +++ b/ic/ovn-ic.c > @@ -3027,16 +3027,19 @@ sync_service_monitor(struct ic_context *ctx) > sbrec_service_monitor_set_ic_learned(sb_rec, true); > } > > - /* Always update options since they may change via > - * NB configuration. Also update chassis_name if > - * the port has been reassigned to a different chassis. > - */ > - if (svc_mon->chassis_name) { > - sbrec_service_monitor_set_chassis_name(sb_rec, > - svc_mon->chassis_name); > + /* Only update if ic owns it */ > + if (sb_rec->ic_learned) { > + /* Always update options since they may change via > + * NB configuration. Also update chassis_name if > + * the port has been reassigned to a different chassis. > + */ > + if (svc_mon->chassis_name) { > + sbrec_service_monitor_set_chassis_name(sb_rec, > + svc_mon->chassis_name); > + } > + sbrec_service_monitor_set_options(sb_rec, &db_rec->options); > + refresh_sb_record_cache(&sync_data.local_sb_svcs_map, sb_rec); > } > - sbrec_service_monitor_set_options(sb_rec, &db_rec->options); > - refresh_sb_record_cache(&sync_data.local_sb_svcs_map, sb_rec); > } > > /* Delete local created records that are no longer used. */ > diff --git a/tests/ovn-ic.at b/tests/ovn-ic.at > index 370a755be..1a826aa1c 100644 > --- a/tests/ovn-ic.at > +++ b/tests/ovn-ic.at > @@ -4038,6 +4038,14 @@ check ovn-nbctl lb-del az2_lb1 > check_row_count sb:Service_Monitor 0 > check_row_count ic-sb:Service_Monitor 0 > > +# We expect something around 20 Service_Monitor updates. > +# Make sure there is no fight between ic and northd, which used to cause > +# up to more than 2000 updates. > +for az in az1 az2 az3; do > + svc_update_count=$(grep -c Service_Monitor $az/ovn-sb/ovn-sb.db) > + check test $svc_update_count -lt 50 > +done > + > OVN_CLEANUP_IC([az1], [az2], [az3]) > AT_CLEANUP > ]) > -- > 2.47.1 > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev >
_______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
