聊聊ClickHouse的开发、编译和测试

简介: 聊聊ClickHouse的开发、编译和测试

ClickHouse为了一款性能极佳的开源OLAP数据库,在最近几年也是越来越火,除了在各大互联网公司落地生根之外,也吸引了一大批热心的贡献者。


截止到v21.10版本,CH在全球一共有1064名contributor。

SELECT count(1)
FROM system.contributors
Query id: 7cdf54f1-cb50-45c0-99b9-14d73d283e39
┌─count()─┐
│    1064 │
└─────────┘

而要给社区贡献代码,首先就要经历一次完整的开发、编译和测试过程,文本将总结上述流程中常用到的一些工具和技巧,希望对有志于贡献CH代码的同学能有所帮助。



开发


开发环境配置可参考以下文章


  • C++开发环境最佳实践
  • vscode clangd c++开发常见问题和解决方案



编译


在编译之前,下载最新代码

git clone https://github.com/clickhouse/clickhouse

然后git submodule三连, 拉取第三方库代码

git submodule update --init --recursive 
git submodule foreach git checkout .
git submodule sync     --recursive

接下来便是编译了,由于社区已经明确不支持gcc了,所以建议使用clang-12或clang-13编译。

mkdir -p build_clang
cd build_clang
cmake  -G Ninja "-DCMAKE_C_COMPILER=$(command -v clang-13)" "-DCMAKE_CXX_COMPILER=$(command -v clang++-13)"  -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTS=0 -DENABLE_UTILS=0  -DENABLE_THINLTO=0 -DENABLE_NURAFT=0 -DDISABLE_HERMETIC_BUILD=1 ..
ninja clickhouse



调试


调试环境搭建可参考:vscode c++远程调试实战

另外调试CH的过程中最好忽略SIGUSR1SIGUSR2信号(这俩信号用于统计query的一些指标),否则你会发现调试过程老被这俩信号打断。


debugger为gdb时,设置:

handle  SIGUSR1  noprint nostop
handle  SIGUSR2  noprint nostop

debugger为lldb时,设置:

pro hand -p false -s false -n false SIGUSR1
pro hand -p false -s false -n false SIGUSR1



测试


虽然社区已经有github actions用于检查新提交PR, 但肯定不如本地检查来的快。以下将介绍几个常用的测试工具:


check-style


check-style用于检查代码风格,CH对代码的要求还是比较高的,所以建议写完代码之后用check-style工具跑一遍,看看有哪些地方不符合社区的要求。

./utils/check-style/check-style | tee style.log

一般新手常见的错误有两种:


  • 大括号没有换行写


  • 行尾有空格


functional test


CH中最普遍最常用的一种测试情况,输入为sql或shell文件, 输出为sql执行结果,如果发现sql预期执行结果与实际不同,则判定该functional test失败。


那么如何运行functional test呢,分两种情况


对于输入为sql的functional test:

export CLICKHOUSE_CLIENT="/path/to/clickhouse client --host XX --port XX --user XX --password XX -m"
cat tests/queries/0_stateless/XXX.sql | $CLICKHOUSE_CLIENT

对于输入为shell的:

export CLICKHOUSE_CLIENT="/path/to/clickhouse client --host XX --port XX --user XX --password XX -m"
bash -x  tests/queries/0_stateless/01675_distributed_bytes_to_delay_insert_long.sh

fast test


被社区用于对PR的快速验证,会执行编译,并运行部分functional tests。当你发现提交的PR没通过fast test时,最好的办法便是在本地环境复现它。

export LLVM_VERSION=13
export PULL_REQUEST_NUMBER=31104
export stage="" # stage按照顺序有"", clone_root, run, clone_submodules, run_cmake, build, configure, run_test等选项,用户可按需设置stage参数。
export FASTTEST_WORKSPACE=/path/to/fasttest/workspace # fast test会在该目录下下载PR代码并编译运行
cd ./docker/test/fasttest
bash -x run.sh  | tee run.log  

integration test


在CH中,有很多测试依赖集群环境或者其他组件(mysql, zookeeper, hdfs等等),这时functional test便行不通了,所以社区引入了integration test


在本地我们仍可运行集成测试,以test_storage_hdfs为例:

cd $prefix/tests/integration
sudo ./runner --binary $prefix/build_clang/programs/clickhouse  --odbc-bridge-binary $prefix/b



相关文章
|
2月前
|
存储 测试技术 API
数据驱动开发软件测试脚本
今天刚提交了我的新作《带着ChatGPT玩转软件开发》给出版社,在写作期间跟着ChatGPT学到许多新知识。下面分享数据驱动开发软件测试脚本。
91 0
|
8月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
194 7
|
7月前
|
机器学习/深度学习 人工智能 并行计算
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
AI部署架构:A100、H100、A800、H800、H20的差异以及如何选型?开发、测试、生产环境如何进行AI大模型部署架构?
|
5月前
|
传感器 人工智能 JavaScript
鸿蒙开发:DevEcoTesting中的稳定性测试
DevEcoTesting主要的目的也是用于软件的测试,可以让开发者无需复杂的配置,即可一键执行测试任务,同时提供了测试报告和分析,无论是对于开发者还是测试同学来说,都是一个非常方便的工具。
203 3
鸿蒙开发:DevEcoTesting中的稳定性测试
|
4月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
4月前
|
运维 jenkins 测试技术
"还在苦等开发部署环境?3步教你用Jenkins拿回测试主动权"
测试工程师最头疼的问题是什么?依赖开发部署环境! 开发延期→测试时间被压缩→紧急上线后BUG频出→测试背锅。传统流程中,测试被动等待部署,效率低下。而Jenkins自动化部署让测试人员自主搭建环境,实现: ✅ 随时触发测试,不再苦等开发 ✅ 部署效率提升10倍,抢回测试时间 ✅ 改善团队协作,减少互相甩锅 学习Jenkins部署能力,成为高效测试工程师,告别被动等待!
|
8月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
197 17
|
8月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
189 7
|
8月前
|
数据采集 算法 数据处理
【硬件测试】基于FPGA的256QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的256QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同信噪比(如30dB和40dB)的仿真测试,并提供配套操作视频。256QAM调制方案每个符号携带8比特信息,通过复数值星座图映射实现高效传输。Verilog代码展示了核心模块设计,包括SNR设置、数据处理和ILA测试分析,确保系统在实际硬件环境中的稳定性和性能。
201 2
|
9月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的64QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的64QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集模块和vio在线SNR设置模块,支持不同SNR条件下的仿真与测试。通过设置SNR为25dB和30dB进行测试,验证了系统的可行性和性能。此外,本文详细阐述了64QAM调制解调的工作原理,包括信号生成、调制、解调及误码率测试等环节,并提供了Verilog核心程序代码。
194 0

推荐镜像

更多