MCPcopy Create free account
hub / github.com/compozy/agh / autoEnqueueReadyTask

Method autoEnqueueReadyTask

internal/task/lease_manager.go:411–457  ·  view source on GitHub ↗
(
	ctx context.Context,
	taskID string,
	trigger autoEnqueueTrigger,
	pauseReader effectiveTaskPauseReader,
	actor ActorContext,
)

Source from the content-addressed store, hash-verified

409}
410
411func (m *Service) autoEnqueueReadyTask(
412 ctx context.Context,
413 taskID string,
414 trigger autoEnqueueTrigger,
415 pauseReader effectiveTaskPauseReader,
416 actor ActorContext,
417) {
418 taskRecord, err := m.store.GetTask(ctx, taskID)
419 if err != nil {
420 slog.Error("task: auto-enqueue load task failed", "task_id", taskID, "error", err)
421 return
422 }
423 if !taskRecord.AutoEnqueueOnReady || taskRecord.Status.Normalize() != TaskStatusReady {
424 return
425 }
426 if pauseReader != nil {
427 paused, _, pauseErr := pauseReader.IsTaskEffectivelyPaused(ctx, taskID)
428 if pauseErr != nil {
429 slog.Warn("task: auto-enqueue pause check failed", "task_id", taskID, "error", pauseErr)
430 return
431 }
432 if paused {
433 return
434 }
435 }
436 key := trigger.idempotencyKey(taskID)
437 run, enqErr := m.EnqueueRun(ctx, EnqueueRun{TaskID: taskID, IdempotencyKey: key}, actor)
438 switch {
439 case enqErr == nil:
440 m.recordAutoEnqueueTriggered(ctx, taskRecord, run, trigger, actor)
441 case errors.Is(enqErr, ErrInvalidStatusTransition) || errors.Is(enqErr, ErrConflict):
442 // Expected dedup: store rejects a second run (open run) or replayed idempotency key.
443 slog.Debug(
444 "task: auto-enqueue skipped; task already has an open run",
445 "task_id", taskID,
446 "trigger_kind", trigger.Kind,
447 "error", enqErr,
448 )
449 default:
450 slog.Warn(
451 "task: auto-enqueue run failed",
452 "task_id", taskID,
453 "trigger_kind", trigger.Kind,
454 "error", enqErr,
455 )
456 }
457}
458
459func (m *Service) recordAutoEnqueueTriggered(
460 ctx context.Context,

Callers 1

autoEnqueueReadyTasksMethod · 0.95

Calls 8

EnqueueRunMethod · 0.95
idempotencyKeyMethod · 0.80
GetTaskMethod · 0.65
ErrorMethod · 0.45
NormalizeMethod · 0.45
IsMethod · 0.45

Tested by

no test coverage detected