From fedea43652cd6c3e3603fd2ba724f8c6e44fe233 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Thu, 24 Oct 2024 19:18:13 +0200 Subject: [PATCH] remote_storage(local_fs): return correct file sizes --- libs/remote_storage/src/local_fs.rs | 35 +++++++++++++---------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/libs/remote_storage/src/local_fs.rs b/libs/remote_storage/src/local_fs.rs index 93a052139b..553153826e 100644 --- a/libs/remote_storage/src/local_fs.rs +++ b/libs/remote_storage/src/local_fs.rs @@ -357,22 +357,20 @@ impl RemoteStorage for LocalFs { .list_recursive(prefix) .await .map_err(DownloadError::Other)?; - let objects = keys - .into_iter() - .filter_map(|k| { - let path = k.with_base(&self.storage_root); - if path.is_dir() { - None - } else { - Some(ListingObject { - key: k.clone(), - // LocalFs is just for testing, so just specify a dummy time - last_modified: SystemTime::now(), - size: 0, - }) - } - }) - .collect(); + let mut objects = Vec::with_capacity(keys.len()); + for key in keys { + let path = key.with_base(&self.storage_root); + let metadata = file_metadata(&path).await?; + if metadata.is_dir() { + continue; + } + objects.push(ListingObject { + key: key.clone(), + last_modified: metadata.modified()?, + size: metadata.len(), + }); + } + let objects = objects; if let ListingMode::NoDelimiter = mode { result.keys = objects; @@ -410,9 +408,8 @@ impl RemoteStorage for LocalFs { } else { result.keys.push(ListingObject { key: RemotePath::from_string(&relative_key).unwrap(), - // LocalFs is just for testing - last_modified: SystemTime::now(), - size: 0, + last_modified: object.last_modified, + size: object.size, }); } }