Skip to content

Commit e0db9fe

Browse files
authored
SNOW-269926-fix-timeout-issue (#612)
1 parent 372432e commit e0db9fe

File tree

4 files changed

+19
-22
lines changed

4 files changed

+19
-22
lines changed

src/snowflake/connector/connection.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -829,10 +829,12 @@ def cmd_query(self,
829829
is_file_transfer
830830
)
831831

832+
url_parameters = {REQUEST_ID: request_id}
833+
832834
ret = self.rest.request(
833-
'/queries/v1/query-request',
835+
'/queries/v1/query-request?' + urlencode(url_parameters),
834836
data, client=client, _no_results=_no_results,
835-
_include_retry_params=True, request_id=request_id)
837+
_include_retry_params=True)
836838

837839
if ret is None:
838840
ret = {'data': {}}

src/snowflake/connector/network.py

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ def close(self):
310310
logger.info("Session cleanup failed: %s", e)
311311

312312
def request(self, url, body=None, method='post', client='sfsql',
313-
_no_results=False, timeout=None, _include_retry_params=False, request_id=None):
313+
_no_results=False, timeout=None, _include_retry_params=False):
314314
if body is None:
315315
body = {}
316316
if self.master_token is None and self.token is None:
@@ -341,11 +341,11 @@ def request(self, url, body=None, method='post', client='sfsql',
341341
return self._post_request(
342342
url, headers, json.dumps(body),
343343
token=self.token, _no_results=_no_results,
344-
timeout=timeout, _include_retry_params=_include_retry_params, request_id=request_id)
344+
timeout=timeout, _include_retry_params=_include_retry_params)
345345
else:
346346
return self._get_request(
347347
url, headers, token=self.token,
348-
timeout=timeout, request_id=request_id)
348+
timeout=timeout)
349349

350350
def update_tokens(self, session_token, master_token,
351351
master_validity_in_seconds=None,
@@ -493,7 +493,7 @@ def delete_session(self, retry=False):
493493

494494
def _get_request(self, url, headers, token=None,
495495
timeout=None,
496-
socket_timeout=DEFAULT_SOCKET_CONNECT_TIMEOUT, request_id=None):
496+
socket_timeout=DEFAULT_SOCKET_CONNECT_TIMEOUT):
497497
if 'Content-Encoding' in headers:
498498
del headers['Content-Encoding']
499499
if 'Content-Length' in headers:
@@ -506,7 +506,7 @@ def _get_request(self, url, headers, token=None,
506506
url=url,
507507
)
508508
ret = self.fetch('get', full_url, headers, timeout=timeout,
509-
token=token, socket_timeout=socket_timeout, request_id=request_id)
509+
token=token, socket_timeout=socket_timeout)
510510
if ret.get('code') == SESSION_EXPIRED_GS_CODE:
511511
try:
512512
ret = self._renew_session()
@@ -526,7 +526,7 @@ def _get_request(self, url, headers, token=None,
526526
def _post_request(self, url, headers, body, token=None,
527527
timeout=None, _no_results=False, no_retry=False,
528528
socket_timeout=DEFAULT_SOCKET_CONNECT_TIMEOUT,
529-
_include_retry_params=False, request_id=None):
529+
_include_retry_params=False):
530530
full_url = '{protocol}://{host}:{port}{url}'.format(
531531
protocol=self._protocol,
532532
host=self._host,
@@ -541,7 +541,7 @@ def _post_request(self, url, headers, body, token=None,
541541
ret = self.fetch('post', full_url, headers, data=body,
542542
timeout=timeout, token=token,
543543
no_retry=no_retry, socket_timeout=socket_timeout,
544-
_include_retry_params=_include_retry_params, request_id=request_id)
544+
_include_retry_params=_include_retry_params)
545545
logger.debug(
546546
'ret[code] = {code}, after post request'.format(
547547
code=(ret.get('code', 'N/A'))))
@@ -561,9 +561,6 @@ def _post_request(self, url, headers, body, token=None,
561561
return self._post_request(
562562
url, headers, body, token=self.token, timeout=timeout)
563563

564-
if ret.get('data') and ret['data'].get('queryId'):
565-
logger.debug('Query id: {}'.format(ret['data']['queryId']))
566-
567564
if ret.get('code') == QUERY_IN_PROGRESS_ASYNC_CODE and _no_results:
568565
return ret
569566

@@ -583,7 +580,7 @@ def _post_request(self, url, headers, body, token=None,
583580

584581
return ret
585582

586-
def fetch(self, method, full_url, headers, data=None, timeout=None, request_id=None,
583+
def fetch(self, method, full_url, headers, data=None, timeout=None,
587584
**kwargs):
588585
"""Carry out API request with session management."""
589586

@@ -620,32 +617,28 @@ def add_retry_params(self, full_url):
620617
retry_ctx = RetryCtx(timeout, include_retry_params)
621618
while True:
622619
ret = self._request_exec_wrapper(
623-
session, method, full_url, headers, data, retry_ctx, request_id=request_id,
620+
session, method, full_url, headers, data, retry_ctx,
624621
**kwargs)
625622
if ret is not None:
626623
return ret
627624

628625
@staticmethod
629-
def add_request_id_and_guid(full_url, request_id):
626+
def add_request_guid(full_url):
630627
"""Adds request_guid parameter for HTTP request tracing."""
631628
parsed_url = urlparse(full_url)
632629
if not parsed_url.hostname.endswith(SNOWFLAKE_HOST_SUFFIX):
633630
return full_url
634-
request_guid = uuid.uuid4()
635631
suffix = urlencode({
636-
REQUEST_ID: request_id,
637-
REQUEST_GUID: request_guid
632+
REQUEST_GUID: str(uuid.uuid4())
638633
})
639-
if request_id:
640-
logger.debug(f'request_id: {str(request_id)}, request_guid: {str(request_guid)}')
641634
sep = '&' if parsed_url.query else '?'
642635
# url has query string already, just add fields
643636
return full_url + sep + suffix
644637

645638
def _request_exec_wrapper(
646639
self,
647640
session, method, full_url, headers, data, retry_ctx,
648-
no_retry=False, token=NO_TOKEN, request_id=None,
641+
no_retry=False, token=NO_TOKEN,
649642
**kwargs):
650643

651644
conn = self._connection
@@ -654,7 +647,7 @@ def _request_exec_wrapper(
654647

655648
start_request_thread = time.time()
656649
full_url = retry_ctx.add_retry_params(full_url)
657-
full_url = SnowflakeRestful.add_request_id_and_guid(full_url, request_id)
650+
full_url = SnowflakeRestful.add_request_guid(full_url)
658651
try:
659652
return_object = self._request_exec(
660653
session=session,

test/integ/lambda/test_basic_query.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# Copyright (c) 2012-2021 Snowflake Computing Inc. All right reserved.
55
#
66

7+
78
def test_connection(conn_cnx):
89
"""Test basic connection."""
910
with conn_cnx() as cnx:

test/integ/test_reuse_cursor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# Copyright (c) 2012-2021 Snowflake Computing Inc. All right reserved.
55
#
66

7+
78
def test_reuse_cursor(conn_cnx, db_parameters):
89
"""Ensures only the last executed command/query's result sets are returned."""
910
with conn_cnx() as cnx:

0 commit comments

Comments
 (0)