mirror of https://github.com/rq/rq.git
Add to worker redis record scheduler info (#1787)
* add scheduler_pid property to queue * Update return type * Reformat code
This commit is contained in:
parent
a02ad29cef
commit
3d840a79ad
11
rq/queue.py
11
rq/queue.py
|
@ -3,11 +3,11 @@ import sys
|
|||
import traceback
|
||||
import uuid
|
||||
import warnings
|
||||
|
||||
from collections import namedtuple
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from functools import total_ordering
|
||||
from typing import TYPE_CHECKING, Dict, List, Any, Callable, Optional, Tuple, Type, Union
|
||||
|
||||
from redis import WatchError
|
||||
|
||||
if TYPE_CHECKING:
|
||||
|
@ -24,7 +24,6 @@ from .types import FunctionReferenceType, JobDependencyType
|
|||
from .serializers import resolve_serializer
|
||||
from .utils import backend_class, get_version, import_attribute, make_colorizer, parse_timeout, utcnow, compact
|
||||
|
||||
|
||||
green = make_colorizer('darkgreen')
|
||||
yellow = make_colorizer('darkyellow')
|
||||
blue = make_colorizer('darkblue')
|
||||
|
@ -119,7 +118,7 @@ class Queue:
|
|||
prefix = cls.redis_queue_namespace_prefix
|
||||
if not queue_key.startswith(prefix):
|
||||
raise ValueError('Not a valid RQ queue key: {0}'.format(queue_key))
|
||||
name = queue_key[len(prefix) :]
|
||||
name = queue_key[len(prefix):]
|
||||
return cls(name, connection=connection, job_class=job_class, serializer=serializer)
|
||||
|
||||
def __init__(
|
||||
|
@ -196,6 +195,12 @@ class Queue:
|
|||
"""Redis key used to indicate this queue has been cleaned."""
|
||||
return 'rq:clean_registries:%s' % self.name
|
||||
|
||||
@property
|
||||
def scheduler_pid(self) -> int:
|
||||
from rq.scheduler import RQScheduler
|
||||
pid = self.connection.get(RQScheduler.get_locking_key(self.name))
|
||||
return int(pid.decode()) if pid is not None else None
|
||||
|
||||
def acquire_cleaning_lock(self) -> bool:
|
||||
"""Returns a boolean indicating whether a lock to clean this queue
|
||||
is acquired. A lock expires in 899 seconds (15 minutes - 1 second)
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import os
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from multiprocessing import Process
|
||||
|
||||
from unittest import mock
|
||||
|
||||
from rq import Queue
|
||||
from rq.defaults import DEFAULT_MAINTENANCE_TASK_INTERVAL
|
||||
from rq.exceptions import NoSuchJobError
|
||||
from rq.job import Job, Retry
|
||||
from rq.registry import FinishedJobRegistry, ScheduledJobRegistry
|
||||
|
@ -11,10 +12,7 @@ from rq.scheduler import RQScheduler
|
|||
from rq.serializers import JSONSerializer
|
||||
from rq.utils import current_timestamp
|
||||
from rq.worker import Worker
|
||||
from rq.defaults import DEFAULT_MAINTENANCE_TASK_INTERVAL
|
||||
|
||||
from tests import RQTestCase, find_empty_redis_database, ssl_test
|
||||
|
||||
from .fixtures import kill_worker, say_hello
|
||||
|
||||
|
||||
|
@ -140,7 +138,7 @@ class TestScheduler(RQTestCase):
|
|||
# scheduler.should_reacquire_locks always returns False if
|
||||
# scheduler.acquired_locks and scheduler._queue_names are the same
|
||||
self.assertFalse(scheduler.should_reacquire_locks)
|
||||
scheduler.lock_acquisition_time = datetime.now() - timedelta(seconds=DEFAULT_MAINTENANCE_TASK_INTERVAL+6)
|
||||
scheduler.lock_acquisition_time = datetime.now() - timedelta(seconds=DEFAULT_MAINTENANCE_TASK_INTERVAL + 6)
|
||||
self.assertFalse(scheduler.should_reacquire_locks)
|
||||
|
||||
scheduler._queue_names = set(['default', 'foo'])
|
||||
|
@ -196,6 +194,12 @@ class TestScheduler(RQTestCase):
|
|||
self.assertEqual(mocked.call_count, 1)
|
||||
self.assertEqual(stopped_process.is_alive.call_count, 1)
|
||||
|
||||
def test_queue_scheduler_pid(self):
|
||||
queue = Queue(connection=self.testconn)
|
||||
scheduler = RQScheduler([queue, ], connection=self.testconn)
|
||||
scheduler.acquire_locks()
|
||||
assert queue.scheduler_pid == os.getpid()
|
||||
|
||||
def test_heartbeat(self):
|
||||
"""Test that heartbeat updates locking keys TTL"""
|
||||
name_1 = 'lock-test-1'
|
||||
|
|
Loading…
Reference in New Issue