fix: scheduler timezone-aware datetime subtraction in is_source_due
This commit is contained in:
@@ -125,8 +125,16 @@ def is_source_due(
|
||||
if last_status == "failed":
|
||||
if retry_count >= MAX_RETRY_COUNT:
|
||||
return False
|
||||
if next_retry_at and now < next_retry_at.replace(tzinfo=None):
|
||||
return False
|
||||
if next_retry_at:
|
||||
# Normalize tz-awareness to match 'now'
|
||||
if now.tzinfo is not None and next_retry_at.tzinfo is None:
|
||||
nra = next_retry_at.replace(tzinfo=timezone.utc)
|
||||
elif now.tzinfo is None and next_retry_at.tzinfo is not None:
|
||||
nra = next_retry_at.replace(tzinfo=None)
|
||||
else:
|
||||
nra = next_retry_at
|
||||
if now < nra:
|
||||
return False
|
||||
# Backoff elapsed or no next_retry_at set — allow retry
|
||||
return True
|
||||
|
||||
@@ -139,7 +147,12 @@ def is_source_due(
|
||||
return True
|
||||
|
||||
cadence = get_cadence_for_source(source_type, source_config)
|
||||
elapsed = (now - last_completed_at.replace(tzinfo=None)).total_seconds()
|
||||
# Ensure both datetimes have matching tz-awareness for subtraction
|
||||
if now.tzinfo is not None and last_completed_at.tzinfo is None:
|
||||
last_completed_at = last_completed_at.replace(tzinfo=timezone.utc)
|
||||
elif now.tzinfo is None and last_completed_at.tzinfo is not None:
|
||||
last_completed_at = last_completed_at.replace(tzinfo=None)
|
||||
elapsed = (now - last_completed_at).total_seconds()
|
||||
return elapsed >= cadence
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user