From 51dccfcdbda0d0786aacc7080407e72f23473714 Mon Sep 17 00:00:00 2001 From: Markus Unterwaditzer Date: Fri, 17 Jan 2020 15:11:13 +0100 Subject: [PATCH 1/3] fix: Enforce max queue length in transport --- sentry_sdk/worker.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sentry_sdk/worker.py b/sentry_sdk/worker.py index 0efcc68167..3a1f6ccb04 100644 --- a/sentry_sdk/worker.py +++ b/sentry_sdk/worker.py @@ -22,7 +22,7 @@ class BackgroundWorker(object): def __init__(self): # type: () -> None check_thread_support() - self._queue = queue.Queue(-1) # type: Queue[Any] + self._queue = queue.Queue(30) # type: Queue[Any] self._lock = Lock() self._thread = None # type: Optional[Thread] self._thread_for_pid = None # type: Optional[int] @@ -89,7 +89,7 @@ def kill(self): logger.debug("background worker got kill request") with self._lock: if self._thread: - self._queue.put_nowait(_TERMINATOR) + self._queue.put(_TERMINATOR) self._thread = None self._thread_for_pid = None @@ -114,7 +114,10 @@ def _wait_flush(self, timeout, callback): def submit(self, callback): # type: (Callable[[], None]) -> None self._ensure_thread() - self._queue.put_nowait(callback) + try: + self._queue.put_nowait(callback) + except queue.Full: + logger.debug("background worker queue full, dropping event") def _target(self): # type: () -> None From 97d25bfba084b935803628977f0a83235b164e91 Mon Sep 17 00:00:00 2001 From: Markus Unterwaditzer Date: Mon, 20 Jan 2020 19:25:04 +0100 Subject: [PATCH 2/3] fix: Revert change to kill() --- sentry_sdk/worker.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sentry_sdk/worker.py b/sentry_sdk/worker.py index 3a1f6ccb04..eeb278eb96 100644 --- a/sentry_sdk/worker.py +++ b/sentry_sdk/worker.py @@ -86,10 +86,14 @@ def start(self): def kill(self): # type: () -> None + """ + Kill worker thread. Returns immediately. Not useful for + waiting on shutdown for events, use `flush` for that. + """ logger.debug("background worker got kill request") with self._lock: if self._thread: - self._queue.put(_TERMINATOR) + self._queue.put_nowait(_TERMINATOR) self._thread = None self._thread_for_pid = None From 80e69fa8e65c5756ce99b815e661a2cb8eecebb3 Mon Sep 17 00:00:00 2001 From: Markus Unterwaditzer Date: Tue, 21 Jan 2020 13:03:45 +0100 Subject: [PATCH 3/3] fix: Catch down queue.Full --- sentry_sdk/worker.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sentry_sdk/worker.py b/sentry_sdk/worker.py index eeb278eb96..8215573ba6 100644 --- a/sentry_sdk/worker.py +++ b/sentry_sdk/worker.py @@ -93,7 +93,11 @@ def kill(self): logger.debug("background worker got kill request") with self._lock: if self._thread: - self._queue.put_nowait(_TERMINATOR) + try: + self._queue.put_nowait(_TERMINATOR) + except queue.Full: + logger.debug("background worker queue full, kill failed") + self._thread = None self._thread_for_pid = None