Skip to content

Releases: balena-io-modules/mahler-rs

v0.16.0

Choose a tag to compare

@flowzone-app flowzone-app released this 24 Jun 17:55
ae7cf2f

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

Choose a tag to compare

@flowzone-app flowzone-app released this 12 Jun 15:13
b42c012

ae8014d (Update metadata in Cargo.toml, 2025-06-12)

v0.15.1

Choose a tag to compare

@flowzone-app flowzone-app released this 11 Jun 21:46
a7d2ca3

79f2965 (Remove flowzone build status from README, 2025-06-11)

v0.15.0

Choose a tag to compare

@flowzone-app flowzone-app released this 11 Jun 20:27
b188697

Add seek_with_interrupt method for user-controlled worker cancellation

New Features

  • User-controlled worker cancellation: Added seek_with_interrupt method for external cancellation control
  • Public Interrupt struct: Now exported from the workflow module 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_target usage 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

Choose a tag to compare

@flowzone-app flowzone-app released this 06 Jun 18:02
0236bdf

b57f373 (Update README, 2025-06-05)
1065864 (Remove unused stack_len arg in Planner try_task, 2025-06-06)

v0.14.2

Choose a tag to compare

@flowzone-app flowzone-app released this 05 Jun 19:39
a80b4b9

2729a30 (Reduce memory allocations in planner search, 2025-06-04)
08b6f51 (Make planner candidate selection deterministic, 2025-06-04)
50736a4 (Simplify Workflow type to wrap DAG only, 2025-06-04)

v0.14.1

Choose a tag to compare

@flowzone-app flowzone-app released this 03 Jun 21:49
f0f9ab8

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

Choose a tag to compare

@flowzone-app flowzone-app released this 19 May 21:07
7694357

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

Choose a tag to compare

@flowzone-app flowzone-app released this 10 May 15:44
355a831

dee594b (Do not allow empty tasks in methods, 2025-05-10)

v0.12.2

Choose a tag to compare

@flowzone-app flowzone-app released this 29 Apr 03:05
eb103ad

be76706 (Fix bug in stacking planner test, 2025-04-26)
287fec9 (Refactor error handling, 2025-04-28)