入门必备!iotdb 源码debug方法!

入门必备!iotdb 源码debug方法!

想要深入了解一个组件,阅读调试源码是不可或缺的一步!本文是基于乔嘉林大佬早期的博文迈出加入 Apache IoTDB 社区的第一步!(订阅邮件、调试代码拓展而来,因为大佬发文时iotdb版本较低为0.xx版本,而新版本架构及源码都作了很多调整,所以整理了最新版本V1.3.1的源码调试方法,供大家参考。

原创文字,IoTDB 社区可进行使用与传播

本地调试

1.拉取源码

git clone https://github.com/apache/iotdb.git

2.切换到你所使用的版本

比如你正在使用iotdb最新开源版本v1.3.1,那么就直接切换到tags/v1.3.1,并新建分支,或者在git 命令行执行

git checkout -b my_v1.3.1 v1.3.1

3.编译打包源码

执行mvn clean package -DskipTests 进行整个源码编译

编译打包后target/generated-sources/会自动标记为项目源码

注: idea某些版本会有bug不会自动标记,此时引用了thrift和antlr 的模块的类都会飘红

这里是idea的bug,可以参考 这篇文章 执行 File –> Invalidate Caches/Restart,或者直接手动标记iotdb-protocol模块以及iotdb-core/antlr模块将generate-sources阶段生成的${project.build.directory}/generated-sources/thrift${project.build.directory}/generated-sources/antlr4 目录标记为项目源码,之后就可以运行项目啦。

4.开始调试

a.启动ConfigNode

首先我们以debug模式启动confignode,入口为org.apache.iotdb.confignode.service.ConfigNode#main

然后在org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl#executeStatementV2处打上断点

b.启动DataNode

再以debug模式 启动org.apache.iotdb.db.service.DataNode#main

此时会遇到报错

这是因为confignode源码指定了默认Running mode而在datanode源码中未指定默认的Running mode

我们必须显示的传入,所以我们点击 Edit Configuration,传入参数指定Running mode为 -s

然后再次启动即可成功启动

c.启动Cli

最后我们启动客户端org.apache.iotdb.cli.Cli 并执行sql show cluster details

此时会自动跳转到datanode服务进程的 debugger 里我们之前打了断点的org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl#executeStatementV2,就可以一点一点查看一个sql的完整执行流程了。_

远程调试

由于平常开发大多在windows或mac环境,部署时使用的一般是linux,个别情况下的兼容问题可能是致命的,且非常难以排查,所以远程DEBUG更能反映出真实业务环境下可能出现的问题,本文以最新版本v1.3.1 iotdb 1c1d单机版为例介绍idea 远程debug 一次sql执行过程的方式。

1. 修改配置文件

首先我们修改common配置文件中查询超时时间
vim $IOTDB_HOME/conf/iotdb-common.properties

# 防止查询超时错误
#query_timeout_threshold=60000
query_timeout_threshold=6000000 

然后执行命令修改datanode启动脚本

vim $IOTDB_HOME/sbin/start-datanode.sh

添加变量

REMOTE_DEBUG=" -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5791"

然后在launch_service方法中增加

    iotdb_parms="$iotdb_parms ${REMOTE_DEBUG}"

2. 重启iotdb

$IOTDB_HOME/sbin/stop-standalone.sh 
$IOTDB_HOME/sbin/start-standalone.sh 

3. idea配置远程debug

在idea上设置iotdb所在的host和监听的port以及希望debug的模块(这里我们选择根模块,也可选择单一模块),如下:


然后启动远程debug,就可以开开心心的进行远程debug了_

此时在服务器iotdb客户端命令行中输入执行sql
在这里插入图片描述

可以看到也是同样的进入了org.apache.iotdb.db.protocol.thrift.impl.ClientRPCServiceImpl#executeStatementV2


附:iotdb中的一些基础概念

名词类型解释
ConfigNode节点角色配置节点,管理集群节点信息、分区信息,监控集群状态、控制负载均衡
DataNode节点角色数据节点,管理数据、元数据
Database元数据数据库,不同数据库的数据物理隔离
DeviceId设备名元数据树中从 root 到倒数第二级的全路径表示一个设备名
SeriesSlot元数据分区每个 Database 包含多个元数据分区,根据设备名进行分区
SchemaRegion一组元数据分区多个 SeriesSlot 的集合
SchemaRegionGroup逻辑概念包含元数据副本数个 SchemaRegion,管理相同的元数据,互为备份
DataRegion一组数据分区IoTDB 以数据分区(DataRegion)为单位对元数据和数据进行管理,从序列和时间两个维度进行数据划分。
DataRegionGroup逻辑概念包含数据副本数个 DataRegion,管理相同的数据,互为备份

希望这篇博文能帮助大家更好地理解 IoTDB 源码调试过程。如有问题,欢迎留言讨论!

  • 27
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值