Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 26 additions & 1 deletion apps/beeswax/src/beeswax/server/hive_server2_lib.py
Original file line number Diff line number Diff line change
Expand Up @@ -1069,6 +1069,14 @@ def execute_async_query(self, query, statement=0, session=None):
def execute_statement(self, statement, max_rows=1000, configuration=None, orientation=TFetchOrientation.FETCH_NEXT, session=None):
if configuration is None:
configuration = {}

# Ensure proxy user is set for every statement execution to maintain consistent impersonation
if self.query_server["server_name"] == "beeswax" or (
self.query_server.get("is_compute") and self.query_server.get("dialect") == "hive"
):
if self.user and "hive.server2.proxy.user" not in configuration:
configuration["hive.server2.proxy.user"] = self.user.username

if self.query_server.get('dialect') == 'impala' and self.query_server['QUERY_TIMEOUT_S'] > 0:
configuration['QUERY_TIMEOUT_S'] = str(self.query_server['QUERY_TIMEOUT_S'])

Expand All @@ -1081,6 +1089,14 @@ def execute_statement(self, statement, max_rows=1000, configuration=None, orient
def execute_async_statement(self, statement=None, thrift_function=None, thrift_request=None, conf_overlay=None, session=None):
if conf_overlay is None:
conf_overlay = {}

# Ensure proxy user is set for every statement execution to maintain consistent impersonation
if self.query_server["server_name"] == "beeswax" or (
self.query_server.get("is_compute") and self.query_server.get("dialect") == "hive"
):
if self.user and "hive.server2.proxy.user" not in conf_overlay:
conf_overlay["hive.server2.proxy.user"] = self.user.username

if thrift_function is None:
thrift_function = self._client.ExecuteStatement
if thrift_request is None:
Expand Down Expand Up @@ -1261,7 +1277,16 @@ def get_configuration(self, session=None):
return configuration

def _get_query_configuration(self, query):
return dict([(setting['key'], setting['value']) for setting in query.settings])
configuration = dict([(setting["key"], setting["value"]) for setting in query.settings])

# Ensure proxy user is set for every statement execution to maintain consistent impersonation
if self.query_server["server_name"] == "beeswax" or (
self.query_server.get("is_compute") and self.query_server.get("dialect") == "hive"
):
if self.user:
configuration["hive.server2.proxy.user"] = self.user.username

return configuration

def get_functions(self):
'''
Expand Down