dremio DACModule 主要是模块加载初始化以及组合,是一个比较重要的模式,同时也支持基于配置进行加载(有点很多了,后边简单介绍)
加载机制
- 支持配置加载
可以通过dremio 运行配置文件添加dremio.daemon.module.class 支持
services: {
coordinator.enabled: true,
coordinator.master.enabled: true,
executor.enabled: false
}
dremio:{
daemon.module.class: "com.dremio.dac.daemon.DACDaemonModule" // 默认实现可以扩展自己的
}
- 通过动态类创建模式进行处理
代码处理DremioDaemon 入口中
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);
if (config.isMaster) {
// Try autoupgrade before starting daemon
AutoUpgrade autoUpgrade = new AutoUpgrade(config, classPathScan);
autoUpgrade.run(false);
}
// 基于sabotConfig 提供的类加载以及创建机制加载社区的模块DACDaemonModule,此处就很强大了,可以扩展自己的DACDaemonModule,实现一些其他功能
final DACModule module = sabotConfig.getInstance(DAEMON_MODULE_CLASS, DACModule.class, DACDaemonModule.class);
try (final DACDaemon daemon = DACDaemon.newDremioDaemon(config, classPathScan, module)) {
daemon.init();
daemon.closeOnJVMShutDown();
daemon.awaitClose();
}
} catch (final Throwable ex) {
ProcessExit.exit(ex, "Failure while starting services.", 4);
}
}
}
说明
以上是一个简单的关于dremio DACModule 模块加载的说明,我们可以自己扩展实现不少强大的功能
参考资料
dac/daemon/src/main/java/com/dremio/dac/daemon/DremioDaemon.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACModule.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACDaemonModule.java