docsrs
only.Expand description
§RFCs - OpenDAL Active RFC List
RFCs power OpenDAL’s development.
The “RFC” (request for comments) process is intended to provide a consistent and controlled path for changes to OpenDAL (such as new features) so that all stakeholders can be confident about the direction of the project.
Many changes, including bug fixes and documentation improvements, can be implemented and reviewed via the normal GitHub pull request workflow.
Some changes, though, are “substantial” and we ask that these be put through a bit of a design process and produce a consensus among the OpenDAL community.
§Which kinds of changes require an RFC?
Any substantial change or addition to the project that would require a significant amount of work to implement should generally be an RFC.
Some examples include:
- A new feature that creates a new public API or raw API.
- The removal of features that already shipped as part of the release.
- A big refactor of existing code or reorganization of code into new modules.
Those are just a few examples. Ultimately, the judgment call of what constitutes a big enough change to warrant an RFC is left to the project maintainers.
If you submit a pull request to implement a new feature without going through the RFC process, it may be closed with a polite request to submit an RFC first.
§Before creating the RFC
Preparing in advance before submitting an RFC hastily can increase its chances of being accepted. If you have proposals to make, it is advisable to engage in some preliminary groundwork to facilitate a smoother process.
It is great to seek feedback from other project developers first, as this can help validate the viability of the RFC. To ensure a sustained impact on the project, it is important to work together and reach a consensus.
Common preparatory steps include presenting your idea on platforms such as GitHub issues or discussions, or engaging in discussions through our email list or Discord server.
§The RFC process
- Fork the OpenDAL repo and create your branch from
main
. - Copy [
0000_example.md
] to0000-my-feature.md
(where “my-feature” is descriptive). Don’t assign an RFC number yet; This is going to be the PR number, and we’ll rename the file accordingly if the RFC is accepted. - Submit a pull request. As a pull request, the RFC will receive design feedback from the larger community, and the author should be prepared to revise it in response.
- Now that your RFC has an open pull request, use the issue number of this PR to update your
0000-
prefix to that number. - Build consensus and integrate feedback. RFCs that have broad support are much more likely to make progress than those that don’t receive any comments. Feel free to reach OpenDAL maintainers for help.
- RFCs rarely go through this process unchanged, especially as alternatives and drawbacks are shown. You can make edits, big and small, to the RFC to clarify or change the design, but make changes as new commits to the pull request, and leave a comment on the pull request explaining your changes. Specifically, do not squash or rebase commits after they are visible on the pull request.
- The RFC pull request lasts for three days after the last update. After that, the RFC will be accepted or declined based on the consensus reached in the discussion.
- For the accepting of an RFC, we will require approval from at least three maintainers.
- Once the RFC is accepted, please create a tracking issue and update links in RFC. And then the PR will be merged and the RFC will become ‘active’ status.
§Implementing an RFC
An active RFC does not indicate the priority assigned to its implementation, nor does it imply that a developer has been specifically assigned the task of implementing the feature.
The RFC author is encouraged to submit an implementation after the RFC has been accepted. Nevertheless, it is not obligatory for them to do so.
Accepted RFCs may represent features that can wait until a developer chooses to work on them. Each accepted RFC is associated with an issue in the OpenDAL repository, which tracks its implementation.
If you are interested in implementing an RFC but are unsure if someone else is already working on it, feel free to inquire by leaving a comment on the associated issue.
§Some useful tips
- The author of an RFC may not be the same one as the implementer. Therefore, when submitting an RFC, it is advisable to include sufficient information.
- If modifications are needed for an accepted RFC, please submit a new pull request or create a new RFC to propose changes.
Modules§
- rfc_
0000_ example - RFC example
- rfc_
0041_ object_ native_ api - Object native API
- rfc_
0044_ error_ handle - Error handle
- rfc_
0057_ auto_ region - Auto region
- rfc_
0069_ object_ stream - Object stream
- rfc_
0090_ limited_ reader - Limited reader
- rfc_
0112_ path_ normalization - Path normalization
- rfc_
0191_ async_ streaming_ io - Async streaming IO
- rfc_
0203_ remove_ credential - Remove credential
- rfc_
0221_ create_ dir - Create dir
- rfc_
0247_ retryable_ error - Retryable error
- rfc_
0293_ object_ id - Object ID
- rfc_
0337_ dir_ entry - Dir entry
- rfc_
0409_ accessor_ capabilities - Accessor capabilities
- rfc_
0413_ presign - Presign
- rfc_
0423_ command_ line_ interface - Command line interface
- rfc_
0429_ init_ from_ iter - Init from iter
- rfc_
0438_ multipart - Multipart
- rfc_
0443_ gateway - Gateway
- rfc_
0501_ new_ builder - New builder
- rfc_
0554_ write_ refactor - Write refactor
- rfc_
0561_ list_ metadata_ reuse - List metadata reuse
- rfc_
0599_ blocking_ api - Blocking API
- rfc_
0623_ redis_ service - Redis service
- rfc_
0627_ split_ capabilities - Split capabilities
- rfc_
0661_ path_ in_ accessor - Path in accessor
- rfc_
0793_ generic_ kv_ services - Generic KV services
- rfc_
0926_ object_ reader - Object reader
- rfc_
0977_ refactor_ error - Refactor error
- rfc_
1085_ object_ handler - Object handler
- rfc_
1391_ object_ metadataer - Object metadataer
- rfc_
1398_ query_ based_ metadata - Query based metadata
- rfc_
1420_ object_ writer - Object writer
- rfc_
1477_ remove_ object_ concept - Remove object concept
- rfc_
1735_ operation_ extension - Operation extension
- rfc_
2083_ writer_ sink_ api - Writer sink API
- rfc_
2133_ append_ api - Append API
- rfc_
2299_ chain_ based_ operator_ api - Chain based operator API
- rfc_
2602_ object_ versioning - Object versioning
- rfc_
2758_ merge_ append_ into_ write - Merge append into write
- rfc_
2774_ lister_ api - Lister API
- rfc_
2779_ list_ with_ metakey - List with metakey
- rfc_
2852_ native_ capability - Native capability
- rfc_
3017_ remove_ write_ copy_ from - Remove write copy from
- rfc_
3197_ config - Config
- rfc_
3232_ align_ list_ api - Align list API
- rfc_
3243_ list_ prefix - List prefix
- rfc_
3356_ lazy_ reader - Lazy reader
- rfc_
3526_ list_ recursive - List recursive
- rfc_
3574_ concurrent_ stat_ in_ list - Concurrent stat in list
- rfc_
3734_ buffered_ reader - Buffered Reader
- rfc_
3898_ concurrent_ writer - Concurrent Writer
- rfc_
3911_ deleter_ api - Deleter API
- rfc_
4382_ range_ based_ read - Range Based Read API
- rfc_
4638_ executor - Executor API
- rfc_
5314_ remove_ metakey - Remove metakey
- rfc_
5444_ operator_ from_ uri - Operator from uri
- rfc_
5479_ context - Context
- rfc_
5485_ conditional_ reader - Conditional Reader
- rfc_
5495_ list_ with_ deleted - List With Deleted
- rfc_
5556_ write_ returns_ metadata - Write Returns Metadata
- rfc_
5871_ read_ returns_ metadata - Read Returns Metadata
- rfc_
6189_ remove_ native_ blocking - Remove Native Blocking
- rfc_
6209_ glob_ support - Glob support
- rfc_
6213_ options_ api - Options API