dremio UserService 简单说明

以前是简单说明过dremio 的UserService ,dremio 实际上支持内部以及外部用户的玩法

类图

可以看到,包含了simple 以及executor 两个,同时实现了UserServiceEvents 支持发布订阅能力的接口(订阅是25.0 版本的)
executor 的实现实际上是为空的,核心是方便执行节点bind UserService,实际内部处理可以参考源码,实际存储是在kv 中,当然
我们可以自己扩展下,存储到其他地方

服务的注册以及启动

注册实际就是dremio的ioc 容器了, 具体会做一些判断
DACDaemonModule 中的setupUserService,会基于是否是协调节点注册不同的实现

protected boolean setupUserService(
    final SingletonRegistry registry,
    final DremioConfig config,
    final Provider<SabotContext> sabotContext,
    boolean isMaster,
    boolean isCoordinator) {
  if (!isCoordinator) {
    registry.bind(UserService.class, new ExecutorUserService());
    return false;
  }
 
  final String authType = config.getString(WEB_AUTH_TYPE);
 # 此处目前是硬编码判断的,社区版只有internal 的
  if ("internal".equals(authType)) {
    final SimpleUserService simpleUserService =
        new SimpleUserService(registry.provider(LegacyKVStoreProvider.class), isMaster);
    registry.bindProvider(UserService.class, () -> simpleUserService);
    registry.bindSelf(simpleUserService);
    logger.info("Internal user/group service is configured.");
    return true;
  }
 
  logger.error(
      "Unknown value '{}' set for {}. Accepted values are ['internal', 'ldap']",
      authType,
      WEB_AUTH_TYPE);
  throw new RuntimeException(
      String.format("Unknown auth type '%s' set in config path '%s'", authType, WEB_AUTH_TYPE));
}

说明

以上只简单说明了用户部分(社区版),后边关于auth部分的说明下

参考资料

services/users/src/main/java/com/dremio/service/users/UserService.java
dac/backend/src/main/java/com/dremio/dac/daemon/DACDaemonModule.java
services/users/src/main/java/com/dremio/service/users/SimpleUserService.java

posted on 2024-05-05 08:00  荣锋亮  阅读(4)  评论(0编辑  收藏  举报

导航