mirror of
https://github.com/apache/impala.git
synced 2026-01-10 09:00:16 -05:00
Adds several "failpoint" tests to test_result_spooling.py. These tests use debug_actions spread throughout buffered-plan-root-sink.cc to trigger failures while result spooling is running. The tests validate that all queries gracefully fail and do not cause any impalad crashes. Fixed a few bugs that came up when adding these tests, as well as the crash reported in IMPALA-8924 (which is now covered by the failpoint tests added in this patch). The first bug fixed was a DCHECK in SpillableRowBatchQueue::IsEmpty() where the method was being called after the queue had been closed. The fix is to only call IsEmpty() if IsOpen() returns true. The second bug was an issue in the cancellation path where BufferedPlanRootSink::GetNext would enter an infinite loop if the query was cancelled and then GetNext was called. The fix is to check the cancellation state in the outer while loop. Testing: * Added new tests to test_result_spooling.py * Ran core tests Change-Id: Ib96f797bc8a5ba8baf9fb28abd1f645345bbe932 Reviewed-on: http://gerrit.cloudera.org:8080/14214 Reviewed-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com> Tested-by: Impala Public Jenkins <impala-public-jenkins@cloudera.com>
37 lines
1.9 KiB
Python
37 lines
1.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 tests.common.impala_test_suite import ImpalaTestSuite, LOG
|
|
|
|
|
|
def execute_query_expect_debug_action_failure(impala_test_suite, query, vector):
|
|
"""Executes the given query with the configured debug_action and asserts that the
|
|
query fails. Removes the debug_action from the exec options, re-runs the query, and
|
|
assert that it succeeds."""
|
|
assert 'debug_action' in vector.get_value('exec_option')
|
|
# Run the query with the given debug_action and assert that the query fails.
|
|
# execute_query_expect_failure either returns the client exception thrown when executing
|
|
# the query, or the result of the query if it failed but did the client did not throw an
|
|
# exception. Either way, log the result.
|
|
LOG.debug(ImpalaTestSuite.execute_query_expect_failure(
|
|
impala_test_suite.client, query, vector.get_value('exec_option')))
|
|
|
|
# Assert that the query can be run without the debug_action.
|
|
del vector.get_value('exec_option')['debug_action']
|
|
result = impala_test_suite.execute_query(query, vector.get_value('exec_option'))
|
|
assert result.success, "Failed to run {0} without debug action".format(query)
|