本文承接上一篇[Doris核心原理] -- FE启动过程原理分析2 -- 启动类PaloFe.java.
从上一篇中, 我们了解了Doris Fe启动类的运行过程, 本篇主要讲解Doris Fe启动时是如何初始化Catalog.java这个类的.
Catalog.java是Doris Fe的一个核心类, 主要负责以下功能(包括但不限于)
启动类PaloFe.java是通过调用下面的代码进行初始化的.
// init catalog and wait it be ready
Catalog.getCurrentCatalog().initialize(args);
Catalog.getCurrentCatalog().waitForReady();
接下来, 我们主要讲解Catalog.getCurrentCatalog().initialize(args)的初始化过程.
初始化审计日志处理器.
审计日志处理器实在AuditEventProcessor.java中实现的, 代码结构如下:
public class AuditEventProcessor {
private static final Logger LOG = LogManager.getLogger(AuditEventProcessor.class);
private static final long UPDATE_PLUGIN_INTERVAL_MS = 60 * 1000; // 1min
private PluginMgr pluginMgr;
private List<Plugin> auditPlugins;
private long lastUpdateTime = 0;
private BlockingQueue<AuditEvent> eventQueue = Queues.newLinkedBlockingDeque(10000);
private Thread workerThread;
private volatile boolean isStopped = false;
public AuditEventProcessor(PluginMgr pluginMgr) {
}
public void start() {
}
public void stop() {
}
public void handleAuditEvent(AuditEvent auditEvent) {
}
public class Worker implements Runnable {
}
}
下面我们介绍这段代码中的核心字段和方法.
初始化当前Fe的角色、版本. 实现方式是: getClusterIdAndRole().
初始化editLog, 并加载image和回放editLog日志. 代码如下:
this.editLog = new EditLog(nodeName);
loadImage(this.imageDir); // load image file
editLog.open(); // open bdb env
this.globalTransactionMgr.setEditLog(editLog);
this.idGenerator.setEditLog(editLog);
清理load、export任务的元信息.
createLabelCleaner();
Fe默认不会全部的load、export任务信息都保存, 比如load任务信息默认保存3天, 然后就内存删除了, 由于没有落盘, 删除后将永远不可见.
清理过期的事物信息. 事物包含创建库、表, drop库表,load数据等, 都是一个事物, 要么成功要么失败. 但是Doris不会允许一个事物无限期的执行, 比如stream load默认600s超时,
createTxnCleaner();
在这些步骤执行完成后, 会Doris Fe启动类会调用Catalog.getCurrentCatalog().waitForReady()方法, 直到本地的editlog都回放完成后, 再继续执行之后的逻辑.
下一篇将主要介绍Fe中的三个服务: Qe服务、Fe服务、Http服务, 分别为Fe提供了jdbc协议接入、thrift RPC接入、Http接入和监控.
欢迎添加微信,互相学习↑↑↑ -_-
白老虎
programming is not only to solve problems, ways to think
grafana 级连 菜单 templating (variables) 配置
AI 机器人 抓取 微信 聊天中的 百度网盘 分享地址和密码
rocketmq 集群搭建 (2master + 2slave + 2namesrv)