This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/master by this push:
     new 345f727  Replace Datafusion Error with Generic Error for Object store 
(#1541)
345f727 is described below

commit 345f72728bf0c3f95a3c994b6d7d5b7de2e3f35e
Author: Matthew Turner <[email protected]>
AuthorDate: Wed Jan 19 15:38:19 2022 -0500

    Replace Datafusion Error with Generic Error for Object store (#1541)
    
    * Rebase
    
    * Update tests
    
    * Add GenericError
    
    * Cleanup
    
    * Remove object store trait updates
    
    * Fix clippy
    
    * Cleanup code review comments
---
 datafusion/src/datasource/object_store/local.rs |  3 +--
 datafusion/src/datasource/object_store/mod.rs   |  2 +-
 datafusion/src/error.rs                         | 15 +++++++++++++++
 datafusion/src/execution/context.rs             |  1 +
 4 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/datafusion/src/datasource/object_store/local.rs 
b/datafusion/src/datasource/object_store/local.rs
index 0e857c8..d46be4a 100644
--- a/datafusion/src/datasource/object_store/local.rs
+++ b/datafusion/src/datasource/object_store/local.rs
@@ -28,8 +28,7 @@ use crate::datasource::object_store::{
     FileMeta, FileMetaStream, ListEntryStream, ObjectReader, ObjectStore,
 };
 use crate::datasource::PartitionedFile;
-use crate::error::DataFusionError;
-use crate::error::Result;
+use crate::error::{DataFusionError, Result};
 
 use super::{ObjectReaderStream, SizedFile};
 
diff --git a/datafusion/src/datasource/object_store/mod.rs 
b/datafusion/src/datasource/object_store/mod.rs
index 77ca1ef..c774896 100644
--- a/datafusion/src/datasource/object_store/mod.rs
+++ b/datafusion/src/datasource/object_store/mod.rs
@@ -122,7 +122,7 @@ pub type ListEntryStream =
 
 /// Stream readers opened on a given object store
 pub type ObjectReaderStream =
-    Pin<Box<dyn Stream<Item = Result<Arc<dyn ObjectReader>>> + Send + Sync + 
'static>>;
+    Pin<Box<dyn Stream<Item = Result<Arc<dyn ObjectReader>>> + Send + Sync>>;
 
 /// A ObjectStore abstracts access to an underlying file/object storage.
 /// It maps strings (e.g. URLs, filesystem paths, etc) to sources of bytes
diff --git a/datafusion/src/error.rs b/datafusion/src/error.rs
index 5e94e14..bf9df50 100644
--- a/datafusion/src/error.rs
+++ b/datafusion/src/error.rs
@@ -31,6 +31,9 @@ use sqlparser::parser::ParserError;
 /// Result type for operations that could result in an [DataFusionError]
 pub type Result<T> = result::Result<T, DataFusionError>;
 
+/// Error type for generic operations that could result in 
DataFusionError::External
+pub type GenericError = Box<dyn error::Error + Send + Sync>;
+
 /// DataFusion error
 #[derive(Debug)]
 #[allow(missing_docs)]
@@ -64,6 +67,9 @@ pub enum DataFusionError {
     /// This error is thrown when a consumer cannot acquire memory from the 
Memory Manager
     /// we can just cancel the execution of the partition.
     ResourcesExhausted(String),
+    /// Errors originating from outside DataFusion's core codebase.
+    /// For example, a custom S3Error from the crate datafusion-objectstore-s3
+    External(GenericError),
 }
 
 impl DataFusionError {
@@ -104,6 +110,12 @@ impl From<ParserError> for DataFusionError {
     }
 }
 
+impl From<GenericError> for DataFusionError {
+    fn from(err: GenericError) -> Self {
+        DataFusionError::External(err)
+    }
+}
+
 impl Display for DataFusionError {
     fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
         match *self {
@@ -135,6 +147,9 @@ impl Display for DataFusionError {
             DataFusionError::ResourcesExhausted(ref desc) => {
                 write!(f, "Resources exhausted: {}", desc)
             }
+            DataFusionError::External(ref desc) => {
+                write!(f, "External error: {}", desc)
+            }
         }
     }
 }
diff --git a/datafusion/src/execution/context.rs 
b/datafusion/src/execution/context.rs
index 5cc0aef..a3ca29f 100644
--- a/datafusion/src/execution/context.rs
+++ b/datafusion/src/execution/context.rs
@@ -576,6 +576,7 @@ impl ExecutionContext {
             .unwrap()
             .object_store_registry
             .get_by_uri(uri)
+            .map_err(DataFusionError::from)
     }
 
     /// Registers a table using a custom `TableProvider` so that

Reply via email to