>>> py3-django-q2: Building community/py3-django-q2 1.8.0-r0 (using abuild 3.15.0-r0) started Sun, 12 Oct 2025 17:23:19 +0000 >>> py3-django-q2: Validating /home/udu/aports/community/py3-django-q2/APKBUILD... >>> py3-django-q2: Analyzing dependencies... >>> py3-django-q2: Installing for build: build-base py3-asgiref py3-blessed py3-dateutil py3-django py3-django-picklefield py3-django-redis py3-future py3-tz py3-redis py3-six py3-sqlparse py3-wcwidth py3-gpep517 py3-wheel py3-poetry-core valkey py3-pytest-django py3-boto3 py3-psutil py3-mongo WARNING: opening /home/udu/packages//community: No such file or directory WARNING: opening /home/udu/packages//main: No such file or directory fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.22/community/x86_64/APKINDEX.tar.gz (1/74) Installing py3-asgiref-pyc (3.8.1-r1) (2/74) Installing py3-asgiref (3.8.1-r1) (3/74) Installing py3-wcwidth (0.2.13-r1) (4/74) Installing py3-wcwidth-pyc (0.2.13-r1) (5/74) Installing py3-six (1.17.0-r0) (6/74) Installing py3-six-pyc (1.17.0-r0) (7/74) Installing py3-blessed (1.20.0-r2) (8/74) Installing py3-blessed-pyc (1.20.0-r2) (9/74) Installing py3-dateutil (2.9.0-r1) (10/74) Installing py3-dateutil-pyc (2.9.0-r1) (11/74) Installing py3-sqlparse (0.5.1-r0) (12/74) Installing py3-sqlparse-pyc (0.5.1-r0) (13/74) Installing tzdata (2025b-r0) (14/74) Installing py3-django (4.2.25-r0) (15/74) Installing py3-django-pyc (4.2.25-r0) (16/74) Installing py3-django-picklefield (3.3.0-r0) (17/74) Installing py3-django-picklefield-pyc (3.3.0-r0) (18/74) Installing py3-django-redis (5.4.0-r2) (19/74) Installing py3-django-redis-pyc (5.4.0-r2) (20/74) Installing py3-future (1.0.0-r1) (21/74) Installing py3-future-pyc (1.0.0-r1) (22/74) Installing py3-tz (2025.2-r0) (23/74) Installing py3-tz-pyc (2025.2-r0) (24/74) Installing hiredis (1.3.0-r0) (25/74) Installing py3-hiredis (3.2.1-r0) (26/74) Installing py3-hiredis-pyc (3.2.1-r0) (27/74) Installing py3-redis (6.1.0-r0) (28/74) Installing py3-redis-pyc (6.1.0-r0) (29/74) Installing py3-installer (0.7.0-r2) (30/74) Installing py3-installer-pyc (0.7.0-r2) (31/74) Installing py3-gpep517 (19-r0) (32/74) Installing py3-gpep517-pyc (19-r0) (33/74) Installing py3-parsing (3.2.3-r0) (34/74) Installing py3-parsing-pyc (3.2.3-r0) (35/74) Installing py3-packaging (25.0-r0) (36/74) Installing py3-packaging-pyc (25.0-r0) (37/74) Installing py3-wheel (0.46.1-r0) (38/74) Installing py3-wheel-pyc (0.46.1-r0) (39/74) Installing py3-fastjsonschema (2.21.1-r0) (40/74) Installing py3-fastjsonschema-pyc (2.21.1-r0) (41/74) Installing py3-lark-parser (1.1.9-r1) (42/74) Installing py3-lark-parser-pyc (1.1.9-r1) (43/74) Installing py3-poetry-core (2.0.1-r0) (44/74) Installing py3-poetry-core-pyc (2.0.1-r0) (45/74) Installing valkey (8.1.1-r2) Executing valkey-8.1.1-r2.pre-install Executing valkey-8.1.1-r2.post-install (46/74) Installing py3-iniconfig (2.1.0-r0) (47/74) Installing py3-iniconfig-pyc (2.1.0-r0) (48/74) Installing py3-pluggy (1.5.0-r0) (49/74) Installing py3-pluggy-pyc (1.5.0-r0) (50/74) Installing py3-py (1.11.0-r4) (51/74) Installing py3-py-pyc (1.11.0-r4) (52/74) Installing py3-pytest (8.3.5-r0) (53/74) Installing py3-pytest-pyc (8.3.5-r0) (54/74) Installing py3-pytest-django (4.11.1-r0) (55/74) Installing py3-pytest-django-pyc (4.11.1-r0) (56/74) Installing py3-certifi (2025.4.26-r0) (57/74) Installing py3-certifi-pyc (2025.4.26-r0) (58/74) Installing py3-jmespath (1.0.1-r4) (59/74) Installing py3-jmespath-pyc (1.0.1-r4) (60/74) Installing py3-urllib3 (1.26.20-r0) (61/74) Installing py3-urllib3-pyc (1.26.20-r0) (62/74) Installing py3-botocore (1.38.23-r0) (63/74) Installing py3-botocore-pyc (1.38.23-r0) (64/74) Installing py3-s3transfer (0.10.1-r0) (65/74) Installing py3-s3transfer-pyc (0.10.1-r0) (66/74) Installing py3-boto3 (1.38.23-r0) (67/74) Installing py3-boto3-pyc (1.38.23-r0) (68/74) Installing py3-psutil (7.0.0-r0) (69/74) Installing py3-psutil-pyc (7.0.0-r0) (70/74) Installing py3-dnspython (2.7.0-r0) (71/74) Installing py3-dnspython-pyc (2.7.0-r0) (72/74) Installing py3-mongo (4.6.0-r1) (73/74) Installing py3-mongo-pyc (4.6.0-r1) (74/74) Installing .makedepends-py3-django-q2 (20251012.172319) Executing busybox-1.37.0-r19.trigger OK: 454 MiB in 163 packages >>> py3-django-q2: Cleaning up srcdir >>> py3-django-q2: Cleaning up pkgdir >>> py3-django-q2: Cleaning up tmpdir >>> py3-django-q2: Fetching py3-django-q2-1.8.0.tar.gz::https://github.com/django-q2/django-q2/archive/refs/tags/v1.8.0.tar.gz >>> py3-django-q2: Fetching py3-django-q2-1.8.0.tar.gz::https://github.com/django-q2/django-q2/archive/refs/tags/v1.8.0.tar.gz >>> py3-django-q2: Checking sha512sums... py3-django-q2-1.8.0.tar.gz: OK fix-HiredisParser-reference.patch: OK >>> py3-django-q2: Unpacking /var/cache/distfiles/py3-django-q2-1.8.0.tar.gz... >>> py3-django-q2: fix-HiredisParser-reference.patch patching file django_q/tests/settings.py 2025-10-12 17:23:21,566 gpep517 INFO Building wheel via backend poetry.core.masonry.api 2025-10-12 17:23:21,599 poetry.core.factory WARNING The "poetry.dev-dependencies" section is deprecated and will be removed in a future version. Use "poetry.group.dev.dependencies" instead. 2025-10-12 17:23:21,648 poetry.core.masonry.builders.wheel INFO Building wheel 2025-10-12 17:23:21,689 poetry.core.masonry.builders.wheel INFO Built django_q2-1.8.0-py3-none-any.whl 2025-10-12 17:23:21,689 gpep517 INFO The backend produced .dist/django_q2-1.8.0-py3-none-any.whl django_q2-1.8.0-py3-none-any.whl 4067741:M 12 Oct 2025 17:23:21.706 * oO0OoO0OoO0Oo Valkey is starting oO0OoO0OoO0Oo 4067741:M 12 Oct 2025 17:23:21.706 * Valkey version=8.1.1, bits=64, commit=00000000, modified=1, pid=4067741, just started 4067741:M 12 Oct 2025 17:23:21.706 # Warning: no config file specified, using the default config. In order to specify a config file use valkey-server /path/to/valkey.conf 4067741:M 12 Oct 2025 17:23:21.707 * Increased maximum number of open files to 10032 (it was originally set to 1024). 4067741:M 12 Oct 2025 17:23:21.707 * monotonic clock: POSIX clock_gettime 4067741:M 12 Oct 2025 17:23:21.707 * Running mode=standalone, port=6379. 4067741:M 12 Oct 2025 17:23:21.707 # Warning: Could not create server TCP listening socket *:6379: bind: Address in use 4067741:M 12 Oct 2025 17:23:21.707 # Failed listening on port 6379 (tcp), aborting. ============================================================================================================================================ test session starts ============================================================================================================================================= platform linux -- Python 3.12.11, pytest-8.3.5, pluggy-1.5.0 -- /home/udu/aports/community/py3-django-q2/src/django-q2-1.8.0/.testenv/bin/python3 cachedir: .pytest_cache django: version: 4.2.25, settings: django_q.tests.settings (from ini) rootdir: /home/udu/aports/community/py3-django-q2/src/django-q2-1.8.0 configfile: pytest.ini plugins: django-4.11.1 collecting ... collected 54 items / 12 deselected / 42 selected django_q/tests/test_admin.py::test_admin_views PASSED [ 2%] django_q/tests/test_brokers.py::test_orm PASSED [ 4%] django_q/tests/test_cached.py::test_cached FAILED [ 7%] django_q/tests/test_cached.py::test_iter FAILED [ 9%] django_q/tests/test_cached.py::test_chain FAILED [ 11%] django_q/tests/test_cached.py::test_asynctask_class FAILED [ 14%] django_q/tests/test_cluster.py::test_sync FAILED [ 16%] django_q/tests/test_cluster.py::test_sync_raise_exception FAILED [ 19%] django_q/tests/test_cluster.py::test_cluster_initial FAILED [ 21%] django_q/tests/test_cluster.py::test_sentinel FAILED [ 23%] django_q/tests/test_cluster.py::test_cluster FAILED [ 26%] django_q/tests/test_cluster.py::test_results FAILED [ 28%] django_q/tests/test_cluster.py::test_enqueue FAILED [ 30%] django_q/tests/test_cluster.py::test_timeout[1-async_task_kwargs0] FAILED [ 33%] django_q/tests/test_cluster.py::test_timeout[10-async_task_kwargs1] FAILED [ 35%] django_q/tests/test_cluster.py::test_timeout[None-async_task_kwargs2] FAILED [ 38%] django_q/tests/test_cluster.py::test_timeout_task_finishes[5-async_task_kwargs0] FAILED [ 40%] django_q/tests/test_cluster.py::test_timeout_task_finishes[10-async_task_kwargs1] FAILED [ 42%] django_q/tests/test_cluster.py::test_timeout_task_finishes[1-async_task_kwargs2] FAILED [ 45%] django_q/tests/test_cluster.py::test_timeout_task_finishes[None-async_task_kwargs3] FAILED [ 47%] django_q/tests/test_cluster.py::test_recycle FAILED [ 50%] django_q/tests/test_cluster.py::test_save_limit_per_func FAILED [ 52%] django_q/tests/test_cluster.py::test_bad_secret FAILED [ 54%] django_q/tests/test_cluster.py::test_attempt_count PASSED [ 57%] django_q/tests/test_cluster.py::test_update_failed PASSED [ 59%] django_q/tests/test_cluster.py::test_acknowledge_failure_override FAILED [ 61%] django_q/tests/test_cluster.py::TestSignals::test_pre_enqueue_signal FAILED [ 64%] django_q/tests/test_cluster.py::TestSignals::test_pre_execute_signal FAILED [ 66%] django_q/tests/test_cluster.py::TestSignals::test_post_execute_signal FAILED [ 69%] django_q/tests/test_cluster.py::test_add_months PASSED [ 71%] django_q/tests/test_cluster.py::test_add_years PASSED [ 73%] django_q/tests/test_commands.py::test_qmonitor FAILED [ 76%] django_q/tests/test_commands.py::test_qinfo FAILED [ 78%] django_q/tests/test_commands.py::test_qmemory FAILED [ 80%] django_q/tests/test_monitor.py::test_monitor FAILED [ 83%] django_q/tests/test_monitor.py::test_info FAILED [ 85%] django_q/tests/test_brokers.py::test_broker FAILED [ 88%] django_q/tests/test_brokers.py::test_redis FAILED [ 90%] django_q/tests/test_brokers.py::test_custom FAILED [ 92%] django_q/tests/test_brokers.py::test_ironmq SKIPPED (requires IronMQ credentials) [ 95%] django_q/tests/test_brokers.py::test_sqs SKIPPED (requires AWS credentials) [ 97%] django_q/tests/test_cluster.py::test_redis_connection FAILED [100%] ================================================================================================================================================== FAILURES ================================================================================================================================================== ________________________________________________________________________________________________________________________________________________ test_cached _________________________________________________________________________________________________________________________________________________ broker = @pytest.mark.django_db def test_cached(broker): > broker.purge_queue() django_q/tests/test_cached.py:36: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _________________________________________________________________________________________________________________________________________________ test_iter __________________________________________________________________________________________________________________________________________________ broker = @pytest.mark.django_db def test_iter(broker): > broker.purge_queue() django_q/tests/test_cached.py:98: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _________________________________________________________________________________________________________________________________________________ test_chain _________________________________________________________________________________________________________________________________________________ broker = @pytest.mark.django_db def test_chain(broker): > broker.purge_queue() django_q/tests/test_cached.py:133: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ____________________________________________________________________________________________________________________________________________ test_asynctask_class ____________________________________________________________________________________________________________________________________________ broker = , monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7a0c457e76e0> @pytest.mark.django_db def test_asynctask_class(broker, monkeypatch): > broker.purge_queue() django_q/tests/test_cached.py:167: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _________________________________________________________________________________________________________________________________________________ test_sync __________________________________________________________________________________________________________________________________________________ broker = @pytest.mark.django_db def test_sync(broker): > task = async_task( "django_q.tests.tasks.count_letters", DEFAULT_WORDLIST, broker=broker, sync=True ) django_q/tests/test_cluster.py:62: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/tasks.py:73: in async_task return _sync(pack) django_q/tasks.py:768: in _sync task_queue = Queue() django_q/queues.py:56: in __init__ super(Queue, self).__init__( /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _________________________________________________________________________________________________________________________________________ test_sync_raise_exception __________________________________________________________________________________________________________________________________________ broker = @pytest.mark.django_db def test_sync_raise_exception(broker): with pytest.raises(TaskError): > async_task("django_q.tests.tasks.raise_exception", broker=broker, sync=True) django_q/tests/test_cluster.py:71: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/tasks.py:73: in async_task return _sync(pack) django_q/tasks.py:768: in _sync task_queue = Queue() django_q/queues.py:56: in __init__ super(Queue, self).__init__( /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ____________________________________________________________________________________________________________________________________________ test_cluster_initial ____________________________________________________________________________________________________________________________________________ broker = @pytest.mark.django_db def test_cluster_initial(broker): broker.list_key = "initial_test:q" > broker.delete_queue() django_q/tests/test_cluster.py:77: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:30: in delete_queue return self.connection.delete(self.list_key) /usr/lib/python3.12/site-packages/redis/commands/core.py:1712: in delete return self.execute_command("DEL", *names) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _______________________________________________________________________________________________________________________________________________ test_sentinel ________________________________________________________________________________________________________________________________________________ @pytest.mark.django_db def test_sentinel(): > start_event = Event() django_q/tests/test_cluster.py:98: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/multiprocessing/context.py:93: in Event return Event(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:331: in __init__ self._cond = ctx.Condition(ctx.Lock()) /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ________________________________________________________________________________________________________________________________________________ test_cluster ________________________________________________________________________________________________________________________________________________ broker = @pytest.mark.django_db def test_cluster(broker): broker.list_key = "cluster_test:q" > broker.delete_queue() django_q/tests/test_cluster.py:115: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:30: in delete_queue return self.connection.delete(self.list_key) /usr/lib/python3.12/site-packages/redis/commands/core.py:1712: in delete return self.execute_command("DEL", *names) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ________________________________________________________________________________________________________________________________________________ test_results ________________________________________________________________________________________________________________________________________________ broker = @pytest.mark.django_db def test_results(broker): broker.list_key = "cluster_test:q" > broker.delete_queue() django_q/tests/test_cluster.py:147: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:30: in delete_queue return self.connection.delete(self.list_key) /usr/lib/python3.12/site-packages/redis/commands/core.py:1712: in delete return self.execute_command("DEL", *names) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ________________________________________________________________________________________________________________________________________________ test_enqueue ________________________________________________________________________________________________________________________________________________ broker = , admin_user = @pytest.mark.django_db def test_enqueue(broker, admin_user): broker.list_key = "cluster_test:q" > broker.delete_queue() django_q/tests/test_cluster.py:171: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:30: in delete_queue return self.connection.delete(self.list_key) /usr/lib/python3.12/site-packages/redis/commands/core.py:1712: in delete return self.execute_command("DEL", *names) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _____________________________________________________________________________________________________________________________________ test_timeout[1-async_task_kwargs0] _____________________________________________________________________________________________________________________________________ broker = , cluster_config_timeout = 1, async_task_kwargs = {} @pytest.mark.django_db @pytest.mark.parametrize( "cluster_config_timeout, async_task_kwargs", ( (1, {}), (10, {"timeout": 1}), (None, {"timeout": 1}), ), ) def test_timeout(broker, cluster_config_timeout, async_task_kwargs): # set up the Sentinel broker.list_key = "timeout_test:q" > broker.purge_queue() django_q/tests/test_cluster.py:348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ____________________________________________________________________________________________________________________________________ test_timeout[10-async_task_kwargs1] _____________________________________________________________________________________________________________________________________ broker = , cluster_config_timeout = 10, async_task_kwargs = {'timeout': 1} @pytest.mark.django_db @pytest.mark.parametrize( "cluster_config_timeout, async_task_kwargs", ( (1, {}), (10, {"timeout": 1}), (None, {"timeout": 1}), ), ) def test_timeout(broker, cluster_config_timeout, async_task_kwargs): # set up the Sentinel broker.list_key = "timeout_test:q" > broker.purge_queue() django_q/tests/test_cluster.py:348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ___________________________________________________________________________________________________________________________________ test_timeout[None-async_task_kwargs2] ____________________________________________________________________________________________________________________________________ broker = , cluster_config_timeout = None, async_task_kwargs = {'timeout': 1} @pytest.mark.django_db @pytest.mark.parametrize( "cluster_config_timeout, async_task_kwargs", ( (1, {}), (10, {"timeout": 1}), (None, {"timeout": 1}), ), ) def test_timeout(broker, cluster_config_timeout, async_task_kwargs): # set up the Sentinel broker.list_key = "timeout_test:q" > broker.purge_queue() django_q/tests/test_cluster.py:348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ______________________________________________________________________________________________________________________________ test_timeout_task_finishes[5-async_task_kwargs0] ______________________________________________________________________________________________________________________________ broker = , cluster_config_timeout = 5, async_task_kwargs = {} @pytest.mark.django_db @pytest.mark.parametrize( "cluster_config_timeout, async_task_kwargs", ( (5, {}), (10, {"timeout": 5}), (1, {"timeout": 5}), (None, {"timeout": 5}), ), ) def test_timeout_task_finishes(broker, cluster_config_timeout, async_task_kwargs): # set up the Sentinel broker.list_key = "timeout_test:q" > broker.purge_queue() django_q/tests/test_cluster.py:381: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _____________________________________________________________________________________________________________________________ test_timeout_task_finishes[10-async_task_kwargs1] ______________________________________________________________________________________________________________________________ broker = , cluster_config_timeout = 10, async_task_kwargs = {'timeout': 5} @pytest.mark.django_db @pytest.mark.parametrize( "cluster_config_timeout, async_task_kwargs", ( (5, {}), (10, {"timeout": 5}), (1, {"timeout": 5}), (None, {"timeout": 5}), ), ) def test_timeout_task_finishes(broker, cluster_config_timeout, async_task_kwargs): # set up the Sentinel broker.list_key = "timeout_test:q" > broker.purge_queue() django_q/tests/test_cluster.py:381: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ______________________________________________________________________________________________________________________________ test_timeout_task_finishes[1-async_task_kwargs2] ______________________________________________________________________________________________________________________________ broker = , cluster_config_timeout = 1, async_task_kwargs = {'timeout': 5} @pytest.mark.django_db @pytest.mark.parametrize( "cluster_config_timeout, async_task_kwargs", ( (5, {}), (10, {"timeout": 5}), (1, {"timeout": 5}), (None, {"timeout": 5}), ), ) def test_timeout_task_finishes(broker, cluster_config_timeout, async_task_kwargs): # set up the Sentinel broker.list_key = "timeout_test:q" > broker.purge_queue() django_q/tests/test_cluster.py:381: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ____________________________________________________________________________________________________________________________ test_timeout_task_finishes[None-async_task_kwargs3] _____________________________________________________________________________________________________________________________ broker = , cluster_config_timeout = None, async_task_kwargs = {'timeout': 5} @pytest.mark.django_db @pytest.mark.parametrize( "cluster_config_timeout, async_task_kwargs", ( (5, {}), (10, {"timeout": 5}), (1, {"timeout": 5}), (None, {"timeout": 5}), ), ) def test_timeout_task_finishes(broker, cluster_config_timeout, async_task_kwargs): # set up the Sentinel broker.list_key = "timeout_test:q" > broker.purge_queue() django_q/tests/test_cluster.py:381: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:33: in purge_queue return self.connection.ltrim(self.list_key, 1, 0) /usr/lib/python3.12/site-packages/redis/commands/core.py:2752: in ltrim return self.execute_command("LTRIM", name, start, end) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ________________________________________________________________________________________________________________________________________________ test_recycle ________________________________________________________________________________________________________________________________________________ broker = , monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7a0c45f49640>, django_assert_num_queries = functools.partial(, <_pytest.config.Config object at 0x7a0c48b21e50>) @pytest.mark.django_db def test_recycle(broker, monkeypatch, django_assert_num_queries): # set up the Sentinel broker.list_key = "test_recycle_test:q" > async_task("django_q.tests.tasks.multiply", 2, 2, broker=broker) django_q/tests/test_cluster.py:405: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/tasks.py:75: in async_task enqueue_id = broker.enqueue(pack) django_q/brokers/redis_broker.py:19: in enqueue return self.connection.rpush(self.list_key, task) /usr/lib/python3.12/site-packages/redis/commands/core.py:2788: in rpush return self.execute_command("RPUSH", name, *values) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError __________________________________________________________________________________________________________________________________________ test_save_limit_per_func __________________________________________________________________________________________________________________________________________ broker = , monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7a0c45efcbc0> @pytest.mark.django_db def test_save_limit_per_func(broker, monkeypatch): # set up the Sentinel broker.list_key = "test_recycle_test:q" > async_task("django_q.tests.tasks.hello", broker=broker) django_q/tests/test_cluster.py:445: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/tasks.py:75: in async_task enqueue_id = broker.enqueue(pack) django_q/brokers/redis_broker.py:19: in enqueue return self.connection.rpush(self.list_key, task) /usr/lib/python3.12/site-packages/redis/commands/core.py:2788: in rpush return self.execute_command("RPUSH", name, *values) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ______________________________________________________________________________________________________________________________________________ test_bad_secret _______________________________________________________________________________________________________________________________________________ broker = , monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7a0c45efd730> @pytest.mark.django_db def test_bad_secret(broker, monkeypatch): broker.list_key = "test_bad_secret:q" > async_task("math.copysign", 1, -1, broker=broker) django_q/tests/test_cluster.py:520: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/tasks.py:75: in async_task enqueue_id = broker.enqueue(pack) django_q/brokers/redis_broker.py:19: in enqueue return self.connection.rpush(self.list_key, task) /usr/lib/python3.12/site-packages/redis/commands/core.py:2788: in rpush return self.execute_command("RPUSH", name, *values) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _____________________________________________________________________________________________________________________________________ test_acknowledge_failure_override ______________________________________________________________________________________________________________________________________ @pytest.mark.django_db def test_acknowledge_failure_override(): class VerifyAckMockBroker(Broker): def __init__(self, *args, **kwargs): super(VerifyAckMockBroker, self).__init__(*args, **kwargs) self.acknowledgements = {} def acknowledge(self, task_id): count = self.acknowledgements.get(task_id, 0) self.acknowledgements[task_id] = count + 1 tag = uuid() task_fail_ack = { "id": tag[1], "name": tag[0], "ack_id": "test_fail_ack_id", "ack_failure": True, "func": "math.copysign", "args": (1, -1), "kwargs": {}, "started": timezone.now(), "stopped": timezone.now(), "success": False, "result": None, } tag = uuid() task_fail_no_ack = task_fail_ack.copy() task_fail_no_ack.update( {"id": tag[1], "name": tag[0], "ack_id": "test_fail_no_ack_id"} ) del task_fail_no_ack["ack_failure"] tag = uuid() task_success_ack = task_fail_ack.copy() task_success_ack.update( { "id": tag[1], "name": tag[0], "ack_id": "test_success_ack_id", "success": True, } ) del task_success_ack["ack_failure"] > result_queue = Queue() django_q/tests/test_cluster.py:671: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/queues.py:56: in __init__ super(Queue, self).__init__( /usr/lib/python3.12/multiprocessing/queues.py:43: in __init__ self._rlock = ctx.Lock() /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError ____________________________________________________________________________________________________________________________________ TestSignals.test_pre_enqueue_signal _____________________________________________________________________________________________________________________________________ self = , broker = @pytest.mark.django_db def test_pre_enqueue_signal(self, broker): broker.list_key = "pre_enqueue_test:q" > broker.delete_queue() django_q/tests/test_cluster.py:689: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:30: in delete_queue return self.connection.delete(self.list_key) /usr/lib/python3.12/site-packages/redis/commands/core.py:1712: in delete return self.execute_command("DEL", *names) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ____________________________________________________________________________________________________________________________________ TestSignals.test_pre_execute_signal _____________________________________________________________________________________________________________________________________ self = , broker = @pytest.mark.django_db def test_pre_execute_signal(self, broker): broker.list_key = "pre_execute_test:q" > broker.delete_queue() django_q/tests/test_cluster.py:707: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:30: in delete_queue return self.connection.delete(self.list_key) /usr/lib/python3.12/site-packages/redis/commands/core.py:1712: in delete return self.execute_command("DEL", *names) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ____________________________________________________________________________________________________________________________________ TestSignals.test_post_execute_signal ____________________________________________________________________________________________________________________________________ self = , broker = @pytest.mark.django_db def test_post_execute_signal(self, broker): broker.list_key = "post_execute_test:q" > broker.delete_queue() django_q/tests/test_cluster.py:737: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:30: in delete_queue return self.connection.delete(self.list_key) /usr/lib/python3.12/site-packages/redis/commands/core.py:1712: in delete return self.execute_command("DEL", *names) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _______________________________________________________________________________________________________________________________________________ test_qmonitor ________________________________________________________________________________________________________________________________________________ @pytest.mark.django_db def test_qmonitor(): > call_command("qmonitor", run_once=True) django_q/tests/test_commands.py:12: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/django/core/management/__init__.py:194: in call_command return command.execute(*args, **defaults) /usr/lib/python3.12/site-packages/django/core/management/base.py:458: in execute output = self.handle(*args, **options) django_q/management/commands/qmonitor.py:21: in handle monitor(run_once=options.get("run_once", False)) django_q/monitor_terminal.py:49: in monitor broker.ping() django_q/brokers/redis_broker.py:37: in ping return self.connection.ping() /usr/lib/python3.12/site-packages/redis/commands/core.py:1219: in ping return self.execute_command("PING", **kwargs) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _________________________________________________________________________________________________________________________________________________ test_qinfo _________________________________________________________________________________________________________________________________________________ @pytest.mark.django_db def test_qinfo(): > call_command("qinfo") django_q/tests/test_commands.py:17: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/django/core/management/__init__.py:194: in call_command return command.execute(*args, **defaults) /usr/lib/python3.12/site-packages/django/core/management/base.py:458: in execute output = self.handle(*args, **options) django_q/management/commands/qinfo.py:51: in handle info() django_q/monitor_terminal.py:216: in info broker.ping() django_q/brokers/redis_broker.py:37: in ping return self.connection.ping() /usr/lib/python3.12/site-packages/redis/commands/core.py:1219: in ping return self.execute_command("PING", **kwargs) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ________________________________________________________________________________________________________________________________________________ test_qmemory ________________________________________________________________________________________________________________________________________________ @pytest.mark.django_db def test_qmemory(): > call_command("qmemory", run_once=True) django_q/tests/test_commands.py:24: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/django/core/management/__init__.py:194: in call_command return command.execute(*args, **defaults) /usr/lib/python3.12/site-packages/django/core/management/base.py:458: in execute output = self.handle(*args, **options) django_q/management/commands/qmemory.py:28: in handle memory( django_q/monitor_terminal.py:324: in memory broker.ping() django_q/brokers/redis_broker.py:37: in ping return self.connection.ping() /usr/lib/python3.12/site-packages/redis/commands/core.py:1219: in ping return self.execute_command("PING", **kwargs) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ________________________________________________________________________________________________________________________________________________ test_monitor ________________________________________________________________________________________________________________________________________________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7a0c455b0200> @pytest.mark.django_db def test_monitor(monkeypatch): cluster_id = uuid.uuid4() assert Stat.get(pid=0, cluster_id=cluster_id).sentinel == 0 c = Cluster() > c.start() django_q/tests/test_monitor.py:18: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/cluster.py:61: in start self.stop_event = Event() /usr/lib/python3.12/multiprocessing/context.py:93: in Event return Event(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:331: in __init__ self._cond = ctx.Condition(ctx.Lock()) /usr/lib/python3.12/multiprocessing/context.py:68: in Lock return Lock(ctx=self.get_context()) /usr/lib/python3.12/multiprocessing/synchronize.py:169: in __init__ SemLock.__init__(self, SEMAPHORE, 1, 1, ctx=ctx) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , kind = 1, value = 1, maxvalue = 1 def __init__(self, kind, value, maxvalue, *, ctx): if ctx is None: ctx = context._default_context.get_context() self._is_fork_ctx = ctx.get_start_method() == 'fork' unlink_now = sys.platform == 'win32' or self._is_fork_ctx for i in range(100): try: > sl = self._semlock = _multiprocessing.SemLock( kind, value, maxvalue, self._make_name(), unlink_now) E PermissionError: [Errno 13] Permission denied /usr/lib/python3.12/multiprocessing/synchronize.py:57: PermissionError _________________________________________________________________________________________________________________________________________________ test_info __________________________________________________________________________________________________________________________________________________ @pytest.mark.django_db def test_info(): > info() django_q/tests/test_monitor.py:43: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/monitor_terminal.py:216: in info broker.ping() django_q/brokers/redis_broker.py:37: in ping return self.connection.ping() /usr/lib/python3.12/site-packages/redis/commands/core.py:1219: in ping return self.execute_command("PING", **kwargs) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ________________________________________________________________________________________________________________________________________________ test_broker _________________________________________________________________________________________________________________________________________________ self = , args = ('django_q:django_q_test:cluster', ['test_1']), kwargs = {} @functools.wraps(method) def _decorator(self, *args, **kwargs): try: > return method(self, *args, **kwargs) /usr/lib/python3.12/site-packages/django_redis/cache.py:29: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.12/site-packages/django_redis/cache.py:81: in set return self.client.set(*args, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , key = 'django_q:django_q_test:cluster', value = ['test_1'], timeout = 300000, version = None, client = )>)> nx = False, xx = False def set( self, key: Any, value: Any, timeout: Optional[float] = DEFAULT_TIMEOUT, version: Optional[int] = None, client: Optional[Redis] = None, nx: bool = False, xx: bool = False, ) -> bool: """ Persist a value to the cache, and set an optional expiration time. Also supports optional nx parameter. If set to True - will use redis setnx instead of set. """ nkey = self.make_key(key, version=version) nvalue = self.encode(value) if timeout is DEFAULT_TIMEOUT: timeout = self._backend.default_timeout original_client = client tried: List[int] = [] while True: try: if client is None: client, index = self.get_client( write=True, tried=tried, show_index=True ) if timeout is not None: # Convert to milliseconds timeout = int(timeout * 1000) if timeout <= 0: if nx: # Using negative timeouts when nx is True should # not expire (in our case delete) the value if it exists. # Obviously expire not existent value is noop. return not self.has_key(key, version=version, client=client) else: # redis doesn't support negative timeouts in ex flags # so it seems that it's better to just delete the key # than to set it and than expire in a pipeline return bool( self.delete(key, client=client, version=version) ) return bool(client.set(nkey, nvalue, nx=nx, px=timeout, xx=xx)) except _main_exceptions as e: if ( not original_client and not self._replica_read_only and len(tried) < len(self._server) ): tried.append(index) client = None continue > raise ConnectionInterrupted(connection=client) from e E django_redis.exceptions.ConnectionInterrupted: Redis ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/django_redis/client/default.py:185: ConnectionInterrupted During handling of the above exception, another exception occurred: monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7a0c45f3d760> def test_broker(monkeypatch): broker = Broker() broker.enqueue("test") broker.dequeue() broker.queue_size() broker.lock_size() broker.purge_queue() broker.delete("id") broker.delete_queue() broker.acknowledge("test") broker.ping() broker.info() # stats assert broker.get_stat("test_1") is None > broker.set_stat("test_1", "test", 3) django_q/tests/test_brokers.py:26: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/__init__.py:110: in set_stat self.cache.set(Conf.Q_STAT, key_list) /usr/lib/python3.12/site-packages/django_redis/cache.py:36: in _decorator raise e.__cause__ /usr/lib/python3.12/site-packages/django_redis/client/default.py:175: in set return bool(client.set(nkey, nvalue, nx=nx, px=timeout, xx=xx)) /usr/lib/python3.12/site-packages/redis/commands/core.py:2305: in set return self.execute_command("SET", *pieces, **options) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError _________________________________________________________________________________________________________________________________________________ test_redis _________________________________________________________________________________________________________________________________________________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7a0c45f6f9e0> def test_redis(monkeypatch): monkeypatch.setattr(Conf, "DJANGO_REDIS", None) broker = get_broker() > assert broker.ping() is True django_q/tests/test_brokers.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:37: in ping return self.connection.ping() /usr/lib/python3.12/site-packages/redis/commands/core.py:1219: in ping return self.execute_command("PING", **kwargs) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ________________________________________________________________________________________________________________________________________________ test_custom _________________________________________________________________________________________________________________________________________________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7a0c455be420> def test_custom(monkeypatch): monkeypatch.setattr(Conf, "BROKER_CLASS", "django_q.brokers.redis_broker.Redis") broker = get_broker() > assert broker.ping() is True django_q/tests/test_brokers.py:56: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:37: in ping return self.connection.ping() /usr/lib/python3.12/site-packages/redis/commands/core.py:1219: in ping return self.execute_command("PING", **kwargs) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ___________________________________________________________________________________________________________________________________________ test_redis_connection ____________________________________________________________________________________________________________________________________________ broker = def test_redis_connection(broker): > assert broker.ping() is True django_q/tests/test_cluster.py:57: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ django_q/brokers/redis_broker.py:37: in ping return self.connection.ping() /usr/lib/python3.12/site-packages/redis/commands/core.py:1219: in ping return self.execute_command("PING", **kwargs) /usr/lib/python3.12/site-packages/redis/client.py:622: in execute_command return self._execute_command(*args, **options) /usr/lib/python3.12/site-packages/redis/client.py:633: in _execute_command return conn.retry.call_with_retry( /usr/lib/python3.12/site-packages/redis/retry.py:87: in call_with_retry return do() /usr/lib/python3.12/site-packages/redis/client.py:634: in lambda: self._send_command_parse_response( /usr/lib/python3.12/site-packages/redis/client.py:605: in _send_command_parse_response return self.parse_response(conn, command_name, **options) /usr/lib/python3.12/site-packages/redis/client.py:652: in parse_response response = connection.read_response() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = , disable_decoding = False def read_response( self, disable_decoding=False, *, disconnect_on_error=True, push_request=False, ): """Read the response from a previously sent command""" host_error = self._host_error() try: if self.protocol in ["3", 3] and not HIREDIS_AVAILABLE: response = self._parser.read_response( disable_decoding=disable_decoding, push_request=push_request ) else: response = self._parser.read_response(disable_decoding=disable_decoding) except socket.timeout: if disconnect_on_error: self.disconnect() raise TimeoutError(f"Timeout reading from {host_error}") except OSError as e: if disconnect_on_error: self.disconnect() raise ConnectionError(f"Error while reading from {host_error} : {e.args}") except BaseException: # Also by default close in case of BaseException. A lot of code # relies on this behaviour when doing Command/Response pairs. # See #1128. if disconnect_on_error: self.disconnect() raise if self.health_check_interval: self.next_health_check = time.monotonic() + self.health_check_interval if isinstance(response, ResponseError): try: > raise response E redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes if RDB snapshotting fails (stop-writes-on-bgsave-error option). Please check the Redis logs for details about the RDB error. /usr/lib/python3.12/site-packages/redis/connection.py:666: ResponseError ------------------------------------------------------------------------------------------------------------------------------------------ Captured stderr teardown ------------------------------------------------------------------------------------------------------------------------------------------ Destroying test database for alias 'default'... ============================================================================================================================================== warnings summary ============================================================================================================================================== ../../../../../../../usr/lib/python3.12/site-packages/django/conf/__init__.py:267 /usr/lib/python3.12/site-packages/django/conf/__init__.py:267: RemovedInDjango50Warning: The USE_L10N setting is deprecated. Starting with Django 5.0, localized formatting of data will always be enabled. For example Django will display numbers and dates using the format of the current locale. warnings.warn(USE_L10N_DEPRECATED_MSG, RemovedInDjango50Warning) django_q/conf.py:179 /home/udu/aports/community/py3-django-q2/src/django-q2-1.8.0/django_q/conf.py:179: UserWarning: Retry and timeout are misconfigured. Set retry larger than timeout,failure to do so will cause the tasks to be retriggered before completion.See https://django-q2.readthedocs.io/en/master/configure.html#retry for details. warn( -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ========================================================================================================================================== short test summary info =========================================================================================================================================== FAILED django_q/tests/test_cached.py::test_cached - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes... FAILED django_q/tests/test_cached.py::test_iter - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes i... FAILED django_q/tests/test_cached.py::test_chain - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes ... FAILED django_q/tests/test_cached.py::test_asynctask_class - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors duri... FAILED django_q/tests/test_cluster.py::test_sync - PermissionError: [Errno 13] Permission denied FAILED django_q/tests/test_cluster.py::test_sync_raise_exception - PermissionError: [Errno 13] Permission denied FAILED django_q/tests/test_cluster.py::test_cluster_initial - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors dur... FAILED django_q/tests/test_cluster.py::test_sentinel - PermissionError: [Errno 13] Permission denied FAILED django_q/tests/test_cluster.py::test_cluster - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writ... FAILED django_q/tests/test_cluster.py::test_results - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writ... FAILED django_q/tests/test_cluster.py::test_enqueue - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writ... FAILED django_q/tests/test_cluster.py::test_timeout[1-async_task_kwargs0] - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to rep... FAILED django_q/tests/test_cluster.py::test_timeout[10-async_task_kwargs1] - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to re... FAILED django_q/tests/test_cluster.py::test_timeout[None-async_task_kwargs2] - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to ... FAILED django_q/tests/test_cluster.py::test_timeout_task_finishes[5-async_task_kwargs0] - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is con... FAILED django_q/tests/test_cluster.py::test_timeout_task_finishes[10-async_task_kwargs1] - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is co... FAILED django_q/tests/test_cluster.py::test_timeout_task_finishes[1-async_task_kwargs2] - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is con... FAILED django_q/tests/test_cluster.py::test_timeout_task_finishes[None-async_task_kwargs3] - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is ... FAILED django_q/tests/test_cluster.py::test_recycle - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writ... FAILED django_q/tests/test_cluster.py::test_save_limit_per_func - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors... FAILED django_q/tests/test_cluster.py::test_bad_secret - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during w... FAILED django_q/tests/test_cluster.py::test_acknowledge_failure_override - PermissionError: [Errno 13] Permission denied FAILED django_q/tests/test_cluster.py::TestSignals::test_pre_enqueue_signal - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to r... FAILED django_q/tests/test_cluster.py::TestSignals::test_pre_execute_signal - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to r... FAILED django_q/tests/test_cluster.py::TestSignals::test_post_execute_signal - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to ... FAILED django_q/tests/test_commands.py::test_qmonitor - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during wr... FAILED django_q/tests/test_commands.py::test_qinfo - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during write... FAILED django_q/tests/test_commands.py::test_qmemory - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during wri... FAILED django_q/tests/test_monitor.py::test_monitor - PermissionError: [Errno 13] Permission denied FAILED django_q/tests/test_monitor.py::test_info - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes ... FAILED django_q/tests/test_brokers.py::test_broker - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during write... FAILED django_q/tests/test_brokers.py::test_redis - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during writes... FAILED django_q/tests/test_brokers.py::test_custom - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors during write... FAILED django_q/tests/test_cluster.py::test_redis_connection - redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk. Commands that may modify the data set are disabled, because this instance is configured to report errors du... ===================================================================================================================== 34 failed, 6 passed, 2 skipped, 12 deselected, 2 warnings in 7.73s ===================================================================================================================== >>> ERROR: py3-django-q2: check failed >>> py3-django-q2: Uninstalling dependencies... (1/74) Purging .makedepends-py3-django-q2 (20251012.172319) (2/74) Purging py3-blessed-pyc (1.20.0-r2) (3/74) Purging py3-blessed (1.20.0-r2) (4/74) Purging py3-django-picklefield-pyc (3.3.0-r0) (5/74) Purging py3-django-picklefield (3.3.0-r0) (6/74) Purging py3-django-redis-pyc (5.4.0-r2) (7/74) Purging py3-django-redis (5.4.0-r2) (8/74) Purging py3-django-pyc (4.2.25-r0) (9/74) Purging py3-django (4.2.25-r0) (10/74) Purging py3-asgiref-pyc (3.8.1-r1) (11/74) Purging py3-asgiref (3.8.1-r1) (12/74) Purging tzdata (2025b-r0) (13/74) Purging py3-future-pyc (1.0.0-r1) (14/74) Purging py3-future (1.0.0-r1) (15/74) Purging py3-tz-pyc (2025.2-r0) (16/74) Purging py3-tz (2025.2-r0) (17/74) Purging py3-redis-pyc (6.1.0-r0) (18/74) Purging py3-redis (6.1.0-r0) (19/74) Purging py3-hiredis-pyc (3.2.1-r0) (20/74) Purging py3-hiredis (3.2.1-r0) (21/74) Purging py3-sqlparse-pyc (0.5.1-r0) (22/74) Purging py3-sqlparse (0.5.1-r0) (23/74) Purging py3-wcwidth-pyc (0.2.13-r1) (24/74) Purging py3-wcwidth (0.2.13-r1) (25/74) Purging py3-gpep517-pyc (19-r0) (26/74) Purging py3-gpep517 (19-r0) (27/74) Purging py3-installer-pyc (0.7.0-r2) (28/74) Purging py3-installer (0.7.0-r2) (29/74) Purging py3-wheel-pyc (0.46.1-r0) (30/74) Purging py3-wheel (0.46.1-r0) (31/74) Purging py3-poetry-core-pyc (2.0.1-r0) (32/74) Purging py3-poetry-core (2.0.1-r0) (33/74) Purging py3-fastjsonschema-pyc (2.21.1-r0) (34/74) Purging py3-fastjsonschema (2.21.1-r0) (35/74) Purging py3-lark-parser-pyc (1.1.9-r1) (36/74) Purging py3-lark-parser (1.1.9-r1) (37/74) Purging valkey (8.1.1-r2) (38/74) Purging py3-pytest-django-pyc (4.11.1-r0) (39/74) Purging py3-pytest-django (4.11.1-r0) (40/74) Purging py3-pytest-pyc (8.3.5-r0) (41/74) Purging py3-pytest (8.3.5-r0) (42/74) Purging py3-iniconfig-pyc (2.1.0-r0) (43/74) Purging py3-iniconfig (2.1.0-r0) (44/74) Purging py3-packaging-pyc (25.0-r0) (45/74) Purging py3-packaging (25.0-r0) (46/74) Purging py3-parsing-pyc (3.2.3-r0) (47/74) Purging py3-parsing (3.2.3-r0) (48/74) Purging py3-pluggy-pyc (1.5.0-r0) (49/74) Purging py3-pluggy (1.5.0-r0) (50/74) Purging py3-py-pyc (1.11.0-r4) (51/74) Purging py3-py (1.11.0-r4) (52/74) Purging py3-boto3-pyc (1.38.23-r0) (53/74) Purging py3-boto3 (1.38.23-r0) (54/74) Purging py3-s3transfer-pyc (0.10.1-r0) (55/74) Purging py3-s3transfer (0.10.1-r0) (56/74) Purging py3-botocore-pyc (1.38.23-r0) (57/74) Purging py3-botocore (1.38.23-r0) (58/74) Purging py3-certifi-pyc (2025.4.26-r0) (59/74) Purging py3-certifi (2025.4.26-r0) (60/74) Purging py3-dateutil-pyc (2.9.0-r1) (61/74) Purging py3-dateutil (2.9.0-r1) (62/74) Purging py3-six-pyc (1.17.0-r0) (63/74) Purging py3-six (1.17.0-r0) (64/74) Purging py3-jmespath-pyc (1.0.1-r4) (65/74) Purging py3-jmespath (1.0.1-r4) (66/74) Purging py3-urllib3-pyc (1.26.20-r0) (67/74) Purging py3-urllib3 (1.26.20-r0) (68/74) Purging py3-psutil-pyc (7.0.0-r0) (69/74) Purging py3-psutil (7.0.0-r0) (70/74) Purging py3-mongo-pyc (4.6.0-r1) (71/74) Purging py3-mongo (4.6.0-r1) (72/74) Purging py3-dnspython-pyc (2.7.0-r0) (73/74) Purging py3-dnspython (2.7.0-r0) (74/74) Purging hiredis (1.3.0-r0) Executing busybox-1.37.0-r19.trigger OK: 296 MiB in 89 packages