Per-node timeout anchor + node-level Timeout CM feature (#3604996)

Implements #3604996: a node's single timeout window can be anchored so it spans re-entries, and the single timeout is now a first-class, UI-authorable node feature.

Anchor

A node's single timeout was rearmed on every park, so a retry loop restarted the window. A timeout_anchor now controls where the window is measured from:

  • park (default): now, rearmed each park (unchanged).
  • instance: instance-created, a process-global budget.
  • node: first arrival at the node, a per-step budget across retries (the payment-with-10-min-total case). The first arrival is stored as an internal instance variable, reused on re-entry, and cleared when the token leaves the node.

Harmonized into a node-level CM feature (UI)

The single timeout had no UI and was the lone node setting living under node['config'], unlike the node-level timers/retry/assignments features. It is now a proper Timeout node feature with a Complete Modeler editor (duration + on-timeout action + anchor), shown for parking task types. It lives at node['timeout'] = {duration, action, anchor, settings} and the engine reads it the same way it reads node['timers'].

  • New Timeout NodeFeature; ProcessInstance::getCreatedTime(); validatable Choice schema for the anchor.
  • parkDeadline() and the timeout sweep read node['timeout']; the example workflow and every timeout test migrated to the new shape.

Tests

InstanceTimeoutAnchorTest (each anchor, node reuse across re-entry, clear-on-pass), NodeFeatureEditorTest (the feature applies to parking nodes and persists through a CM save), plus the migrated TimeoutTest / NotifyTimeoutTest / SpawnTimeoutTest / UnclaimTimeoutTest / NodeExtrasRoundTripTest / ExamplesTest. Green locally; phpcs clean. drupal.org CI is the full-regression gate.

Edited by Frank Mably

Merge request reports

Loading