Skip to content

Commit 067a25c

Browse files
committed
Make ObjectStoreProvider fallible
1 parent b54a56f commit 067a25c

File tree

1 file changed

+16
-26
lines changed

1 file changed

+16
-26
lines changed

datafusion/core/src/datasource/object_store.rs

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,8 @@ impl std::fmt::Display for ObjectStoreUrl {
8383

8484
/// Object store provider can detector an object store based on the url
8585
pub trait ObjectStoreProvider: Send + Sync + 'static {
86-
/// Detector a suitable object store based on its url if possible
87-
/// Return the key and object store
88-
fn get_by_url(&self, url: &Url) -> Option<Arc<dyn ObjectStore>>;
86+
/// Return an ObjectStore for the provided url based on its scheme and authority
87+
fn get_by_url(&self, url: &Url) -> Result<Arc<dyn ObjectStore>>;
8988
}
9089

9190
/// Object store registry
@@ -157,32 +156,23 @@ impl ObjectStoreRegistry {
157156
stores.get(s).cloned()
158157
};
159158

160-
// If not, then try to detector based on its url.
161-
let store = store
162-
.or_else(|| {
163-
if let Some(provider) = &self.provider {
164-
// If detected, register it
165-
if let Some(store) = provider.get_by_url(url) {
166-
let mut stores = self.object_stores.write();
167-
let key =
168-
&url[url::Position::BeforeScheme..url::Position::BeforePath];
169-
stores.insert(key.to_owned(), store.clone());
170-
Some(store)
171-
} else {
172-
None
173-
}
174-
} else {
175-
None
159+
match store {
160+
Some(store) => Ok(store),
161+
None => match &self.provider {
162+
Some(provider) => {
163+
let store = provider.get_by_url(url)?;
164+
let mut stores = self.object_stores.write();
165+
let key =
166+
&url[url::Position::BeforeScheme..url::Position::BeforePath];
167+
stores.insert(key.to_owned(), store.clone());
168+
Ok(store)
176169
}
177-
})
178-
.ok_or_else(|| {
179-
DataFusionError::Internal(format!(
170+
None => Err(DataFusionError::Internal(format!(
180171
"No suitable object store found for {}",
181172
url
182-
))
183-
})?;
184-
185-
Ok(store)
173+
))),
174+
},
175+
}
186176
}
187177
}
188178

0 commit comments

Comments
 (0)