Skip to content

Commit 474bdfc

Browse files
committed
retry tests fix
Signed-off-by: Sai Shree Pradhan <saishree.pradhan@databricks.com>
1 parent f307a5f commit 474bdfc

File tree

3 files changed

+52
-66
lines changed

3 files changed

+52
-66
lines changed

src/databricks/sql/client.py

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -252,17 +252,28 @@ def read(self) -> Optional[OAuthToken]:
252252
self.client_telemetry_enabled and self.server_telemetry_enabled
253253
)
254254

255-
self.session = Session(
256-
server_hostname,
257-
http_path,
258-
http_headers,
259-
session_configuration,
260-
catalog,
261-
schema,
262-
_use_arrow_native_complex_types,
263-
**kwargs,
264-
)
265-
self.session.open()
255+
try:
256+
self.session = Session(
257+
server_hostname,
258+
http_path,
259+
http_headers,
260+
session_configuration,
261+
catalog,
262+
schema,
263+
_use_arrow_native_complex_types,
264+
**kwargs,
265+
)
266+
self.session.open()
267+
except Exception as e:
268+
TelemetryClientFactory.connection_failure_log(
269+
error_name="Exception",
270+
error_message=str(e),
271+
host_url=server_hostname,
272+
http_path=http_path,
273+
port=self.session.port,
274+
user_agent=self.session.useragent_header if self.session else None,
275+
)
276+
raise e
266277

267278
self.use_inline_params = self._set_use_inline_params_with_warning(
268279
kwargs.get("use_inline_params", False)

src/databricks/sql/session.py

Lines changed: 18 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from databricks.sql.backend.thrift_backend import ThriftDatabricksClient
1111
from databricks.sql.backend.databricks_client import DatabricksClient
1212
from databricks.sql.backend.types import SessionId
13-
from databricks.sql.telemetry.telemetry_client import TelemetryClientFactory
1413

1514
logger = logging.getLogger(__name__)
1615

@@ -42,18 +41,9 @@ def __init__(
4241
self.schema = schema
4342
self.http_path = http_path
4443

45-
try:
46-
self.auth_provider = get_python_sql_connector_auth_provider(
47-
server_hostname, **kwargs
48-
)
49-
except Exception as e:
50-
TelemetryClientFactory.connection_failure_log(
51-
error_name="Exception",
52-
error_message=str(e),
53-
host_url=server_hostname,
54-
http_path=http_path,
55-
port=self.port,
56-
)
44+
self.auth_provider = get_python_sql_connector_auth_provider(
45+
server_hostname, **kwargs
46+
)
5747

5848
user_agent_entry = kwargs.get("user_agent_entry")
5949
if user_agent_entry is None:
@@ -85,46 +75,25 @@ def __init__(
8575
tls_client_cert_key_password=kwargs.get("_tls_client_cert_key_password"),
8676
)
8777

88-
try:
89-
self.backend: DatabricksClient = ThriftDatabricksClient(
90-
self.host,
91-
self.port,
92-
http_path,
93-
(http_headers or []) + base_headers,
94-
self.auth_provider,
95-
ssl_options=self._ssl_options,
96-
_use_arrow_native_complex_types=_use_arrow_native_complex_types,
97-
**kwargs,
98-
)
99-
except Exception as e:
100-
TelemetryClientFactory.connection_failure_log(
101-
error_name="Exception",
102-
error_message=str(e),
103-
host_url=server_hostname,
104-
http_path=http_path,
105-
port=self.port,
106-
user_agent=self.useragent_header,
107-
)
78+
self.backend: DatabricksClient = ThriftDatabricksClient(
79+
self.host,
80+
self.port,
81+
http_path,
82+
(http_headers or []) + base_headers,
83+
self.auth_provider,
84+
ssl_options=self._ssl_options,
85+
_use_arrow_native_complex_types=_use_arrow_native_complex_types,
86+
**kwargs,
87+
)
10888

10989
self.protocol_version = None
11090

11191
def open(self):
112-
try:
113-
self._session_id = self.backend.open_session(
114-
session_configuration=self.session_configuration,
115-
catalog=self.catalog,
116-
schema=self.schema,
117-
)
118-
except Exception as e:
119-
TelemetryClientFactory.connection_failure_log(
120-
error_name="Exception",
121-
error_message=str(e),
122-
host_url=self.host,
123-
http_path=self.http_path,
124-
port=self.port,
125-
user_agent=self.useragent_header,
126-
)
127-
raise e
92+
self._session_id = self.backend.open_session(
93+
session_configuration=self.session_configuration,
94+
catalog=self.catalog,
95+
schema=self.schema,
96+
)
12897

12998
self.protocol_version = self.get_protocol_version(self._session_id)
13099
self.is_open = True

tests/e2e/common/retry_test_mixins.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ class PySQLRetryTestsMixin:
127127
"_retry_delay_default": 0.5,
128128
}
129129

130-
def test_retry_urllib3_settings_are_honored(self):
130+
@patch("databricks.sql.telemetry.telemetry_client.TelemetryClient._send_telemetry")
131+
def test_retry_urllib3_settings_are_honored(self, mock_send_telemetry):
131132
"""Databricks overrides some of urllib3's configuration. This tests confirms that what configuration
132133
we DON'T override is preserved in urllib3's internals
133134
"""
@@ -147,7 +148,8 @@ def test_retry_urllib3_settings_are_honored(self):
147148
assert rp.read == 11
148149
assert rp.redirect == 12
149150

150-
def test_oserror_retries(self):
151+
@patch("databricks.sql.telemetry.telemetry_client.TelemetryClient._send_telemetry")
152+
def test_oserror_retries(self, mock_send_telemetry):
151153
"""If a network error occurs during make_request, the request is retried according to policy"""
152154
with patch(
153155
"urllib3.connectionpool.HTTPSConnectionPool._validate_conn",
@@ -159,7 +161,8 @@ def test_oserror_retries(self):
159161

160162
assert mock_validate_conn.call_count == 6
161163

162-
def test_retry_max_count_not_exceeded(self):
164+
@patch("databricks.sql.telemetry.telemetry_client.TelemetryClient._send_telemetry")
165+
def test_retry_max_count_not_exceeded(self, mock_send_telemetry):
163166
"""GIVEN the max_attempts_count is 5
164167
WHEN the server sends nothing but 429 responses
165168
THEN the connector issues six request (original plus five retries)
@@ -171,7 +174,8 @@ def test_retry_max_count_not_exceeded(self):
171174
pass
172175
assert mock_obj.return_value.getresponse.call_count == 6
173176

174-
def test_retry_exponential_backoff(self):
177+
@patch("databricks.sql.telemetry.telemetry_client.TelemetryClient._send_telemetry")
178+
def test_retry_exponential_backoff(self, mock_send_telemetry):
175179
"""GIVEN the retry policy is configured for reasonable exponential backoff
176180
WHEN the server sends nothing but 429 responses with retry-afters
177181
THEN the connector will use those retry-afters values as floor
@@ -338,7 +342,8 @@ def test_retry_abort_close_operation_on_404(self, caplog):
338342
"Operation was canceled by a prior request" in caplog.text
339343
)
340344

341-
def test_retry_max_redirects_raises_too_many_redirects_exception(self):
345+
@patch("databricks.sql.telemetry.telemetry_client.TelemetryClient._send_telemetry")
346+
def test_retry_max_redirects_raises_too_many_redirects_exception(self, mock_send_telemetry):
342347
"""GIVEN the connector is configured with a custom max_redirects
343348
WHEN the DatabricksRetryPolicy is created
344349
THEN the connector raises a MaxRedirectsError if that number is exceeded
@@ -362,7 +367,8 @@ def test_retry_max_redirects_raises_too_many_redirects_exception(self):
362367
# Total call count should be 2 (original + 1 retry)
363368
assert mock_obj.return_value.getresponse.call_count == expected_call_count
364369

365-
def test_retry_max_redirects_unset_doesnt_redirect_forever(self):
370+
@patch("databricks.sql.telemetry.telemetry_client.TelemetryClient._send_telemetry")
371+
def test_retry_max_redirects_unset_doesnt_redirect_forever(self, mock_send_telemetry):
366372
"""GIVEN the connector is configured without a custom max_redirects
367373
WHEN the DatabricksRetryPolicy is used
368374
THEN the connector raises a MaxRedirectsError if that number is exceeded

0 commit comments

Comments
 (0)