Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 2 additions & 3 deletions ddtrace/debugging/_uploader.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,8 @@ def _write(self, payload: bytes, endpoint: str) -> None:
if not (200 <= resp.status < 300):
log.error("Failed to upload payload to endpoint %s: [%d] %r", endpoint, resp.status, resp.read())
meter.increment("upload.error", tags={"status": str(resp.status)})
if 400 <= resp.status < 500:
msg = "Failed to upload payload"
raise SignalUploaderError(msg)
msg = "Failed to upload payload"
raise SignalUploaderError(msg)
else:
meter.increment("upload.success")
meter.distribution("upload.size", len(payload))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
fixes:
- |
dynamic instrumentation: uploading snapshots now retries on all HTTP error codes.
32 changes: 32 additions & 0 deletions tests/debugging/test_uploader.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,35 @@ def test_uploader_full_buffer():
# wakeup to mimic next interval
uploader.periodic()
assert uploader.queue.qsize() == 0


def test_uploader_502_error():
"""Test that _write raises SignalUploaderError for 502 Bad Gateway errors."""
from ddtrace.debugging._uploader import SignalUploader
from ddtrace.debugging._uploader import SignalUploaderError

class MockResponse:
status = 502

def read(self):
return b"Bad Gateway"

class MockConnection:
def __enter__(self):
return self

def __exit__(self, *args):
pass

def request(self, *args, **kwargs):
pass

def getresponse(self):
return MockResponse()

uploader = SignalUploader(interval=LONG_INTERVAL)
uploader._connect = lambda: MockConnection()

# Assert that 502 errors raise SignalUploaderError
with pytest.raises(SignalUploaderError):
uploader._write(b'{"test": "data"}', "/debugger/v1/input")
Loading