diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java index a8360bd..dc0c815 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java @@ -153,9 +153,8 @@ /** Used to schedule timeouts for some async operations. */ private final ScheduledExecutorService timeoutPool; - // The initial plan initalization future, to wait for the plan to apply during setup. - private ListenableFuture initRpFuture; private LlapPluginEndpointClientImpl amComm; + private WMFullResourcePlan initialRP; private static final FutureCallback FATAL_ERROR_CALLBACK = new FutureCallback() { @Override @@ -190,7 +189,7 @@ public static WorkloadManager create(String yarnQueue, HiveConf conf, WMFullReso this.yarnQueue = yarnQueue; this.conf = conf; this.totalQueryParallelism = determineQueryParallelism(plan); - this.initRpFuture = this.updateResourcePlanAsync(plan); + this.initialRP = plan; this.amComm = amComm; if (this.amComm != null) { this.amComm.init(conf); @@ -234,7 +233,9 @@ public void start() throws Exception { } allocationManager.start(); wmThread.start(); - initRpFuture.get(); // Wait for the initial resource plan to be applied. + + // apply initial RP after starting WM thread for proper initialization of user pool mappings + this.updateResourcePlanAsync(initialRP).get(); // Wait for the initial resource plan to be applied. final long triggerValidationIntervalMs = HiveConf.getTimeVar(conf, HiveConf.ConfVars.HIVE_TRIGGER_VALIDATION_INTERVAL_MS, TimeUnit.MILLISECONDS); @@ -1843,7 +1844,7 @@ public String toString() { boolean isManaged(MappingInput input) { // This is always replaced atomically, so we don't care about concurrency here. - return userPoolMapping.mapSessionToPoolName(input) != null; + return userPoolMapping != null && userPoolMapping.mapSessionToPoolName(input) != null; } private static enum KillQueryResult { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManagerFederation.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManagerFederation.java index 315a2dc..0a9fa72 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManagerFederation.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManagerFederation.java @@ -51,6 +51,7 @@ public static TezSessionState getSession(TezSessionState session, HiveConf conf, desiredCounters.addAll(wm.getTriggerCounterNames(result)); return result; } catch (WorkloadManager.NoPoolMappingException ex) { + LOG.info("NoPoolMappingException thrown. Getting an un-managed session.."); return getUnmanagedSession(session, conf, desiredCounters, isUnmanagedLlapMode); } }