前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ClickHouse和他的朋友们(1)编译、开发、测试

ClickHouse和他的朋友们(1)编译、开发、测试

作者头像
老叶茶馆
发布2020-10-22 10:14:59
8790
发布2020-10-22 10:14:59
举报

原文出处:https://bohutang.me/2020/06/05/clickhouse-and-friends-development/

一次偶然的机会,和ClickHouse团队做了一次线下沟通,Alexey提到ClickHouse的设计哲学:

  1. The product must solve actual problem
  2. And do it better than others

用工程思维解决商业问题的典范啊!

对用户来说,他们关心的不是什么天花乱坠、上天入地的高科技,只是需要一个能很好解决自己问题的方案,这在开源社区是非常难得的,靠实力“野蛮式”生长。

于是,我对这个散发着伏特加味道的利器充满了好奇,并参与到ClickHouse的社区中一探究竟,第一感觉是开放、友好、战斗力强(AK47 vs CK16, ClickHouse 2016年开源)。

本文先从编译和测试入手,再到如何为社区贡献Patch,希望对那些想参与CK社区的同学有所帮助。

如何本地编译和测试ClickHouse?

源码获取

代码语言:javascript
复制
git clone --recursive https://github.com/ClickHouse/ClickHouse

编译准备

代码语言:javascript
复制
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

开始编译

代码语言:javascript
复制
cd ClickHouse
mkdir build
cd build
export CC=gcc-9
export CXX=g++-9
cmake ..
ninja

测试方法

ClickHouse的测试在官方development/tests(https://github.com/ClickHouse/ClickHouse/blob/master/docs/en/development/tests.md)文档里有详细的介绍,这里列举3个常用的测试模式:

1. Functional Tests

功能测试,主要用于ClickHouse内部功能测试,方式:输入一个sql文件,输出一个result,类似MySQL里的mtr,测试集合(https://github.com/ClickHouse/ClickHouse/tree/master/tests/queries)

代码语言:javascript
复制
cd tests
./clickhouse-test -c "../build/programs/clickhouse-client" 00001_select_1
2. Integration Tests

集成测试,主要用于涉及第三方服务的测试,比如MySQL/Postgres/MongoDB等,以容器化方式编排调度(pytest)运行,测试集合

由于涉及模块较多,集成测试环境的搭建有一定的难度,建议使用官方的docker镜像。比如要跑test_mysql_protocol下的集成测试集:

代码语言:javascript
复制
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(https://github.com/ClickHouse/ClickHouse/tree/master/src/Core/tests)

如果大家想了解某个模块是如何工作的,强烈建议去翻翻该模块的tests目录,比如想了解processor的工作机制,跟踪调试 Processors/tests/(https://github.com/ClickHouse/ClickHouse/tree/master/src/Core/tests) 即可。

如何给ClickHouse社区提Patch?

1. fork

首先在自己的github上fork一份ClickHouse代码,比如 https://github.com/BohuTANG/ClickHouse

2. clone到本地
代码语言:javascript
复制
git clone --recursive https://github.com/BohuTANG/ClickHouse
git checkout -B mysql_replica(branch名字)
3. 创建新的分支
代码语言:javascript
复制
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(https://github.com/ClickHouse/ClickHouse/tree/master/docs/en/development) 读一遍。

全文完。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老叶茶馆 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何本地编译和测试ClickHouse?
    • 源码获取
      • 编译准备
        • 开始编译
          • 测试方法
            • 1. Functional Tests
            • 2. Integration Tests
            • 3. Unit Tests
            • 1. fork
            • 2. clone到本地
            • 3. 创建新的分支
            • 4. 功能开发
            • 5. can be testd标签
            • 6. 开发完毕
            • 7. Merge到Master
            • 8. 注意事项
        • 如何给ClickHouse社区提Patch?
        相关产品与服务
        云数据库 MySQL
        腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档