dremio ControlsInjector 简单说明
ControlsInjector 在dremio 中的使用特别多,各种执行任务中都能看到它的影子
参考使用到的类
从下图可以看到使用到ControlsInjector的地方特别多,比如命令创建,fragment启动,dremio 的sql 优化器
参考实现
如下图是目前的实现类,包含了一个无操作的,已经需要执行一些操作的(具体执行的需要jvm 启动的时候配置-ea 开启assert 功能)
参考使用
比如CommandCreator 中就用到了,尽管默认是空操作
- 参考使用
public CommandRunner<?> toCommand() throws ForemanException {
// 进行check command 是否重复执行,
injector.injectChecked(context.getExecutionControls(), "run-try-beginning", ForemanException.class);
如果是包含了断言的重复执行会有异常的,同时服务会有异常抛出
说明
dremio 的ControlsInjector 比较方便进行系统的debug,我们只需要开启jvm assert 就可以方便的进行系统运行状态的check,默认无操作
对于是否开启assert 的check 处理
// 如果开启了 isAssertEnabled0 返回为true,否则jvm 忽略assert 那行代码的执行
private static boolean isAssertEnabled0() {
// Using side-effect to set isAssertEnabled if assertions are enabled
boolean isAssertEnabled = false;
assert isAssertEnabled = true;
return isAssertEnabled;
}
基于assert开关特性是一种不错的调试手段,我们通过简单的配置就可以方便了解系统的运行状态时候符合预期
参考资料
sabot/kernel/src/main/java/com/dremio/exec/testing/ControlsInjectorFactory.java
common/legacy/src/main/java/com/dremio/common/VM.java
sabot/kernel/src/main/java/com/dremio/exec/testing/ControlsInjector.java
sabot/kernel/src/main/java/com/dremio/exec/testing/ExecutionControls.java
sabot/kernel/src/main/java/com/dremio/exec/testing/ExecutionControlsInjector.java
sabot/kernel/src/main/java/com/dremio/exec/testing/Injection.java
sabot/kernel/src/main/java/com/dremio/exec/planner/sql/handlers/commands/CommandCreator.java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2023-03-14 sbom +dependencytrack 进行软件组件安全性分析
2021-03-14 spring-native 编译spring 应用为graalvm native 镜像
2020-03-14 pgspider timescale+citus 扩展docker 镜像
2020-03-14 pgspider timescale 扩展docker 镜像
2018-03-14 tomcat nginx 证书切换
2015-03-14 JS-unicode编码转换