dremio 实现官方create user sql 处理的一些说明

以前我简单说明实际上当时我只是说明了以下简单的思路,最近随着对于dremio 慢慢比较深入的学习,发现直接实现create user sq 似乎并不是一个比较方便的

原因

  • 传入的参数是QueryContext,此上下文缺少UserService 的暴露
    参考方法签名
 
  public interface Creator {
    SimpleDirectHandler toDirectHandler(QueryContext context);
  }

实际QueryContext 是基于SabotContext 进行一个内部服务暴露的(比如catalog,namespace。。。)
但是QueryContext 木有直接暴露UserService 可以直接使用

解决方法

  • 可以通过修改QueryContext 暴露一些SabotContext的内部服务
    方便使用UserService,实际修改比较简单,就会需要的修改稍微大写,毕竟修改了sabot kernel
  • 直接基于bean 容器获取需要的bean
    因为SabotContext 实际是guice 的一个bean获取到bean 容器也就可以取到SabotContext 或者直接就可以取到UserService了
    当时目前此方法是有问题的,kernel 部分不能直接引用dac 模块部分的

QueryContext创建以及使用简单说明

  • 创建
    Foreman 的newAttemptManager 中
 
protected AttemptManager newAttemptManager(SabotContext context, AttemptId attemptId, UserRequest queryRequest,
 AttemptObserver observer, UserSession session, OptionProvider options,
 Cache<Long, PreparedPlan> preparedPlans, PlanCache planCache,
 Predicate<DatasetConfig> datasetValidityChecker, CommandPool commandPool) {
final QueryContext queryContext = new QueryContext(session, context, attemptId.toQueryId(),
   queryRequest.getPriority(), queryRequest.getMaxAllocation(), datasetValidityChecker, planCache);
return new AttemptManager(context, attemptId, queryRequest, observer, options, preparedPlans,
  queryContext, commandPool, maestroService, jobTelemetryClient, ruleBasedEngineSelector,
  queryRequest.runInSameThread());
} 

Foreman 具体是由ForemenWorkManager 创建的,ForemenWorkManager 在drill 属于一个long running 的工作任务,dremio 中实际是类似的

说明

以上是一个简单的修改说明,实际上如果需要自己实现类似企业版的特性的话,QueryContext 不少东西看着是需要调整才能支持的,不然我们
直接实现SimpleDirectHandler 就很费事了

参考资料

sabot/kernel/src/main/java/com/dremio/exec/server/SabotContext.java
sabot/kernel/src/main/java/com/dremio/exec/server/ContextService.java
sabot/kernel/src/main/java/com/dremio/exec/ops/QueryContext.java
sabot/kernel/src/main/java/com/dremio/exec/work/protector/Foreman.java
https://www.cnblogs.com/rongfengliang/p/15484913.html

posted on 2022-12-25 19:01  荣锋亮  阅读(20)  评论(0编辑  收藏  举报

导航