Hi folks, I finally got a chance to get back to the effort of making Storage a trait — thanks again for all the valuable feedback!
It looks like we’re aligned on Option 2 from the initial draft: making Storage the centralized place for I/O, with other components like FileIO and Input/OutputFile delegating their operations to it. I’ve posted another revision of the design doc <https://docs.google.com/document/d/1-CEvRvb52vPTDLnzwJRBx5KLpej7oSlTu_rg0qKEGZ8/edit?tab=t.dgr4vjtmzh92> to reflect our discussions so far — please feel free to take a look and share any additional thoughts. Also, the POC code has been posted here: https://github.com/apache/iceberg-rust/pull/1755 Thanks again for everyone’s input! Best, Shawn On Thu, Sep 18, 2025 at 11:52 AM Shawn Chang <[email protected]> wrote: > Hi all, > > Iceberg-rust currently has a static FileIO implementation backed by > OpenDAL, and the discussion around making FileIO a trait has been ongoing > in the Iceberg Rust community, and we’ve recently reached consensus in the > GitHub > issue <https://github.com/apache/iceberg-rust/issues/1314> to instead > make the underlying Storage a trait while keeping FileIO as a struct. This > change should give users the flexibility to customize FileIO behavior, > similar to how FileIO works in Iceberg Java. > > I’ve put together a design doc that outlines the problem, proposed design, > and some code snippets from my exploration of different approaches. You can > find it here: > 👉 > https://docs.google.com/document/d/1-CEvRvb52vPTDLnzwJRBx5KLpej7oSlTu_rg0qKEGZ8/edit?usp=sharing > > Please feel free to join the discussion. Would love your feedback on it! > > Best, > Shawn >
