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 C1FF21FF16B for ; Tue, 15 Jul 2025 14:53:30 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 531EC3BC51; Tue, 15 Jul 2025 14:54:20 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Tue, 15 Jul 2025 14:53:19 +0200 Message-ID: <20250715125332.954494-42-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250715125332.954494-1-c.ebner@proxmox.com> References: <20250715125332.954494-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.045 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 RCVD_IN_MSPIKE_H2 0.001 Average reputation (+2) 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 proxmox-backup v8 32/45] api: reader: use local datastore cache on s3 backend chunk fetching 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" Take advantage of the local datastore filesystem cache for datastores backed by an s3 object store in order to reduce number of requests and latency, and increase throughput. Also, reducing the number of requests is cost beneficial for S3 object stores charging for fetching of objects. Signed-off-by: Christian Ebner --- changes since version 7: - no changes src/api2/reader/mod.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/api2/reader/mod.rs b/src/api2/reader/mod.rs index 997d9ca77..846493c61 100644 --- a/src/api2/reader/mod.rs +++ b/src/api2/reader/mod.rs @@ -327,7 +327,28 @@ fn download_chunk( let body = match &env.backend { DatastoreBackend::Filesystem => load_from_filesystem(env, &digest)?, - DatastoreBackend::S3(s3_client) => fetch_from_object_store(s3_client, &digest).await?, + DatastoreBackend::S3(s3_client) => { + match env.datastore.cache() { + None => fetch_from_object_store(s3_client, &digest).await?, + Some(cache) => { + let mut cacher = env + .datastore + .cacher()? + .ok_or(format_err!("no cacher for datastore"))?; + // Download from object store, insert to local cache store and read from + // file. Can this be optimized? + let chunk = + cache + .access(&digest, &mut cacher) + .await? + .ok_or(format_err!( + "unable to access chunk with digest {}", + hex::encode(digest) + ))?; + Body::from(chunk.raw_data().to_owned()) + } + } + } }; // fixme: set other headers ? -- 2.47.2 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel