wakatime / wakaq

Background task queue for Python backed by Redis, a super minimal Celery

Home Page:https://pypi.org/project/WakaQ/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Parent process logging SoftTimeout

alanhamlett opened this issue · comments

Received this error in logs yesterday, but it's strange because the Parent process should never execute Worker._on_soft_timeout_child. That method should only execute on Child processes when the Parent process sends a SoftTimeout via SIGQUIT to the child. The Parent process executes Worker._on_exit_parent when it receives SIGQUIT.

full traceback
[2023-12-17 09:29:39,088] worker-03 ERROR in None args=None kwargs=None retry=None: Unable to unpack message from child process 1434680: backup_heartbeat
[2023-12-17 09:29:39,111] worker-03 ERROR in None args=None kwargs=None retry=None: Unable to unpack message from child process 1434689: backup_he
[2023-12-17 09:29:39,111] worker-03 ERROR in None args=None kwargs=None retry=None: Unable to unpack message from child process 1434864: backup_
[2023-12-17 09:33:46,210] worker-03 ERROR in None args=None kwargs=None retry=None: Traceback (most recent call last):
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 192, in _parent
    self._check_child_runtimes()
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 520, in _check_child_runtimes
    elif not child.soft_timeout_reached and soft_timeout and runtime > soft_timeout:
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 358, in _on_soft_timeout_child
    raise SoftTimeout("SoftTimeout")
wakaq.exceptions.SoftTimeout: SoftTimeout

[2023-12-17 09:33:48,849] worker-03 ERROR in None args=None kwargs=None retry=None: Traceback (most recent call last):
  File "./venv/lib/python3.10/site-packages/wakaq/utils.py", line 151, in read_fd
    return os.read(fd, 64000).decode("utf8")
BlockingIOError: [Errno 11] Resource temporarily unavailable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 192, in _parent
    self._check_child_runtimes()
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 496, in _check_child_runtimes
    ping = read_fd(child.pingin)
  File "./venv/lib/python3.10/site-packages/wakaq/utils.py", line 151, in read_fd
    return os.read(fd, 64000).decode("utf8")
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 358, in _on_soft_timeout_child
    raise SoftTimeout("SoftTimeout")
wakaq.exceptions.SoftTimeout: SoftTimeout

[2023-12-17 09:33:51,138] worker-03 ERROR in None args=None kwargs=None retry=None: Traceback (most recent call last):
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 183, in _parent
    self._enqueue_ready_eta_tasks()
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 385, in _enqueue_ready_eta_tasks
    self.wakaq._enqueue_at_front(task_name, queue.name, args, kwargs)
  File "./venv/lib/python3.10/site-packages/wakaq/__init__.py", line 189, in _enqueue_at_front
    payload = serialize(
  File "./venv/lib/python3.10/site-packages/wakaq/serializer.py", line 93, in serialize
    return dumps(*args, **kwargs)
  File "/usr/lib/python3.10/json/__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "/usr/lib/python3.10/json/encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib/python3.10/json/encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 358, in _on_soft_timeout_child
    raise SoftTimeout("SoftTimeout")
wakaq.exceptions.SoftTimeout: SoftTimeout

[2023-12-17 09:33:51,126] worker-03 ERROR in None args=None kwargs=None retry=None: Traceback (most recent call last):
  File "./venv/lib/python3.10/site-packages/wakaq/utils.py", line 151, in read_fd
    return os.read(fd, 64000).decode("utf8")
BlockingIOError: [Errno 11] Resource temporarily unavailable

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 192, in _parent
    self._check_child_runtimes()
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 496, in _check_child_runtimes
    ping = read_fd(child.pingin)
  File "./venv/lib/python3.10/site-packages/wakaq/utils.py", line 151, in read_fd
    return os.read(fd, 64000).decode("utf8")
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 358, in _on_soft_timeout_child
    raise SoftTimeout("SoftTimeout")
wakaq.exceptions.SoftTimeout: SoftTimeout

This traceback in particular doesn't make sense, and shouldn't be possible:

Traceback (most recent call last):
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 192, in _parent
    self._check_child_runtimes()
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 496, in _check_child_runtimes
    ping = read_fd(child.pingin)
  File "./venv/lib/python3.10/site-packages/wakaq/utils.py", line 151, in read_fd
    return os.read(fd, 64000).decode("utf8")
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 358, in _on_soft_timeout_child
    raise SoftTimeout("SoftTimeout")
wakaq.exceptions.SoftTimeout: SoftTimeout
another traceback
[2023-12-23 07:55:11,392] wakaq-worker-04 ERROR in None args=None kwargs=None retry=None: Traceback (most recent call last):
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 186, in _parent
    self._listen_for_broadcast_task()
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 526, in _listen_for_broadcast_task
    msg = self._pubsub.get_message(ignore_subscribe_messages=True, timeout=self.wakaq.wait_timeout)
  File "./venv/lib/python3.10/site-packages/redis/client.py", line 1013, in get_message
    response = self.parse_response(block=(timeout is None), timeout=timeout)
  File "./venv/lib/python3.10/site-packages/redis/client.py", line 824, in parse_response
    response = self._execute(conn, try_read)
  File "./venv/lib/python3.10/site-packages/redis/client.py", line 800, in _execute
    return conn.retry.call_with_retry(
  File "./venv/lib/python3.10/site-packages/redis/retry.py", line 46, in call_with_retry
    return do()
  File "./venv/lib/python3.10/site-packages/redis/client.py", line 801, in <lambda>
    lambda: command(*args, **kwargs),
  File "./venv/lib/python3.10/site-packages/redis/client.py", line 818, in try_read
    if not conn.can_read(timeout=timeout):
  File "./venv/lib/python3.10/site-packages/redis/connection.py", line 478, in can_read
    return self._parser.can_read(timeout)
  File "./venv/lib/python3.10/site-packages/redis/_parsers/base.py", line 128, in can_read
    return self._buffer and self._buffer.can_read(timeout)
  File "./venv/lib/python3.10/site-packages/redis/_parsers/socket.py", line 95, in can_read
    return bool(self.unread_bytes()) or self._read_from_socket(
  File "./venv/lib/python3.10/site-packages/redis/_parsers/socket.py", line 65, in _read_from_socket
    data = self._sock.recv(socket_read_size)
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 358, in _on_soft_timeout_child
    raise SoftTimeout("SoftTimeout")
wakaq.exceptions.SoftTimeout: SoftTimeout
and another traceback
[2023-12-23 07:55:11,393] wakaq-worker-04 ERROR in None args=None kwargs=None retry=None: Traceback (most recent call last):
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 183, in _parent
    self._enqueue_ready_eta_tasks()
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 379, in _enqueue_ready_eta_tasks
    results = script(keys=[queue.broker_eta_key], args=[int(round(time.time()))])
  File "./venv/lib/python3.10/site-packages/redis/commands/core.py", line 5931, in __call__
    return client.evalsha(self.sha, len(keys), *args)
  File "./venv/lib/python3.10/site-packages/redis/commands/core.py", line 5307, in evalsha
    return self._evalsha("EVALSHA", sha, numkeys, *keys_and_args)
  File "./venv/lib/python3.10/site-packages/redis/commands/core.py", line 5291, in _evalsha
    return self.execute_command(command, sha, numkeys, *keys_and_args)
  File "./venv/lib/python3.10/site-packages/redis/client.py", line 536, in execute_command
    return conn.retry.call_with_retry(
  File "./venv/lib/python3.10/site-packages/redis/retry.py", line 46, in call_with_retry
    return do()
  File "./venv/lib/python3.10/site-packages/redis/client.py", line 537, in <lambda>
    lambda: self._send_command_parse_response(
  File "./venv/lib/python3.10/site-packages/redis/client.py", line 513, in _send_command_parse_response
    return self.parse_response(conn, command_name, **options)
  File "./venv/lib/python3.10/site-packages/redis/client.py", line 553, in parse_response
    response = connection.read_response()
  File "./venv/lib/python3.10/site-packages/redis/connection.py", line 500, in read_response
    response = self._parser.read_response(disable_decoding=disable_decoding)
  File "./venv/lib/python3.10/site-packages/redis/_parsers/resp2.py", line 15, in read_response
    result = self._read_response(disable_decoding=disable_decoding)
  File "./venv/lib/python3.10/site-packages/redis/_parsers/resp2.py", line 25, in _read_response
    raw = self._buffer.readline()
  File "./venv/lib/python3.10/site-packages/redis/_parsers/socket.py", line 115, in readline
    self._read_from_socket()
  File "./venv/lib/python3.10/site-packages/redis/_parsers/socket.py", line 65, in _read_from_socket
    data = self._sock.recv(socket_read_size)
  File "./venv/lib/python3.10/site-packages/wakaq/worker.py", line 358, in _on_soft_timeout_child
    raise SoftTimeout("SoftTimeout")
wakaq.exceptions.SoftTimeout: SoftTimeout