迈出加入 Apache IoTDB 社区的第一步!(订阅邮件、调试代码)
很多想参与项目开发的同学因为没有人领路,不知道哪些任务适合自己,对于如何参与到项目中也是一头雾水。今天就来介绍一下如何参与开发,本文主要目标是帮助大家如何加入社区。
正文 1512 字,预计阅读时间 4 分钟。
今天的内容主要包括:订阅邮件列表,寻找 issue,编译源码,调试服务器代码。
订阅邮件列表
Apache 项目的主要沟通方式是邮件列表,我们项目开发者的邮件列表为 dev@iotdb.apache.org , 只要订阅了这个邮件列表,就能接收到其他人往这个邮箱里发的邮件,同样,你向这里发的邮件别人也会接收到,类似一个延迟稍微高一些的微信群。
订阅方式是用邮箱往 dev-subscribe@iotdb.apache.org 发一封邮件,主题内容随意,可以写 subscribe。接下来会受到一封确认邮件,确认邮件里有一个链接,往这个确认链接再回一封邮件就订阅成功了。
订阅后的第一件事就是发个自我介绍啦,可以介绍一下自己的姓名、地区、公司、熟悉的语言、技术栈等等。
大家不用把邮件列表当做那么严肃的地方,其实这里边可以讨论任何和项目有关的,包括举办meetup、反馈 bug、分享设计思路,或者刚入门希望别人给介绍一些入门的任务项等,都是可以的。
刚来对待邮件列表的态度就是:不怕犯错,不怕说错,热情发言。
寻找合适的 issue
平时用的是 jira。
https://issues.apache.org/jira/projects/IOTDB/issues
此外 github 的 issue 也可以。
如果不知道哪些功能适合自己,可以来邮件列表里问,或者问我也可以。
编译源码
git clone https://github.com/apache/incubator-iotdb.git
cd incubator-iotdb
mvn clean package -DskipTests
接下来需要将 thrift/target/generated-sources/thrift 和 antlr/target/generated-sources/antlr4 目录标记成项目源代码,让 IDE 识别。
以 IDEA 标记 antlr 目录为例:
到此为止,代码中应该就没有飘红的了。
调试服务器代码
第一次调试 IoTDB,可以从两个模块入手,服务器(server)和命令行工具(cli )。
首先启动服务器,主类 IoTDB,debug 模式启动。
接下来给 TSServiceImpl 类的 executeStatement 打个断点,Cli 里写的语句都会发送给服务器,而服务器的线程就通过这个 rpc 函数处理语句了。
接下来启动命令行工具。主类为 Cli (mac、linux)或 WinCli (windows)。启动之后会报缺少参数,这个时候可以在箭头处选 Cli,然后 Edit Configuration
把类 javadoc 里的几个参数设置到 Program arguments 里,点击 Apply,OK。
然后就可以 run 启动 Cli 了(如果想调试客户端,可以 debug 模式启动)。启动之后可以在 run 的控制台里输入一个命令,这里以创建存储组为例,输入完回车,客户端进程就开始等待服务器返回结果了。
这时候会自动跳转到服务器进程的 debugger 里,就可以正式调试了。
另外一种适合学习代码的是跑测试用例,每个模块都有对应的测试用例,普通的 UT 命名都对应了(测试的类名+Test),集成测试的后缀是 IT。
总结
迈出第一步之后,就可以对照设计文档看代码啦,http://iotdb.apache.org/zh/SystemDesign/Architecture/Architecture.html 。接下来会介绍 IoTDB 的设计原理、源码解析等内容。欢迎关注!
- 利用Fck的javascript-API创建fck编辑器
- ASPNET_WEBAPI快速学习02
- ExtJs学习笔记(17)_table布局
- Markdown快速入门
- JavaScript之apply()和call()的区别
- JavaScript之面向对象学习八(继承)
- JQuery快速入门
- JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)
- ExtJs学习笔记(16)_Form布局
- JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象
- 未来几年苹果公司很可能“不务正业”,进军汽车无人驾驶界
- ExtJs学习笔记(15)_fit布局
- JavaScript之call()和apply()方法详解
- Javascript快速入门(下篇)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法