根目录下
├── be // BE 代码目录 ├── bin // FE/BE 的启停脚本 ├── build_plugin.sh // FE 插件编译脚本 ├── build.sh // Doris 编译脚本 ├── build-support // 编译用辅助脚本 ├── CODE_OF_CONDUCT.md // 贡献者代码行为准则 ├── conf // FE/BE 的配置文件 ├── contrib // 第三方贡献代码,如 udf ├── CONTRIBUTING_CN.md ├── CONTRIBUTING.md ├── DISCLAIMER ├── docker // Doris 开发镜像的 Dockerfile ├── docs // 文档目录 ├── env.sh ├── extension // 扩展功能代码,如 flink connector 等 ├── fe // FE 代码目录 ├── fe_plugins // FE 插件目录 ├── fs_brokers // Broker 代码目录 ├── gensrc // thrift/protobuf 等代码生成目录 ├── LICENSE.txt ├── NOTICE.txt ├── README.md ├── run-be-ut.sh // BE 单元测试运行脚本 ├── run-fe-ut.sh // FE 单元测试运行脚本 ├── samples // 示例代码目录 ├── thirdparty // 第三方依赖库目录 ├── tools // 一些辅助工具 ├── tsan_suppressions ├── ui // FE 前端代码目录 └── webroot // 一些静态网页相关代码
fe/
├── checkstyle-apache-header.txt ├── checkstyle.xml ├── conf ├── fe-common // 一些 FE 模块的通用代码 ├── fe-core // FE 模块主代码 ├── pom.xml ├── README └── spark-dpp // Spark Load 所依赖的 Spark 导入程序代码
fe-core为FE的核心代码模块
├── main
│ ├── cup // 语法定义文件
│ ├── java // 主代码
│ ├── jflex // 词法定义文件
│ └── resources
└── test // 单元测试
├── java
└── resources
在 main/java/org/apache/doris下即是FE代码的主要部分
├── alter // 表结构变更操作相关的代码。包括表结构变更,物化视图等。 ├── analysis // 包含所有SQL语法的java实例类 ├── backup // 备份恢复操作相关的代码 ├── blockrule // SQL 黑名单相关代码 ├── catalog // 包含元数据操作的主类和各种数据库、表、分区的元数据实例类 ├── clone // 数据副本修复和均衡相关的代码 ├── cluster // 已废弃 ├── common // 一些工具类和通用定义 ├── consistency // 数据一致性校验相关的代码 ├── deploy // 部署相关代码 ├── external // Doris on Elasticsearch相关的代码 ├── ha // 元数据高可用相关的代码 ├── http // http v1 代码 ├── httpv2 // http v2 代码(逐步替换v1) ├── journal // 元数据日志相关的代码 ├── ldap // LDAP 认证相关代码 ├── load // 导入作业相关代码 ├── master // FE Master角色相关的操作代码,如元数据Checkpoint,BE任务汇报的处理等。 ├── metric // FE 监控指标相关的代码 ├── monitor // JVM 监控相关代码 ├── mysql // MySQL协议层相关代码 ├── PaloFe.java // Main函数入口 ├── persist // 元数据持久化相关的代码 ├── planner // 查询优化器相关的代码 ├── plugin // Frontend端插件管理相关代码 ├── qe // 用于处理各类SQL请求相关的代码。如查询请求的处理类、DDL请求的处理类等 ├── resource // 资源标签相关的代码 ├── rewrite // 查询优化器重写规则相关的代码 ├── rpc // Frontend和Backend之间RPC协议相关的代码 ├── service // Frontend侧各种服务器端代码 ├── system // 集群节点的实例类和集群节点管理相关的代码 ├── task // Frontend发往Backend的各类任务相关的代码 └── transaction // 导入事务相关代码
be/
├── CMakeLists.txt // CMake 编译文件 ├── src // 主代码目录 ├── test // 单元测试
主代码目录包含:
├── agent // FE 下发的 agent task 相关处理类 ├── common // 通用类 ├── env // 文件系统操作类 ├── exec // 执行算子相关代码 ├── exprs // 表达式、函数计算相关代码 ├── geo // 地理位置函数相关代码 ├── glibc-compatibility // GLIBC 兼容代码 ├── gutil // Google gutil 相关代码 ├── http // BE 端 http server 相关代码 ├── olap // 存储层代码 ├── plugin // BE 插件管理相关代码 ├── runtime // 查询层运行时相关代码 ├── service // BE 对外服务接口相关代码 ├── testutil // 单元测试辅助类 ├── tools // 辅助工具相关代码 ├── udf // 用户自定义函数相关代码 └── util // 一些工具类
gensrc/
├── Makefile ├── proto // protobuf 定义文件 ├── script // 一些辅助脚本,包括函数定义代码生成模板等 └── thrift // thrift 定义文件
extension/
├── DataX // DataX doriswriter 插件 ├── flink-doris-connector // Flink Doris Connector ├── logstash // logstash 导入插件 └── spark-doris-connector // Spark Doris Connector
Apache Doris代码合入准则
开发者在本地修改完代码后,需要完成以下几个步骤,方可提交代码:
运行 run-fe-ut.sh 和 run-be-ut.sh 来运行单元测试并确认通过。
提交 Pull Request
Pull Request 会触发准入测试:
1.Travis CI/continuous-integration:文档编译准入。会对 docs/ 目录进行编译
2.ut_build:单元测试准入。会运行 fe/be 单元测试。
3.NewDorisTest:一个包含100多个 case 的最小回归测试集。
只有在以上准入测试都通过,并且有至少一个 Committer Approve 后,代码方可合入。



