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

Method ExpireTaskBlocks

internal/task/block_service.go:371–414  ·  view source on GitHub ↗

ExpireTaskBlocks finalizes expired transient blocks through service-owned transitions.

(
	ctx context.Context,
	now time.Time,
	actor ActorContext,
)

Source from the content-addressed store, hash-verified

369
370// ExpireTaskBlocks finalizes expired transient blocks through service-owned transitions.
371func (m *Service) ExpireTaskBlocks(
372 ctx context.Context,
373 now time.Time,
374 actor ActorContext,
375) (ExpireTaskBlocksResult, error) {
376 if err := requireWriteAuthority(actor); err != nil {
377 return ExpireTaskBlocksResult{}, err
378 }
379 expireAt := now.UTC()
380 if expireAt.IsZero() {
381 expireAt = m.now().UTC()
382 }
383 result, err := m.store.ExpireTaskBlocks(ctx, ExpireTaskBlocksMutation{
384 Now: expireAt,
385 ClearedBy: actor.Actor,
386 })
387 if err != nil {
388 return ExpireTaskBlocksResult{}, err
389 }
390 blocksByTask := make(map[string][]TaskBlock)
391 taskIDs := make([]string, 0)
392 for _, block := range result.Blocks {
393 if _, ok := blocksByTask[block.TaskID]; !ok {
394 taskIDs = append(taskIDs, block.TaskID)
395 }
396 blocksByTask[block.TaskID] = append(blocksByTask[block.TaskID], block)
397 }
398 for _, taskID := range taskIDs {
399 blocks := blocksByTask[taskID]
400 reconciled, reconcileErr := m.reconcileTaskCascade(ctx, taskID)
401 if reconcileErr != nil {
402 return ExpireTaskBlocksResult{}, reconcileErr
403 }
404 for _, block := range blocks {
405 m.recordTaskBlockExpired(ctx, block, reconciled, actor)
406 m.dispatchTaskUnblocked(ctx, block, reconciled, actor)
407 }
408 m.autoEnqueueReadyTaskDetached(ctx, taskID, autoEnqueueTrigger{
409 Kind: autoEnqueueTriggerTransientExpiry,
410 Ref: transientExpiryTriggerRef(blocks),
411 }, actor)
412 }
413 return result, nil
414}
415
416func transientExpiryTriggerRef(blocks []TaskBlock) string {
417 if len(blocks) == 1 {

Callers

nothing calls this directly

Calls 10

reconcileTaskCascadeMethod · 0.95
dispatchTaskUnblockedMethod · 0.95
requireWriteAuthorityFunction · 0.85
appendFunction · 0.85
ExpireTaskBlocksMethod · 0.65
IsZeroMethod · 0.45
nowMethod · 0.45

Tested by

no test coverage detected