Files
impala/tests/query_test/test_exec_time_limit.py
stiga-huang 669d74f467 IMPALA-14171: Deflake TestQueryExecTimeLimit.test_exec_time_limit_long_plan
The test expects a "SELECT..LIMIT 1" query on tpch.lineitem to finish in
2s. This could be impacted by other concurrent tests when memory
reservation is used up. This patch marks the test to run serially to
avoid the impact from other tests.

Change-Id: Ibbb2f1a34e24c83a3d2c69d2daa4dece8d94ec1e
Reviewed-on: http://gerrit.cloudera.org:8080/23351
Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
2025-08-27 15:41:21 +00:00

71 lines
2.9 KiB
Python

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
from __future__ import absolute_import
from tests.common.impala_test_suite import ImpalaTestSuite
import pytest
class TestQueryExecTimeLimit(ImpalaTestSuite):
"""Tests the exec_time_limit_s query option."""
@classmethod
def get_workload(cls):
return 'tpch'
def test_exec_time_limit_enforced(self):
"""Test that queries exceeding exec_time_limit_s are properly cancelled."""
exec_options = dict()
exec_options['exec_time_limit_s'] = "1"
query = "SELECT COUNT(*) FROM tpch.lineitem L1, tpch.lineitem L2"
try:
self.execute_query(query, exec_options)
assert False, "Query was expected to time out but succeeded."
except Exception as e:
assert "expired due to execution time limit" in str(e), (
"Unexpected exception: {}".format(e)
)
@pytest.mark.execute_serially
def test_exec_time_limit_long_plan(self):
"""Test that queries with a long planning time completing within
exec_time_limit_s succeed. Run this test serially to avoid impact from other
concurrent tests."""
exec_options = dict()
exec_options['exec_time_limit_s'] = "2"
# Set debug action to wait in the plan phase for 10s.
exec_options['debug_action'] = "plan_create:SLEEP@10000"
query = "SELECT * FROM tpch.lineitem limit 1"
result = self.execute_query(query, exec_options)
assert result.success, "Query failed unexpectedly within exec_time_limit_s."
def test_exec_time_limit_not_exceeded(self):
"""Test that queries completing within exec_time_limit_s succeed."""
exec_options = dict()
exec_options['exec_time_limit_s'] = "60"
query = "SELECT COUNT(*) FROM tpch.lineitem"
result = self.execute_query(query, exec_options)
assert result.success, "Query failed unexpectedly within exec_time_limit_s."
def test_exec_time_limit_zero(self):
"""Test that setting exec_time_limit_s to 0 disables the limit."""
exec_options = dict()
exec_options['exec_time_limit_s'] = "0"
query = "SELECT COUNT(*) FROM tpch.lineitem"
result = self.execute_query(query, exec_options)
assert result.success, "Query with exec_time_limit_s=0 failed unexpectedly."