共计 2621 个字符,预计需要花费 7 分钟才能阅读完成。
本文首发于 2020-06-05 19:37:10
《ClickHouse 和他的敌人们》系列文章转载自圈内好友 BohuTANG 的博客,原文链接:
https://bohutang.me/2020/06/0…
以下为注释。
一次偶尔的机会,和 ClickHouse 团队做了一次线下沟通,Alexey 提到 ClickHouse 的设计哲学:
- The product must solve actual problem
- And do it better than others
用工程思维解决商业问题的榜样啊!
对用户来说,他们关怀的不是什么天花乱坠、上天入地的高科技,只是须要一个能很好解决本人问题的计划,这在开源社区是十分难得的,靠实力“横蛮式”成长。
于是,我对这个散发着伏特加滋味的利器充斥了好奇,并参加到 ClickHouse 的社区中一探到底,第一感觉是凋谢、敌对、战斗力强(AK47 vs CK16, ClickHouse 2016 年开源)。
本文先从编译和测试动手,再到如何为社区奉献 Patch,心愿对那些想参加 CK 社区的同学有所帮忙。
如何本地编译和测试 ClickHouse?
源码获取
git clone --recursive https://github.com/ClickHouse/ClickHouse
编译筹备
sudo apt install build-essential
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-9 g++-9 git python ninja-build
sudo snap install cmake
开始编译
cd ClickHouse
mkdir build
cd build
export CC=gcc-9
export CXX=g++-9
cmake ..
ninja
测试方法
ClickHouse 的测试在官网 development/tests 文档里有具体的介绍,这里列举 3 个罕用的测试模式:
1. Functional Tests
功能测试,次要用于 ClickHouse 外部功能测试,形式:输出一个 sql 文件,输入一个 result,相似 MySQL 里的 mtr,测试汇合
cd tests
./clickhouse-test -c "../build/programs/clickhouse-client" 00001_select_1
2. Integration Tests
集成测试,次要用于波及第三方服务的测试,比方 MySQL/Postgres/MongoDB 等,以容器化形式编排调度 (pytest) 运行,测试汇合
因为波及模块较多,集成测试环境的搭建有肯定的难度,倡议应用官网的 docker 镜像。比方要跑 test_mysql_protocol 下的集成测试集:
cd tests/integration
docker pull yandex/clickhouse-integration-tests-runner
./runner --binary /your/ClickHouse/build/programs/clickhouse --bridge-binary /your/ClickHouse/build/programs/clickhouse-odbc-bridge --configs-dir /your/ClickHouse/programs/server/ 'test_mysql_protocol/test.py::test_java_client -ss -vv'
3. Unit Tests
单元测试,次要用于代码模块的测试,测试集在各个模块的 tests 目录,比方: Core/tests
如果大家想理解某个模块是如何工作的,强烈建议去翻翻该模块的 tests 目录,比方想理解 processor 的工作机制,跟踪调试 Processors/tests/ 即可。
如何给 ClickHouse 社区提 Patch?
1. fork
首先在本人的 github 上 fork 一份 ClickHouse 代码,比方 https://github.com/BohuTANG/C…
2. clone 到本地
git clone --recursive https://github.com/BohuTANG/ClickHouse
git checkout -B mysql_replica(branch 名字)
3. 创立新的分支
git checkout -B mysql_replica(branch 名字)
4. 性能开发
开发者能够提交一个 Draft Pull Request 到官网,github 会显示这个 Pull Request 处于 Draft 状态,官网是无奈 Merge 的
5. can be testd 标签
期待 Upstream 打 [can be tested] 标签,一旦被标记 CI 狂魔们就强势开跑,跑一轮大略须要几十个小时。
帮助开发者发现一些代码 Style、编译以及测试等谬误,这样开发者就能够在本人的分支不停的迭代、修改。
如果只是批改 typo,这个标签 Upstream 通常不会增加。
6. 开发结束
开发实现,测试 OK,把 Draft 晋升为正式 Pull Request,期待 Upstraem Review。
7. Merge 到 Master
如果 Upstream 通过,你的代码会被 Merge 到 Master,祝贺你成为 ClickHouse 贡献者
8. 注意事项
ClickHouse Upstream 迭代十分快,肯定要多关注 master 分支进度,尽量放弃本人的分支代码与 master 同步。否则 Upstream Docker 更新,本人的 test 可能就过不了。
倡议把 doc/development 读一遍。
欢送关注我的微信公众号【数据库内核】:分享支流开源数据库和存储引擎相干技术。
题目 | 网址 |
---|---|
GitHub | https://dbkernel.github.io |
知乎 | https://www.zhihu.com/people/… |
思否(SegmentFault) | https://segmentfault.com/u/db… |
掘金 | https://juejin.im/user/5e9d3e… |
开源中国(oschina) | https://my.oschina.net/dbkernel |
博客园(cnblogs) | https://www.cnblogs.com/dbkernel |