From e2967c07b61944301ff512e70f7b50945b32933d Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Mon, 31 Mar 2025 20:57:25 +0800 Subject: [PATCH 1/9] HDFS-17766. [ARR] Avoid initializing unused threadPool in RouterAsyncRpcClient. --- .../federation/router/RouterRpcClient.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java index 7917f834937fc..964e43f7c3801 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java @@ -199,8 +199,13 @@ public RouterRpcClient(Configuration conf, Router router, } else { workQueue = new LinkedBlockingQueue<>(); } - this.executorService = new ThreadPoolExecutor(numThreads, numThreads, - 0L, TimeUnit.MILLISECONDS, workQueue, threadFactory); + + if (router.getRpcServer().isAsync()) { + this.executorService = null; + } else { + this.executorService = new ThreadPoolExecutor(numThreads, numThreads, + 0L, TimeUnit.MILLISECONDS, workQueue, threadFactory); + } this.rpcMonitor = monitor; @@ -364,9 +369,11 @@ public String getJSON() { */ public String getAsyncCallerPoolJson() { final Map info = new LinkedHashMap<>(); - info.put("active", executorService.getActiveCount()); - info.put("total", executorService.getPoolSize()); - info.put("max", executorService.getMaximumPoolSize()); + if (executorService != null) { + info.put("active", executorService.getActiveCount()); + info.put("total", executorService.getPoolSize()); + info.put("max", executorService.getMaximumPoolSize()); + } return JSON.toString(info); } From c6db077e7cb3c482d7a26cb689e36c2b972ce29e Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Tue, 1 Apr 2025 09:49:31 +0800 Subject: [PATCH 2/9] fix some failed unit tests. --- .../hadoop/hdfs/server/federation/router/Router.java | 8 ++++++++ .../hdfs/server/federation/router/RouterRpcClient.java | 3 +-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java index 14cc47ffa1e6e..c2bbbc5700699 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java @@ -19,6 +19,8 @@ import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_RPC_ADDRESS_KEY; import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_SERVICE_RPC_ADDRESS_KEY; +import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_ASYNC_RPC_ENABLE_DEFAULT; +import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_ASYNC_RPC_ENABLE_KEY; import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_KERBEROS_PRINCIPAL_HOSTNAME_KEY; import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_KERBEROS_PRINCIPAL_KEY; import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_KEYTAB_FILE_KEY; @@ -876,4 +878,10 @@ public void setConf(Configuration conf) { this.conf = conf; } + @VisibleForTesting + public boolean isAsync() { + return getRpcServer() != null ? getRpcServer().isAsync() : + getConfig() != null ? getConfig().getBoolean(DFS_ROUTER_ASYNC_RPC_ENABLE_KEY, + DFS_ROUTER_ASYNC_RPC_ENABLE_DEFAULT) : DFS_ROUTER_ASYNC_RPC_ENABLE_DEFAULT; + } } diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java index 964e43f7c3801..221d0d2e4c11e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java @@ -200,7 +200,7 @@ public RouterRpcClient(Configuration conf, Router router, workQueue = new LinkedBlockingQueue<>(); } - if (router.getRpcServer().isAsync()) { + if (router.isAsync()) { this.executorService = null; } else { this.executorService = new ThreadPoolExecutor(numThreads, numThreads, @@ -2034,7 +2034,6 @@ protected boolean shouldRotateCache(IOException ioe) { return isUnavailableException(ioe); } - /** * The {@link ExecutionStatus} class is a utility class used to track the status of * execution operations performed by the {@link RouterRpcClient}. From ebc8277fa82d527771e204d1ef799258e930c720 Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Tue, 1 Apr 2025 13:47:13 +0800 Subject: [PATCH 3/9] refactor. --- .../federation/router/RouterRpcClient.java | 45 +++++++++---------- .../router/async/RouterAsyncRpcClient.java | 5 +++ 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java index 221d0d2e4c11e..c94004654a952 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java @@ -128,7 +128,7 @@ public class RouterRpcClient { /** Connection pool to the Namenodes per user for performance. */ private final ConnectionManager connectionManager; /** Service to run asynchronous calls. */ - private final ThreadPoolExecutor executorService; + private ThreadPoolExecutor executorService; /** Retry policy for router -> NN communication. */ private final RetryPolicy retryPolicy; /** Optional perf monitor. */ @@ -184,29 +184,7 @@ public RouterRpcClient(Configuration conf, Router router, this.connectionManager.start(); this.routerRpcFairnessPolicyController = FederationUtil.newFairnessPolicyController(conf); - - int numThreads = conf.getInt( - RBFConfigKeys.DFS_ROUTER_CLIENT_THREADS_SIZE, - RBFConfigKeys.DFS_ROUTER_CLIENT_THREADS_SIZE_DEFAULT); - ThreadFactory threadFactory = new ThreadFactoryBuilder() - .setNameFormat("RPC Router Client-%d") - .build(); - BlockingQueue workQueue; - if (conf.getBoolean( - RBFConfigKeys.DFS_ROUTER_CLIENT_REJECT_OVERLOAD, - RBFConfigKeys.DFS_ROUTER_CLIENT_REJECT_OVERLOAD_DEFAULT)) { - workQueue = new ArrayBlockingQueue<>(numThreads); - } else { - workQueue = new LinkedBlockingQueue<>(); - } - - if (router.isAsync()) { - this.executorService = null; - } else { - this.executorService = new ThreadPoolExecutor(numThreads, numThreads, - 0L, TimeUnit.MILLISECONDS, workQueue, threadFactory); - } - + initConcurrentCallExecutorService(conf); this.rpcMonitor = monitor; int maxFailoverAttempts = conf.getInt( @@ -249,6 +227,25 @@ public RouterRpcClient(Configuration conf, Router router, } this.lastActiveNNRefreshTimes = new ConcurrentHashMap<>(); } + + protected void initConcurrentCallExecutorService(Configuration conf) { + int numThreads = conf.getInt( + RBFConfigKeys.DFS_ROUTER_CLIENT_THREADS_SIZE, + RBFConfigKeys.DFS_ROUTER_CLIENT_THREADS_SIZE_DEFAULT); + ThreadFactory threadFactory = new ThreadFactoryBuilder() + .setNameFormat("RPC Router Client-%d") + .build(); + BlockingQueue workQueue; + if (conf.getBoolean( + RBFConfigKeys.DFS_ROUTER_CLIENT_REJECT_OVERLOAD, + RBFConfigKeys.DFS_ROUTER_CLIENT_REJECT_OVERLOAD_DEFAULT)) { + workQueue = new ArrayBlockingQueue<>(numThreads); + } else { + workQueue = new LinkedBlockingQueue<>(); + } + this.executorService = new ThreadPoolExecutor(numThreads, numThreads, + 0L, TimeUnit.MILLISECONDS, workQueue, threadFactory); + } /** * Get the configuration for the RPC client. It takes the Router diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/async/RouterAsyncRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/async/RouterAsyncRpcClient.java index ea2d3b40ca527..59f47b9582153 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/async/RouterAsyncRpcClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/async/RouterAsyncRpcClient.java @@ -116,6 +116,11 @@ public RouterAsyncRpcClient(Configuration conf, this.rpcMonitor = monitor; } + @Override + protected void initConcurrentCallExecutorService(Configuration conf) { + // No need to initialize the thread pool for concurrent call. + } + /** * Invoke method in all locations and return success if any succeeds. * From 87f268c2395f187a98ff84b393d668f9db9608e1 Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Tue, 1 Apr 2025 14:02:36 +0800 Subject: [PATCH 4/9] add Unit tests. --- .../hdfs/server/federation/router/RouterRpcClient.java | 9 +++++++++ .../hdfs/server/federation/router/TestRouterRpc.java | 5 +++++ .../federation/router/async/TestRouterAsyncRpc.java | 6 ++++++ .../router/async/TestRouterAsyncRpcMultiDestination.java | 8 ++++++++ 4 files changed, 28 insertions(+) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java index c94004654a952..c46ace772065b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java @@ -280,6 +280,15 @@ public ActiveNamenodeResolver getNamenodeResolver() { return this.namenodeResolver; } + /** + * Get the executor service used by invoking concurrent calls. + * @return + */ + @VisibleForTesting + public ThreadPoolExecutor getExecutorService() { + return executorService; + } + /** * Shutdown the client. */ diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRpc.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRpc.java index 98551fea3d157..ddbfdc9727c3a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRpc.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/TestRouterRpc.java @@ -2426,4 +2426,9 @@ public void testCallerContextNotResetByAsyncHandler() throws IOException { // The audit log should not contain async:true. assertFalse(auditLog.getOutput().contains("async:true")); } + + @Test + public void testConcurrentCallExecutorInitial() { + assertNotNull(router.getRouterRpcClient().getExecutorService()); + } } diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestRouterAsyncRpc.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestRouterAsyncRpc.java index bfc72b2c47324..42ab49affd0f0 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestRouterAsyncRpc.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestRouterAsyncRpc.java @@ -36,6 +36,7 @@ import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_FAIRNESS_POLICY_CONTROLLER_CLASS; import static org.apache.hadoop.hdfs.server.federation.router.async.utils.AsyncUtil.syncReturn; import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * Testing the asynchronous RPC functionality of the router. @@ -83,4 +84,9 @@ public void testgetGroupsForUser() throws Exception { assertArrayEquals(group, result); } + @Test + @Override + public void testConcurrentCallExecutorInitial() { + assertNull(rndRouter.getRouterRpcClient().getExecutorService()); + } } diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestRouterAsyncRpcMultiDestination.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestRouterAsyncRpcMultiDestination.java index ab82afba371b4..5783107d927ee 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestRouterAsyncRpcMultiDestination.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/router/async/TestRouterAsyncRpcMultiDestination.java @@ -34,6 +34,7 @@ import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_FAIRNESS_POLICY_CONTROLLER_CLASS; import static org.apache.hadoop.hdfs.server.federation.router.async.utils.AsyncUtil.syncReturn; import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * Testing the asynchronous RPC functionality of the router with multiple mounts. @@ -70,4 +71,11 @@ public void testgetGroupsForUser() throws Exception { String[] result = syncReturn(String[].class); assertArrayEquals(group, result); } + + @Test + @Override + public void testConcurrentCallExecutorInitial() { + MiniRouterDFSCluster.RouterContext rndRouter = super.getRouterContext(); + assertNull(rndRouter.getRouterRpcClient().getExecutorService()); + } } From bb8991b29ae430a6a271a2b299992e99ad1abfe4 Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Tue, 1 Apr 2025 16:36:41 +0800 Subject: [PATCH 5/9] fix blanks. --- .../hadoop/hdfs/server/federation/router/RouterRpcClient.java | 2 +- .../server/federation/router/async/RouterAsyncRpcClient.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java index c46ace772065b..6bc8f2a71723f 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java @@ -227,7 +227,7 @@ public RouterRpcClient(Configuration conf, Router router, } this.lastActiveNNRefreshTimes = new ConcurrentHashMap<>(); } - + protected void initConcurrentCallExecutorService(Configuration conf) { int numThreads = conf.getInt( RBFConfigKeys.DFS_ROUTER_CLIENT_THREADS_SIZE, diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/async/RouterAsyncRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/async/RouterAsyncRpcClient.java index 59f47b9582153..13f6dd3b952eb 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/async/RouterAsyncRpcClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/async/RouterAsyncRpcClient.java @@ -118,7 +118,7 @@ public RouterAsyncRpcClient(Configuration conf, @Override protected void initConcurrentCallExecutorService(Configuration conf) { - // No need to initialize the thread pool for concurrent call. + // No need to initialize the thread pool for concurrent call. } /** From b5c60c9fdaf7812bcbe64301749ca3f4cf756e66 Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Tue, 1 Apr 2025 16:53:54 +0800 Subject: [PATCH 6/9] fix javadoc. --- .../hadoop/hdfs/server/federation/router/RouterRpcClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java index 6bc8f2a71723f..a0c67958b053e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/RouterRpcClient.java @@ -282,7 +282,7 @@ public ActiveNamenodeResolver getNamenodeResolver() { /** * Get the executor service used by invoking concurrent calls. - * @return + * @return the executor service. */ @VisibleForTesting public ThreadPoolExecutor getExecutorService() { From 1e8c60b3cba8add53cf6cd9b78cc36dce789f183 Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Tue, 1 Apr 2025 20:34:28 +0800 Subject: [PATCH 7/9] trigger yetus. From 74c17bc8706cd6c703b7124d6a2e167554262ec5 Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Wed, 2 Apr 2025 10:15:44 +0800 Subject: [PATCH 8/9] remove unused methods. --- .../apache/hadoop/hdfs/server/federation/router/Router.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java index c2bbbc5700699..460535b0db4fc 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java @@ -878,10 +878,4 @@ public void setConf(Configuration conf) { this.conf = conf; } - @VisibleForTesting - public boolean isAsync() { - return getRpcServer() != null ? getRpcServer().isAsync() : - getConfig() != null ? getConfig().getBoolean(DFS_ROUTER_ASYNC_RPC_ENABLE_KEY, - DFS_ROUTER_ASYNC_RPC_ENABLE_DEFAULT) : DFS_ROUTER_ASYNC_RPC_ENABLE_DEFAULT; - } } From 3f0eaa4c0b5e144b22ddcc834bb6eda51d8b5b67 Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Wed, 2 Apr 2025 13:35:34 +0800 Subject: [PATCH 9/9] remove import --- .../org/apache/hadoop/hdfs/server/federation/router/Router.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java index 460535b0db4fc..14cc47ffa1e6e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/Router.java @@ -19,8 +19,6 @@ import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_RPC_ADDRESS_KEY; import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_NAMENODE_SERVICE_RPC_ADDRESS_KEY; -import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_ASYNC_RPC_ENABLE_DEFAULT; -import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_ASYNC_RPC_ENABLE_KEY; import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_KERBEROS_PRINCIPAL_HOSTNAME_KEY; import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_KERBEROS_PRINCIPAL_KEY; import static org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys.DFS_ROUTER_KEYTAB_FILE_KEY;