Skip to content

Commit 186d6dd

Browse files
committed
fix:add some logging
1 parent 5d8e6ec commit 186d6dd

File tree

5 files changed

+29
-10
lines changed

5 files changed

+29
-10
lines changed

scheduler/helpers/queues/queue_logic.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,11 @@ def create_and_enqueue_job(
237237
)
238238
if when is None:
239239
job_model = self.enqueue_job(job_model, connection=pipeline, at_front=at_front)
240-
else:
240+
elif isinstance(when, datetime):
241241
job_model.save(connection=self.connection)
242-
self.scheduled_job_registry.schedule(self.connection, job_model, when)
242+
self.scheduled_job_registry.schedule(self.connection, job_model.name, when)
243+
else:
244+
raise TypeError(f"Invalid type for when=`{when}`")
243245
return job_model
244246

245247
def job_handle_success(self, job: JobModel, result: Any, result_ttl: int, connection: ConnectionType):

scheduler/models/task.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ def _schedule(self) -> bool:
347347
return False
348348
schedule_time = self._schedule_time()
349349
if self.task_type in {TaskType.REPEATABLE, TaskType.ONCE} and schedule_time < timezone.now():
350+
logger.debug(f"Task {str(self)} scheduled time is in the past, not scheduling")
350351
return False
351352
kwargs = self._enqueue_args()
352353
job = self.rqueue.create_and_enqueue_job(
@@ -356,7 +357,6 @@ def _schedule(self) -> bool:
356357
**kwargs,
357358
)
358359
self.job_name = job.name
359-
super(Task, self).save()
360360
return True
361361

362362
def save(self, **kwargs):

scheduler/redis_models/registry/queue_registries.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,18 +60,21 @@ def cleanup(self, connection: ConnectionType, timestamp: Optional[float] = None)
6060
and `all()` methods implemented in JobIdsRegistry."""
6161
pass
6262

63-
def schedule(self, connection: ConnectionType, job: JobModel, scheduled_datetime: datetime):
64-
"""
65-
Adds job to registry, scored by its execution time (in UTC).
63+
def schedule(self, connection: ConnectionType, job_name: str, scheduled_datetime: datetime) -> int:
64+
"""Adds job_name to registry, scored by its execution time (in UTC).
6665
If datetime has no tzinfo, it will assume localtimezone.
66+
67+
:param connection: Broker connection
68+
:param job_name: Job name to schedule
69+
:param scheduled_datetime: datetime to schedule job
6770
"""
6871
# If datetime has no timezone, assume server's local timezone
6972
if not scheduled_datetime.tzinfo:
7073
tz = timezone(timedelta(seconds=-(time.timezone if time.daylight == 0 else time.altzone)))
7174
scheduled_datetime = scheduled_datetime.replace(tzinfo=tz)
7275

7376
timestamp = scheduled_datetime.timestamp()
74-
return connection.zadd(self._key, {job.name: timestamp})
77+
return self.add(connection=connection, job_name=job_name, score=timestamp)
7578

7679
def get_jobs_to_schedule(self, timestamp: int, chunk_size: int = 1000) -> List[str]:
7780
"""Gets a list of job names that should be scheduled.

scheduler/tests/test_task_types/test_repeatable_task.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,31 @@
55
from django.utils import timezone
66

77
from scheduler import settings
8+
from scheduler.models import TaskType, Task
89
from scheduler.redis_models import JobModel
910
from scheduler.tests.test_task_types.test_task_model import BaseTestCases
1011
from scheduler.tests.testtools import task_factory, _get_task_scheduled_job_from_registry
11-
from scheduler.models import TaskType
1212
from scheduler.types import SchedulerConfiguration
1313

1414

1515
class TestRepeatableTask(BaseTestCases.TestSchedulableTask):
1616
task_type = TaskType.REPEATABLE
1717
queue_name = settings.get_queue_names()[0]
1818

19+
def test_create_task_error(self):
20+
scheduled_time = timezone.now()
21+
22+
Task.objects.create(
23+
name="konichiva_every_2s",
24+
callable="chat.task_scheduler.konichiva_func",
25+
task_type="REPEATABLE",
26+
interval=2,
27+
interval_unit="seconds",
28+
queue="default",
29+
enabled=True,
30+
scheduled_time=scheduled_time,
31+
)
32+
1933
def test_unschedulable_old_job(self):
2034
job = task_factory(self.task_type, scheduled_time=timezone.now() - timedelta(hours=1), repeat=0)
2135
self.assertFalse(job.is_scheduled())
@@ -145,7 +159,7 @@ def test_repeat_none_interval_2_min(self):
145159
task = task_factory(self.task_type, scheduled_time=base_time - timedelta(minutes=29), repeat=None)
146160
task.interval = 120
147161
task.interval_unit = "seconds"
148-
task._schedule()
162+
task.save()
149163
self.assertTrue(task.scheduled_time > base_time)
150164
self.assertTrue(task.is_scheduled())
151165

scheduler/tests/test_task_types/test_task_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ def test_clean_invalid_queue(self):
102102

103103
def test_is_schedulable_already_scheduled(self):
104104
task = task_factory(self.task_type)
105-
task._schedule()
105+
task.save()
106106
self.assertTrue(task.is_scheduled())
107107

108108
def test_is_schedulable_disabled(self):

0 commit comments

Comments
 (0)