Task Execution Workflow and State Management
User Story
As a user, I want reliable task execution with proper state tracking so that I can monitor my code execution progress and results.
Technical Requirements
Acceptance Criteria
Definition of Done
Implementation Guide
Redis Queue Setup
# Install Redis client
go get github.com/go-redis/redis/v8
# Redis configuration for task queues
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG SET save "60 1000"
Task State Machine
type TaskStatus string
const (
StatusPending TaskStatus = "pending"
StatusRunning TaskStatus = "running"
StatusCompleted TaskStatus = "completed"
StatusFailed TaskStatus = "failed"
StatusCancelled TaskStatus = "cancelled"
StatusTimeout TaskStatus = "timeout"
)
// Valid state transitions
var validTransitions = map[TaskStatus][]TaskStatus{
StatusPending: {StatusRunning, StatusCancelled},
StatusRunning: {StatusCompleted, StatusFailed, StatusTimeout, StatusCancelled},
StatusCompleted: {},
StatusFailed: {StatusPending}, // Allow retry
StatusTimeout: {StatusPending}, // Allow retry
StatusCancelled: {},
}
Container Lifecycle Management
type ExecutionContext struct {
TaskID string
ContainerID string
StartTime time.Time
Timeout time.Duration
CancelChan chan struct{}
ResultChan chan ExecutionResult
}
func (e *ExecutionEngine) ExecuteTask(ctx context.Context, task *Task) error {
// Create container
container, err := e.createContainer(task)
if err != nil {
return fmt.Errorf("failed to create container: %w", err)
}
// Start execution with timeout
execCtx := &ExecutionContext{
TaskID: task.ID,
Timeout: time.Duration(task.TimeoutSeconds) * time.Second,
CancelChan: make(chan struct{}),
ResultChan: make(chan ExecutionResult, 1),
}
return e.runWithTimeout(ctx, execCtx, container)
}
Queue Processing
- Priority-based task scheduling
- Worker pool with configurable concurrency
- Exponential backoff for retry logic
- Dead letter queue for permanently failed tasks
- Health checks for queue workers
Execution Results Collection
- Capture stdout/stderr streams
- Record execution time and resource usage
- Store exit codes and error messages
- Collect artifacts and logs
- Update task status in database
Related Epic
Contributes to Epic #8: Container Execution Engine
Task Execution Workflow and State Management
User Story
As a user, I want reliable task execution with proper state tracking so that I can monitor my code execution progress and results.
Technical Requirements
Acceptance Criteria
Definition of Done
Implementation Guide
Redis Queue Setup
Task State Machine
Container Lifecycle Management
Queue Processing
Execution Results Collection
Related Epic
Contributes to Epic #8: Container Execution Engine