Releases: balena-io-modules/mahler-rs
Release list
v0.16.0
Remove log crate conversion layer and simplify logging
- Remove src/worker/logging.rs conversion layer (300+ lines deleted)
- Eliminate logging feature flag and log crate dependency
- Update examples to use tracing-subscriber directly
- Simplify library documentation for logging configuration
- Replace conditional logging with direct tracing integration
List of commits
ecd1175 (Remove log crate conversion layer and simplify logging architecture, 2025-06-17)
v0.15.2
ae8014d (Update metadata in Cargo.toml, 2025-06-12)
v0.15.1
79f2965 (Remove flowzone build status from README, 2025-06-11)
v0.15.0
Add seek_with_interrupt method for user-controlled worker cancellation
New Features
- User-controlled worker cancellation: Added
seek_with_interruptmethod for external cancellation control - Public
Interruptstruct: Now exported from theworkflowmodule with comprehensive documentation - Graceful cancellation: Workers can be cancelled mid-execution while preserving worker ownership
- Interrupt propagation: When interrupted, cancellation is properly propagated to running workflow tasks
Usage Example
use mahler::workflow::Interrupt;
let interrupt = Interrupt::new();
let interrupt_clone = interrupt.clone();
// Start worker with interrupt control
let worker_handle = tokio::spawn(async move {
worker.seek_with_interrupt(target_state, interrupt).await
});
// Cancel from another task
tokio::spawn(async move {
tokio::time::sleep(Duration::from_secs(5)).await;
interrupt_clone.trigger(); // Cancel the worker
});
let result = worker_handle.await.unwrap().unwrap();
assert_eq!(result.status(), &SeekStatus::Interrupted);Compatibility
- Fully backward compatible: Existing
seek_targetusage continues to work unchanged - No breaking changes: All existing APIs remain the same
Users can now create an Interrupt, pass it to seek_with_interrupt, and trigger cancellation from external tasks or threads. This enables better control over long-running worker operations and graceful shutdown scenarios.
List of commits
b6cf117 (Make Interrupt struct public, 2025-06-11)
519ec0b (Add seek_with_interrupt method for user-controlled worker cancellation, 2025-06-11)
v0.14.3
v0.14.2
v0.14.1
afc1f01 (Rename the library to mahler and update README, 2025-05-22)
fc713ea (Move FromSystem to task module, 2025-05-26)
4890e0f (Remove redundant Pointer methods, 2025-05-26)
f2b9cc7 (Rename SeekStatus::TargetReached to Success, 2025-05-27)
f5d5fd7 (Unify Ready and Idle worker states, 2025-05-28)
a261c08 (Update code documentation, 2025-05-23)
2958fa8 (Create a test to run readme example, 2025-06-03)
v0.14.0
Add support for parallel workflow generation
This introduces a first version of parallel plan generation into the planner. This takes advantage of the scoped nature of tasks to select tasks for non-conflicting paths and run them as parallel branches in the generated workflow. This also does the same for methods, where a method returning tasks for non-conflicting paths is executed as parallel branches.
The planning algorithm is still quite crude, future versions should use some cost optimization heuristic taking into account the depth of the workflow, number of changes introduced by the task, etc.
List of commits
29ed3c9 (Create the plan front-to back, 2025-05-17)
83d7843 (Use parallel branches for non conflicting paths in planner, 2025-05-17)
56ea676 (Generate parallel workflows when expanding methods, 2025-05-19)
9dce754 (Remove unused DAG methods, 2025-05-19)
ae93688 (Prioritize method parallelism over automated parallelism, 2025-05-19)
v0.13.0
dee594b (Do not allow empty tasks in methods, 2025-05-10)