Skip to content

Implement Error::Source for ArrowError and FlightError #3566

Closed
@alamb

Description

@alamb

Is your feature request related to a problem or challenge? Please describe what you are trying to do.
In IOx (and in DataFusion) we often want to know what the root cause of an error is (e.g was it a bug or was it a resources exhausted). ArrowError can wrap other errors with Arrow::External (and DataFusion has something similar) but there is no easy way to get at the source of the error to walk the chain without knowing all the possible types that may be present

I believe this is what https://doc.rust-lang.org/std/error/trait.Error.html#method.source is for

I would like to be able to write something like this to walk the chain

        let mut root_error: &dyn Error = &e3;
        loop {
            match root_error.source() {
                // walk the next level
                Some(source) => root_error = source,
                // at root (as much as we know)
                None => break,
            }
        }

However, ArrowError does not implement source yet

Of course, all the errors in the chain need to implement this

Describe the solution you'd like
For ArrowError / FlightError that wrap other errors, implement Error::source()

Describe alternatives you've considered
See https://github.com/apache/arrow-datafusion/blob/dde23efed94704044822bcefe49c0af7f9260088/datafusion/common/src/error.rs#L361-L439 for what we need to do now in datafusion 🤮

cc @crepererum

Additional context

Activity

added
enhancementAny new improvement worthy of a entry in the changelog
on Jan 19, 2023
crepererum

crepererum commented on Jan 19, 2023

@crepererum
Contributor

I think we should replace the find_root method in DataFusion with this mechanism as well and embrace the standard 💪

alamb

alamb commented on Jan 19, 2023

@alamb
ContributorAuthor

I think we should replace the find_root method in DataFusion with this mechanism as well and embrace the standard 💪

On it!

alamb

alamb commented on Jan 19, 2023

@alamb
ContributorAuthor

Follow on ticket in datafusion: apache/datafusion#4991

tustvold

tustvold commented on Jan 27, 2023

@tustvold
Contributor

label_issue.py automatically added labels {'arrow'} from #3567

tustvold

tustvold commented on Jan 27, 2023

@tustvold
Contributor

label_issue.py automatically added labels {'arrow-flight'} from #3567

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    arrowChanges to the arrow cratearrow-flightChanges to the arrow-flight crateenhancementAny new improvement worthy of a entry in the changelog

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @alamb@crepererum@tustvold

      Issue actions

        Implement `Error::Source` for ArrowError and FlightError · Issue #3566 · apache/arrow-rs