On Fri, Mar 14, 2025 at 1:59 PM Xavier Simonart <[email protected]> wrote:
> Signed-off-by: Xavier Simonart <[email protected]> > --- > Hi Xavier, thank you for the patch, I have some minor comments down below. tests/multinode-macros.at | 4 + > tests/multinode.at | 224 +++++++++++++------------------------- > 2 files changed, 78 insertions(+), 150 deletions(-) > > diff --git a/tests/multinode-macros.at b/tests/multinode-macros.at > index 29f0711e6..576098a41 100644 > --- a/tests/multinode-macros.at > +++ b/tests/multinode-macros.at > @@ -89,6 +89,10 @@ cleanup_multinode_resources() { > done > } > > +multinode_sbctl () { > + m_as ovn-central-az1-1 ovn-sbctl "$@" > +} > + > multinode_nbctl () { > m_as ovn-central-az1-1 ovn-nbctl "$@" > } > diff --git a/tests/multinode.at b/tests/multinode.at > index 7ff8588c9..f0aeeb346 100644 > --- a/tests/multinode.at > +++ b/tests/multinode.at > @@ -2802,6 +2802,53 @@ OVS_WAIT_UNTIL([m_as ovn-chassis-1 ip link show | > grep -q genev_sys]) > OVS_WAIT_UNTIL([m_as ovn-chassis-2 ip link show | grep -q genev_sys]) > OVS_WAIT_UNTIL([m_as ovn-chassis-3 ip link show | grep -q genev_sys]) > > +# check_ping(src_port, src_chassis, dst_port, expected_status) > +# Check whether ping, from src_port on src_chassis to dst_port works as > expected. > +# expected_status: > +# - "success" (or empty): ping should succeed between src and dst. > +# - "potential-duplicates: ping should succeed, but we might have > potential duplicate packets. > nit: Missing " after potential-duplicates, also would "duplicates" be enough with explanation? +# - "lost": ping should fail, no packets should go through. > +# Source ip namespace is derived from previous parameters: > +# - parent_port name for container ports. > +# - same name as port itself for other ports. > +# Dest ip is retrieved from dst_port. > +check_ping() { > + src_port=$1 > + src_chassis=$2 > + dst_port=$3 > + status=${4-success} > Missing colon after 4. + > + parent_port=$(multinode_sbctl get port_binding $src_port parent_port) > + if [[ "$parent_port" != "[]" ]]; then > + src_ns=$parent_port > + else > + src_ns=$src_port > + fi > + dst_chassis_uuid=$(multinode_sbctl get port_binding $dst_port chassis) > + requested_chassis_uuid=$(multinode_sbctl get port_binding $dst_port > requested_chassis) > + dst_chassis=$(multinode_sbctl --bare --columns name list chassis > $dst_chassis_uuid) > + dst_ip=$(multinode_nbctl lsp-get-addresses $dst_port | awk '{print > $2}') > + echo "$src_port on $src_chassis => $dst_port on > $dst_chassis(requested_chassis=$requested_chassis_uuid)" > + M_NS_CHECK_EXEC([$src_chassis], [$src_ns], [ping -q -c 3 -i 0.3 -w 2 > $dst_ip | FORMAT_PING], \ > +[0], [stdout]) > + if [[ "$status" == "success" ]]; then > + AT_CHECK([cat stdout | grep -c "3 packets transmitted, 3 > received, 0% packet loss"], [0],[dnl > nit: space after , +1 > +]) > + elif [[ "$status" == "potential-duplicates" ]]; then > + AT_CHECK([cat stdout | grep "3 packets transmitted" | grep -c "3 > received"], [0],[dnl > nit: same here +1 > +]) > + elif [[ "$status" == "lost" ]]; then > + AT_CHECK([cat stdout | grep -c "100% packet loss"], [0],[dnl > nit: same here > +1 > +]) > + else > + echo "unexpected status $status" > + AT_FAIL_IF([:]) > + fi > +} > + > check multinode_nbctl ls-add sw0 > check multinode_nbctl lsp-add sw0 migrator > check multinode_nbctl lsp-set-addresses migrator "50:54:00:00:00:03 > 10.0.0.3 1000::3" > @@ -2813,79 +2860,34 @@ check multinode_nbctl --wait=hv set > Logical_Switch_Port migrator options:request > > m_as ovn-chassis-1 /data/create_fake_vm.sh migrator migrator > 50:54:00:00:00:03 1342 10.0.0.3 24 10.0.0.1 1000::3/64 1000::a > m_as ovn-chassis-3 /data/create_fake_vm.sh migrator migrator > 50:54:00:00:00:03 1342 10.0.0.3 24 10.0.0.1 1000::3/64 1000::a > -m_as ovn-chassis-2 /data/create_fake_vm.sh sw0-port2 sw0p2 > 50:54:00:00:00:04 1342 10.0.0.4 24 10.0.0.1 1000::4/64 1000::a > +m_as ovn-chassis-2 /data/create_fake_vm.sh sw0-port2 sw0-port2 > 50:54:00:00:00:04 1342 10.0.0.4 24 10.0.0.1 1000::4/64 1000::a > > m_wait_for_ports_up > > M_START_TCPDUMP([ovn-chassis-1], [-neei genev_sys_6081 arp or ip], > [ch1_genev]) > M_START_TCPDUMP([ovn-chassis-1], [-neei migrator-p arp or ip], > [ch1_migrator]) > M_START_TCPDUMP([ovn-chassis-2], [-neei genev_sys_6081 arp or ip], > [ch2_genev]) > -M_START_TCPDUMP([ovn-chassis-2], [-neei sw0p2-p arp or ip], [ch2_sw0p2]) > +M_START_TCPDUMP([ovn-chassis-2], [-neei sw0-port2-p arp or ip], > [ch2_sw0p2]) > M_START_TCPDUMP([ovn-chassis-3], [-neei genev_sys_6081 arp or ip], > [ch3_genev]) > M_START_TCPDUMP([ovn-chassis-3], [-neei migrator-p arp or ip], > [ch3_migrator]) > > AS_BOX([Migration with vifs]) > -echo "Migrator on chassis-1 => sw0p2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 10.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -echo "sw0p2 on chassis-2 => Migrator on chassis-1" > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ping -q -c 3 -i 0.3 -w 2 > 10.0.0.3 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > +check_ping migrator ovn-chassis-1 sw0-port2 > +check_ping sw0-port2 ovn-chassis-2 migrator > > echo "== Starting migration ==" > check multinode_nbctl --wait=hv set Logical_Switch_Port migrator > options:requested-chassis=ovn-chassis-1,ovn-chassis-3 > > -echo "Migrator on chassis-1 => sw0p2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 10.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > +check_ping migrator ovn-chassis-1 sw0-port2 > +check_ping migrator ovn-chassis-3 sw0-port2 > > -echo "Migrator on chassis-3 => sw0p2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 10.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -echo "sw0p2 on chassis-2 => migrator on ..." > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ping -q -c 3 -i 0.3 -w 2 > 10.0.0.3 | FORMAT_PING], \ > -[0], [stdout]) > - > -# Both VM are running ... We might get duplicates replies. > -AT_CHECK([cat stdout | grep "3 packets transmitted" | grep -c "3 > received"], [0],[dnl > -1 > -]) > +check_ping sw0-port2 ovn-chassis-2 migrator "potential-duplicates" > > echo "== Finalizing migration ==" > check multinode_nbctl --wait=hv set Logical_Switch_Port migrator > options:requested-chassis=ovn-chassis-3 > > -echo "Migrator on chassis-1 => sw0p2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 10.0.0.4 | FORMAT_PING], \ > -[0], [stdout]) > - > -# VM still running on chassis-1 but flows should have been deleted as > migration completed. > -AT_CHECK([cat stdout | grep -c "100% packet loss"], [0],[dnl > -1 > -]) > - > -echo "Migrator on chassis-3 => sw0p2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 10.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -# We should not have duplicates anymore > -echo "sw0p2 on chassis-2 => migrator on chassis-3" > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ping -q -c 3 -i 0.3 -w 2 > 10.0.0.3 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > +check_ping migrator ovn-chassis-3 sw0-port2 > +check_ping sw0-port2 ovn-chassis-2 migrator > > AS_BOX([Migration with container ports]) > # Create container ports. > @@ -2907,71 +2909,27 @@ M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ip > link set cont up], [0]) > M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ip addr add 20.0.0.3/24 > dev cont], [0]) > > # Create the interface for lport sw1-port2 > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ip link add link sw0p2 name > cont2 type vlan id 10], [0]) > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ip link set cont2 address > f0:00:00:01:02:04], [0]) > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ip link set cont2 up], [0]) > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ip addr add 20.0.0.4/24 dev > cont2], [0]) > +M_NS_CHECK_EXEC([ovn-chassis-2], [sw0-port2], [ip link add link sw0-port2 > name cont2 type vlan id 10], [0]) > +M_NS_CHECK_EXEC([ovn-chassis-2], [sw0-port2], [ip link set cont2 address > f0:00:00:01:02:04], [0]) > +M_NS_CHECK_EXEC([ovn-chassis-2], [sw0-port2], [ip link set cont2 up], [0]) > +M_NS_CHECK_EXEC([ovn-chassis-2], [sw0-port2], [ip addr add 20.0.0.4/24 > dev cont2], [0]) > > -echo "mig-cont on chassis-3 => cont2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -echo "cont2 on chassis-2 => mig-cont on chassis-3" > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.3 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > +check_ping mig-cont ovn-chassis-3 cont2 > +check_ping cont2 ovn-chassis-2 mig-cont > > echo "== Starting migration back ==" > check multinode_nbctl --wait=hv set Logical_Switch_Port migrator > options:requested-chassis=ovn-chassis-3,ovn-chassis-1 > > -echo "mig-cont on chassis-3 => cont2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -echo "mig-cont on chassis-1 => cont2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -echo "cont2 on chassis-2 => mig-cont on ..." > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.3 | FORMAT_PING], \ > -[0], [stdout]) > - > -# Both VM are running ... We might get duplicates replies. > -AT_CHECK([cat stdout | grep "3 packets transmitted" | grep -c "3 > received"], [0],[dnl > -1 > -]) > +check_ping mig-cont ovn-chassis-3 cont2 > +check_ping mig-cont ovn-chassis-1 cont2 > +check_ping cont2 ovn-chassis-2 mig-cont "potential-duplicates" > > echo "== Finalizing migration ==" > check multinode_nbctl --wait=hv set Logical_Switch_Port migrator > options:requested-chassis=ovn-chassis-1 > > -echo "mig-cont on chassis-3 => cont2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.4 | FORMAT_PING], \ > -[0], [stdout]) > - > -# VM still running on chassis-3 but flows should have been deleted.... > -AT_CHECK([cat stdout | grep -c "100% packet loss"], [0],[dnl > -1 > -]) > - > -echo "mig-cont on chassis-1 => cont2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -# We should not have duplicates anymore > -echo "cont2 on chassis-2 => mig-cont on chassis-1" > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.3 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > +check_ping mig-cont ovn-chassis-3 cont2 "lost" > +check_ping mig-cont ovn-chassis-1 cont2 > +check_ping cont2 ovn-chassis-2 mig-cont > > echo "== Starting another migration, this time before starting dst VM ==" > # Unbind migrator from chassis-3 > @@ -2982,51 +2940,17 @@ sleep 1 > m_as ovn-chassis-3 ovs-vsctl -- set Interface migrator-p > external_ids:iface-id=migrator > > > -echo "mig-cont on chassis-3 => cont2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -echo "mig-cont on chassis-1 => cont2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -echo "cont2 on chassis-2 => migrator on ..." > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.3 | FORMAT_PING], \ > -[0], [stdout]) > +check_ping mig-cont ovn-chassis-3 cont2 > +check_ping mig-cont ovn-chassis-1 cont2 > +check_ping cont2 ovn-chassis-2 mig-cont "potential-duplicates" > > -# Both VM are running ... We might get duplicates replies. > -AT_CHECK([cat stdout | grep "3 packets transmitted" | grep -c "3 > received"], [0],[dnl > -1 > -]) > > echo "== Finalizing migration ==" > check multinode_nbctl --wait=hv set Logical_Switch_Port migrator > options:requested-chassis=ovn-chassis-3 > > -echo "mig-cont on chassis-1 => cont2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-1], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.4 | FORMAT_PING], \ > -[0], [stdout]) > - > -# VM still running on chassis-1 but flows should have been deleted.... > -AT_CHECK([cat stdout | grep -c "100% packet loss"], [0],[dnl > -1 > -]) > - > -echo "mig-cont on chassis-3 => cont2 on chassis-2" > -M_NS_CHECK_EXEC([ovn-chassis-3], [migrator], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.4 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > - > -# We should not have duplicates anymore > -echo "cont2 on chassis-2 => mig-cont on chassis-3" > -M_NS_CHECK_EXEC([ovn-chassis-2], [sw0p2], [ping -q -c 3 -i 0.3 -w 2 > 20.0.0.3 | FORMAT_PING], \ > -[0], [dnl > -3 packets transmitted, 3 received, 0% packet loss, time 0ms > -]) > +check_ping mig-cont ovn-chassis-1 cont2 "lost" > +check_ping mig-cont ovn-chassis-3 cont2 > +check_ping cont2 ovn-chassis-2 mig-cont > > m_as ovn-chassis-1 killall tcpdump > m_as ovn-chassis-2 killall tcpdump > -- > 2.47.1 > > _______________________________________________ > dev mailing list > [email protected] > https://mail.openvswitch.org/mailman/listinfo/ovs-dev > > Other than that it looks good, thanks. Acked-by: Ales Musil <[email protected]> _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
