|
| 1 | +# client-rust 1.0 roadmap |
| 2 | + |
| 3 | +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). |
| 4 | + |
| 5 | +The document describes our plan to push client-rust towards its general availability (1.0). |
| 6 | + |
| 7 | +## Deliverable |
| 8 | + |
| 9 | +client-rust 1.0 that |
| 10 | +- enables new users to start using it in 10 mins |
| 11 | +- has been heavily tested under simulated and real workload |
| 12 | +- is easy to use, debug and seek help from documentation |
| 13 | +- is performant |
| 14 | +- supports the most-wanted features: GC, async commit, etc. |
| 15 | + |
| 16 | + |
| 17 | +## Milestones |
| 18 | + |
| 19 | +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. |
| 20 | + |
| 21 | +#### 0.1 - initial release |
| 22 | + |
| 23 | +The initial release that is functional but may be weak in performance and user-friendliness. It supports: |
| 24 | +raw mode, including CAS |
| 25 | +transactional mode, including optimistic and pessimistic |
| 26 | + |
| 27 | +#### 0.2 - feature complete |
| 28 | + |
| 29 | +0.2 should be feature complete |
| 30 | +- Region cache |
| 31 | +- Large transaction |
| 32 | +- Async commit |
| 33 | +- (Optional) GC, depending on the progress of the new mechanism |
| 34 | + |
| 35 | +#### 0.3 - user-friendly and high-quality |
| 36 | + |
| 37 | +0.3 should be a relatively mature version. It is easy to use and have fewer bugs. |
| 38 | + |
| 39 | +The tasks include better logging, error handling, compatibility with the Rust async ecosystem, better unit test and integration test. |
| 40 | + |
| 41 | +#### 1.0 - production ready |
| 42 | + |
| 43 | +The gap between 0.3 and 1.0 may include |
| 44 | +- Documentation |
| 45 | +- Test coverage |
| 46 | +- Performance test / benchmark |
| 47 | +- Usability improvement based on user feedback |
| 48 | + |
| 49 | +## Estimated Timeline |
| 50 | + |
| 51 | +The timeline is a rough estimate. It is subject to change if we find new issues, underestimate the workload, or have insufficient contributors’ time. |
| 52 | + |
| 53 | +##### May 2021 |
| 54 | +Release 0.1.0 |
| 55 | + |
| 56 | +##### Aug 2021 |
| 57 | +Release 0.2.0 |
| 58 | + |
| 59 | +##### Oct 2021 |
| 60 | +Release 0.3.0 |
| 61 | + |
| 62 | +##### Jan 2022 |
| 63 | +Release 1.0 |
| 64 | + |
| 65 | +We will take a relative longer time to let users try the tikv-client, and improve based on their feedback. |
| 66 | + |
| 67 | + |
| 68 | + |
| 69 | +## Risks |
| 70 | + |
| 71 | +- Inaccurate estimated workload. Considering the complexity of the client in TiDB, we may underestimate the workload. |
| 72 | +- Lacking staff. Regular contributors include Ziqian Qin and Andy Lok. |
| 73 | +- 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. |
| 74 | + |
| 75 | + |
| 76 | +---- |
| 77 | + |
| 78 | +## Tasks |
| 79 | + |
| 80 | +Tasks listed here are collected from https://github.com/tikv/client-rust/discussions/272. |
| 81 | + |
| 82 | +**Note**: They are preliminary, and we should adapt them according to user feedback. |
| 83 | + |
| 84 | + |
| 85 | +### 0.2 |
| 86 | + |
| 87 | +- https://github.com/tikv/client-rust/issues/299 Add region cache |
| 88 | +- https://github.com/tikv/client-rust/issues/209 Use CheckTxnStatus rather than Cleanup |
| 89 | +- https://github.com/tikv/client-rust/issues/239 Better experience when "dropping active transaction" |
| 90 | +- https://github.com/tikv/client-rust/issues/287 Support 1PC |
| 91 | +- https://github.com/tikv/client-rust/issues/189 Support large transaction |
| 92 | +- https://github.com/tikv/client-rust/issues/287 Support async commit |
| 93 | + |
| 94 | +### 0.3 |
| 95 | + |
| 96 | + |
| 97 | +- https://github.com/tikv/client-rust/issues/267 Better logging |
| 98 | +- https://github.com/tikv/client-rust/issues/284 Test with nemesis and fault injection |
| 99 | +- https://github.com/tikv/client-rust/issues/246 Compatibility with any async reactor (don't bind to tokio) |
| 100 | +- https://github.com/tikv/client-rust/issues/285 Improve unit test coverage |
| 101 | +- https://github.com/tikv/client-rust/issues/286 TiKV version compatibility check |
| 102 | +- https://github.com/tikv/client-rust/issues/284 Test with various workload: simulated / real / extreme |
| 103 | + |
| 104 | +### 1.0 |
| 105 | + |
| 106 | + |
| 107 | +- https://github.com/tikv/client-rust/issues/288 Benchmarking script/tool |
| 108 | +- https://github.com/tikv/client-rust/issues/283 Parallelize multi-region request |
| 109 | +- https://github.com/tikv/client-rust/issues/289 Synchronous API |
| 110 | + |
| 111 | + |
| 112 | + |
0 commit comments