Learning Path
Welcome to st2
Your guide to understanding the codebase
Learning Path Overview
- 5 levels
- 15 learning units
Orchestration & APIs
- Pipelines, workflows, public interfaces • 3 units
Pack-Based Plugin Architecture
- Architecture • 7
Data Models and Persistence
- Data Model • 6
Actions and Runners Fundamentals
- Patterns • 1
Core Logic & Data
- Business rules, schemas, models • 3 units
REST API and Serialization
- API • 6
Security and Access Control
- Security • 5
Triggers and Sensors
- Workflow • 10
Interaction & Integration
- UI components, external connectors • 3 units
Message Queue and Service Integration
- Integration • 8
Rules, Policies, and Automation
- Workflow • 4
Workflow Engines and Execution
- Workflow • 2
Cross-Cutting Concerns
- Auth, logging, config, testing • 2 units
ChatOps and Action Aliases
- API • 10
Observability and Operations
- Infrastructure • 14
Edge Cases & Resilience
- Error handling, fault tolerance • 1 units
Additional Data Model Patterns
- Data Model • 11
Test Your Knowledge
Test your deep understanding of the codebase
Quiz Overview
- Progress 0/26 answered
- Question Tiers:
- Why: 8
- Purpose & Problem Architecture: 10
- Design & Patterns Code: 8
- Implementation
Hands-On Assignment
Duration: 45-60 minutes
Your Challenge
Build a custom runner that executes actions with retry logic and exponential backoff. Your runner should accept parameters for max retries, initial delay, and backoff multiplier, then automatically retry failed actions while respecting these constraints. This will help you understand how runners interact with the execution framework and handle action lifecycle events.
Starting Points
contrib/runners/action_chain_runner/action_chain_runner/action_chain_runner.py:1-93
Study how ActionChainRunner extends the base runner class, handles action execution, and manages state transitionscontrib/runners/action_chain_runner/action_chain_runner/action_chain_runner.py:45-70
Notice how the run() method is implemented and how it returns action statuscontrib/examples/config.schema.yaml:1-21
Examine how runner parameters are defined using JSON schema - you'll need to create a similar schema for your retry runnercontrib/runners/action_chain_runner/action_chain_runner/
Create your new retry_runner package here, following the same structure as action_chain_runner
Success Criteria
- Runner successfully retries failed actions up to max_retries times
- Delays between retries follow exponential backoff pattern (can verify via logs/timing)
- Runner stops retrying and returns success when action succeeds before max_retries
- Runner returns failure status when max_retries is exhausted
- config.schema.yaml properly validates runner parameters
- Runner can be registered and invoked through st2 action execution
Hints
- Hint 1: Understanding the Runner base class conceptually
- Hint 2: Action execution and status handling code location
- Hint 3: Parameter schema definition implementation
- Hint 4: Implementing exponential backoff implementation
- Hint 5: Testing your runner implementation
Prerequisites
- Python classes and inheritance
- Action execution model
- JSON Schema basics