From nobody Sat Sep 21 07:31:29 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1704992553; cv=none; d=zohomail.com; s=zohoarc; b=CdwXbpjpgQ/t5vcSf703iuj7Cl2HXZaIIodXdLPxEs0RFnbTW4LmJE1lMGKfD6bQhnuKNwhAIAejB5Wvlsf/6j8MYCRaHdAxspa7omExH7HkzK8srHMK6k1KQa07dMfnPiIBh6ZbkjGIV20dYdro2gfk7esFB3w7lFbqBUOCi9k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1704992553; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Re+4UZ27+DR49DjUJzkY2gJ0HPmVohtgLMvTOnIMJyM=; b=b4Hit0dhUK9C41yFKvsSwOSm3p40WyXmYICWhi4NXMBLS6iT73OCFNdHW09/VAjBGLa4Ep4RlLzrW8ViT9EmWyDmwEL6Mgz790FI56oyCxfZ2vuUzGaL0s2zYncsXsbC2OdJXfJC4xqIfdnxS+x5AYbzNiM4mfb25xIvKW2AHfI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17049925531411007.6320305553897; Thu, 11 Jan 2024 09:02:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rNyQi-00047O-Bq; Thu, 11 Jan 2024 12:01:20 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rNyQV-0003qu-0R for qemu-devel@nongnu.org; Thu, 11 Jan 2024 12:01:08 -0500 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rNyQS-0003aU-HS for qemu-devel@nongnu.org; Thu, 11 Jan 2024 12:01:06 -0500 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-652-G40tPMM_NuSx_81bjKSDIQ-1; Thu, 11 Jan 2024 12:01:00 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 2F180108BF3F; Thu, 11 Jan 2024 17:01:00 +0000 (UTC) Received: from thuth-p1g4.redhat.com (unknown [10.39.192.197]) by smtp.corp.redhat.com (Postfix) with ESMTP id C424351D5; Thu, 11 Jan 2024 17:00:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1704992462; 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: in-reply-to:in-reply-to:references:references; bh=Re+4UZ27+DR49DjUJzkY2gJ0HPmVohtgLMvTOnIMJyM=; b=SfyVfAJrPI3RE71cZqXcIEbfI4E9RUbKqWcNNjeIkbrC+ttODe1HW+9obMPlYiGxVS+R5J +xw1eglihI+zh6qZYZKwRYozZciJv1xBFf/+/hl3mOtQhczytucIlNHr267J9Q/YoH9Wl1 wM6Fr/qUbPBfBPwSxwMPuyW2UM/sWGs= X-MC-Unique: G40tPMM_NuSx_81bjKSDIQ-1 From: Thomas Huth To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , Stefan Hajnoczi Subject: [PULL 06/17] net: add explicit info about connecting/listening state Date: Thu, 11 Jan 2024 18:00:35 +0100 Message-ID: <20240111170047.909117-7-thuth@redhat.com> In-Reply-To: <20240111170047.909117-1-thuth@redhat.com> References: <20240111170047.909117-1-thuth@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.5 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=thuth@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -45 X-Spam_score: -4.6 X-Spam_bar: ---- X-Spam_report: (-4.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.467, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1704992554692100007 From: Daniel P. Berrang=C3=A9 When running 'info network', if the stream backend is still in the process of connecting, or waiting for an incoming connection, no information is displayed. There is also no way to distinguish whether the server is still in the process of setting up the listener socket, or whether it is ready to accept incoming client connections. This leads to a race condition in the netdev-socket qtest which launches a server process followed by a client process. Under high load conditions it is possible for the client to attempt to connect before the server is accepting clients. For the scenarios which do not set the 'reconnect' option, this opens up a race which can lead to the test scenario failing to reach the expected state. Now that 'info network' can distinguish between initialization phase and the listening phase, the netdev-socket qtest will correctly synchronize, such that the client QEMU is not spawned until the server is ready. This should solve the non-deterministic failures seen with the netdev-socket qtest. Signed-off-by: "Daniel P. Berrang=C3=A9" Message-ID: <20240104162942.211458-5-berrange@redhat.com> Reviewed-by: Stefan Hajnoczi Signed-off-by: Thomas Huth --- net/stream.c | 5 ++++- tests/qtest/netdev-socket.c | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/net/stream.c b/net/stream.c index 9204b4c96e..0defb21d45 100644 --- a/net/stream.c +++ b/net/stream.c @@ -173,7 +173,7 @@ static gboolean net_stream_send(QIOChannel *ioc, =20 net_socket_rs_init(&s->rs, net_stream_rs_finalize, false); s->nc.link_down =3D true; - qemu_set_info_str(&s->nc, "%s", ""); + qemu_set_info_str(&s->nc, "listening"); =20 qapi_event_send_netdev_stream_disconnected(s->nc.name); net_stream_arm_reconnect(s); @@ -292,6 +292,7 @@ static void net_stream_server_listening(QIOTask *task, = gpointer opaque) s->nc.link_down =3D true; s->listener =3D qio_net_listener_new(); =20 + qemu_set_info_str(&s->nc, "listening"); net_socket_rs_init(&s->rs, net_stream_rs_finalize, false); qio_net_listener_set_client_func(s->listener, net_stream_listen, s, NU= LL); qio_net_listener_add(s->listener, listen_sioc); @@ -309,6 +310,7 @@ static int net_stream_server_init(NetClientState *peer, =20 nc =3D qemu_new_net_client(&net_stream_info, peer, model, name); s =3D DO_UPCAST(NetStreamState, nc, nc); + qemu_set_info_str(&s->nc, "initializing"); =20 s->listen_ioc =3D QIO_CHANNEL(listen_sioc); qio_channel_socket_listen_async(listen_sioc, addr, 0, @@ -400,6 +402,7 @@ static int net_stream_client_init(NetClientState *peer, =20 nc =3D qemu_new_net_client(&net_stream_info, peer, model, name); s =3D DO_UPCAST(NetStreamState, nc, nc); + qemu_set_info_str(&s->nc, "connecting"); =20 s->ioc =3D QIO_CHANNEL(sioc); s->nc.link_down =3D true; diff --git a/tests/qtest/netdev-socket.c b/tests/qtest/netdev-socket.c index 3fc2ac26d0..91441f7922 100644 --- a/tests/qtest/netdev-socket.c +++ b/tests/qtest/netdev-socket.c @@ -127,7 +127,7 @@ static void test_stream_inet_ipv4(void) "addr.ipv4=3Don,addr.ipv6=3Doff," "addr.host=3D127.0.0.1,addr.port=3D%d", port); =20 - EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,\r\n", 0); + EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,listening\r\n", 0); =20 qts1 =3D qtest_initf("-nodefaults -M none " "-netdev stream,server=3Dfalse,id=3Dst0,addr.type= =3Dinet," @@ -200,7 +200,7 @@ static void test_stream_unix_reconnect(void) "-netdev stream,id=3Dst0,server=3Dtrue,addr.type=3D= unix," "addr.path=3D%s", path); =20 - EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,\r\n", 0); + EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,listening\r\n", 0); =20 qts1 =3D qtest_initf("-nodefaults -M none " "-netdev stream,server=3Dfalse,id=3Dst0,addr.type= =3Dunix," @@ -250,7 +250,7 @@ static void test_stream_inet_ipv6(void) "addr.ipv4=3Doff,addr.ipv6=3Don," "addr.host=3D::1,addr.port=3D%d", port); =20 - EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,\r\n", 0); + EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,listening\r\n", 0); =20 qts1 =3D qtest_initf("-nodefaults -M none " "-netdev stream,server=3Dfalse,id=3Dst0,addr.type= =3Dinet," @@ -282,7 +282,7 @@ static void test_stream_unix(void) "addr.type=3Dunix,addr.path=3D%s,", path); =20 - EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,\r\n", 0); + EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,listening\r\n", 0); =20 qts1 =3D qtest_initf("-nodefaults -M none " "-netdev stream,id=3Dst0,server=3Dfalse," @@ -314,7 +314,7 @@ static void test_stream_unix_abstract(void) "addr.abstract=3Don", path); =20 - EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,\r\n", 0); + EXPECT_STATE(qts0, "st0: index=3D0,type=3Dstream,listening\r\n", 0); =20 qts1 =3D qtest_initf("-nodefaults -M none " "-netdev stream,id=3Dst0,server=3Dfalse," --=20 2.43.0