Repository navigation
Multicast: canceling one host no longer cancels the whole session (rc) - #1905
Merged
Merged
Conversation
Task::cancel() set a host's whole multicast session to canceled, and MulticastManager treated any canceled member task as a canceled session: it killed udp-sender and canceled every other host. One host that never booted forced the whole session to start over. - Task::cancel() and TaskManager::cancel() remove only the canceled host. A sized session waits for one host fewer. The session ends only when no host is left. TaskManager decides per session. - MulticastManager drops canceled hosts from a running session and keeps the sender. A PXE join in the same tick as a cancel is no longer missed. - udp-sender's --min-receivers is fixed at launch. When hosts were removed and every remaining host has connected, the manager sends udpcast's CMD_GO, so the sender starts without the max-wait. - The boot menu sends mcastMaxWait (minutes) so FOS can bound udp-receiver's wait (FOGProject/fos#48). Closes #1903. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 19, 2026
mastacontrola
added a commit
that referenced
this pull request
Oct 19, 2026
Set the System.php release fallback to 1.6.0-RC-14. RC-14 fixes canceling one host in a multicast session, which canceled the whole session (#1903, #1905, #1909). The PXE menu's Secure Boot key enrollment now records mok-pending (#1869, #1899). It removes the dead boot fields from the group create form (#1901). It also fixes non-ASCII tab titles after AJAX navigation, completes the Japanese translation, and fixes uptime unit plurals (#1910, #1913). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Port of #1904 to rc-1.6.0. Refs #1903. FOS half: FOGProject/fos#48 (FOGProject/fos#193).
Problem. Canceling one host in a multicast session canceled every host in it.
Cause.
Task::cancel()set the whole session to canceled.MulticastManagertreated any canceled member task as a canceled session, killedudp-sender, and canceled the rest.Fix.
Task::cancel()andTaskManager::cancel()remove only the canceled host and lower a sized session'ssessclients. The session ends only when no host is left.TaskManagernow decides per session.MulticastManagerdrops canceled hosts and keeps the sender. A PXE join in the same tick as a cancel is no longer missed.--min-receiversis fixed whenudp-senderstarts. When hosts were removed and every remaining host has connected, the manager sends udpcast'sCMD_GO(opcode 2, from the session's portbase), so the sender starts without the max-wait.mcastMaxWait=<minutes>for the FOS receiver timeout.Verified.
tests/multicast-cancel-one-host.test.php, 15 checks. Each defect reintroduced turns it red.udp-sender. Cancel one host through the Active Tasks path: the session and sender PID stay, 2 tasks stay queued,sessclients3 → 2. Cancel one throughTask::cancel(): the same result. Cancel the last host: the session is canceled and the sender is stopped.CMD_GOagainst a realudp-senderwaiting for 2 receivers with 1 connected: the transfer started at once, and the received file is byte-identical.Not verified. No real FOS client ran a full multicast deploy with this change.
🤖 Generated with Claude Code