On Mon, Feb 9, 2026 at 4:44 PM Mark Michelson <[email protected]> wrote:
> Hi Ales, thanks for the test. > Hi Mark, thank you for the review. > > On Thu, Feb 5, 2026 at 7:12 AM Ales Musil via dev > <[email protected]> wrote: > > > > Add a test that should ensure that two controllers running next to > > each other do not touch zones from different range then the one > > s/then/than/ > > > assigned to them. > > > > Reported-at: https://issues.redhat.com/browse/FDP-2084 > > Signed-off-by: Ales Musil <[email protected]> > > --- > > tests/ovn.at | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 153 insertions(+) > > > > diff --git a/tests/ovn.at b/tests/ovn.at > > index d7f173c90..1c33cae57 100644 > > --- a/tests/ovn.at > > +++ b/tests/ovn.at > > @@ -44562,3 +44562,156 @@ check ovn-nbctl --wait=hv lsp-set-type > down_ext localnet > > OVN_CLEANUP([hv1],[hv2]) > > AT_CLEANUP > > ]) > > + > > +# NOTE: This test case runs two ovn-controllers inside the same sandbox > (hv1). > > +# Each controller uses a unique chassis name - hv1 and hv2 - and manage > > +# different bridges with different ports. This is why all 'as' commands > below > > +# are executed from the same - hv1 - sandbox, regardless of whether they > > +# logically belong to ports of chassis named hv1 or hv2. > > Is it possible to give the sandbox a name that is independent from the > two chassis? Maybe call the sandbox "hv1" and the two ovn-controller > chassis "virt-chassis-1" and "virt-chassis-2"? > I'm afraid not, at least not without rewriting the ovn_attach (ovn_az_attach) helpers. Which I'm not sure is worth doing for 4 tests that use this technique. > > +OVN_FOR_EACH_NORTHD([ > > +AT_SETUP([multiple controllers on the same host doesn't have CT > conflict]) > > +ovn_start > > +net_add n1 > > + > > +sim_add hv1 > > +as hv1 > > +ovs-vsctl add-br br-phys-1 > > +ovn_attach n1 br-phys-1 192.168.0.1 24 > > + > > +ovs-vsctl add-br br-phys-2 > > + > > +ovn-appctl vlog/set vconn:dbg > > + > > +check ovs-vsctl \ > > + -- set Open_vSwitch . external-ids:ct-zone-range-hv1=100-199 \ > > + -- set Open_vSwitch . external-ids:ct-zone-range-hv2=300-399 > > + > > +check ovn-nbctl ls-add ls > > + > > +check ovn-nbctl lsp-add ls lsp1 > > +check ovn-nbctl lsp-add ls lsp2 > > + > > +check ovn-nbctl lsp-set-addresses lsp1 "00:00:00:00:00:10 10.0.0.10" \ > > + -- lsp-set-options lsp1 requested-chassis=hv1 > > +check ovn-nbctl lsp-set-addresses lsp2 "00:00:00:00:00:20 10.0.0.20" \ > > + -- lsp-set-options lsp2 requested-chassis=hv2 > > + > > +check ovn-nbctl lr-add lr1 -- set Logical_Router lr1 options:chassis=hv1 > > +check ovn-nbctl lrp-add lr1 lr1-ls 00:00:00:00:00:01 10.0.0.1/24 > > +check ovn-nbctl lsp-add-router-port ls ls-lr1 lr1-ls > > + > > +check ovn-nbctl lr-add lr2 -- set Logical_Router lr2 options:chassis=hv2 > > +check ovn-nbctl lrp-add lr2 lr2-ls 00:00:00:00:00:01 10.0.0.1/24 > > +check ovn-nbctl lsp-add-router-port ls ls-lr2 lr2-ls > > + > > +check ovs-vsctl -- add-port br-int vif1 -- \ > > + set interface vif1 external-ids:iface-id=lsp1 > > + > > +wait_for_ports_up lsp1 > > +check ovn-nbctl --wait=hv sync > > + > > +# the file is read once at startup so it's safe to write it > > +# here after the first ovn-controller has started > > +echo hv2 > ${OVN_SYSCONFDIR}/system-id-override > > + > > +# for some reason SSL/TLS ovsdb configuration overrides CLI, so > > +# delete ssl config from ovsdb to give CLI arguments priority > > +ovs-vsctl del-ssl > > + > > +start_virtual_controller n1 br-phys-2 br-int-2 192.168.2.1 24 geneve > hv2 \ > > + --pidfile=${OVS_RUNDIR}/ovn-controller-2.pid \ > > + --log-file=${OVS_RUNDIR}/ovn-controller-2.log \ > > + -p $PKIDIR/testpki-hv2-privkey.pem \ > > + -c $PKIDIR/testpki-hv2-cert.pem \ > > + -C $PKIDIR/testpki-cacert.pem \ > > + -vvconn:dbg > > +pidfile="$OVS_RUNDIR"/ovn-controller-2.pid > > +on_exit "test -e \"$pidfile\" && kill \`cat \"$pidfile\"\`" > > + > > +check ovs-vsctl -- add-port br-int-2 vif2 -- \ > > + set interface vif2 external-ids:iface-id=lsp2 > > + > > +wait_for_ports_up lsp2 > > +check ovn-nbctl --wait=hv sync > > +OVN_POPULATE_ARP > > + > > +check_zone_allocation() { > > + local ctl=$1 > > + local prefix=$2 > > + > > + AT_CHECK_UNQUOTED([ovn-appctl -t $ctl ct-zone-list | cut -d ' ' -f2 > | grep -vE "$prefix[[0-9]]{2}"], [1]) > > +} > > + > > +check_zone_flush() { > > + local file=$1 > > + local prefix=$2 > > + > > + AT_CHECK_UNQUOTED([grep NXT_CT_FLUSH_ZONE ${OVS_RUNDIR}/$file | > grep -vE "zone_id=$prefix[[0-9]]{2}"], [1]) > > +} > > + > > +hv1_ctl="${OVS_RUNDIR}/ovn-controller.$(cat > ${OVS_RUNDIR}/ovn-controller.pid).ctl" > > +hv2_ctl="${OVS_RUNDIR}/ovn-controller.$(cat > ${OVS_RUNDIR}/ovn-controller-2.pid).ctl" > > + > > +check_zone_allocation $hv1_ctl 1 > > +check_zone_flush ovn-controller.log 1 > > +check_zone_allocation $hv2_ctl 3 > > +check_zone_flush ovn-controller-2.log 3 > > + > > +# Re-bind both LSPs > > +check ovs-vsctl set interface vif1 external-ids:iface-id=lsp2 \ > > + -- set interface vif2 external-ids:iface-id=lsp1 > > +check ovn-nbctl lsp-set-options lsp1 requested-chassis=hv2 \ > > + -- lsp-set-options lsp2 requested-chassis=hv1 > > +wait_for_ports_up > > +check ovn-nbctl --wait=hv sync > > + > > +check_zone_allocation $hv1_ctl 1 > > +check_zone_flush ovn-controller.log 1 > > +check_zone_allocation $hv2_ctl 3 > > +check_zone_flush ovn-controller-2.log 3 > > + > > +# Swap GW routers. > > +check ovn-nbctl set Logical_Router lr1 options:chassis=hv2 \ > > + -- set Logical_Router lr2 options:chassis=hv1 > > +check ovn-nbctl --wait=hv sync > > + > > +# Do recompute for both controller to make that datapath swap effective. > > +check ovn-appctl -t $hv1_ctl inc-engine/recompute > > +check ovn-appctl -t $hv2_ctl inc-engine/recompute > > + > > +check_zone_allocation $hv1_ctl 1 > > +check_zone_flush ovn-controller.log 1 > > +check_zone_allocation $hv2_ctl 3 > > +check_zone_flush ovn-controller-2.log 3 > > + > > +# Remove LSPs. > > +check ovn-nbctl --wait=hv lsp-del lsp1 > > + > > +check_zone_allocation $hv1_ctl 1 > > +check_zone_flush ovn-controller.log 1 > > +check_zone_allocation $hv2_ctl 3 > > +check_zone_flush ovn-controller-2.log 3 > > + > > +check ovn-nbctl --wait=hv lsp-del lsp2 > > +check_zone_allocation $hv1_ctl 1 > > +check_zone_flush ovn-controller.log 1 > > +check_zone_allocation $hv2_ctl 3 > > +check_zone_flush ovn-controller-2.log 3 > > + > > +# Make the routers distributed again. > > +check ovn-nbctl remove Logical_Router lr1 options chassis > > +check ovn-nbctl remove Logical_Router lr2 options chassis > > +check ovn-nbctl --wait=hv sync > > + > > +# Do recompute for both controller to make that datapath remove > effective. > > +check ovn-appctl -t $hv1_ctl inc-engine/recompute > > +check ovn-appctl -t $hv2_ctl inc-engine/recompute > > + > > +check_zone_allocation $hv1_ctl 1 > > +check_zone_flush ovn-controller.log 1 > > +check_zone_allocation $hv2_ctl 3 > > +check_zone_flush ovn-controller-2.log 3 > > + > > +OVN_CLEANUP([hv1]) > > +AT_CLEANUP > > +]) > > -- > > 2.52.0 > > > > _______________________________________________ > > dev mailing list > > [email protected] > > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > > > Regards, Ales _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
