You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by st...@apache.org on 2023/09/05 01:59:55 UTC
[impala] 03/03: IMPALA-12400: Test expected executors used for planning when no executor groups are healthy
This is an automated email from the ASF dual-hosted git repository.
stigahuang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git
commit b73bc49ea73f74afb815fe8826ec8feddf98d241
Author: Abhishek Rawat <ar...@cloudera.com>
AuthorDate: Thu Aug 24 13:21:26 2023 -0700
IMPALA-12400: Test expected executors used for planning when no executor groups are healthy
Added a custom cluster test for testing number of executors used for
planning when no executor groups are healthy. Planner should use
num executors from 'num_expected_executors' or
'expected_executor_group_sets' when executor groups aren't healthy.
Change-Id: Ib71ca0a5402c74d07ee875878f092d6d3827c6b7
Reviewed-on: http://gerrit.cloudera.org:8080/20419
Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>
---
tests/custom_cluster/test_executor_groups.py | 69 ++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
diff --git a/tests/custom_cluster/test_executor_groups.py b/tests/custom_cluster/test_executor_groups.py
index 7d250bda9..af94e68f0 100644
--- a/tests/custom_cluster/test_executor_groups.py
+++ b/tests/custom_cluster/test_executor_groups.py
@@ -1473,3 +1473,72 @@ class TestExecutorGroups(CustomClusterTestSuite):
"scheduling, F00 scheduled instance count (16) is higher than its effective "
"count (12)") in profile, profile
self.client.close_query(handle)
+
+ @pytest.mark.execute_serially
+ @CustomClusterTestSuite.with_args(num_exclusive_coordinators=1, cluster_size=1,
+ impalad_args="--num_expected_executors=7")
+ def test_expected_executors_no_healthy_groups(self):
+ """Tests expected executor group size used for planning when no executor groups
+ are healthy. Query planning should use expected executor group size from
+ 'num_expected_executors' in such cases. If 'expected_executor_group_sets' is
+ set then executor group size is obtained from that config.
+ """
+ # Create fresh client
+ self.create_impala_clients()
+
+ # Compute stats on tpcds_parquet.store_sales
+ self.execute_query_expect_success(self.client,
+ "compute stats tpcds_parquet.store_sales", query_options={'NUM_NODES': '1'})
+
+ # Query planning should use expected number hosts from 'num_expected_executors'.
+ handle = self.execute_query_async(CPU_TEST_QUERY, {
+ "COMPUTE_PROCESSING_COST": "true"})
+ sleep(1)
+ profile = self.client.get_runtime_profile(handle)
+ assert "F00:PLAN FRAGMENT [RANDOM] hosts=7" in profile, profile
+ # The query should run on default resource pool.
+ assert "Request Pool: default-pool" in profile, profile
+
+ coordinator_test_args = ''
+ # The path to resources directory which contains the admission control config files.
+ RESOURCES_DIR = os.path.join(os.environ['IMPALA_HOME'], "fe", "src", "test",
+ "resources")
+
+ # Reuse cluster configuration from _setup_three_exec_group_cluster, but only start
+ # root.large executor groups.
+ fs_allocation_path = os.path.join(RESOURCES_DIR, "fair-scheduler-3-groups.xml")
+ llama_site_path = os.path.join(RESOURCES_DIR, "llama-site-3-groups.xml")
+
+ # extra args template to start coordinator
+ extra_args_template = ("-vmodule admission-controller=3 "
+ "-expected_executor_group_sets=root.small:2,root.large:12 "
+ "-fair_scheduler_allocation_path %s "
+ "-llama_site_path %s "
+ "%s ")
+
+ # Start with a regular admission config, multiple pools, no resource limits.
+ self._restart_coordinators(num_coordinators=1,
+ extra_args=extra_args_template % (fs_allocation_path, llama_site_path,
+ coordinator_test_args))
+
+ self.create_impala_clients()
+
+ # Small query should get planned using the small executor group set's resources.
+ handle = self.execute_query_async(CPU_TEST_QUERY, {
+ "COMPUTE_PROCESSING_COST": "true"})
+ sleep(1)
+ profile = self.client.get_runtime_profile(handle)
+ assert "F00:PLAN FRAGMENT [RANDOM] hosts=2" in profile, profile
+ # The query should run on root.small resource pool.
+ assert "Request Pool: root.small" in profile, profile
+
+ # Large query should get planned using the large executor group set's resources.
+ handle = self.execute_query_async(GROUPING_TEST_QUERY, {
+ "COMPUTE_PROCESSING_COST": "true"})
+ sleep(1)
+ profile = self.client.get_runtime_profile(handle)
+ assert "F00:PLAN FRAGMENT [RANDOM] hosts=12" in profile, profile
+ # The query should run on root.large resource pool.
+ assert "Request Pool: root.large" in profile, profile
+
+ self.client.close_query(handle)