From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <d.csapak@proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id F39A3B604 for <pbs-devel@lists.proxmox.com>; Fri, 29 Apr 2022 12:05:23 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id E0F8D9B71 for <pbs-devel@lists.proxmox.com>; Fri, 29 Apr 2022 12:04:53 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id E246A9B68 for <pbs-devel@lists.proxmox.com>; Fri, 29 Apr 2022 12:04:52 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id A810442FC8 for <pbs-devel@lists.proxmox.com>; Fri, 29 Apr 2022 12:04:52 +0200 (CEST) From: Dominik Csapak <d.csapak@proxmox.com> To: pbs-devel@lists.proxmox.com Date: Fri, 29 Apr 2022 12:04:52 +0200 Message-Id: <20220429100452.968278-1-d.csapak@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.122 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH v2] proxmox-backup-proxy: stop accept() loop on daemon shutdown X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion <pbs-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/> List-Post: <mailto:pbs-devel@lists.proxmox.com> List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe> X-List-Received-Date: Fri, 29 Apr 2022 10:05:24 -0000 When a task was running during a reload, the old process would still accept connections, but drop them due to the closed receiving channel. This resulted in sporadic connection failures in such a scenario, depending on which process got the connection. To fix that poll the shutdown_future too during accept, and exit the loop then. Signed-off-by: Dominik Csapak <d.csapak@proxmox.com> --- changes from v1: * only get the shutdown_future once and reuse it in the loop src/bin/proxmox-backup-proxy.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/bin/proxmox-backup-proxy.rs b/src/bin/proxmox-backup-proxy.rs index 744a93f9..6a305b7c 100644 --- a/src/bin/proxmox-backup-proxy.rs +++ b/src/bin/proxmox-backup-proxy.rs @@ -394,14 +394,18 @@ async fn accept_connection( sender: tokio::sync::mpsc::Sender<ClientStreamResult>, ) { let accept_counter = Arc::new(()); + let mut shutdown_future = proxmox_rest_server::shutdown_future().fuse(); loop { - let (sock, peer) = match listener.accept().await { - Ok(conn) => conn, - Err(err) => { - eprintln!("error accepting tcp connection: {}", err); - continue; - } + let (sock, peer) = select! { + res = listener.accept().fuse() => match res { + Ok(conn) => conn, + Err(err) => { + eprintln!("error accepting tcp connection: {}", err); + continue; + } + }, + _ = shutdown_future => break, }; sock.set_nodelay(true).unwrap(); -- 2.30.2