Replies: 6 comments 5 replies
-
|
Beta Was this translation helpful? Give feedback.
-
Plan A and C are beneficial to bindings. |
Beta Was this translation helpful? Give feedback.
-
Plan A + 1 |
Beta Was this translation helpful? Give feedback.
-
I think plan A or C would be great. |
Beta Was this translation helpful? Give feedback.
-
Where do the configs stay after each plan? Currently, configs are always available while their corresponding services is hidden behind the feature flag. |
Beta Was this translation helpful? Give feedback.
-
Hi, I want to know if there is any user feedback related to the background or how users can use OpenDAL. |
Beta Was this translation helpful? Give feedback.
-
Background
OpenDAL Rust expose tow levels of APIs:
opendal::*
likeOperator
,Reader
,Writer
.opendal::raw::*
likeAccess
,oio::Read
,oio::Write
OpenDAL's public APIs rarely change, yet the raw APIs are frequently refactored. Even when there are no changes within the public API, users still need to upgrade simultaneously.
At the same time, the OpenDAL Rust core is quite extensive and includes:
services::s3
,services::gcs
, etc.layers::RetryLayer
,layers::MetricsLayer
, etc.We used to increment OpenDAL versions solely due to an API change in
services::s3
.I'm considering whether it would be beneficial to split the OpenDAL Rust core into multiple crates, allowing users to independently upgrade services like S3 as needed. More importantly, this approach would provide users with a stable API for
Operator
, ensuring compatibility across all versions.Idea
Plan A: Split all and keep the shell
Divide the opendal rust core into:
opendal
opendal_core
opendal_service_xxx
(like opendal_service_s3)opendal_layer_xxx
(like opendal_layer_retry)The crate
opendal
serves as a shell that includes all widely used services and layers. Throughout its evolution, we may remove some services.Plan B: Split Core Only
Only divide opendal core out:
opendal
opendal_core
opendal
will depend on and re-expore all API fromopendal_core
instead. This will make it super easier for users to implement their own services.Plan C: Split all
Remove all services and layers from
opendal
:opendal
opendal_service_xxx
(like opendal_service_s3)opendal_layer_xxx
(like opendal_layer_retry)opendal
itself will not provide any services. Following this change, users will need to add new crates instead of incorporating new features.What are your thoughts? I welcome any comments or feedback.
Beta Was this translation helpful? Give feedback.
All reactions