From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id F08BC1FF138 for ; Mon, 01 Jun 2026 14:32:21 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D0BF01C3E9; Mon, 1 Jun 2026 14:32:21 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Subject: [PATCH proxmox-backup 3/4] datastore: s3: avoid double calls to rather expensive backup_user() Date: Mon, 1 Jun 2026 14:31:23 +0200 Message-ID: <20260601123124.461765-4-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260601123124.461765-1-c.ebner@proxmox.com> References: <20260601123124.461765-1-c.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1780317075440 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.063 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_SHORT 0.001 Use of a URL Shortener for very short URL SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record T_SPF_PERMERROR 0.01 SPF: test of record failed (permerror) Message-ID-Hash: PA5636MD4RN3LCMP2EAIUFTWPGIVZXKA X-Message-ID-Hash: PA5636MD4RN3LCMP2EAIUFTWPGIVZXKA X-MailFrom: c.ebner@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox Backup Server development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: backup_user() internally calls User::from_name() which itself uses getpwnam_r(3) [0] and therefore can involve nsswitch.conf and /etc/passwd parsing, including several syscalls to do so as demonstrated by a strace in [1]. Therefore, only call the helper once and clone it to get multiple instances instead. [0] https://docs.rs/nix/0.29.0/nix/unistd/struct.User.html#method.from_name [1] https://bugzilla.proxmox.com/show_bug.cgi?id=7642 Signed-off-by: Christian Ebner --- pbs-datastore/src/datastore.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs index 42aa96464..988cda833 100644 --- a/pbs-datastore/src/datastore.rs +++ b/pbs-datastore/src/datastore.rs @@ -492,16 +492,18 @@ impl DataStore { .clone() .ok_or_else(|| format_err!("missing bucket for s3 backend"))?; + let user = pbs_config::backup_user()?; + let (config, _config_digest) = pbs_config::s3::config()?; let config: S3ClientConf = config.lookup(S3_CFG_TYPE_ID, s3_client_id)?; let rate_limiter_options = S3RateLimiterOptions { id: s3_client_id.to_string(), - user: pbs_config::backup_user()?, + user: user.clone(), base_path: S3_CLIENT_RATE_LIMITER_BASE_PATH.into(), }; let request_counter_config = S3RequestCounterConfig { id: format!("{s3_client_id}-{bucket}-{}", self.name()), - user: pbs_config::backup_user()?, + user: user.clone(), base_path: S3_CLIENT_REQUEST_COUNTER_BASE_PATH.into(), }; @@ -3348,6 +3350,8 @@ impl DataStore { return Ok((backend_type, None)); } + let user = pbs_config::backup_user()?; + let s3_client_id = backend_config .client .as_ref() @@ -3363,12 +3367,12 @@ impl DataStore { .with_context(|| format!("no '{s3_client_id}' in config"))?; let rate_limiter_options = S3RateLimiterOptions { id: s3_client_id.to_string(), - user: pbs_config::backup_user()?, + user: user.clone(), base_path: S3_CLIENT_RATE_LIMITER_BASE_PATH.into(), }; let request_counter_config = S3RequestCounterConfig { id: format!("{s3_client_id}-{bucket}-{}", datastore_config.name), - user: pbs_config::backup_user()?, + user: user.clone(), base_path: S3_CLIENT_REQUEST_COUNTER_BASE_PATH.into(), }; -- 2.47.3