本文承接上一篇[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)的初始化过程.
初始化配置的元数据目录信息. 元数据目录需要事先创建, 如果不创建启动会报错, 然后进程退出. bdb目录、image目录如果不存在则会创建.
处理当前Fe启动时的host、port, 启动时设置的helper节点地址
初始化插件管理器
初始化审计日志处理器. 审计日志处理器实在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天, 然后就内存删除了, 由于没有落盘, 删除后将永远不可见.
createTxnCleaner();
在这些步骤执行完成后, 会Doris Fe启动类会调用Catalog.getCurrentCatalog().waitForReady()方法, 直到本地的editlog都回放完成后, 再继续执行之后的逻辑.
下一篇将主要介绍Fe中的三个服务: Qe服务、Fe服务、Http服务, 分别为Fe提供了jdbc协议接入、thrift RPC接入、Http接入和监控.
全部评论