Description
Is your feature request related to a problem or challenge?
Originally proposed on #172 (comment) making FileIO a trait would allow for more pluggable storage access. This in turn would potentially allow better integration where people already have an existing storage setup, e.g. based on object_store, that they want to use.
Describe the solution you'd like
I would like FileIO to be changed to a trait, allowing for pluggable storage engines.
The major remaining questions from the linked issue are:
- Should implementations pass around
Arc<dyn FileIO
or something else - Consider Using object_store as IO Abstraction #172 (comment) Consider Using object_store as IO Abstraction #172 (comment) - How important is preserving compatibility with iceberg-java - Consider Using object_store as IO Abstraction #172 (comment) Consider Using object_store as IO Abstraction #172 (comment)
- Can we make breaking changes to iceberg-rust - Consider Using object_store as IO Abstraction #172 (comment)
If the decision is that we can break compatibility with iceberg-java and are happy to use a trait object, the next question is
- How should the interface differ from ObjectStore - Consider Using object_store as IO Abstraction #172 (comment)
My 2 cents is that designing a custom abstraction at this granularity when one already exists and is well adopted within the Rust data ecosystem, seems unnecessary.
Willingness to contribute
I would be willing to contribute to this feature with guidance from the Iceberg Rust community
Additional Context
See also apache/datafusion#15018 (comment)