From ba6d605bdf6e143d642dc9ef99e3bbec1346fcea Mon Sep 17 00:00:00 2001 From: Yulei-Yang Date: Thu, 19 Dec 2024 17:27:04 +0800 Subject: [PATCH] [fix](ranger) make RangerDorisAccessController as singleton to avoid more and more ranger policy refresher --- .../RangerCacheDorisAccessController.java | 3 ++- .../doris/RangerDorisAccessController.java | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/authorizer/ranger/doris/RangerCacheDorisAccessController.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/authorizer/ranger/doris/RangerCacheDorisAccessController.java index 2cbc8111d52c9c..056a5389d87108 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/authorizer/ranger/doris/RangerCacheDorisAccessController.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/authorizer/ranger/doris/RangerCacheDorisAccessController.java @@ -28,7 +28,8 @@ public class RangerCacheDorisAccessController extends CatalogCacheAccessControll public RangerCacheDorisAccessController(String serviceName) { this.cache = new RangerCache(); - this.proxyController = new RangerDorisAccessController(serviceName, new RangerCacheInvalidateListener(cache)); + this.proxyController = RangerDorisAccessController.getInstance(serviceName, + new RangerCacheInvalidateListener(cache)); this.cache.init(proxyController); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/authorizer/ranger/doris/RangerDorisAccessController.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/authorizer/ranger/doris/RangerDorisAccessController.java index 53e9455de88dad..35853f79ba8a27 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/authorizer/ranger/doris/RangerDorisAccessController.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/authorizer/ranger/doris/RangerDorisAccessController.java @@ -45,21 +45,36 @@ public class RangerDorisAccessController extends RangerAccessController { private static final Logger LOG = LogManager.getLogger(RangerDorisAccessController.class); private RangerBasePlugin dorisPlugin; + + private static RangerDorisAccessController instance; + // private static ScheduledThreadPoolExecutor logFlushTimer = ThreadPoolManager.newDaemonScheduledThreadPool(1, // "ranger-doris-audit-log-flusher-timer", true); // private RangerHiveAuditHandler auditHandler; - public RangerDorisAccessController(String serviceName) { + private RangerDorisAccessController(String serviceName) { this(serviceName, null); } - public RangerDorisAccessController(String serviceName, RangerAuthContextListener rangerAuthContextListener) { + private RangerDorisAccessController(String serviceName, RangerAuthContextListener rangerAuthContextListener) { dorisPlugin = new RangerDorisPlugin(serviceName, rangerAuthContextListener); // auditHandler = new RangerHiveAuditHandler(dorisPlugin.getConfig()); // start a timed log flusher // logFlushTimer.scheduleAtFixedRate(new RangerHiveAuditLogFlusher(auditHandler), 10, 20L, TimeUnit.SECONDS); } + public static RangerDorisAccessController getInstance(String serviceName) { + return getInstance(serviceName, null); + } + + public static synchronized RangerDorisAccessController getInstance(String serviceName, + RangerAuthContextListener rangerAuthContextListener) { + if (instance == null) { + instance = new RangerDorisAccessController(serviceName, rangerAuthContextListener); + } + return instance; + } + @VisibleForTesting public RangerDorisAccessController(RangerBasePlugin plugin) { dorisPlugin = plugin;