From patchwork Fri Sep 16 08:41:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xavier Simonart X-Patchwork-Id: 1678569 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=E04bPZ5i; dkim-atps=neutral Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MTSHL0Rd6z1ynm for ; Fri, 16 Sep 2022 18:42:05 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 14618842BE; Fri, 16 Sep 2022 08:42:04 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 14618842BE Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=E04bPZ5i X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id QnKZoBwM1ZLF; Fri, 16 Sep 2022 08:42:03 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id 2316D8426B; Fri, 16 Sep 2022 08:42:02 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 2316D8426B Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id BEE59C0032; Fri, 16 Sep 2022 08:42:01 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 8EDB6C002D for ; Fri, 16 Sep 2022 08:42:00 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 5A86441BBF for ; Fri, 16 Sep 2022 08:42:00 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 5A86441BBF Authentication-Results: smtp4.osuosl.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=E04bPZ5i X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TP2C-y6zsqQ0 for ; Fri, 16 Sep 2022 08:41:59 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org E946241BBD Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp4.osuosl.org (Postfix) with ESMTPS id E946241BBD for ; Fri, 16 Sep 2022 08:41:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1663317717; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=CswZdyaFjo2vlIbCegzXbJefxVTSjODRqOP9xZ+LqSI=; b=E04bPZ5i+DFUcNE7LnX78PPFCeC4mpxO0AJE5ZXH5Ef3o+aVzoxAeuzTIigAW6TvVRupTK o9cqnm/um9yS1nvfrSbDM1NUrpbsViqms3uw0Hj0X7BjVCkwfqOcehXFvQuyR1edvULLOd jjDGt2SPINcJnyqz0AiB/WXx5m3/Zk4= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-16-5QwWJOj_NBm7CSTXUwBLvQ-1; Fri, 16 Sep 2022 04:41:56 -0400 X-MC-Unique: 5QwWJOj_NBm7CSTXUwBLvQ-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 5C0B11C09042 for ; Fri, 16 Sep 2022 08:41:56 +0000 (UTC) Received: from wsfd-netdev90.ntdv.lab.eng.bos.redhat.com (wsfd-netdev90.ntdv.lab.eng.bos.redhat.com [10.19.188.196]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3F5D52166B26; Fri, 16 Sep 2022 08:41:56 +0000 (UTC) From: Xavier Simonart To: xsimonar@redhat.com, dev@openvswitch.org Date: Fri, 16 Sep 2022 04:41:56 -0400 Message-Id: <20220916084156.884513-1-xsimonar@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Cc: dceara@redhat.com Subject: [ovs-dev] [PATCH ovn] ovn-controller: fix a crash when deleting a port claimed when sb was ro X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" When SB is read-only when a port needs to be claimed, the claim of the port is delayed until SB becomes writable. However, if that port gets deleted while ovn-controller is waiting for SB to become writable, the claim will crash ovn-controller Signed-off-by: Xavier Simonart Acked-by: Mark Michelson --- controller/ovn-controller.c | 3 +- tests/ovn.at | 92 +++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index 89a495a04..07e9b07cf 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -3799,7 +3799,6 @@ main(int argc, char *argv[]) engine_add_input(&en_ovs_interface_shadow, &en_ovs_interface, ovs_interface_shadow_ovs_interface_handler); - engine_add_input(&en_runtime_data, &en_sb_ro, runtime_data_sb_ro_handler); engine_add_input(&en_runtime_data, &en_ofctrl_is_connected, NULL); engine_add_input(&en_runtime_data, &en_ovs_open_vswitch, NULL); @@ -3814,6 +3813,8 @@ main(int argc, char *argv[]) /* Reuse the same handler for any previously postponed ports. */ engine_add_input(&en_runtime_data, &en_postponed_ports, runtime_data_sb_port_binding_handler); + /* Run sb_ro_handler after port_binding_handler in case port get deleted */ + engine_add_input(&en_runtime_data, &en_sb_ro, runtime_data_sb_ro_handler); /* The OVS interface handler for runtime_data changes MUST be executed * after the sb_port_binding_handler as port_binding deletes must be diff --git a/tests/ovn.at b/tests/ovn.at index 4f4783461..80e9192ca 100644 --- a/tests/ovn.at +++ b/tests/ovn.at @@ -32797,3 +32797,95 @@ check ovn-nbctl lrp-del lr0-sw1 OVN_CLEANUP([hv1],[hv2]) AT_CLEANUP ]) + +OVN_FOR_EACH_NORTHD([ +AT_SETUP([ovn-controller: deleting a port being claimed]) +ovn_start +net_add n1 + +sim_add hv1 +as hv1 +ovs-vsctl add-br br-phys +ovn_attach n1 br-phys 192.168.0.1 +check ovs-vsctl add-port br-int p0 +check ovs-vsctl add-port br-int p1 + +ovn-nbctl ls-add sw0 +ovn-nbctl lsp-add sw0 sw0-port0 -- lsp-set-addresses sw0-port0 "50:54:00:00:00:01 192.168.0.2" +ovn-nbctl lsp-add sw0 sw0-port1 -- lsp-set-addresses sw0-port1 "50:54:00:00:00:02 192.168.0.3" +check ovn-nbctl --wait=hv sync + +# Pause SB +AT_CHECK([kill -STOP $(cat ovn-sb/ovsdb-server.pid)]) + +# Make us claim psw0-port0. This will make SB ro +ovs-vsctl set interface p0 external-ids:iface-id=sw0-port0 +sleep 0.5 +# Make us claim sw0-port1. Claim should be delayed +ovs-vsctl set interface p1 external-ids:iface-id=sw0-port1 +# Delete sw0-port1 +ovn-nbctl lsp-del sw0-port1 +sleep 0.5 +# Restart SB +AT_CHECK([kill -CONT $(cat ovn-sb/ovsdb-server.pid)]) +check ovn-nbctl --wait=hv sync +ovn-nbctl ls-del sw0 +check ovn-nbctl --wait=hv sync +OVN_CLEANUP([hv1]) +AT_CLEANUP +]) + +OVN_FOR_EACH_NORTHD([ +AT_SETUP([ovn-controller: checking flows after delaying port claims]) +ovn_start +net_add n1 + +sim_add hv1 +as hv1 +ovs-vsctl add-br br-phys +ovn_attach n1 br-phys 192.168.0.1 +check ovs-vsctl add-port br-int p0 +check ovs-vsctl add-port br-int p1 + +ovn-nbctl ls-add sw0 +ovn-nbctl lsp-add sw0 sw0-port0 -- lsp-set-addresses sw0-port0 "50:54:00:00:00:01 192.168.0.2" +check ovn-nbctl --wait=hv sync +ovn-nbctl lsp-add sw0 sw0-port1 -- lsp-set-addresses sw0-port1 "50:54:00:00:00:02 192.168.0.3" +ovs-vsctl set interface p0 external-ids:iface-id=sw0-port0 +ovs-vsctl set interface p1 external-ids:iface-id=sw0-port1 +check ovn-nbctl --wait=hv sync +as hv1 ovs-ofctl dump-flows br-int | sed 's/cookie=0x.*, duration=.*, table/cookie=??, duration=??, table/' | sed 's/load:0x.->NXM_NX_REG1/load:0x?->NXM_NX_REG1/g' | sed 's/idle_age=[[0-9]], //g' | sort > offlows1 + +ovs-vsctl set interface p0 external-ids:iface-id=foo0 +ovs-vsctl set interface p1 external-ids:iface-id=foo1 +ovn-nbctl lsp-del sw0-port0 +ovn-nbctl lsp-del sw0-port1 +ovn-nbctl ls-del sw0 +check ovn-nbctl --wait=hv sync + +ovn-nbctl ls-add sw0 +ovn-nbctl lsp-add sw0 sw0-port0 -- lsp-set-addresses sw0-port0 "50:54:00:00:00:01 192.168.0.2" +check ovn-nbctl --wait=hv sync +ovn-nbctl lsp-add sw0 sw0-port1 -- lsp-set-addresses sw0-port1 "50:54:00:00:00:02 192.168.0.3" +check ovn-nbctl --wait=hv sync + +# Pause SB +AT_CHECK([kill -STOP $(cat ovn-sb/ovsdb-server.pid)]) + +# Make us claim psw0-port0. This will make SB ro +ovs-vsctl set interface p0 external-ids:iface-id=sw0-port0 +sleep 0.5 +# Make us claim sw0-port1. Claim should be delayed +ovs-vsctl set interface p1 external-ids:iface-id=sw0-port1 +sleep 0.5 +# Restart SB +AT_CHECK([kill -CONT $(cat ovn-sb/ovsdb-server.pid)]) +check ovn-nbctl --wait=hv sync +as hv1 ovs-ofctl dump-flows br-int | sed 's/cookie=0x.*, duration=.*, table/cookie=??, duration=??, table/' | sed 's/load:0x.->NXM_NX_REG1/load:0x?->NXM_NX_REG1/g' | sed 's/idle_age=[[0-9]], //g' | sort > offlows2 +AT_CHECK([diff offlows1 offlows2]) + +ovn-nbctl ls-del sw0 +check ovn-nbctl --wait=hv sync +OVN_CLEANUP([hv1]) +AT_CLEANUP +])