Skip to content

doc: 1.0 roadmap #290

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Jun 29, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 112 additions & 0 deletions doc/1.0-roadmap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# client-rust 1.0 roadmap

The client-rust project complements the TiKV ecosystem by providing a reliable Rust client. It can be a foundation for implementing clients in other languages. There have been preliminary works in [client-py](https://github.com/tikv/client-py) and [client-cpp](https://github.com/tikv/client-cpp). There are also plans for general-purpose client-java and [client-node](https://github.com/tikv/tikv/issues/10054).

The document describes our plan to push client-rust towards its general availability (1.0).

## Deliverable

client-rust 1.0 that
- enables new users to start using it in 10 mins
- has been heavily tested under simulated and real workload
- is easy to use, debug and seek help from documentation
- is performant
- supports the most-wanted features: GC, async commit, etc.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"GC": does it mean the API to manually trigger GC?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. In the current implementation, we only provide a gc function to update GC safepoint. Because client-rust serves as a library, users must manually manage the GC and trigger it appropriately.

Things might change if the GC mechanism changes (tikv/rfcs#65).



## Milestones
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be better to illustrate the milestones for RawKV and TxnKV respectively?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IMO it's unnecessary. Currently, I don't see any features in the plan that are only for RawKV. So the milestones are for TxnKV (or both).
If there may be divergent progress in TxnKV and in RawKV (like raw_coprocessor?), then we can set separate milestones for them.


There are several milestones when we make important progress. We may release new versions with these changes, but it depends. The version numbers are tentative and subject to change.

#### 0.1 - initial release

The initial release that is functional but may be weak in performance and user-friendliness. It supports:
raw mode, including CAS
transactional mode, including optimistic and pessimistic

#### 0.2 - feature complete

0.2 should be feature complete
- Region cache
- Large transaction
- Async commit
- (Optional) GC, depending on the progress of the new mechanism

#### 0.3 - user-friendly and high-quality

0.3 should be a relatively mature version. It is easy to use and have fewer bugs.

The tasks include better logging, error handling, compatibility with the Rust async ecosystem, better unit test and integration test.

#### 1.0 - production ready

The gap between 0.3 and 1.0 may include
- Documentation
- Test coverage
- Performance test / benchmark
- Usability improvement based on user feedback

## Estimated Timeline

The timeline is a rough estimate. It is subject to change if we find new issues, underestimate the workload, or have insufficient contributors’ time.

##### May 2021
Release 0.1.0

##### Aug 2021
Release 0.2.0

##### Oct 2021
Release 0.3.0

##### Jan 2022
Release 1.0
Comment on lines +53 to +63
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we may need to shorten the timeline

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the timeline is a just a reference since we cannot accurately evaluate how much effort will be put into the project. We can shorten the timeline (as in the initial version), but it doesn't mean we can manage to stick to it.

Nick suggested the long gap between 0.3 and 1.0. @andylokandy suggested we put off the release of 0.2 a bit - from July to August.


We will take a relative longer time to let users try the tikv-client, and improve based on their feedback.



## Risks

- Inaccurate estimated workload. Considering the complexity of the client in TiDB, we may underestimate the workload.
- Lacking staff. Regular contributors include Ziqian Qin and Andy Lok.
- Too much or too little external contribution - too much means core contributors don’t have time to focus on code and design, or that we add too many new features which do not get us to 1.0. Too little means we can’t iterate effectively based on user experience.


----

## Tasks

Tasks listed here are collected from https://github.com/tikv/client-rust/discussions/272.

**Note**: They are preliminary, and we should adapt them according to user feedback.


### 0.2

- https://github.com/tikv/client-rust/issues/299 Add region cache
- https://github.com/tikv/client-rust/issues/209 Use CheckTxnStatus rather than Cleanup
- https://github.com/tikv/client-rust/issues/239 Better experience when "dropping active transaction"
- https://github.com/tikv/client-rust/issues/287 Support 1PC
- https://github.com/tikv/client-rust/issues/189 Support large transaction
- https://github.com/tikv/client-rust/issues/287 Support async commit

### 0.3


- https://github.com/tikv/client-rust/issues/267 Better logging
- https://github.com/tikv/client-rust/issues/284 Test with nemesis and fault injection
- https://github.com/tikv/client-rust/issues/246 Compatibility with any async reactor (don't bind to tokio)
- https://github.com/tikv/client-rust/issues/285 Improve unit test coverage
- https://github.com/tikv/client-rust/issues/286 TiKV version compatibility check
- https://github.com/tikv/client-rust/issues/284 Test with various workload: simulated / real / extreme

### 1.0


- https://github.com/tikv/client-rust/issues/288 Benchmarking script/tool
- https://github.com/tikv/client-rust/issues/283 Parallelize multi-region request
- https://github.com/tikv/client-rust/issues/289 Synchronous API