Skip to content

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

Open
zeeshanlakhani wants to merge 1 commit intomainfrom
zl/fix-mcast-empty-transition
Open

[fix] remove ASIC ports before replication cleanup on empty transition#232
zeeshanlakhani wants to merge 1 commit 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.
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.

1 participant