|
94 | 94 | from .sqlstate import SQLSTATE_CONNECTION_NOT_EXISTS, SQLSTATE_FEATURE_NOT_SUPPORTED |
95 | 95 | from .telemetry import TelemetryClient |
96 | 96 | from .telemetry_oob import TelemetryService |
97 | | -from .time_util import HeartBeatTimer, get_time_millis |
| 97 | +from .time_util import ( |
| 98 | + DEFAULT_MASTER_VALIDITY_IN_SECONDS, |
| 99 | + HeartBeatTimer, |
| 100 | + get_time_millis, |
| 101 | +) |
98 | 102 | from .util_text import construct_hostname, parse_account, split_statements |
99 | 103 |
|
100 | 104 |
|
@@ -154,7 +158,7 @@ def DefaultConverterClass(): |
154 | 158 | "inject_client_pause": (0, int), # snowflake internal |
155 | 159 | "session_parameters": (None, (type(None), dict)), # snowflake session parameters |
156 | 160 | "autocommit": (None, (type(None), bool)), # snowflake |
157 | | - "client_session_keep_alive": (None, (type(None), bool)), # snowflake |
| 161 | + "client_session_keep_alive": (False, bool), # snowflake |
158 | 162 | "client_session_keep_alive_heartbeat_frequency": ( |
159 | 163 | None, |
160 | 164 | (type(None), int), |
@@ -359,11 +363,15 @@ def client_session_keep_alive(self): |
359 | 363 |
|
360 | 364 | @client_session_keep_alive.setter |
361 | 365 | def client_session_keep_alive(self, value): |
362 | | - self._client_session_keep_alive = value |
| 366 | + self._client_session_keep_alive = True if value else False |
363 | 367 |
|
364 | 368 | @property |
365 | 369 | def client_session_keep_alive_heartbeat_frequency(self): |
366 | | - return self._client_session_keep_alive_heartbeat_frequency |
| 370 | + return ( |
| 371 | + self._client_session_keep_alive_heartbeat_frequency |
| 372 | + if self._client_session_keep_alive_heartbeat_frequency |
| 373 | + else DEFAULT_MASTER_VALIDITY_IN_SECONDS / 16 |
| 374 | + ) |
367 | 375 |
|
368 | 376 | @client_session_keep_alive_heartbeat_frequency.setter |
369 | 377 | def client_session_keep_alive_heartbeat_frequency(self, value): |
@@ -665,12 +673,10 @@ def __open_connection(self): |
665 | 673 | PARAMETER_CLIENT_VALIDATE_DEFAULT_PARAMETERS |
666 | 674 | ] = True |
667 | 675 |
|
668 | | - if self.client_session_keep_alive is not None: |
669 | | - self._session_parameters[ |
670 | | - PARAMETER_CLIENT_SESSION_KEEP_ALIVE |
671 | | - ] = self._client_session_keep_alive |
| 676 | + if self.client_session_keep_alive: |
| 677 | + self._session_parameters[PARAMETER_CLIENT_SESSION_KEEP_ALIVE] = True |
672 | 678 |
|
673 | | - if self.client_session_keep_alive_heartbeat_frequency is not None: |
| 679 | + if self.client_session_keep_alive_heartbeat_frequency: |
674 | 680 | self._session_parameters[ |
675 | 681 | PARAMETER_CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY |
676 | 682 | ] = self._validate_client_session_keep_alive_heartbeat_frequency() |
@@ -698,9 +704,6 @@ def __open_connection(self): |
698 | 704 | self._password = None # ensure password won't persist |
699 | 705 |
|
700 | 706 | if self.client_session_keep_alive: |
701 | | - # This will be called after the heartbeat frequency has actually been set. |
702 | | - # By this point it should have been decided if the heartbeat has to be enabled |
703 | | - # and what would the heartbeat frequency be |
704 | 707 | self._add_heartbeat() |
705 | 708 |
|
706 | 709 | def __preprocess_auth_instance(self, auth_instance): |
@@ -1176,10 +1179,7 @@ def _validate_client_session_keep_alive_heartbeat_frequency(self): |
1176 | 1179 | """Validate and return heartbeat frequency in seconds.""" |
1177 | 1180 | real_max = int(self.rest.master_validity_in_seconds / 4) |
1178 | 1181 | real_min = int(real_max / 4) |
1179 | | - if self.client_session_keep_alive_heartbeat_frequency is None: |
1180 | | - # This is an unlikely scenario but covering it just in case. |
1181 | | - self._client_session_keep_alive_heartbeat_frequency = real_min |
1182 | | - elif self.client_session_keep_alive_heartbeat_frequency > real_max: |
| 1182 | + if self.client_session_keep_alive_heartbeat_frequency > real_max: |
1183 | 1183 | self._client_session_keep_alive_heartbeat_frequency = real_max |
1184 | 1184 | elif self.client_session_keep_alive_heartbeat_frequency < real_min: |
1185 | 1185 | self._client_session_keep_alive_heartbeat_frequency = real_min |
@@ -1215,15 +1215,8 @@ def _update_parameters( |
1215 | 1215 | else: |
1216 | 1216 | TelemetryService.get_instance().disable() |
1217 | 1217 | elif PARAMETER_CLIENT_SESSION_KEEP_ALIVE == name: |
1218 | | - # Only set if the local config is None. |
1219 | | - # Always give preference to user config. |
1220 | | - if self.client_session_keep_alive is None: |
1221 | | - self.client_session_keep_alive = value |
1222 | | - elif ( |
1223 | | - PARAMETER_CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY == name |
1224 | | - and self.client_session_keep_alive_heartbeat_frequency is None |
1225 | | - ): |
1226 | | - # Only set if local value hasn't been set already. |
| 1218 | + self.client_session_keep_alive = value |
| 1219 | + elif PARAMETER_CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY == name: |
1227 | 1220 | self.client_session_keep_alive_heartbeat_frequency = value |
1228 | 1221 | elif PARAMETER_SERVICE_NAME == name: |
1229 | 1222 | self.service_name = value |
|
0 commit comments