Skip to content

[fix] remove ASIC ports before replication cleanup on empty transition#232

Merged
zeeshanlakhani merged 2 commits intomainfrom
zl/fix-mcast-empty-transition
Mar 10, 2026
Merged

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani merged 2 commits intomainfrom
zl/fix-mcast-empty-transition

Conversation

@zeeshanlakhani
Copy link
Contributor

@zeeshanlakhani zeeshanlakhani commented Feb 28, 2026

When all members are removed from a multicast group, the (true, true) transition path cleaned up replication table entries but skipped process_membership_changes, leaving stale ports in the ASIC groups. Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication so mc_port_remove runs on every port. Extend the IPv6 empty-then-add integration test to cover the full add -> remove all -> re-add cycle.

References:

@zeeshanlakhani zeeshanlakhani force-pushed the zl/fix-mcast-empty-transition branch from 6ed1122 to c0cc2dc Compare February 28, 2026 07:20
When all members are removed from a multicast group, the (true, true)
transition path cleaned up replication table entries but skipped
process_membership_changes, leaving stale ports in the ASIC groups.
Subsequent re-adds failed with "already contains port" (500).

This fix calls process_membership_changes before cleanup_empty_group_replication
so mc_port_remove runs on every port. Extend the IPv6 empty-then-add
integration test to cover the full add -> remove all -> re-add cycle.
@zeeshanlakhani zeeshanlakhani force-pushed the zl/fix-mcast-empty-transition branch from c0cc2dc to 5a4f56e Compare February 28, 2026 07:32
@zeeshanlakhani zeeshanlakhani marked this pull request as ready for review February 28, 2026 09:37
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after testing with
a feature-gated (for multicast) dpd binary. 

There's a minor follow-up (oxidecomputer/dendrite#232) that I'll work in after this. 

- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter), fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
This includes a few changes I was already working on in relation to
#9898. This comes after
testing with a feature-gated (for multicast) dpd binary.

There's a minor follow-up
(oxidecomputer/dendrite#232) that I'll work in
after this.

- Use actual group tags from DPD responses instead of hardcoded "nexus"
- Rename IntoUnderlayMulticastIpv6 -> IntoUnderlayMulticast (shorter),
fits trait definition / more accurate
- Pass MulticastTag as parameter to dpd_update_external_or_create
- Use existing_tag.try_into() / current_tag.try_into() for tag usage
- Nit: dpd_state_matches_tag to use as_str() comparison
- Fix: IpSrc::Subnet -> IpSrc::Any (new dendrite API)
- Fix: SwitchLocation import (moved to sled_agent_types)
- Remove unused multicast type imports
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 2, 2026
… recovery path

This matches Dendrite PR oxidecomputer/dendrite#232.

This update dendrite rev to 5a4f56e (oxidecomputer/dendrite#232), which fixes
the empty-transition in `modify_group_internal`. With the fix, the
delete+recreate recovery path in `modify_group_membership` is no longer
needed. Errors now propagate directly and the reconciler handles
drift on the next pass.
@zeeshanlakhani zeeshanlakhani self-assigned this Mar 5, 2026
@zeeshanlakhani zeeshanlakhani force-pushed the zl/fix-mcast-empty-transition branch from e082a6c to d049a0b Compare March 10, 2026 05:54
@zeeshanlakhani zeeshanlakhani merged commit b31ba90 into main Mar 10, 2026
6 checks passed
@zeeshanlakhani zeeshanlakhani deleted the zl/fix-mcast-empty-transition branch March 10, 2026 06:29
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 10, 2026
zeeshanlakhani added a commit to oxidecomputer/omicron that referenced this pull request Mar 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants