Skip to content

Commit db0caef

Browse files
fix object store listing
1 parent 935b9cf commit db0caef

File tree

3 files changed

+59
-26
lines changed

3 files changed

+59
-26
lines changed

src/storage/azure_blob.rs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -710,10 +710,15 @@ impl ObjectStorage for BlobStore {
710710
.common_prefixes
711711
.iter()
712712
.filter_map(|path| {
713-
path.as_ref()
714-
.strip_prefix(&format!("{}/{}/", stream_name, date))
715-
.and_then(|s| s.strip_suffix('/'))
716-
.map(String::from)
713+
let path_str = path.as_ref();
714+
if let Some(stripped) = path_str.strip_prefix(&format!("{}/{}/", stream_name, date))
715+
{
716+
// Remove trailing slash if present, otherwise use as is
717+
let clean_path = stripped.strip_suffix('/').unwrap_or(stripped);
718+
Some(clean_path.to_string())
719+
} else {
720+
None
721+
}
717722
})
718723
.filter(|dir| dir.starts_with("hour="))
719724
.collect();
@@ -734,10 +739,16 @@ impl ObjectStorage for BlobStore {
734739
.common_prefixes
735740
.iter()
736741
.filter_map(|path| {
737-
path.as_ref()
738-
.strip_prefix(&format!("{}/{}/{}/", stream_name, date, hour))
739-
.and_then(|s| s.strip_suffix('/'))
740-
.map(String::from)
742+
let path_str = path.as_ref();
743+
if let Some(stripped) =
744+
path_str.strip_prefix(&format!("{}/{}/{}/", stream_name, date, hour))
745+
{
746+
// Remove trailing slash if present, otherwise use as is
747+
let clean_path = stripped.strip_suffix('/').unwrap_or(stripped);
748+
Some(clean_path.to_string())
749+
} else {
750+
None
751+
}
741752
})
742753
.filter(|dir| dir.starts_with("minute="))
743754
.collect();

src/storage/gcs.rs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -617,10 +617,15 @@ impl ObjectStorage for Gcs {
617617
.common_prefixes
618618
.iter()
619619
.filter_map(|path| {
620-
path.as_ref()
621-
.strip_prefix(&format!("{}/{}/", stream_name, date))
622-
.and_then(|s| s.strip_suffix('/'))
623-
.map(String::from)
620+
let path_str = path.as_ref();
621+
if let Some(stripped) = path_str.strip_prefix(&format!("{}/{}/", stream_name, date))
622+
{
623+
// Remove trailing slash if present, otherwise use as is
624+
let clean_path = stripped.strip_suffix('/').unwrap_or(stripped);
625+
Some(clean_path.to_string())
626+
} else {
627+
None
628+
}
624629
})
625630
.filter(|dir| dir.starts_with("hour="))
626631
.collect();
@@ -641,10 +646,16 @@ impl ObjectStorage for Gcs {
641646
.common_prefixes
642647
.iter()
643648
.filter_map(|path| {
644-
path.as_ref()
645-
.strip_prefix(&format!("{}/{}/{}/", stream_name, date, hour))
646-
.and_then(|s| s.strip_suffix('/'))
647-
.map(String::from)
649+
let path_str = path.as_ref();
650+
if let Some(stripped) =
651+
path_str.strip_prefix(&format!("{}/{}/{}/", stream_name, date, hour))
652+
{
653+
// Remove trailing slash if present, otherwise use as is
654+
let clean_path = stripped.strip_suffix('/').unwrap_or(stripped);
655+
Some(clean_path.to_string())
656+
} else {
657+
None
658+
}
648659
})
649660
.filter(|dir| dir.starts_with("minute="))
650661
.collect();

src/storage/s3.rs

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -789,14 +789,19 @@ impl ObjectStorage for S3 {
789789
let pre = object_store::path::Path::from(format!("{}/{}/", stream_name, date));
790790
let resp = self.client.list_with_delimiter(Some(&pre)).await?;
791791

792-
let hours = resp
792+
let hours: Vec<String> = resp
793793
.common_prefixes
794794
.iter()
795795
.filter_map(|path| {
796-
path.as_ref()
797-
.strip_prefix(&format!("{}/{}/", stream_name, date))
798-
.and_then(|s| s.strip_suffix('/'))
799-
.map(String::from)
796+
let path_str = path.as_ref();
797+
if let Some(stripped) = path_str.strip_prefix(&format!("{}/{}/", stream_name, date))
798+
{
799+
// Remove trailing slash if present, otherwise use as is
800+
let clean_path = stripped.strip_suffix('/').unwrap_or(stripped);
801+
Some(clean_path.to_string())
802+
} else {
803+
None
804+
}
800805
})
801806
.filter(|dir| dir.starts_with("hour="))
802807
.collect();
@@ -813,14 +818,20 @@ impl ObjectStorage for S3 {
813818
let pre = object_store::path::Path::from(format!("{}/{}/{}/", stream_name, date, hour));
814819
let resp = self.client.list_with_delimiter(Some(&pre)).await?;
815820

816-
let minutes = resp
821+
let minutes: Vec<String> = resp
817822
.common_prefixes
818823
.iter()
819824
.filter_map(|path| {
820-
path.as_ref()
821-
.strip_prefix(&format!("{}/{}/{}/", stream_name, date, hour))
822-
.and_then(|s| s.strip_suffix('/'))
823-
.map(String::from)
825+
let path_str = path.as_ref();
826+
if let Some(stripped) =
827+
path_str.strip_prefix(&format!("{}/{}/{}/", stream_name, date, hour))
828+
{
829+
// Remove trailing slash if present, otherwise use as is
830+
let clean_path = stripped.strip_suffix('/').unwrap_or(stripped);
831+
Some(clean_path.to_string())
832+
} else {
833+
None
834+
}
824835
})
825836
.filter(|dir| dir.starts_with("minute="))
826837
.collect();

0 commit comments

Comments
 (0)