Skip to content

Commit c14dff9

Browse files
NO-SNOW: Send telemetry when closing connection (#2607)
1 parent cf55e99 commit c14dff9

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

src/snowflake/connector/connection.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1158,7 +1158,8 @@ def close(self, retry: bool = True) -> None:
11581158

11591159
# close telemetry first, since it needs rest to send remaining data
11601160
logger.debug("closed")
1161-
self._telemetry.close(send_on_close=bool(retry and self.telemetry_enabled))
1161+
if self.telemetry_enabled:
1162+
self._telemetry.close(retry=retry)
11621163
if (
11631164
self._all_async_queries_finished()
11641165
and not self._server_session_keep_alive

src/snowflake/connector/telemetry.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ def try_add_log_to_batch(self, telemetry_data: TelemetryData) -> None:
155155
except Exception:
156156
logger.warning("Failed to add log to telemetry.", exc_info=True)
157157

158-
def send_batch(self) -> None:
158+
def send_batch(self, retry: bool = False) -> None:
159159
if self.is_closed:
160160
raise Exception("Attempted to send batch when TelemetryClient is closed")
161161
elif not self._enabled:
@@ -186,6 +186,7 @@ def send_batch(self) -> None:
186186
method="post",
187187
client=None,
188188
timeout=5,
189+
_no_retry=not retry,
189190
)
190191
if not ret["success"]:
191192
logger.info(
@@ -204,11 +205,10 @@ def send_batch(self) -> None:
204205
def is_closed(self) -> bool:
205206
return self._rest is None
206207

207-
def close(self, send_on_close: bool = True) -> None:
208+
def close(self, retry: bool = False) -> None:
208209
if not self.is_closed:
209210
logger.debug("Closing telemetry client.")
210-
if send_on_close:
211-
self.send_batch()
211+
self.send_batch(retry=retry)
212212
self._rest = None
213213

214214
def disable(self) -> None:

test/unit/test_telemetry.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,30 @@ def test_telemetry_send_batch_disabled():
157157
assert rest_call.call_count == 0
158158

159159

160+
def test_telemetry_send_batch_with_retry_flag():
161+
"""Tests that send_batch respects the retry parameter."""
162+
client, rest_call = get_client_and_mock()
163+
164+
client.add_log_to_batch(snowflake.connector.telemetry.TelemetryData({}, 2000))
165+
166+
# Test with retry=True
167+
client.send_batch(retry=True)
168+
169+
assert rest_call.call_count == 1
170+
# Verify _no_retry parameter is False when retry=True
171+
call_kwargs = rest_call.call_args[1]
172+
assert call_kwargs["_no_retry"] is False
173+
174+
# Add another log and test with retry=False (default)
175+
client.add_log_to_batch(snowflake.connector.telemetry.TelemetryData({}, 3000))
176+
client.send_batch(retry=False)
177+
178+
assert rest_call.call_count == 2
179+
# Verify _no_retry parameter is True when retry=False
180+
call_kwargs = rest_call.call_args[1]
181+
assert call_kwargs["_no_retry"] is True
182+
183+
160184
def test_generate_telemetry_data_dict_with_basic_info():
161185
assert snowflake.connector.telemetry.generate_telemetry_data_dict() == {
162186
snowflake.connector.telemetry.TelemetryField.KEY_DRIVER_TYPE.value: CLIENT_NAME,

0 commit comments

Comments
 (0)