This commit is contained in:
@@ -21,6 +21,15 @@ func NewCronTracker(database db.Database) *CronTracker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ClearAllInProgress resets any stuck in-progress flags (e.g., after crashes).
|
||||||
|
func (c *CronTracker) ClearAllInProgress(ctx context.Context) error {
|
||||||
|
if err := c.ensureTable(ctx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err := c.db.DB().ExecContext(ctx, `UPDATE cron_status SET in_progress = FALSE`)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (c *CronTracker) ensureTable(ctx context.Context) error {
|
func (c *CronTracker) ensureTable(ctx context.Context) error {
|
||||||
conn := c.db.DB()
|
conn := c.db.DB()
|
||||||
driver := conn.DriverName()
|
driver := conn.DriverName()
|
||||||
|
|||||||
@@ -57,11 +57,16 @@ func (c *CronTask) RunVcenterSnapshotHourly(ctx context.Context, logger *slog.Lo
|
|||||||
jobCtx, cancel = context.WithTimeout(ctx, jobTimeout)
|
jobCtx, cancel = context.WithTimeout(ctx, jobTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
}
|
}
|
||||||
|
tracker := NewCronTracker(c.Database)
|
||||||
|
// Clear any stale in-progress markers (e.g., after a crash) before attempting the run.
|
||||||
|
if err := tracker.ClearAllInProgress(jobCtx); err != nil {
|
||||||
|
logger.Warn("failed to clear stale cron status", "error", err)
|
||||||
|
}
|
||||||
|
|
||||||
startedAt := time.Now()
|
startedAt := time.Now()
|
||||||
defer func() {
|
defer func() {
|
||||||
logger.Info("Hourly snapshot job finished", "duration", time.Since(startedAt))
|
logger.Info("Hourly snapshot job finished", "duration", time.Since(startedAt))
|
||||||
}()
|
}()
|
||||||
tracker := NewCronTracker(c.Database)
|
|
||||||
done, skip, err := tracker.Start(jobCtx, "hourly_snapshot")
|
done, skip, err := tracker.Start(jobCtx, "hourly_snapshot")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user