DremioDaemon 的核心是启动dremio服务同时进行一些依赖的注入
简单启动说明
- 包含了自动更新处理(主要是kv 存储的,后边会介绍dremio 一些任务)
- 查找DACModule创建类,并初始化内部包含的服务(不少是基于dremio 的service 机制启动的),等待jvm 退出,并处理一些runtime 的hook(主要是资源的释放处理)
参考代码
public static void main(String[] args) throws Exception {
try (TimedBlock b = Timer.time("main")) {
final DACConfig config = DACConfig.newConfig();
final SabotConfig sabotConfig = config.getConfig().getSabotConfig();
final ScanResult classPathScan = ClassPathScanner.fromPrescan(sabotConfig);
// 对于master 节点,尝试直接自动升级(kv 存储相关的)
if (config.isMaster) {
// Try autoupgrade before starting daemon
AutoUpgrade autoUpgrade = new AutoUpgrade(config, classPathScan);
autoUpgrade.run(false);
}
// 查找DACModule 的配置类,并创建实例
final DACModule module = sabotConfig.getInstance(DAEMON_MODULE_CLASS, DACModule.class, DACDaemonModule.class);
// 模块创建DACDaemon,此模块实际上才是dremio 好多干活的地方
try (final DACDaemon daemon = DACDaemon.newDremioDaemon(config, classPathScan, module)) {
// 启动服务(一些实现service 的服务,以及启动以来的)
daemon.init();
// jvm 服务关闭资源释放是否的hook
daemon.closeOnJVMShutDown();
daemon.awaitClose();
}
} catch (final Throwable ex) {
ProcessExit.exit(ex, "Failure while starting services.", 4);
}
}
说明
DremioDaemon 属于dremio 的入口实际上是比较重要的一个服务,同时此入口我们可以慢慢的了解dremio 个个模块的机制
参考资料
dac/daemon/src/main/java/com/dremio/dac/daemon/DremioDaemon.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACDaemon.java