Skip to content

Commit eb6e3bd

Browse files
sfc-gh-stakedaankit-bhatnagar167
authored andcommitted
SNOW-94449: retry deletinig session when connection is closed
1 parent 1b20c73 commit eb6e3bd

File tree

2 files changed

+33
-19
lines changed

2 files changed

+33
-19
lines changed

connection.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ def __init__(self, **kwargs):
191191

192192
def __del__(self):
193193
try:
194-
self.close()
194+
self.close(retry=False)
195195
except:
196196
pass
197197

@@ -483,12 +483,13 @@ def connect(self, **kwargs):
483483
self.__set_error_attributes()
484484
self.__open_connection()
485485

486-
def close(self):
486+
def close(self, retry=True):
487487
u"""
488488
Closes the connection.
489489
"""
490490
try:
491491
if not self.rest:
492+
logger.debug(u'Rest object has been destroyed, cannot close session')
492493
return
493494

494495
# will hang if the application doesn't close the connection and
@@ -499,12 +500,13 @@ def close(self):
499500
# close telemetry first, since it needs rest to send remaining data
500501
logger.info('closed')
501502
self._telemetry.close()
502-
self.rest.delete_session()
503+
self.rest.delete_session(retry=retry)
503504
self.rest.close()
504505
self._rest = None
505506
del self.messages[:]
506-
except:
507-
pass
507+
logger.debug(u'Session is closed')
508+
except Exception as e:
509+
logger.debug(u'Exception encountered in closing connection. ignoring...: %s', e)
508510

509511
def is_closed(self):
510512
u"""

network.py

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ def _heartbeat(self):
429429
logger.error("Failed to heartbeat. code: %s, url: %s",
430430
ret.get(u'code'), url)
431431

432-
def delete_session(self):
432+
def delete_session(self, retry=False):
433433
"""
434434
Deletes the session
435435
"""
@@ -452,19 +452,31 @@ def delete_session(self):
452452
headers[HTTP_HEADER_SERVICE_NAME] = self._connection.service_name
453453

454454
body = {}
455-
try:
456-
ret = self._post_request(
457-
url, headers, json.dumps(body),
458-
token=self.token, timeout=5, no_retry=True)
459-
if not ret or ret.get(u'success'):
460-
return
461-
err = ret.get(u'message')
462-
if err is not None and ret.get(u'data'):
463-
err += ret[u'data'].get(u'errorMessage', '')
464-
# no exception is raised
465-
logger.debug('error in deleting session. ignoring...: %s', err)
466-
except Exception as e:
467-
logger.debug('error in deleting session. ignoring...: %s', e)
455+
retry_limit = 3 if retry else 1
456+
num_retries = 0
457+
should_retry = True
458+
while should_retry and (num_retries < retry_limit):
459+
try:
460+
should_retry = False
461+
ret = self._post_request(
462+
url, headers, json.dumps(body),
463+
token=self.token, timeout=5, no_retry=True)
464+
if not ret:
465+
if retry:
466+
should_retry = True
467+
else:
468+
return
469+
elif ret.get(u'success'):
470+
return
471+
err = ret.get(u'message')
472+
if err is not None and ret.get(u'data'):
473+
err += ret[u'data'].get(u'errorMessage', '')
474+
# no exception is raised
475+
logger.debug('error in deleting session. ignoring...: %s', err)
476+
except Exception as e:
477+
logger.debug('error in deleting session. ignoring...: %s', e)
478+
finally:
479+
num_retries += 1
468480

469481
def _get_request(self, url, headers, token=None,
470482
timeout=None,

0 commit comments

Comments
 (0)