Repair production automation truth and schedule cleanup
This commit is contained in:
parent
8bcb416285
commit
944fd158de
19 changed files with 441 additions and 64 deletions
|
|
@ -24,7 +24,12 @@ from temporalio.client import Client
|
|||
|
||||
from activity_core.models import ActivityDefinition, CronTriggerConfig, ScheduledTriggerConfig
|
||||
from activity_core.orm import ActivityDefinition as ActivityDefinitionRow
|
||||
from activity_core.schedule_manager import delete_schedule, list_schedules, upsert_schedule
|
||||
from activity_core.schedule_manager import (
|
||||
cancel_scheduled,
|
||||
delete_schedule,
|
||||
list_schedules,
|
||||
upsert_schedule,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
@ -107,7 +112,14 @@ async def sync_schedule_rows(
|
|||
valid_schedule_activity_ids.add(_valid_schedule_activity_id(defn))
|
||||
|
||||
try:
|
||||
await upsert_schedule(client, defn)
|
||||
if isinstance(defn.trigger_config, ScheduledTriggerConfig) and not defn.enabled:
|
||||
# A disabled one-shot has no future recurrence to preserve. A
|
||||
# completed Temporal schedule can reject in-place updates with
|
||||
# ScheduleAlreadyRunningError, leaving every later sync noisy.
|
||||
# Delete it idempotently instead; re-enabling recreates it.
|
||||
await cancel_scheduled(client, defn.id)
|
||||
else:
|
||||
await upsert_schedule(client, defn)
|
||||
except Exception as exc: # noqa: BLE001 — continue reconcile for other rows
|
||||
result.errors += 1
|
||||
detail = f"{defn.id} ({defn.name}): {type(exc).__name__}: {exc}"
|
||||
|
|
@ -120,7 +132,10 @@ async def sync_schedule_rows(
|
|||
logger.info("upserted schedule for activity %s (%s)", defn.id, defn.name)
|
||||
else:
|
||||
result.paused += 1
|
||||
logger.info("upserted paused schedule for disabled activity %s", defn.id)
|
||||
if isinstance(defn.trigger_config, ScheduledTriggerConfig):
|
||||
logger.info("removed schedule for disabled one-shot activity %s", defn.id)
|
||||
else:
|
||||
logger.info("upserted paused schedule for disabled activity %s", defn.id)
|
||||
|
||||
# Tombstone cleanup: remove Temporal Schedules with no matching DB row.
|
||||
try:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue