mirror of
https://github.com/apache/impala.git
synced 2026-01-08 21:03:01 -05:00
In 2.5 we added the ability to set per-pool default query options. A string of key-value pairs can be specified with a pool configuration. However, if any options fail to parse, then all the options are ignored. We want that behavior (and returning an error) when parsing the process-wide default query options on startup and when parsing the options sent from a client (e.g. in beeswax server) because an error can be returned immediately for the triggering action at that time (i.e. starting the impalad or submitting a query with the options set). This behavior is bad for the pool default query options because (a) the configuration is set by the administrator and there's nothing we can do until a query is submitted and (b) one invalid option shouldn't mean that other valid options aren't set. Change-Id: If04733b775963091b0314c65286df126fd812358 Reviewed-on: http://gerrit.cloudera.org:8080/3056 Reviewed-by: Dan Hecht <dhecht@cloudera.com> Tested-by: Internal Jenkins
65 lines
2.9 KiB
Python
65 lines
2.9 KiB
Python
# Copyright (c) 2016 Cloudera, Inc. All rights reserved.
|
|
#
|
|
# Licensed 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.
|
|
#
|
|
# Tests for exercising query options that can be set in various ways.
|
|
# TODO: Add custom cluster tests for process default_query_options, but we need
|
|
# to make it easier to handle startup failures (right now it waits 60sec to
|
|
# timeout).
|
|
|
|
from ImpalaService import ImpalaHiveServer2Service
|
|
from TCLIService import TCLIService
|
|
|
|
from tests.beeswax.impala_beeswax import ImpalaBeeswaxException
|
|
from tests.common.custom_cluster_test_suite import CustomClusterTestSuite
|
|
from tests.common.impala_test_suite import ImpalaTestSuite
|
|
from tests.common.test_dimensions import create_exec_option_dimension
|
|
from tests.hs2.hs2_test_suite import HS2TestSuite, needs_session, operation_id_to_query_id
|
|
|
|
class TestQueryOptions(ImpalaTestSuite):
|
|
@classmethod
|
|
def get_workload(cls):
|
|
return 'functional-query'
|
|
|
|
@classmethod
|
|
def add_test_dimensions(cls):
|
|
super(TestQueryOptions, cls).add_test_dimensions()
|
|
cls.TestMatrix.add_constraint(lambda v:\
|
|
v.get_value('table_format').file_format == 'text')
|
|
cls.TestMatrix.add_dimension(create_exec_option_dimension(
|
|
cluster_sizes=[0], disable_codegen_options=[False], batch_sizes=[0]))
|
|
|
|
def test_set_invalid_query_option(self, vector):
|
|
ex = self.execute_query_expect_failure(self.client, "select 1", {'foo':'bar'})
|
|
assert "invalid query option: foo" in str(ex).lower()
|
|
|
|
class TestQueryOptionsHS2(HS2TestSuite):
|
|
@classmethod
|
|
def add_test_dimensions(cls):
|
|
super(TestQueryOptions, cls).add_test_dimensions()
|
|
cls.TestMatrix.add_constraint(lambda v:\
|
|
v.get_value('table_format').file_format == 'text')
|
|
cls.TestMatrix.add_dimension(create_exec_option_dimension(
|
|
cluster_sizes=[0], disable_codegen_options=[False], batch_sizes=[0]))
|
|
|
|
@needs_session()
|
|
def test_set_invalid_query_option(self):
|
|
"""Tests that GetOperationStatus returns a valid result for a running query"""
|
|
execute_statement_req = TCLIService.TExecuteStatementReq()
|
|
execute_statement_req.sessionHandle = self.session_handle
|
|
execute_statement_req.confOverlay = {"foo":"bar"}
|
|
execute_statement_req.statement = "select 1"
|
|
execute_statement_resp = self.hs2_client.ExecuteStatement(execute_statement_req)
|
|
TestQueryOptionsHS2.check_response(execute_statement_resp,
|
|
TCLIService.TStatusCode.ERROR_STATUS, "Invalid query option: foo")
|