diff --git a/aw_client/client.py b/aw_client/client.py index 4e454be..ff728af 100644 --- a/aw_client/client.py +++ b/aw_client/client.py @@ -551,7 +551,10 @@ def add_request(self, endpoint: str, data: dict) -> None: """ assert "/heartbeat" in endpoint assert isinstance(data, dict) - self._persistqueue.put(QueuedRequest(endpoint, data)) + try: + self._persistqueue.put(QueuedRequest(endpoint, data)) + except OSError as e: + logger.warning(f"Failed to queue request, possibly due to insufficient disk space: {e}") def register_bucket(self, bucket_id: str, event_type: str) -> None: self._registered_buckets.append(Bucket(bucket_id, event_type)) diff --git a/tests/test_requestqueue.py b/tests/test_requestqueue.py index 0e28fff..419fc2c 100644 --- a/tests/test_requestqueue.py +++ b/tests/test_requestqueue.py @@ -60,3 +60,16 @@ def test_complex(): sleep(1) rq.stop() rq.join() + +def test_add_request_disk_full(): + """Ensures that add_request doesn't crash if the queue can't be written to disk""" + client = MockClient() + rq = RequestQueue(client) # type: ignore + + def raise_oserror(*args, **kwargs): + raise OSError("No space left on device") + + rq._persistqueue.put = raise_oserror # type: ignore + + # Should not raise, the OSError should be caught internally and logged instead + rq.add_request("/api/0/buckets/test/heartbeat", {})