From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 310CD1FF17A for ; Fri, 18 Jul 2025 11:24:29 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 2C1C3181E2; Fri, 18 Jul 2025 11:25:37 +0200 (CEST) Message-ID: <630132f1-24db-4a38-a854-71970c558d24@proxmox.com> Date: Fri, 18 Jul 2025 11:25:03 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: Proxmox Backup Server development discussion , Christian Ebner References: <20250715125332.954494-1-c.ebner@proxmox.com> <20250715125332.954494-31-c.ebner@proxmox.com> Content-Language: de-AT, en-US From: Lukas Wagner In-Reply-To: <20250715125332.954494-31-c.ebner@proxmox.com> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1752830700937 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.020 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH proxmox-backup v8 21/45] datastore: get and set owner for s3 store backend X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" With my feedback addressed: Reviewed-by: Lukas Wagner On 2025-07-15 14:53, Christian Ebner wrote: > Read or write the ownership information from/to the corresponding > object in the S3 object store. Keep that information available if > the bucket is reused as datastore. > > Signed-off-by: Christian Ebner > --- > changes since version 7: > - no changes > > pbs-datastore/src/datastore.rs | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/pbs-datastore/src/datastore.rs b/pbs-datastore/src/datastore.rs > index 265624229..ca099c1d0 100644 > --- a/pbs-datastore/src/datastore.rs > +++ b/pbs-datastore/src/datastore.rs > @@ -7,6 +7,7 @@ use std::sync::{Arc, LazyLock, Mutex}; > use std::time::Duration; > > use anyhow::{bail, format_err, Context, Error}; > +use http_body_util::BodyExt; > use nix::unistd::{unlinkat, UnlinkatFlags}; > use pbs_tools::lru_cache::LruCache; > use tracing::{info, warn}; > @@ -832,6 +833,21 @@ impl DataStore { > backup_group: &pbs_api_types::BackupGroup, > ) -> Result { > let full_path = self.owner_path(ns, backup_group); > + > + if let DatastoreBackend::S3(s3_client) = self.backend()? { > + let mut path = ns.path(); > + path.push(format!("{backup_group}")); nit: you can use .to_string() here, is a bit easier to read > + let object_key = crate::s3::object_key_from_path(&path, "owner") I did not note it for the previously reviewed patches, but I think some (pub) consts for these 'static' key suffixes would be better than to repeat the same string in multiple places in the code (mostly to avoid errors due to spelling mistakes) > + .context("invalid owner file object key")?; > + let response = proxmox_async::runtime::block_on(s3_client.get_object(object_key))? > + .ok_or_else(|| format_err!("fetching owner failed"))?; > + let content = proxmox_async::runtime::block_on(response.content.collect())?; > + let owner = String::from_utf8(content.to_bytes().trim_ascii_end().to_vec())?; > + return owner > + .parse() > + .map_err(|err| format_err!("parsing owner for {backup_group} failed: {err}")); > + } > + > let owner = proxmox_sys::fs::file_read_firstline(full_path)?; > owner > .trim_end() // remove trailing newline > @@ -860,6 +876,18 @@ impl DataStore { > ) -> Result<(), Error> { > let path = self.owner_path(ns, backup_group); > > + if let DatastoreBackend::S3(s3_client) = self.backend()? { > + let mut path = ns.path(); > + path.push(format!("{backup_group}")); > + let object_key = crate::s3::object_key_from_path(&path, "owner") > + .context("invalid owner file object key")?; > + let data = hyper::body::Bytes::from(format!("{auth_id}\n")); > + let _is_duplicate = proxmox_async::runtime::block_on( > + s3_client.upload_with_retry(object_key, data, true), > + ) > + .context("failed to set owner on s3 backend")?; > + } > + > let mut open_options = std::fs::OpenOptions::new(); > open_options.write(true); > -- - Lukas _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel