Skip to content

3.9.3

Choose a tag to compare

@rmcdaniel rmcdaniel released this 04 Nov 04:44
· 446 commits to main since this release
1445eb2

Install: composer require durable-workflow/sdk:^3.9

Upgrade from 3.9.2 now. 3.9.2 can fail existing runs on native Server 3.0.x that contain a repeated condition-wait open. 3.9.1 users should upgrade too, to keep 3.9.2's fix that stops unrelated signals from restarting a waitCondition() timeout (#269).

Fixed

  • Repeated condition-wait opens (#283, #284). When a queued workflow task re-sends a still-open wait, native Server records a second physical wait, and the first wait's timer still fires later. 3.9.2 treated that timeout as finishing the first wait, split it from the chain, and replay failed with a non-determinism error. A later open now continues an earlier same-key wait if that wait was still open or satisfied when the later one opened. A timeout before the later open still makes a separate call, such as a grace period. When the deadline has already passed, the worker re-sends the wait with timeout_seconds: 0, so the Server times it out at once and waitCondition() returns false.
    • Known limitation: a repeated open that the Server records after the earlier wait has already timed out is still refused by replay. Server 3.1.1 is planned to stop recording repeated opens of a still-open wait (server#1015), which removes that case.
  • Request bodies keep full float precision whatever the host's serialize_precision is (#248, #276).

Added

  • open_condition_wait commands carry condition_wait_occurrence_id (protocol 1.17), php:condition-wait:N for the Nth waitCondition() or deferCondition() call in the run (#269, #274). Every replay and reopen of one call sends the same id, so the Server can recognize a repeated open of a still-open wait. Servers that don't use it ignore it.