From 5be81abba358c47fc8e90cf8b2227e5553bafe4d Mon Sep 17 00:00:00 2001 From: Zhenchi Date: Mon, 10 Feb 2025 17:14:54 +0800 Subject: [PATCH] feat: add metadata method to puffin reader (#5501) Signed-off-by: Zhenchi --- src/puffin/src/puffin_manager.rs | 5 +++++ .../src/puffin_manager/fs_puffin_manager/reader.rs | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/src/puffin/src/puffin_manager.rs b/src/puffin/src/puffin_manager.rs index 204bc2c66e..5217a3e6cc 100644 --- a/src/puffin/src/puffin_manager.rs +++ b/src/puffin/src/puffin_manager.rs @@ -21,6 +21,7 @@ pub mod stager; mod tests; use std::path::PathBuf; +use std::sync::Arc; use async_trait::async_trait; use common_base::range_read::RangeReader; @@ -28,6 +29,7 @@ use futures::AsyncRead; use crate::blob_metadata::CompressionCodec; use crate::error::Result; +use crate::file_metadata::FileMetadata; /// The `PuffinManager` trait provides a unified interface for creating `PuffinReader` and `PuffinWriter`. #[async_trait] @@ -79,6 +81,9 @@ pub trait PuffinReader { fn with_file_size_hint(self, file_size_hint: Option) -> Self; + /// Returns the metadata of the Puffin file. + async fn metadata(&self) -> Result>; + /// Reads a blob from the Puffin file. /// /// The returned `BlobGuard` is used to access the blob data. diff --git a/src/puffin/src/puffin_manager/fs_puffin_manager/reader.rs b/src/puffin/src/puffin_manager/fs_puffin_manager/reader.rs index 9228c0b594..1202be3e08 100644 --- a/src/puffin/src/puffin_manager/fs_puffin_manager/reader.rs +++ b/src/puffin/src/puffin_manager/fs_puffin_manager/reader.rs @@ -87,6 +87,15 @@ where self } + async fn metadata(&self) -> Result> { + let reader = self + .puffin_file_accessor + .reader(&self.puffin_file_name) + .await?; + let mut file = PuffinFileReader::new(reader); + self.get_puffin_file_metadata(&mut file).await + } + async fn blob(&self, key: &str) -> Result { let mut reader = self .puffin_file_accessor