本文是TiKV (版本7.0 )源码阅读,成为 TiKV Contributors 第一篇文章
目标:
-
小白如何学习一个开源项目,先让它跑起来。
-
主要介绍 gdb如何调试tikv,运行单元测试。
-
搭建一个单机TiKV 服务。
开发环境:gitpod
主要电脑配置太低了,开始使用Gitpod
Gitpod 是一个开源 Kubernetes 应用程序(GitHub 仓库地址 GitHub - gitpod-io/gitpod: The developer platform for on-demand cloud development environments to create software faster and more securely.),
适用于可直接编写代码的开发环境,可为云中的每个任务提供全新的自动化开发环境。
通过Rustlings学习Rust语法
Rustlings 是一个由 Rust 团队维护的开源项目,旨在帮助你通过调试代码来学习 Rust。它也会一路为你提供提示。
这个是我的练习
成为贡献者需要掌握那些知识
-
这个我没有看呢,有一起的吗 TP 101: Introduction to open source software TP 102: How to use Git and GitHub TP 103: Build a welcoming community TP 201: Practical Networked Applications in Rust TP 202: Distributed Systems in Rust TP 301: TinySQL, a distributed relational database in Go TP 302: TinyKV, a distributed key value database in Go TP 401: Deep Dive into TiDB(WIP) TP 402: Deep Dive into TiKV(WIP)
TiKV 调试环境搭建:
//01-rust
curl https://sh.rustup.rs -sSf | sh
export PATH="/workspace/.cargo/bin:$PATH"
source ~/.bashrc
rustc -V
rustc 1.77.0-nightly (89e2160c4 2023-12-27)
//02--Rust toolchain
rustup toolchain install nightly
// nightly version
rustup component add rustfmt
// rustfmt 是 Rust 的官方代码格式化工具,它可以根据 Rust 社区的代码风格指南自动格式化你的 Rust 代码。
rustup component add clippy
//clippy 是 Rust 的一个静态代码分析工具 cargo clippy
// Run Rustfmt
make format
//Run Clippy (note that some lints are ignored, so `cargo clippy` will give many false positives)
make clippy
// 03-编译 https://github.com/watchpoints/tikv
make build //
cargo install cargo-watch
cargo watch -s "cargo check"
//使用 cargo watch 的好处是,
//它可以帮助你在开发过程中快速发现编译错误,而不必每次手动运行 cargo check 或 cargo build
// 当你准备测试修改的代码,可以使用 dev 指令,它将格式化你的代码库,在启用 clippy 的情况下构建,并运行测试
make dev //执行全部单元测试,有点慢
运行特定单元测试
cd /workspace/tikv/tests/integrations/server/kv_service.rs
#[test_case(test_raftstore::must_new_cluster_and_kv_client)]
#[test_case(test_raftstore_v2::must_new_cluster_and_kv_client)]
执行特定单元测试
cargo test test_rawkv //LLVM ERROR: IO failure on output stream: No space left on device 30空间没有了。
//是否包含debug信息
RUSTFLAGS=-Cdebuginfo=2 make dev
RUSTFLAGS=-Cdebuginfo=2 cargo build
//RUSTFLAGS=-Cdebuginfo=2 (for full debuginfo)
TiKV 使用 test_raftstore 等组件作为测试和 mock 框架
调试
- rust-analyzer 运行单元测试
- gdb 调试
后面购买自己服务器在使用
单节点集群部署
主要gipod 磁盘空间满了。这个网上例子很多 不在赘述。