Anubhav Jindal created IMPALA-15449:
---------------------------------------

             Summary: Impala User/group quota XML can define unusable pools; 
Improve Impala to reject distributed queries at submit when no executor group 
matches (not queue timeout)
                 Key: IMPALA-15449
                 URL: https://issues.apache.org/jira/browse/IMPALA-15449
             Project: IMPALA
          Issue Type: Improvement
            Reporter: Anubhav Jindal
            Assignee: Anubhav Jindal


h2. Summary

With a rich interface for user/group quotas, operators edit fair-scheduler XML 
directly. This can lead to the mistake of misconfiguring “bad” request pools 
(pools that cannot get matching executor groups)

Impala should reject distributed queries attempting to use these bad pools at 
submit time with a clear error instead of current behaviour of queueing them 
until pool-queue-timeout
h2. Description
h3. Terminology: distributed query

Use this scope in implementation and acceptance tests.

 
 
 
||*Term*||*Meaning*||
|*Distributed query*|Admission schedules the query on *executor* impalads after 
selecting an *executor group* (prefix {*}{resolved_pool}-{*}). Examples: 
typical table SELECT, TPCH, QE longsleep. *This Jira applies here.*|
|*Coordinator-only query*|Pool has *<onlyCoordinators>true</onlyCoordinators>* 
(or equivalent path); *no* executor-group lookup for {pool}-*. *Do not* 
fail-fast for missing executor groups on this path.|
|*Executor group*|Membership name registered by executors (e.g. 
root.default-group-000, root.group-set-custom-1-group-000) via 
{*}--executor_groups{*}.|
 
 
 
h3. Problem

*User/group quotas* encourage direct edits to *fair-scheduler.xml* (new queues, 
userQueryLimit, nested pools). It is easy to add a *valid* xml pool path that 
*cannot* receive executors on the VW type in use—for example a sibling of 
root.default on {*}non-WAAS{*}, or a WAAS pool name with no matching 
{*}groupSetPrefix{*}. Users assume XML-defined pools are runnable; instead, 
*distributed queries* often *queue until timeout* with {*}0 running{*}, which 
looks like a broken quota or hung query rather than misconfiguration.

 

When a *distributed query’s* *resolved* REQUEST_POOL exists in XML but *no 
executor group* is registered whose name matches the Impala prefix rule 
{pool}-, admission currently *queues* the query (e.g. “Waiting for executors to 
start”) until *impala.admission-control.pool-queue-timeout-ms.\{pool}* (often 
600s). Clients and operators experience a {*}timeout{*}, not a clear 
configuration/routing error.

 

On *non-WAAS* VW, only *root.default-** (e.g. root.default-group-000) is 
provisioned. Any other pool path that exists in XML (sibling or nested) hits 
this behavior today.

 

On *WAAS* VW, each *groupSetPrefix* (e.g. root.group-set-custom-1) must align 
with fair-scheduler queue paths *and* live executor registration 
(root.group-set-custom-1-group-000). A pool defined in XML *without* a matching 
group set on the VW—or a *REQUEST_POOL* that resolves to such a pool—has the 
same queue-until-timeout failure mode.

 

This is especially painful for *user/group quota* and pool routing work: tests 
and users expect *quota rejection* or immediate “bad pool” feedback, not a long 
queue with *0 running* on that pool in /admission?json.
h3. Proposed behavior

*Preserve current behaviour at Impala VW start:* do not fail start when 
fair-scheduler XML defines pool paths that have *no matching executor group* on 
this VW (typical with user/group quota edits; executor groups also register 
after start). *Change query-time behaviour:* when a *distributed query* (see 
{*}Terminology{*}) reaches admission, the resolved pool has {*}no eligible 
executor group{*}, and the case is *not* a transient scale-up/wake on a pool 
that can receive executors on this VW:

 
 # *Reject at submit* (HS2 / impala-shell / JDBC) with an explicit error.

 # Message should name {*}resolved pool{*}, *VW type* (non-WAAS vs WAAS) if 
helpful, and *actionable guidance* (e.g. use root.default, align fair-scheduler 
queue path with {*}groupSetPrefix{*}, or add/register the matching executor 
group set on WAAS).

 # Distinguish from *user quota* rejection and from *scale-up wait* on 
*root.default* (executors temporarily 0 while warehouse wakes).

 

Apply on *coordinator* and *Global Admission Control (admissiond)* paths 
consistently.
h3. Scope
 * *In scope:* Permanent “no matching executor group for resolved pool {*}P{*}” 
on a *distributed query* → reject at submit (not queue until 
pool-queue-timeout-ms).

 * *In scope:* Same logic on *WAAS* when *P* is in fair-scheduler but has no 
matching *groupSetPrefix* / registered *P-** executor group.

 * *Out of scope:* Failing VW *start* when fair-scheduler defines pool paths 
with no matching executor group (preserve current start behaviour).

 * *Out of scope (separate stories):* Silent placement fallthrough to 
root.default when requested pool name does not exist; CDW fallback from 
"default" to root.default-group-000; parent-prefix inheritance for nested pools.

 
h2. Steps to reproduce (non-WAAS)

*Environment:* Standard (non-WAAS) Impala VW, running, at least one healthy 
root.default-group-000.

 
 # Apply *nonwaas_with-sibling-user-rule.xml* (coordinator + admissiond if 
GAC). 

 # SET REQUEST_POOL='root.user-rule'; submit a *distributed query* (see 
*Terminology* above)—not a coordinator-only pool.

 # *Actual today:* Queue; *0 running* on root.user-rule in /admission?json 
until pool-queue timeout.

 # *Expected:* Immediate rejection naming root.user-rule and non-WAAS executor 
groups.

 

Alternate XML: *nonwaas_with-nested-pool1.xml* with 
REQUEST_POOL='root.default.pool1'.

 
h2. Steps to reproduce (WAAS)

*Environment:* WAAS VW whose expected_executor_group_sets includes small, 
custom-1, and large (not custom-2).

 
 # Apply *waas_with-orphan-pool.xml* (adds *root.group-set-custom-2* in XML 
only). 

 # SET REQUEST_POOL='root.group-set-custom-2'; submit a *distributed query* 
(see *Terminology* above).

 # *Actual today:* Queue until timeout (no root.group-set-custom-2-* executor 
group).

 # *Expected:* Immediate rejection (pool vs groupSetPrefix / backends).

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to