You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by vo...@apache.org on 2019/04/01 13:25:41 UTC

[drill] 02/02: DRILL-7140: RM: Drillbits fail with "No enum constant org.apache.drill.exec.resourcemgr.config.selectionpolicy.QueueSelectionPolicy.SelectionPolicy.bestfit"

This is an automated email from the ASF dual-hosted git repository.

volodymyr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git

commit 021ae66322ff8027da3c9e21fb4855aa9e5eed44
Author: Sorabh Hamirwasia <so...@apache.org>
AuthorDate: Thu Mar 28 22:10:09 2019 -0700

    DRILL-7140: RM: Drillbits fail with "No enum constant org.apache.drill.exec.resourcemgr.config.selectionpolicy.QueueSelectionPolicy.SelectionPolicy.bestfit"
    
    closes #1720
---
 .../resourcemgr/config/ResourcePoolTreeImpl.java    | 17 +++++++++--------
 .../exec/resourcemgr/TestResourcePoolTree.java      | 21 +++++++++++++++++++++
 2 files changed, 30 insertions(+), 8 deletions(-)

diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/resourcemgr/config/ResourcePoolTreeImpl.java b/exec/java-exec/src/main/java/org/apache/drill/exec/resourcemgr/config/ResourcePoolTreeImpl.java
index cc12a09..91b81f7 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/resourcemgr/config/ResourcePoolTreeImpl.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/resourcemgr/config/ResourcePoolTreeImpl.java
@@ -40,12 +40,12 @@ import static org.apache.drill.exec.resourcemgr.config.RMCommonDefaults.ROOT_POO
 public class ResourcePoolTreeImpl implements ResourcePoolTree {
   private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(ResourcePoolTreeImpl.class);
 
-  private static final String ROOT_POOL_MEMORY_SHARE_KEY = "memory";
-
-  private static final String ROOT_POOL_QUEUE_SELECTION_POLICY_KEY = "queue_selection_policy";
+  public static final String ROOT_POOL_QUEUE_SELECTION_POLICY_KEY = "queue_selection_policy";
 
   public static final String ROOT_POOL_CONFIG_KEY = "drill.exec.rm";
 
+  private static final String ROOT_POOL_MEMORY_SHARE_KEY = "memory";
+
   private final ResourcePool rootPool;
 
   private final Config rmConfig;
@@ -66,14 +66,15 @@ public class ResourcePoolTreeImpl implements ResourcePoolTree {
   private ResourcePoolTreeImpl(Config rmConfig, NodeResources totalNodeResources) throws RMConfigException {
     try {
       this.rmConfig = rmConfig;
+      final Config rootConfig = this.rmConfig.getConfig(ROOT_POOL_CONFIG_KEY);
       this.totalNodeResources = totalNodeResources;
-      this.resourceShare = this.rmConfig.hasPath(ROOT_POOL_MEMORY_SHARE_KEY) ?
-        this.rmConfig.getDouble(ROOT_POOL_MEMORY_SHARE_KEY) : ROOT_POOL_DEFAULT_MEMORY_PERCENT;
+      this.resourceShare = rootConfig.hasPath(ROOT_POOL_MEMORY_SHARE_KEY) ?
+        rootConfig.getDouble(ROOT_POOL_MEMORY_SHARE_KEY) : ROOT_POOL_DEFAULT_MEMORY_PERCENT;
       this.selectionPolicy = QueueSelectionPolicyFactory.createSelectionPolicy(
-        this.rmConfig.hasPath(ROOT_POOL_QUEUE_SELECTION_POLICY_KEY) ?
-          SelectionPolicy.valueOf(rmConfig.getString(ROOT_POOL_QUEUE_SELECTION_POLICY_KEY)) :
+        rootConfig.hasPath(ROOT_POOL_QUEUE_SELECTION_POLICY_KEY) ?
+          SelectionPolicy.valueOf(rootConfig.getString(ROOT_POOL_QUEUE_SELECTION_POLICY_KEY).trim().toUpperCase()) :
           ROOT_POOL_DEFAULT_QUEUE_SELECTION_POLICY);
-      rootPool = new ResourcePoolImpl(this.rmConfig.getConfig(ROOT_POOL_CONFIG_KEY), resourceShare, 1.0,
+      rootPool = new ResourcePoolImpl(rootConfig, resourceShare, 1.0,
         totalNodeResources, null, leafQueues);
       logger.debug("Dumping RM configuration {}", toString());
     } catch (RMConfigException ex) {
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/resourcemgr/TestResourcePoolTree.java b/exec/java-exec/src/test/java/org/apache/drill/exec/resourcemgr/TestResourcePoolTree.java
index fea132d..25ab990 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/resourcemgr/TestResourcePoolTree.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/resourcemgr/TestResourcePoolTree.java
@@ -201,6 +201,27 @@ public final class TestResourcePoolTree {
   }
 
   @Test
+  public void testSelectionPolicyLowerCase() throws Exception {
+    // leaf pool with queue
+    poolTreeConfig.put(ResourcePoolImpl.POOL_NAME_KEY, "drill");
+    poolTreeConfig.put(ResourcePoolImpl.POOL_QUEUE_KEY, queue1);
+    poolTreeConfig.put(ResourcePoolImpl.POOL_SELECTOR_KEY, tagSelectorConfig1);
+    poolTreeConfig.put(ResourcePoolTreeImpl.ROOT_POOL_QUEUE_SELECTION_POLICY_KEY, "bestfit");
+
+    Config rmConfig = ConfigFactory.empty()
+      .withValue("drill.exec.rm", ConfigValueFactory.fromMap(poolTreeConfig));
+    ResourcePoolTree poolTree = new ResourcePoolTreeImpl(rmConfig, 10000, 10, 2);
+
+    assertTrue("Root pool is not a leaf pool", poolTree.getRootPool().isLeafPool());
+    assertEquals("Root pool name is not drill", "drill", poolTree.getRootPool().getPoolName());
+    assertTrue("Root pool is not the only leaf pool", poolTree.getAllLeafQueues().size() == 1);
+    assertTrue("Root pool name is not same as leaf pool name", poolTree.getAllLeafQueues().containsKey("drill"));
+    assertFalse("Root pool should not be a default pool", poolTree.getRootPool().isDefaultPool());
+    assertTrue("Selection policy is not bestfit",
+      poolTree.getSelectionPolicyInUse().getSelectionPolicy().toString().equals("bestfit"));
+  }
+
+  @Test
   public void testTreeWithLeafAndIntermediatePool() throws Exception {
     // left leaf pool1 with tag selector
     pool1.put(ResourcePoolImpl.POOL_QUEUE_KEY, queue1);