diff mbox series

[ovs-dev,4/4] tests: Add missing sync calls

Message ID 20230814092155.41811-4-amusil@redhat.com
State Changes Requested
Headers show
Series [ovs-dev,1/4] tests: Check proper DP and port key | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test fail github build: failed
ovsrobot/github-robot-_ovn-kubernetes fail github build: failed

Commit Message

Ales Musil Aug. 14, 2023, 9:21 a.m. UTC
Add various missing sync calls which caused the
tests to be flaky due to sometimes missed on various
checks or packets.

Signed-off-by: Ales Musil <amusil@redhat.com>
---
 tests/ovn-controller.at | 10 +++++-----
 tests/ovn-ic.at         |  7 ++++---
 tests/ovn-northd.at     | 14 +++++++++-----
 tests/ovn.at            | 20 ++++++++++++++------
 tests/system-ovn.at     |  5 +++--
 5 files changed, 35 insertions(+), 21 deletions(-)

Comments

Mark Michelson Aug. 14, 2023, 8:02 p.m. UTC | #1
Hi Ales, I have a couple of notes below.

On 8/14/23 05:21, Ales Musil wrote:
> Add various missing sync calls which caused the
> tests to be flaky due to sometimes missed on various
> checks or packets.
> 
> Signed-off-by: Ales Musil <amusil@redhat.com>
> ---
>   tests/ovn-controller.at | 10 +++++-----
>   tests/ovn-ic.at         |  7 ++++---
>   tests/ovn-northd.at     | 14 +++++++++-----
>   tests/ovn.at            | 20 ++++++++++++++------
>   tests/system-ovn.at     |  5 +++--
>   5 files changed, 35 insertions(+), 21 deletions(-)
> 
> diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at
> index f2216d245..6a4bcedab 100644
> --- a/tests/ovn-controller.at
> +++ b/tests/ovn-controller.at
> @@ -433,10 +433,10 @@ check ovn-nbctl --wait=hv sync
>   check ovn-nbctl --wait=hv sync
>   
>   # nb_cfg should be set to 1 in the chassis_private/nb_global/sb_global table
> -check_column 1 chassis_private nb_cfg
> -check_column 1 sb_global nb_cfg
> -check_column 1 nb:nb_global nb_cfg
> -check_column 0 chassis nb_cfg
> +wait_row_count nb:nb_global 1 nb_cfg=1
> +wait_row_count chassis_private 1 nb_cfg=1
> +wait_row_count sb_global 1 nb_cfg=1
> +wait_row_count chassis 1 nb_cfg=0

Why is this change necessary? We can see that there is an `ovn-nbctl 
--wait=hv sync` call above. Shouldn't we be able to check the values 
directly instead of having to wait?

>   
>   OVN_CLEANUP([hv])
>   AT_CLEANUP
> @@ -562,7 +562,7 @@ primary lport : [[lsp1]]
>   ])
>   
>   # Set the port type to localport
> -check ovn-nbctl lsp-set-type lsp1 localport
> +check ovn-nbctl --wait=hv lsp-set-type lsp1 localport
>   check as hv1 ovs-vsctl set open . external_ids:ovn-cms-options=localport
>   OVS_WAIT_UNTIL([test localport = $(ovn-sbctl get chassis . other_config:ovn-cms-options)])
>   
> diff --git a/tests/ovn-ic.at b/tests/ovn-ic.at
> index 09eac860c..a654e59fe 100644
> --- a/tests/ovn-ic.at
> +++ b/tests/ovn-ic.at
> @@ -543,6 +543,7 @@ done
>   # Create directly-connected routes
>   ovn_as az2 ovn-nbctl lrp-add lr12 lrp-lr12-ls2 aa:aa:aa:aa:bb:01 "192.168.0.1/24"
>   ovn_as az2 ovn-nbctl lr-route-add lr12 10.10.10.0/24 192.168.0.10
> +ovn_as az1 ovn-nbctl --wait=sb sync
>   
>   echo az1
>   ovn_as az1 ovn-nbctl show
> @@ -951,7 +952,7 @@ ovn_as az2 ovn-nbctl --route-table=rtb2 lr-route-add lr12 10.10.10.0/24 192.168.
>   ovn_as az2 ovn-nbctl --route-table=rtb3 lr-route-add lr12 10.10.10.0/24 192.168.0.12
>   
>   # Create directly-connected route in VPC2
> -ovn_as az2 ovn-nbctl lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "192.168.0.1/24"
> +ovn_as az2 ovn-nbctl --wait=sb lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "192.168.0.1/24"
>   
>   # Test direct routes from lr12 were learned to lr11
>   AT_CHECK([ovn_as az1 ovn-nbctl lr-route-list lr11 | grep 192.168 |
> @@ -1077,7 +1078,7 @@ ovn_as az2 ovn-nbctl --route-table=rtb2 lr-route-add lr12 2001:db8:aaaa::/64 200
>   ovn_as az2 ovn-nbctl --route-table=rtb3 lr-route-add lr12 2001:db8:aaaa::/64 2001:db8:200::12
>   
>   # Create directly-connected route in VPC2
> -ovn_as az2 ovn-nbctl lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "2001:db8:200::1/64"
> +ovn_as az2 ovn-nbctl --wait=sb lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "2001:db8:200::1/64"
>   
>   # Test direct routes from lr12 were learned to lr11
>   AT_CHECK([ovn_as az1 ovn-nbctl lr-route-list lr11 | grep 2001:db8:200 |
> @@ -1146,7 +1147,7 @@ for i in 1 2; do
>       ovn-nbctl lrp-add $lr lrp-local-subnet 00:00:00:00:00:0$i 192.168.$i.1/24
>       ovn-nbctl list logical-router-static-route
>       check ovn-nbctl lr-route-add $lr 10.0.0.0/24 192.168.$i.10
> -    check ovn-nbctl lr-route-add $lr 0.0.0.0/0 192.168.$i.11
> +    check ovn-nbctl --wait=sb lr-route-add $lr 0.0.0.0/0 192.168.$i.11
>   done
>   
>   AT_CHECK([ovn_as az1 ovn-nbctl lr-route-list lr11 | grep dst-ip | sort], [0], [dnl
> diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
> index d5be3be75..d1ea892ec 100644
> --- a/tests/ovn-northd.at
> +++ b/tests/ovn-northd.at
> @@ -1156,7 +1156,7 @@ ovn-nbctl --stateless lr-nat-add DR dnat_and_snat  172.16.1.2 50.0.0.11
>   ovn-nbctl --stateless lr-nat-add CR dnat_and_snat  172.16.1.2 50.0.0.11
>   
>   ovn-nbctl lr-nat-update-ext-ip DR dnat_and_snat 172.16.1.2 allowed_range
> -ovn-nbctl lr-nat-update-ext-ip CR dnat_and_snat 172.16.1.2 allowed_range
> +check ovn-nbctl --wait=sb lr-nat-update-ext-ip CR dnat_and_snat 172.16.1.2 allowed_range
>   
>   ovn-sbctl dump-flows DR > drflows5
>   AT_CAPTURE_FILE([drflows2])
> @@ -4815,7 +4815,7 @@ AS_BOX([Checking that routable NAT flows are installed when gateway chassis exis
>   check ovn-nbctl lr-nat-del ro1
>   check ovn-nbctl lr-nat-del ro2
>   check ovn-nbctl --add-route lr-nat-add ro1 dnat 10.0.0.100 192.168.1.100
> -check ovn-nbctl --add-route lr-nat-add ro2 dnat 20.0.0.100 192.168.2.100
> +check ovn-nbctl --wait=sb --add-route lr-nat-add ro2 dnat 20.0.0.100 192.168.2.100
>   
>   check_lflows 1
>   
> @@ -4846,7 +4846,7 @@ check ovn-nbctl lr-nat-del ro1
>   check ovn-nbctl lr-nat-del ro2
>   
>   check ovn-nbctl lr-nat-add ro1 dnat_and_snat 10.0.0.100 192.168.1.2 vm1 00:00:00:00:00:01
> -check ovn-nbctl lr-nat-add ro2 dnat_and_snat 20.0.0.100 192.168.2.2 vm2 00:00:00:00:00:02
> +check ovn-nbctl --wait=sb lr-nat-add ro2 dnat_and_snat 20.0.0.100 192.168.2.2 vm2 00:00:00:00:00:02
>   
>   check_lflows 0
>   
> @@ -4991,7 +4991,7 @@ check ovn-nbctl lsp-add ls2 ls2-ro2
>   check ovn-nbctl lsp-set-type ls2-ro2 router
>   check ovn-nbctl lsp-set-addresses ls2-ro2 router
>   check ovn-nbctl lsp-set-options ls2-ro2 router-port=ro2-ls2
> -
> +check ovn-nbctl --wait=sb sync
>   
>   ovn-sbctl lflow-list ls1 > ls1_lflows
>   AT_CHECK([grep "ls_in_l2_lkup" ls1_lflows | sed 's/table=../table=??/' | sort], [0], [dnl
> @@ -5858,6 +5858,7 @@ sm_vip2=$(fetch_column Service_Monitor _uuid logical_port=vip2)
>   
>   ovn-sbctl set service_monitor $sm_vip1 status=offline
>   ovn-sbctl set service_monitor $sm_vip2 status=offline
> +check ovn-nbctl --wait=sb sync
>   
>   AT_CHECK([ovn-sbctl dump-flows lr0 | grep "lr_in_dnat" | sort], [0], [dnl
>     table=7 (lr_in_dnat         ), priority=0    , match=(1), action=(next;)
> @@ -6689,6 +6690,7 @@ ovn-nbctl lb-add lb0 172.16.1.10:80 10.0.0.1:80
>   ovn-nbctl lr-lb-add R1 lb0
>   ovn-nbctl lb-add lb1 172.16.1.10:8080 10.0.0.1:8080
>   ovn-nbctl lr-lb-add R1 lb1
> +ovn-nbctl --wait=sb sync
>   
>   AT_CHECK([ovn-sbctl get Port_Binding S1-R1 nat_addresses |grep -q 172.16.1.10], [0])
>   
> @@ -8593,6 +8595,7 @@ lb1_uuid=$(fetch_column nb:load_balancer _uuid name=lb1)
>   lbg=$(ovn-nbctl create load_balancer_group name=lbg -- \
>       add load_balancer_group lbg load_balancer $lb1_uuid)
>   ovn-nbctl add logical_router R1 load_balancer_group $lbg
> +ovn-nbctl --wait=sb sync
>   
>   ovn-sbctl dump-flows S0 > S0flows
>   ovn-sbctl dump-flows S1 > S1flows
> @@ -8719,6 +8722,7 @@ ovn-nbctl lsp-set-options S1-R1 router-port=R1-S1
>   ovn-nbctl lb-add lb0 172.16.0.10:80 10.0.0.2:80,20.0.0.2:80 tcp
>   ovn-nbctl lr-lb-add R1 lb0
>   ovn-nbctl ls-lb-add S0 lb0
> +ovn-nbctl --wait=sb sync
>   
>   ovn-sbctl dump-flows S0 > S0flows
>   ovn-sbctl dump-flows R1 > R1flows
> @@ -9438,7 +9442,7 @@ acl_test() {
>   ])
>   
>       # Remove the ACL with the "pass" verdict. Ensure that no eval flows are present.
> -    check ovn-nbctl acl-del $thing
> +    check ovn-nbctl --wait=sb acl-del $thing
>       ovn-sbctl lflow-list ls > lflows
>       AT_CHECK([ACL_FLOWS([$eval_stage], [priority=2000])], [0], [])
>   }
> diff --git a/tests/ovn.at b/tests/ovn.at
> index 56ac17261..29fddf365 100644
> --- a/tests/ovn.at
> +++ b/tests/ovn.at
> @@ -20805,6 +20805,7 @@ ovn-nbctl lsp-set-options public-lr1 router-port=lr1-public
>   
>   ovn-nbctl lr-nat-add lr1 snat 172.168.0.100 10.0.0.0/24
>   ovn-nbctl lr-nat-add lr1 snat 2000::1 1000::/64
> +ovn-nbctl --wait=sb sync
>   
>   dp_uuid=$(ovn-sbctl find datapath_binding | grep sw0 -B2 | grep _uuid | \
>   awk '{print $3}')
> @@ -21024,6 +21025,7 @@ AT_CAPTURE_FILE([sbflows2])
>   check ovn-nbctl lr-policy-add lr0 2000 "ip4.src == 192.168.1.3" allow
>   policy=$(fetch_column nb:Logical_Router_Policy _uuid priority=2000)
>   check ovn-nbctl set logical_router_policy $policy options:pkt_mark=100
> +check ovn-nbctl --wait=hv sync
>   as hv2
>   # add a flow in egress pipeline to check pkt marking
>   ovs-ofctl --protocols=OpenFlow13 add-flow br-int "table=37,priority=200,ip,nw_src=172.16.1.2,pkt_mark=0x64 actions=resubmit(,38)"
> @@ -21156,6 +21158,7 @@ check ovn-nbctl --wait=hv sync
>   # Recreate two floating IPs, one for each VIF.
>   check ovn-nbctl lr-nat-del lr0 dnat_and_snat 172.24.4.100
>   check ovn-nbctl lr-nat-del lr1 dnat_and_snat 172.24.4.200
> +check ovn-nbctl --wait=hv sync
>   
>   check ovn-sbctl --all destroy mac_binding
>   
> @@ -23276,6 +23279,9 @@ send_mld_v2_report hv1-vif1 hv1 \
>   # Check IGMP_Group table on both HV.
>   wait_row_count IGMP_Group 1 address='"ff0a:dead:beef::1"'
>   
> +# This gives the ovn-controller nodes a chance to see the updated IGMP_Group.
> +check ovn-nbctl --wait=hv sync
> +
>   # Send traffic and make sure it gets forwarded only on the port that joined.
>   as hv1 reset_pcap_file hv1-vif1 hv1/vif1
>   as hv2 reset_pcap_file hv2-vif1 hv2/vif1
> @@ -23307,6 +23313,9 @@ OVS_WAIT_UNTIL(
>   check ovn-sbctl ip-multicast-flush sw1
>   wait_row_count IGMP_Group 0 address='"ff0a:dead:beef::1"'
>   
> +# This gives the ovn-controller nodes a chance to see the updated IGMP_Group.
> +check ovn-nbctl --wait=hv sync
> +
>   # Check that traffic for "all-hosts" is flooded even if some hosts register
>   # for it.
>   # Inject MLD Join for ff02::1 on sw1-p11.
> @@ -28146,7 +28155,7 @@ AT_CHECK([
>       grep "n_packets=0" -c)
>   ])
>   
> -ovn-nbctl set logical_router_policy $pol1 options:pkt_mark=2
> +ovn-nbctl --wait=hv set logical_router_policy $pol1 options:pkt_mark=2
>   send_ipv4_pkt hv1 hv1-vif1 505400000003 00000000ff01 \
>       $(ip_to_hex 10 0 0 3) $(ip_to_hex 172 168 0 120) \
>       c3ad 83dc
> @@ -35936,7 +35945,7 @@ ovn-nbctl --wait=hv sync
>   
>   check ovn-nbctl lb-add lb1 "192.168.0.10" "192.168.10.10,192.168.10.20" \
>       -- set load_balancer lb1 options:ct_flush="true"
> -check ovn-nbctl ls-lb-add sw lb1
> +check ovn-nbctl --wait=hv ls-lb-add sw lb1
>   
>   # Remove a single backend
>   check ovn-nbctl set load_balancer lb1 vips='"192.168.0.10"="192.168.10.10"'
> @@ -35960,9 +35969,8 @@ AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.0.10:0, backend=192.168.
>   # Check flush for LB with port and protocol
>   check ovn-nbctl lb-add lb1 "192.168.30.10:80" "192.168.40.10:8080,192.168.40.20:8090" udp \
>       -- set load_balancer lb1 options:ct_flush="true"
> -check ovn-nbctl ls-lb-add sw lb1
> -check ovn-nbctl lb-del lb1
> -check ovn-nbctl --wait=hv sync
> +check ovn-nbctl --wait=hv ls-lb-add sw lb1
> +check ovn-nbctl --wait=hv lb-del lb1

I don't understand why this change was made. We already were waiting for 
the hv, but with this change, we're doing it two times instead. Is that 
on purpose?

>   
>   AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.30.10:80, backend=192.168.40.10:8080, protocol=17" hv1/ovn-controller.log], [0])
>   AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.30.10:80, backend=192.168.40.20:8090, protocol=17" hv1/ovn-controller.log], [0])
> @@ -35983,7 +35991,7 @@ AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.50.10:80, backend=192.16
>   AT_CHECK([test "$(grep -c "Flushing CT for 5-tuple" hv1/ovn-controller.log)" = "6"], [0])
>   
>   # Check if CT flush is disabled by default
> -check ovn-nbctl lb-del lb1
> +check ovn-nbctl --wait=hv lb-del lb1
>   check ovn-nbctl lb-add lb1 "192.168.70.10:80" "192.168.80.10:8080,192.168.90.10:8080"
>   check ovn-nbctl ls-lb-add sw lb1
>   check ovs-vsctl set interface p1 external_ids:iface-id=lsp1
> diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> index bfa323b5c..55c5ddc19 100644
> --- a/tests/system-ovn.at
> +++ b/tests/system-ovn.at
> @@ -7447,7 +7447,7 @@ AT_CHECK([ovn-nbctl copp-list copp3 |grep bfd], [0], [dnl
>   bfd: bfd-meter
>   ])
>   
> -check ovn-nbctl --bfd lr-route-add R1 240.0.0.0/8 172.16.1.50 rp-public
> +check ovn-nbctl --wait=hv --bfd lr-route-add R1 240.0.0.0/8 172.16.1.50 rp-public
>   printf "%08x" $(ovn-sbctl get bfd . disc) > /tmp/disc
>   NS_EXEC([server], [tcpdump -l -nn -i s1 udp port 3784 and ip[[29]]==0x90 -Q in > bfd.pcap &])
>   ip netns exec server scapy -H <<-EOF
> @@ -8586,6 +8586,7 @@ ovn-nbctl lsp-set-addresses sw0-p1 "00:54:00:00:00:03 10.0.0.3"
>   ovn-nbctl ls-add sw0
>   ovn-nbctl lsp-add sw0 sw0-p1.2 sw0-p1 2
>   ovn-nbctl lsp-set-addresses sw0-p1.2 "00:54:00:00:00:04 10.0.0.4"
> +check ovn-nbctl --wait=hv sync
>   
>   ADD_NAMESPACES(sw0-p1)
>   ADD_VETH(sw0-p1, sw0-p1, br-int, "10.0.0.3/24", "00:54:00:00:00:03", \
> @@ -11280,7 +11281,7 @@ ovn-nbctl lsp-add foo foo1 \
>   ADD_NAMESPACES(bar1)
>   ADD_VETH(bar1, bar1, br-int, "2002::2/64", "f0:00:00:01:02:05", \
>            "2002::1", "nodad", "192.168.2.2/24", "192.168.2.1")
> -ovn-nbctl lsp-add bar bar1 \
> +ovn-nbctl --wait=hv lsp-add bar bar1 \
>   -- lsp-set-addresses bar1 "f0:00:00:01:02:05 192.168.2.2 2002::2"
>   
>   # Warm up the datapath (needed to make the DPDK datapth happy)
Ales Musil Aug. 15, 2023, 6:21 a.m. UTC | #2
On Mon, Aug 14, 2023 at 10:02 PM Mark Michelson <mmichels@redhat.com> wrote:

> Hi Ales, I have a couple of notes below.
>
> On 8/14/23 05:21, Ales Musil wrote:
> > Add various missing sync calls which caused the
> > tests to be flaky due to sometimes missed on various
> > checks or packets.
> >
> > Signed-off-by: Ales Musil <amusil@redhat.com>
> > ---
> >   tests/ovn-controller.at | 10 +++++-----
> >   tests/ovn-ic.at         |  7 ++++---
> >   tests/ovn-northd.at     | 14 +++++++++-----
> >   tests/ovn.at            | 20 ++++++++++++++------
> >   tests/system-ovn.at     |  5 +++--
> >   5 files changed, 35 insertions(+), 21 deletions(-)
> >
> > diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at
> > index f2216d245..6a4bcedab 100644
> > --- a/tests/ovn-controller.at
> > +++ b/tests/ovn-controller.at
> > @@ -433,10 +433,10 @@ check ovn-nbctl --wait=hv sync
> >   check ovn-nbctl --wait=hv sync
> >
> >   # nb_cfg should be set to 1 in the chassis_private/nb_global/sb_global
> table
> > -check_column 1 chassis_private nb_cfg
> > -check_column 1 sb_global nb_cfg
> > -check_column 1 nb:nb_global nb_cfg
> > -check_column 0 chassis nb_cfg
> > +wait_row_count nb:nb_global 1 nb_cfg=1
> > +wait_row_count chassis_private 1 nb_cfg=1
> > +wait_row_count sb_global 1 nb_cfg=1
> > +wait_row_count chassis 1 nb_cfg=0
>
> Why is this change necessary? We can see that there is an `ovn-nbctl
> --wait=hv sync` call above. Shouldn't we be able to check the values
> directly instead of having to wait?
>

You are right, we should be able to check that directly. Looking through
the code again there is a bug during overflow I'll post v2 with proper fix.


>
> >
> >   OVN_CLEANUP([hv])
> >   AT_CLEANUP
> > @@ -562,7 +562,7 @@ primary lport : [[lsp1]]
> >   ])
> >
> >   # Set the port type to localport
> > -check ovn-nbctl lsp-set-type lsp1 localport
> > +check ovn-nbctl --wait=hv lsp-set-type lsp1 localport
> >   check as hv1 ovs-vsctl set open .
> external_ids:ovn-cms-options=localport
> >   OVS_WAIT_UNTIL([test localport = $(ovn-sbctl get chassis .
> other_config:ovn-cms-options)])
> >
> > diff --git a/tests/ovn-ic.at b/tests/ovn-ic.at
> > index 09eac860c..a654e59fe 100644
> > --- a/tests/ovn-ic.at
> > +++ b/tests/ovn-ic.at
> > @@ -543,6 +543,7 @@ done
> >   # Create directly-connected routes
> >   ovn_as az2 ovn-nbctl lrp-add lr12 lrp-lr12-ls2 aa:aa:aa:aa:bb:01 "
> 192.168.0.1/24"
> >   ovn_as az2 ovn-nbctl lr-route-add lr12 10.10.10.0/24 192.168.0.10
> > +ovn_as az1 ovn-nbctl --wait=sb sync
> >
> >   echo az1
> >   ovn_as az1 ovn-nbctl show
> > @@ -951,7 +952,7 @@ ovn_as az2 ovn-nbctl --route-table=rtb2 lr-route-add
> lr12 10.10.10.0/24 192.168.
> >   ovn_as az2 ovn-nbctl --route-table=rtb3 lr-route-add lr12
> 10.10.10.0/24 192.168.0.12
> >
> >   # Create directly-connected route in VPC2
> > -ovn_as az2 ovn-nbctl lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "
> 192.168.0.1/24"
> > +ovn_as az2 ovn-nbctl --wait=sb lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "
> 192.168.0.1/24"
> >
> >   # Test direct routes from lr12 were learned to lr11
> >   AT_CHECK([ovn_as az1 ovn-nbctl lr-route-list lr11 | grep 192.168 |
> > @@ -1077,7 +1078,7 @@ ovn_as az2 ovn-nbctl --route-table=rtb2
> lr-route-add lr12 2001:db8:aaaa::/64 200
> >   ovn_as az2 ovn-nbctl --route-table=rtb3 lr-route-add lr12
> 2001:db8:aaaa::/64 2001:db8:200::12
> >
> >   # Create directly-connected route in VPC2
> > -ovn_as az2 ovn-nbctl lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01
> "2001:db8:200::1/64"
> > +ovn_as az2 ovn-nbctl --wait=sb lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01
> "2001:db8:200::1/64"
> >
> >   # Test direct routes from lr12 were learned to lr11
> >   AT_CHECK([ovn_as az1 ovn-nbctl lr-route-list lr11 | grep 2001:db8:200 |
> > @@ -1146,7 +1147,7 @@ for i in 1 2; do
> >       ovn-nbctl lrp-add $lr lrp-local-subnet 00:00:00:00:00:0$i
> 192.168.$i.1/24
> >       ovn-nbctl list logical-router-static-route
> >       check ovn-nbctl lr-route-add $lr 10.0.0.0/24 192.168.$i.10
> > -    check ovn-nbctl lr-route-add $lr 0.0.0.0/0 192.168.$i.11
> > +    check ovn-nbctl --wait=sb lr-route-add $lr 0.0.0.0/0 192.168.$i.11
> >   done
> >
> >   AT_CHECK([ovn_as az1 ovn-nbctl lr-route-list lr11 | grep dst-ip |
> sort], [0], [dnl
> > diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
> > index d5be3be75..d1ea892ec 100644
> > --- a/tests/ovn-northd.at
> > +++ b/tests/ovn-northd.at
> > @@ -1156,7 +1156,7 @@ ovn-nbctl --stateless lr-nat-add DR dnat_and_snat
> 172.16.1.2 50.0.0.11
> >   ovn-nbctl --stateless lr-nat-add CR dnat_and_snat  172.16.1.2 50.0.0.11
> >
> >   ovn-nbctl lr-nat-update-ext-ip DR dnat_and_snat 172.16.1.2
> allowed_range
> > -ovn-nbctl lr-nat-update-ext-ip CR dnat_and_snat 172.16.1.2 allowed_range
> > +check ovn-nbctl --wait=sb lr-nat-update-ext-ip CR dnat_and_snat
> 172.16.1.2 allowed_range
> >
> >   ovn-sbctl dump-flows DR > drflows5
> >   AT_CAPTURE_FILE([drflows2])
> > @@ -4815,7 +4815,7 @@ AS_BOX([Checking that routable NAT flows are
> installed when gateway chassis exis
> >   check ovn-nbctl lr-nat-del ro1
> >   check ovn-nbctl lr-nat-del ro2
> >   check ovn-nbctl --add-route lr-nat-add ro1 dnat 10.0.0.100
> 192.168.1.100
> > -check ovn-nbctl --add-route lr-nat-add ro2 dnat 20.0.0.100 192.168.2.100
> > +check ovn-nbctl --wait=sb --add-route lr-nat-add ro2 dnat 20.0.0.100
> 192.168.2.100
> >
> >   check_lflows 1
> >
> > @@ -4846,7 +4846,7 @@ check ovn-nbctl lr-nat-del ro1
> >   check ovn-nbctl lr-nat-del ro2
> >
> >   check ovn-nbctl lr-nat-add ro1 dnat_and_snat 10.0.0.100 192.168.1.2
> vm1 00:00:00:00:00:01
> > -check ovn-nbctl lr-nat-add ro2 dnat_and_snat 20.0.0.100 192.168.2.2 vm2
> 00:00:00:00:00:02
> > +check ovn-nbctl --wait=sb lr-nat-add ro2 dnat_and_snat 20.0.0.100
> 192.168.2.2 vm2 00:00:00:00:00:02
> >
> >   check_lflows 0
> >
> > @@ -4991,7 +4991,7 @@ check ovn-nbctl lsp-add ls2 ls2-ro2
> >   check ovn-nbctl lsp-set-type ls2-ro2 router
> >   check ovn-nbctl lsp-set-addresses ls2-ro2 router
> >   check ovn-nbctl lsp-set-options ls2-ro2 router-port=ro2-ls2
> > -
> > +check ovn-nbctl --wait=sb sync
> >
> >   ovn-sbctl lflow-list ls1 > ls1_lflows
> >   AT_CHECK([grep "ls_in_l2_lkup" ls1_lflows | sed 's/table=../table=??/'
> | sort], [0], [dnl
> > @@ -5858,6 +5858,7 @@ sm_vip2=$(fetch_column Service_Monitor _uuid
> logical_port=vip2)
> >
> >   ovn-sbctl set service_monitor $sm_vip1 status=offline
> >   ovn-sbctl set service_monitor $sm_vip2 status=offline
> > +check ovn-nbctl --wait=sb sync
> >
> >   AT_CHECK([ovn-sbctl dump-flows lr0 | grep "lr_in_dnat" | sort], [0],
> [dnl
> >     table=7 (lr_in_dnat         ), priority=0    , match=(1),
> action=(next;)
> > @@ -6689,6 +6690,7 @@ ovn-nbctl lb-add lb0 172.16.1.10:80 10.0.0.1:80
> >   ovn-nbctl lr-lb-add R1 lb0
> >   ovn-nbctl lb-add lb1 172.16.1.10:8080 10.0.0.1:8080
> >   ovn-nbctl lr-lb-add R1 lb1
> > +ovn-nbctl --wait=sb sync
> >
> >   AT_CHECK([ovn-sbctl get Port_Binding S1-R1 nat_addresses |grep -q
> 172.16.1.10], [0])
> >
> > @@ -8593,6 +8595,7 @@ lb1_uuid=$(fetch_column nb:load_balancer _uuid
> name=lb1)
> >   lbg=$(ovn-nbctl create load_balancer_group name=lbg -- \
> >       add load_balancer_group lbg load_balancer $lb1_uuid)
> >   ovn-nbctl add logical_router R1 load_balancer_group $lbg
> > +ovn-nbctl --wait=sb sync
> >
> >   ovn-sbctl dump-flows S0 > S0flows
> >   ovn-sbctl dump-flows S1 > S1flows
> > @@ -8719,6 +8722,7 @@ ovn-nbctl lsp-set-options S1-R1 router-port=R1-S1
> >   ovn-nbctl lb-add lb0 172.16.0.10:80 10.0.0.2:80,20.0.0.2:80 tcp
> >   ovn-nbctl lr-lb-add R1 lb0
> >   ovn-nbctl ls-lb-add S0 lb0
> > +ovn-nbctl --wait=sb sync
> >
> >   ovn-sbctl dump-flows S0 > S0flows
> >   ovn-sbctl dump-flows R1 > R1flows
> > @@ -9438,7 +9442,7 @@ acl_test() {
> >   ])
> >
> >       # Remove the ACL with the "pass" verdict. Ensure that no eval
> flows are present.
> > -    check ovn-nbctl acl-del $thing
> > +    check ovn-nbctl --wait=sb acl-del $thing
> >       ovn-sbctl lflow-list ls > lflows
> >       AT_CHECK([ACL_FLOWS([$eval_stage], [priority=2000])], [0], [])
> >   }
> > diff --git a/tests/ovn.at b/tests/ovn.at
> > index 56ac17261..29fddf365 100644
> > --- a/tests/ovn.at
> > +++ b/tests/ovn.at
> > @@ -20805,6 +20805,7 @@ ovn-nbctl lsp-set-options public-lr1
> router-port=lr1-public
> >
> >   ovn-nbctl lr-nat-add lr1 snat 172.168.0.100 10.0.0.0/24
> >   ovn-nbctl lr-nat-add lr1 snat 2000::1 1000::/64
> > +ovn-nbctl --wait=sb sync
> >
> >   dp_uuid=$(ovn-sbctl find datapath_binding | grep sw0 -B2 | grep _uuid
> | \
> >   awk '{print $3}')
> > @@ -21024,6 +21025,7 @@ AT_CAPTURE_FILE([sbflows2])
> >   check ovn-nbctl lr-policy-add lr0 2000 "ip4.src == 192.168.1.3" allow
> >   policy=$(fetch_column nb:Logical_Router_Policy _uuid priority=2000)
> >   check ovn-nbctl set logical_router_policy $policy options:pkt_mark=100
> > +check ovn-nbctl --wait=hv sync
> >   as hv2
> >   # add a flow in egress pipeline to check pkt marking
> >   ovs-ofctl --protocols=OpenFlow13 add-flow br-int
> "table=37,priority=200,ip,nw_src=172.16.1.2,pkt_mark=0x64
> actions=resubmit(,38)"
> > @@ -21156,6 +21158,7 @@ check ovn-nbctl --wait=hv sync
> >   # Recreate two floating IPs, one for each VIF.
> >   check ovn-nbctl lr-nat-del lr0 dnat_and_snat 172.24.4.100
> >   check ovn-nbctl lr-nat-del lr1 dnat_and_snat 172.24.4.200
> > +check ovn-nbctl --wait=hv sync
> >
> >   check ovn-sbctl --all destroy mac_binding
> >
> > @@ -23276,6 +23279,9 @@ send_mld_v2_report hv1-vif1 hv1 \
> >   # Check IGMP_Group table on both HV.
> >   wait_row_count IGMP_Group 1 address='"ff0a:dead:beef::1"'
> >
> > +# This gives the ovn-controller nodes a chance to see the updated
> IGMP_Group.
> > +check ovn-nbctl --wait=hv sync
> > +
> >   # Send traffic and make sure it gets forwarded only on the port that
> joined.
> >   as hv1 reset_pcap_file hv1-vif1 hv1/vif1
> >   as hv2 reset_pcap_file hv2-vif1 hv2/vif1
> > @@ -23307,6 +23313,9 @@ OVS_WAIT_UNTIL(
> >   check ovn-sbctl ip-multicast-flush sw1
> >   wait_row_count IGMP_Group 0 address='"ff0a:dead:beef::1"'
> >
> > +# This gives the ovn-controller nodes a chance to see the updated
> IGMP_Group.
> > +check ovn-nbctl --wait=hv sync
> > +
> >   # Check that traffic for "all-hosts" is flooded even if some hosts
> register
> >   # for it.
> >   # Inject MLD Join for ff02::1 on sw1-p11.
> > @@ -28146,7 +28155,7 @@ AT_CHECK([
> >       grep "n_packets=0" -c)
> >   ])
> >
> > -ovn-nbctl set logical_router_policy $pol1 options:pkt_mark=2
> > +ovn-nbctl --wait=hv set logical_router_policy $pol1 options:pkt_mark=2
> >   send_ipv4_pkt hv1 hv1-vif1 505400000003 00000000ff01 \
> >       $(ip_to_hex 10 0 0 3) $(ip_to_hex 172 168 0 120) \
> >       c3ad 83dc
> > @@ -35936,7 +35945,7 @@ ovn-nbctl --wait=hv sync
> >
> >   check ovn-nbctl lb-add lb1 "192.168.0.10"
> "192.168.10.10,192.168.10.20" \
> >       -- set load_balancer lb1 options:ct_flush="true"
> > -check ovn-nbctl ls-lb-add sw lb1
> > +check ovn-nbctl --wait=hv ls-lb-add sw lb1
> >
> >   # Remove a single backend
> >   check ovn-nbctl set load_balancer lb1
> vips='"192.168.0.10"="192.168.10.10"'
> > @@ -35960,9 +35969,8 @@ AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=
> 192.168.0.10:0, backend=192.168.
> >   # Check flush for LB with port and protocol
> >   check ovn-nbctl lb-add lb1 "192.168.30.10:80" "192.168.40.10:8080,
> 192.168.40.20:8090" udp \
> >       -- set load_balancer lb1 options:ct_flush="true"
> > -check ovn-nbctl ls-lb-add sw lb1
> > -check ovn-nbctl lb-del lb1
> > -check ovn-nbctl --wait=hv sync
> > +check ovn-nbctl --wait=hv ls-lb-add sw lb1
> > +check ovn-nbctl --wait=hv lb-del lb1
>
> I don't understand why this change was made. We already were waiting for
> the hv, but with this change, we're doing it two times instead. Is that
> on purpose?


Yeah that is on purpose, and I understand why it can be confusing. The
problem is that if for some reason we will process add and del in a single
northd run, from controller perspective nothing happens and the flush isn't
called. So we need to wait for ovn-controller to pick up the new LB first
and only then delete it to really ensure that the flush will happen.


>
> >
> >   AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.30.10:80,
> backend=192.168.40.10:8080, protocol=17" hv1/ovn-controller.log], [0])
> >   AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.30.10:80,
> backend=192.168.40.20:8090, protocol=17" hv1/ovn-controller.log], [0])
> > @@ -35983,7 +35991,7 @@ AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=
> 192.168.50.10:80, backend=192.16
> >   AT_CHECK([test "$(grep -c "Flushing CT for 5-tuple"
> hv1/ovn-controller.log)" = "6"], [0])
> >
> >   # Check if CT flush is disabled by default
> > -check ovn-nbctl lb-del lb1
> > +check ovn-nbctl --wait=hv lb-del lb1
> >   check ovn-nbctl lb-add lb1 "192.168.70.10:80" "192.168.80.10:8080,
> 192.168.90.10:8080"
> >   check ovn-nbctl ls-lb-add sw lb1
> >   check ovs-vsctl set interface p1 external_ids:iface-id=lsp1
> > diff --git a/tests/system-ovn.at b/tests/system-ovn.at
> > index bfa323b5c..55c5ddc19 100644
> > --- a/tests/system-ovn.at
> > +++ b/tests/system-ovn.at
> > @@ -7447,7 +7447,7 @@ AT_CHECK([ovn-nbctl copp-list copp3 |grep bfd],
> [0], [dnl
> >   bfd: bfd-meter
> >   ])
> >
> > -check ovn-nbctl --bfd lr-route-add R1 240.0.0.0/8 172.16.1.50 rp-public
> > +check ovn-nbctl --wait=hv --bfd lr-route-add R1 240.0.0.0/8
> 172.16.1.50 rp-public
> >   printf "%08x" $(ovn-sbctl get bfd . disc) > /tmp/disc
> >   NS_EXEC([server], [tcpdump -l -nn -i s1 udp port 3784 and
> ip[[29]]==0x90 -Q in > bfd.pcap &])
> >   ip netns exec server scapy -H <<-EOF
> > @@ -8586,6 +8586,7 @@ ovn-nbctl lsp-set-addresses sw0-p1
> "00:54:00:00:00:03 10.0.0.3"
> >   ovn-nbctl ls-add sw0
> >   ovn-nbctl lsp-add sw0 sw0-p1.2 sw0-p1 2
> >   ovn-nbctl lsp-set-addresses sw0-p1.2 "00:54:00:00:00:04 10.0.0.4"
> > +check ovn-nbctl --wait=hv sync
> >
> >   ADD_NAMESPACES(sw0-p1)
> >   ADD_VETH(sw0-p1, sw0-p1, br-int, "10.0.0.3/24", "00:54:00:00:00:03", \
> > @@ -11280,7 +11281,7 @@ ovn-nbctl lsp-add foo foo1 \
> >   ADD_NAMESPACES(bar1)
> >   ADD_VETH(bar1, bar1, br-int, "2002::2/64", "f0:00:00:01:02:05", \
> >            "2002::1", "nodad", "192.168.2.2/24", "192.168.2.1")
> > -ovn-nbctl lsp-add bar bar1 \
> > +ovn-nbctl --wait=hv lsp-add bar bar1 \
> >   -- lsp-set-addresses bar1 "f0:00:00:01:02:05 192.168.2.2 2002::2"
> >
> >   # Warm up the datapath (needed to make the DPDK datapth happy)
>
>
Thanks,
Ales
diff mbox series

Patch

diff --git a/tests/ovn-controller.at b/tests/ovn-controller.at
index f2216d245..6a4bcedab 100644
--- a/tests/ovn-controller.at
+++ b/tests/ovn-controller.at
@@ -433,10 +433,10 @@  check ovn-nbctl --wait=hv sync
 check ovn-nbctl --wait=hv sync
 
 # nb_cfg should be set to 1 in the chassis_private/nb_global/sb_global table
-check_column 1 chassis_private nb_cfg
-check_column 1 sb_global nb_cfg
-check_column 1 nb:nb_global nb_cfg
-check_column 0 chassis nb_cfg
+wait_row_count nb:nb_global 1 nb_cfg=1
+wait_row_count chassis_private 1 nb_cfg=1
+wait_row_count sb_global 1 nb_cfg=1
+wait_row_count chassis 1 nb_cfg=0
 
 OVN_CLEANUP([hv])
 AT_CLEANUP
@@ -562,7 +562,7 @@  primary lport : [[lsp1]]
 ])
 
 # Set the port type to localport
-check ovn-nbctl lsp-set-type lsp1 localport
+check ovn-nbctl --wait=hv lsp-set-type lsp1 localport
 check as hv1 ovs-vsctl set open . external_ids:ovn-cms-options=localport
 OVS_WAIT_UNTIL([test localport = $(ovn-sbctl get chassis . other_config:ovn-cms-options)])
 
diff --git a/tests/ovn-ic.at b/tests/ovn-ic.at
index 09eac860c..a654e59fe 100644
--- a/tests/ovn-ic.at
+++ b/tests/ovn-ic.at
@@ -543,6 +543,7 @@  done
 # Create directly-connected routes
 ovn_as az2 ovn-nbctl lrp-add lr12 lrp-lr12-ls2 aa:aa:aa:aa:bb:01 "192.168.0.1/24"
 ovn_as az2 ovn-nbctl lr-route-add lr12 10.10.10.0/24 192.168.0.10
+ovn_as az1 ovn-nbctl --wait=sb sync
 
 echo az1
 ovn_as az1 ovn-nbctl show
@@ -951,7 +952,7 @@  ovn_as az2 ovn-nbctl --route-table=rtb2 lr-route-add lr12 10.10.10.0/24 192.168.
 ovn_as az2 ovn-nbctl --route-table=rtb3 lr-route-add lr12 10.10.10.0/24 192.168.0.12
 
 # Create directly-connected route in VPC2
-ovn_as az2 ovn-nbctl lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "192.168.0.1/24"
+ovn_as az2 ovn-nbctl --wait=sb lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "192.168.0.1/24"
 
 # Test direct routes from lr12 were learned to lr11
 AT_CHECK([ovn_as az1 ovn-nbctl lr-route-list lr11 | grep 192.168 |
@@ -1077,7 +1078,7 @@  ovn_as az2 ovn-nbctl --route-table=rtb2 lr-route-add lr12 2001:db8:aaaa::/64 200
 ovn_as az2 ovn-nbctl --route-table=rtb3 lr-route-add lr12 2001:db8:aaaa::/64 2001:db8:200::12
 
 # Create directly-connected route in VPC2
-ovn_as az2 ovn-nbctl lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "2001:db8:200::1/64"
+ovn_as az2 ovn-nbctl --wait=sb lrp-add lr22 lrp-lr22 aa:aa:aa:aa:bb:01 "2001:db8:200::1/64"
 
 # Test direct routes from lr12 were learned to lr11
 AT_CHECK([ovn_as az1 ovn-nbctl lr-route-list lr11 | grep 2001:db8:200 |
@@ -1146,7 +1147,7 @@  for i in 1 2; do
     ovn-nbctl lrp-add $lr lrp-local-subnet 00:00:00:00:00:0$i 192.168.$i.1/24
     ovn-nbctl list logical-router-static-route
     check ovn-nbctl lr-route-add $lr 10.0.0.0/24 192.168.$i.10
-    check ovn-nbctl lr-route-add $lr 0.0.0.0/0 192.168.$i.11
+    check ovn-nbctl --wait=sb lr-route-add $lr 0.0.0.0/0 192.168.$i.11
 done
 
 AT_CHECK([ovn_as az1 ovn-nbctl lr-route-list lr11 | grep dst-ip | sort], [0], [dnl
diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
index d5be3be75..d1ea892ec 100644
--- a/tests/ovn-northd.at
+++ b/tests/ovn-northd.at
@@ -1156,7 +1156,7 @@  ovn-nbctl --stateless lr-nat-add DR dnat_and_snat  172.16.1.2 50.0.0.11
 ovn-nbctl --stateless lr-nat-add CR dnat_and_snat  172.16.1.2 50.0.0.11
 
 ovn-nbctl lr-nat-update-ext-ip DR dnat_and_snat 172.16.1.2 allowed_range
-ovn-nbctl lr-nat-update-ext-ip CR dnat_and_snat 172.16.1.2 allowed_range
+check ovn-nbctl --wait=sb lr-nat-update-ext-ip CR dnat_and_snat 172.16.1.2 allowed_range
 
 ovn-sbctl dump-flows DR > drflows5
 AT_CAPTURE_FILE([drflows2])
@@ -4815,7 +4815,7 @@  AS_BOX([Checking that routable NAT flows are installed when gateway chassis exis
 check ovn-nbctl lr-nat-del ro1
 check ovn-nbctl lr-nat-del ro2
 check ovn-nbctl --add-route lr-nat-add ro1 dnat 10.0.0.100 192.168.1.100
-check ovn-nbctl --add-route lr-nat-add ro2 dnat 20.0.0.100 192.168.2.100
+check ovn-nbctl --wait=sb --add-route lr-nat-add ro2 dnat 20.0.0.100 192.168.2.100
 
 check_lflows 1
 
@@ -4846,7 +4846,7 @@  check ovn-nbctl lr-nat-del ro1
 check ovn-nbctl lr-nat-del ro2
 
 check ovn-nbctl lr-nat-add ro1 dnat_and_snat 10.0.0.100 192.168.1.2 vm1 00:00:00:00:00:01
-check ovn-nbctl lr-nat-add ro2 dnat_and_snat 20.0.0.100 192.168.2.2 vm2 00:00:00:00:00:02
+check ovn-nbctl --wait=sb lr-nat-add ro2 dnat_and_snat 20.0.0.100 192.168.2.2 vm2 00:00:00:00:00:02
 
 check_lflows 0
 
@@ -4991,7 +4991,7 @@  check ovn-nbctl lsp-add ls2 ls2-ro2
 check ovn-nbctl lsp-set-type ls2-ro2 router
 check ovn-nbctl lsp-set-addresses ls2-ro2 router
 check ovn-nbctl lsp-set-options ls2-ro2 router-port=ro2-ls2
-
+check ovn-nbctl --wait=sb sync
 
 ovn-sbctl lflow-list ls1 > ls1_lflows
 AT_CHECK([grep "ls_in_l2_lkup" ls1_lflows | sed 's/table=../table=??/' | sort], [0], [dnl
@@ -5858,6 +5858,7 @@  sm_vip2=$(fetch_column Service_Monitor _uuid logical_port=vip2)
 
 ovn-sbctl set service_monitor $sm_vip1 status=offline
 ovn-sbctl set service_monitor $sm_vip2 status=offline
+check ovn-nbctl --wait=sb sync
 
 AT_CHECK([ovn-sbctl dump-flows lr0 | grep "lr_in_dnat" | sort], [0], [dnl
   table=7 (lr_in_dnat         ), priority=0    , match=(1), action=(next;)
@@ -6689,6 +6690,7 @@  ovn-nbctl lb-add lb0 172.16.1.10:80 10.0.0.1:80
 ovn-nbctl lr-lb-add R1 lb0
 ovn-nbctl lb-add lb1 172.16.1.10:8080 10.0.0.1:8080
 ovn-nbctl lr-lb-add R1 lb1
+ovn-nbctl --wait=sb sync
 
 AT_CHECK([ovn-sbctl get Port_Binding S1-R1 nat_addresses |grep -q 172.16.1.10], [0])
 
@@ -8593,6 +8595,7 @@  lb1_uuid=$(fetch_column nb:load_balancer _uuid name=lb1)
 lbg=$(ovn-nbctl create load_balancer_group name=lbg -- \
     add load_balancer_group lbg load_balancer $lb1_uuid)
 ovn-nbctl add logical_router R1 load_balancer_group $lbg
+ovn-nbctl --wait=sb sync
 
 ovn-sbctl dump-flows S0 > S0flows
 ovn-sbctl dump-flows S1 > S1flows
@@ -8719,6 +8722,7 @@  ovn-nbctl lsp-set-options S1-R1 router-port=R1-S1
 ovn-nbctl lb-add lb0 172.16.0.10:80 10.0.0.2:80,20.0.0.2:80 tcp
 ovn-nbctl lr-lb-add R1 lb0
 ovn-nbctl ls-lb-add S0 lb0
+ovn-nbctl --wait=sb sync
 
 ovn-sbctl dump-flows S0 > S0flows
 ovn-sbctl dump-flows R1 > R1flows
@@ -9438,7 +9442,7 @@  acl_test() {
 ])
 
     # Remove the ACL with the "pass" verdict. Ensure that no eval flows are present.
-    check ovn-nbctl acl-del $thing
+    check ovn-nbctl --wait=sb acl-del $thing
     ovn-sbctl lflow-list ls > lflows
     AT_CHECK([ACL_FLOWS([$eval_stage], [priority=2000])], [0], [])
 }
diff --git a/tests/ovn.at b/tests/ovn.at
index 56ac17261..29fddf365 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -20805,6 +20805,7 @@  ovn-nbctl lsp-set-options public-lr1 router-port=lr1-public
 
 ovn-nbctl lr-nat-add lr1 snat 172.168.0.100 10.0.0.0/24
 ovn-nbctl lr-nat-add lr1 snat 2000::1 1000::/64
+ovn-nbctl --wait=sb sync
 
 dp_uuid=$(ovn-sbctl find datapath_binding | grep sw0 -B2 | grep _uuid | \
 awk '{print $3}')
@@ -21024,6 +21025,7 @@  AT_CAPTURE_FILE([sbflows2])
 check ovn-nbctl lr-policy-add lr0 2000 "ip4.src == 192.168.1.3" allow
 policy=$(fetch_column nb:Logical_Router_Policy _uuid priority=2000)
 check ovn-nbctl set logical_router_policy $policy options:pkt_mark=100
+check ovn-nbctl --wait=hv sync
 as hv2
 # add a flow in egress pipeline to check pkt marking
 ovs-ofctl --protocols=OpenFlow13 add-flow br-int "table=37,priority=200,ip,nw_src=172.16.1.2,pkt_mark=0x64 actions=resubmit(,38)"
@@ -21156,6 +21158,7 @@  check ovn-nbctl --wait=hv sync
 # Recreate two floating IPs, one for each VIF.
 check ovn-nbctl lr-nat-del lr0 dnat_and_snat 172.24.4.100
 check ovn-nbctl lr-nat-del lr1 dnat_and_snat 172.24.4.200
+check ovn-nbctl --wait=hv sync
 
 check ovn-sbctl --all destroy mac_binding
 
@@ -23276,6 +23279,9 @@  send_mld_v2_report hv1-vif1 hv1 \
 # Check IGMP_Group table on both HV.
 wait_row_count IGMP_Group 1 address='"ff0a:dead:beef::1"'
 
+# This gives the ovn-controller nodes a chance to see the updated IGMP_Group.
+check ovn-nbctl --wait=hv sync
+
 # Send traffic and make sure it gets forwarded only on the port that joined.
 as hv1 reset_pcap_file hv1-vif1 hv1/vif1
 as hv2 reset_pcap_file hv2-vif1 hv2/vif1
@@ -23307,6 +23313,9 @@  OVS_WAIT_UNTIL(
 check ovn-sbctl ip-multicast-flush sw1
 wait_row_count IGMP_Group 0 address='"ff0a:dead:beef::1"'
 
+# This gives the ovn-controller nodes a chance to see the updated IGMP_Group.
+check ovn-nbctl --wait=hv sync
+
 # Check that traffic for "all-hosts" is flooded even if some hosts register
 # for it.
 # Inject MLD Join for ff02::1 on sw1-p11.
@@ -28146,7 +28155,7 @@  AT_CHECK([
     grep "n_packets=0" -c)
 ])
 
-ovn-nbctl set logical_router_policy $pol1 options:pkt_mark=2
+ovn-nbctl --wait=hv set logical_router_policy $pol1 options:pkt_mark=2
 send_ipv4_pkt hv1 hv1-vif1 505400000003 00000000ff01 \
     $(ip_to_hex 10 0 0 3) $(ip_to_hex 172 168 0 120) \
     c3ad 83dc
@@ -35936,7 +35945,7 @@  ovn-nbctl --wait=hv sync
 
 check ovn-nbctl lb-add lb1 "192.168.0.10" "192.168.10.10,192.168.10.20" \
     -- set load_balancer lb1 options:ct_flush="true"
-check ovn-nbctl ls-lb-add sw lb1
+check ovn-nbctl --wait=hv ls-lb-add sw lb1
 
 # Remove a single backend
 check ovn-nbctl set load_balancer lb1 vips='"192.168.0.10"="192.168.10.10"'
@@ -35960,9 +35969,8 @@  AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.0.10:0, backend=192.168.
 # Check flush for LB with port and protocol
 check ovn-nbctl lb-add lb1 "192.168.30.10:80" "192.168.40.10:8080,192.168.40.20:8090" udp \
     -- set load_balancer lb1 options:ct_flush="true"
-check ovn-nbctl ls-lb-add sw lb1
-check ovn-nbctl lb-del lb1
-check ovn-nbctl --wait=hv sync
+check ovn-nbctl --wait=hv ls-lb-add sw lb1
+check ovn-nbctl --wait=hv lb-del lb1
 
 AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.30.10:80, backend=192.168.40.10:8080, protocol=17" hv1/ovn-controller.log], [0])
 AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.30.10:80, backend=192.168.40.20:8090, protocol=17" hv1/ovn-controller.log], [0])
@@ -35983,7 +35991,7 @@  AT_CHECK([grep -q "Flushing CT for 5-tuple: vip=192.168.50.10:80, backend=192.16
 AT_CHECK([test "$(grep -c "Flushing CT for 5-tuple" hv1/ovn-controller.log)" = "6"], [0])
 
 # Check if CT flush is disabled by default
-check ovn-nbctl lb-del lb1
+check ovn-nbctl --wait=hv lb-del lb1
 check ovn-nbctl lb-add lb1 "192.168.70.10:80" "192.168.80.10:8080,192.168.90.10:8080"
 check ovn-nbctl ls-lb-add sw lb1
 check ovs-vsctl set interface p1 external_ids:iface-id=lsp1
diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index bfa323b5c..55c5ddc19 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -7447,7 +7447,7 @@  AT_CHECK([ovn-nbctl copp-list copp3 |grep bfd], [0], [dnl
 bfd: bfd-meter
 ])
 
-check ovn-nbctl --bfd lr-route-add R1 240.0.0.0/8 172.16.1.50 rp-public
+check ovn-nbctl --wait=hv --bfd lr-route-add R1 240.0.0.0/8 172.16.1.50 rp-public
 printf "%08x" $(ovn-sbctl get bfd . disc) > /tmp/disc
 NS_EXEC([server], [tcpdump -l -nn -i s1 udp port 3784 and ip[[29]]==0x90 -Q in > bfd.pcap &])
 ip netns exec server scapy -H <<-EOF
@@ -8586,6 +8586,7 @@  ovn-nbctl lsp-set-addresses sw0-p1 "00:54:00:00:00:03 10.0.0.3"
 ovn-nbctl ls-add sw0
 ovn-nbctl lsp-add sw0 sw0-p1.2 sw0-p1 2
 ovn-nbctl lsp-set-addresses sw0-p1.2 "00:54:00:00:00:04 10.0.0.4"
+check ovn-nbctl --wait=hv sync
 
 ADD_NAMESPACES(sw0-p1)
 ADD_VETH(sw0-p1, sw0-p1, br-int, "10.0.0.3/24", "00:54:00:00:00:03", \
@@ -11280,7 +11281,7 @@  ovn-nbctl lsp-add foo foo1 \
 ADD_NAMESPACES(bar1)
 ADD_VETH(bar1, bar1, br-int, "2002::2/64", "f0:00:00:01:02:05", \
          "2002::1", "nodad", "192.168.2.2/24", "192.168.2.1")
-ovn-nbctl lsp-add bar bar1 \
+ovn-nbctl --wait=hv lsp-add bar bar1 \
 -- lsp-set-addresses bar1 "f0:00:00:01:02:05 192.168.2.2 2002::2"
 
 # Warm up the datapath (needed to make the DPDK datapth happy)