When a booking runs as an Orchestra workflow, the workflow starter clears each held booking's hold_expires so the workflow's node timeouts own the hold windows. If that instance is later cancelled or fails, its still-held lines must be released; otherwise cron skips them (it only expires holds that carry a deadline) and the seats stay withheld from sale.

The bridge already had a release handler, but it was registered on the orchestra_instance_update entity hook. Orchestra flips an instance to a terminal state with a guarded database write that bypasses entity save, so that hook never fires on cancel or fail: the release never ran and capacity leaked.

The fix moves the release to an InstanceEndedEvent subscriber, which Orchestra dispatches on every terminal path. It acts only on the cancelled and failed states and releases the order's remaining held lines, guarded so the reconciler does not treat the release as an out-of-band change. The previously skipped kernel test that asserts this is re-enabled.

Issue fork yoyaku-3611591

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

mably created an issue. See original summary.

mably’s picture

Status: Active » Needs review
mably’s picture

Status: Needs review » Fixed

Now that this issue is closed, review the contribution record.

As a contributor, attribute any organization that helped you, or if you volunteered your own time.

Maintainers, credit people who helped resolve this issue.

  • mably committed a082550d on 1.x
    fix: #3611591 Release still-held bookings when a workflow instance is...