Skip to content

Commit 57fe84b

Browse files
fix: timer precision and test sensitivity
1 parent 44ce1fa commit 57fe84b

2 files changed

Lines changed: 8 additions & 7 deletions

File tree

src/flock/components/orchestrator/scheduling/timer.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,10 +283,10 @@ def _calculate_next_fire_time(
283283
target = now.replace(
284284
hour=spec.at.hour,
285285
minute=spec.at.minute,
286-
second=spec.at.second if spec.at.second else 0,
286+
second=spec.at.second,
287287
microsecond=0,
288288
)
289-
if target <= now:
289+
if target < now.replace(microsecond=0):
290290
# Time passed today, schedule for tomorrow
291291
target += timedelta(days=1)
292292
return target
@@ -343,14 +343,15 @@ async def _wait_for_next_fire(self, spec: ScheduleSpec) -> None:
343343
target = now.replace(
344344
hour=spec.at.hour,
345345
minute=spec.at.minute,
346-
second=spec.at.second if spec.at.second else 0,
346+
second=spec.at.second,
347347
microsecond=0,
348348
)
349-
if target <= now:
349+
if target < now.replace(microsecond=0):
350350
# Time passed today, schedule for tomorrow
351351
target += timedelta(days=1)
352352
seconds_until = (target - now).total_seconds()
353-
await asyncio.sleep(seconds_until)
353+
if seconds_until > 0:
354+
await asyncio.sleep(seconds_until)
354355

355356
elif isinstance(spec.at, datetime):
356357
# One-time scheduling: wait until specific datetime

tests/test_timer_component.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -582,8 +582,8 @@ async def test_wait_for_next_fire_time_future_today(self):
582582
elapsed = (datetime.now(UTC) - start).total_seconds()
583583

584584
# Assert - Should sleep for approximately the expected wait time
585-
# Allow 0.1s tolerance for execution overhead
586-
assert elapsed >= expected_wait - 0.1
585+
# Allow 0.5s tolerance for execution overhead and timing variance in CI
586+
assert elapsed >= expected_wait - 0.5
587587
assert elapsed < expected_wait + 0.5
588588

589589
@pytest.mark.asyncio

0 commit comments

Comments
 (0)