瀏覽代碼

HDFS-15863. RBF: Validation message to be corrected in FairnessPolicyController. Contributed by Renukaprasad C.

He Xiaoqiao 4 年之前
父節點
當前提交
da4ceba4aa

+ 23 - 12
hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/fairness/StaticRouterRpcFairnessPolicyController.java

@@ -42,6 +42,10 @@ public class StaticRouterRpcFairnessPolicyController extends
   private static final Logger LOG =
       LoggerFactory.getLogger(StaticRouterRpcFairnessPolicyController.class);
 
+  public static final String ERROR_MSG = "Configured handlers "
+      + DFS_ROUTER_HANDLER_COUNT_KEY + '='
+      + " %d is less than the minimum required handlers %d";
+
   public StaticRouterRpcFairnessPolicyController(Configuration conf) {
     init(conf);
   }
@@ -65,15 +69,13 @@ public class StaticRouterRpcFairnessPolicyController extends
 
     // Insert the concurrent nameservice into the set to process together
     allConfiguredNS.add(CONCURRENT_NS);
+    validateHandlersCount(conf, handlerCount, allConfiguredNS);
     for (String nsId : allConfiguredNS) {
       int dedicatedHandlers =
           conf.getInt(DFS_ROUTER_FAIR_HANDLER_COUNT_KEY_PREFIX + nsId, 0);
       LOG.info("Dedicated handlers {} for ns {} ", dedicatedHandlers, nsId);
       if (dedicatedHandlers > 0) {
         handlerCount -= dedicatedHandlers;
-        // Total handlers should not be less than sum of dedicated
-        // handlers.
-        validateCount(nsId, handlerCount, 0);
         insertNameServiceWithPermits(nsId, dedicatedHandlers);
         logAssignment(nsId, dedicatedHandlers);
       } else {
@@ -88,8 +90,6 @@ public class StaticRouterRpcFairnessPolicyController extends
       int handlersPerNS = handlerCount / unassignedNS.size();
       LOG.info("Handlers available per ns {}", handlersPerNS);
       for (String nsId : unassignedNS) {
-        // Each NS should have at least one handler assigned.
-        validateCount(nsId, handlersPerNS, 1);
         insertNameServiceWithPermits(nsId, handlersPerNS);
         logAssignment(nsId, handlersPerNS);
       }
@@ -112,15 +112,26 @@ public class StaticRouterRpcFairnessPolicyController extends
         count, nsId);
   }
 
-  private static void validateCount(String nsId, int handlers, int min) throws
-      IllegalArgumentException {
-    if (handlers < min) {
-      String msg =
-          "Available handlers " + handlers +
-          " lower than min " + min +
-          " for nsId " + nsId;
+  private void validateHandlersCount(Configuration conf, int handlerCount,
+                                     Set<String> allConfiguredNS) {
+    int totalDedicatedHandlers = 0;
+    for (String nsId : allConfiguredNS) {
+      int dedicatedHandlers =
+              conf.getInt(DFS_ROUTER_FAIR_HANDLER_COUNT_KEY_PREFIX + nsId, 0);
+      if (dedicatedHandlers > 0) {
+        // Total handlers should not be less than sum of dedicated handlers.
+        totalDedicatedHandlers += dedicatedHandlers;
+      } else {
+        // Each NS should have at least one handler assigned.
+        totalDedicatedHandlers++;
+      }
+    }
+    if (totalDedicatedHandlers > handlerCount) {
+      String msg = String.format(ERROR_MSG, handlerCount,
+          totalDedicatedHandlers);
       LOG.error(msg);
       throw new IllegalArgumentException(msg);
     }
   }
+
 }

+ 11 - 7
hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/hdfs/server/federation/fairness/TestRouterRpcFairnessPolicyController.java

@@ -85,30 +85,31 @@ public class TestRouterRpcFairnessPolicyController {
   @Test
   public void testAllocationErrorWithZeroHandlers() {
     Configuration conf = createConf(0);
-    verifyInstantiationError(conf);
+    verifyInstantiationError(conf, 0, 3);
   }
 
   @Test
   public void testAllocationErrorForLowDefaultHandlers() {
     Configuration conf = createConf(1);
-    verifyInstantiationError(conf);
+    verifyInstantiationError(conf, 1, 3);
   }
 
   @Test
   public void testAllocationErrorForLowDefaultHandlersPerNS() {
     Configuration conf = createConf(1);
     conf.setInt(DFS_ROUTER_FAIR_HANDLER_COUNT_KEY_PREFIX + "concurrent", 1);
-    verifyInstantiationError(conf);
+    verifyInstantiationError(conf, 1, 3);
   }
 
   @Test
   public void testAllocationErrorForLowPreconfiguredHandlers() {
     Configuration conf = createConf(1);
     conf.setInt(DFS_ROUTER_FAIR_HANDLER_COUNT_KEY_PREFIX + "ns1", 2);
-    verifyInstantiationError(conf);
+    verifyInstantiationError(conf, 1, 4);
   }
 
-  private void verifyInstantiationError(Configuration conf) {
+  private void verifyInstantiationError(Configuration conf, int handlerCount,
+      int totalDedicatedHandlers) {
     GenericTestUtils.LogCapturer logs = GenericTestUtils.LogCapturer
         .captureLogs(LoggerFactory.getLogger(
             StaticRouterRpcFairnessPolicyController.class));
@@ -117,8 +118,11 @@ public class TestRouterRpcFairnessPolicyController {
     } catch (IllegalArgumentException e) {
       // Ignore the exception as it is expected here.
     }
-    assertTrue("Should contain error message",
-        logs.getOutput().contains("lower than min"));
+    String errorMsg = String.format(
+        StaticRouterRpcFairnessPolicyController.ERROR_MSG, handlerCount,
+        totalDedicatedHandlers);
+    assertTrue("Should contain error message: " + errorMsg,
+        logs.getOutput().contains(errorMsg));
   }
 
   private RouterRpcFairnessPolicyController getFairnessPolicyController(