开发
开发 RedisTimeSeries
开发 RedisTimeSeries 涉及设置开发环境(可以是基于 Linux 或基于 macOS)、构建 RedisTimeSeries 模块、运行测试和基准测试,以及调试 RedisTimeSeries 模块及其测试。
克隆 git 存储库
通过调用以下命令,克隆 RedisTimeSeries 模块及其子模块
git clone --recursive https://github.com/RedisTimeSeries/RedisTimeSeries.git
在隔离环境中工作
在隔离环境中进行开发有几个原因,比如保持工作站的干净,以及为不同的 Linux 发行版进行开发。隔离环境最通用的选择是虚拟机(使用 Vagrant 设置一个虚拟机非常容易)。Docker 是一种更灵活的解决方案,因为它提供了一个几乎即时的解决方案
ts=$(docker run -d -it -v $PWD:/build debian:bullseye bash)
docker exec -it $ts bash
然后,在容器内,cd /build
,然后像往常一样继续。在此模式下,所有安装都保留在 Docker 容器的范围内。退出容器后,你可以使用上述 docker exec
重新调用容器,或将容器的状态提交到映像,并在以后的阶段重新调用它
docker commit $ts ts1
docker stop $ts
ts=$(docker run -d -it -v $PWD:/build ts1 bash)
docker exec -it $ts bash
安装先决条件
要构建和测试 RedisTimeSeries,你需要安装几个软件包,具体取决于底层操作系统。目前,我们支持 Ubuntu/Debian、CentOS、Fedora 和 macOS。
如果你已安装 gnu make
,则可以执行
cd RedisTimeSeries
make setup
或者,只需调用以下命令
cd RedisTimeSeries
git submodule update --init --recursive
./deps/readies/bin/getpy3
./system-setup.py
请注意,system-setup.py
将使用本机包管理器和 pip 在你的系统上安装各种软件包。这在 Linux 上需要 root 权限(即 sudo
)。
如果你想避免这种情况,你可以
- 查看
system-setup.py
并手动安装软件包, - 使用如上所述的隔离环境,
- 使用 Python 虚拟环境,因为已知 Python 安装在不隔离的情况下很敏感。
安装 Redis
根据经验,最好运行最新版本的 Redis。
如果你的操作系统有 Redis 软件包,则可以使用操作系统包管理器进行安装。
否则,你可以调用 ./deps/readies/bin/getredis
。
获取帮助
make help
提供了开发功能的快速摘要。
从源代码构建
make
将构建 RedisTimeSeries。
构建工件被放置到 bin/linux-x64-release
(或类似位置,具体取决于你的平台和构建选项)。
使用 make clean
删除构建的工件。make clean ALL=1
将删除整个二进制工件目录。
使用 RedisTimeSeries 运行 Redis
以下命令将运行 redis
并加载 RedisTimeSeries 模块。
make run
你可以在另一个终端中打开 redis-cli
与它进行交互。
运行测试
该模块包括一组基本的单元测试和集成测试
- C 单元测试位于
src/tests
中,通过make unit_tests
运行。 - Python 集成测试(由 RLTest 启用)位于
tests/flow
中,通过make flow_tests
运行。
可以通过调用 make test
来运行所有测试。可以使用 TEST
参数运行单个测试,例如 make flow_test TEST=file:name
。
调试
要为调试进行构建(启用符号信息并禁用优化),请运行 make DEBUG=1
。您可以使用 make run DEBUG=1
来调用 gdb
。除了在 gdb
中设置断点的通常方法外,还可以使用 BB
宏在 RedisTimeSeries 代码中设置断点。它仅在 gdb
下运行时才有效。
类似地,在单测试模式下的 Python 测试中,可以使用测试中的 BB()
函数设置断点。这将调用 pudb
。
这两种方法可以结合使用:可以在流程测试中设置断点,并在达到断点时将 gdb
连接到 redis-server
进程以调试模块。