Skip to content

[probe,multicast] enroll probes as mcast group members#10520

Open
zeeshanlakhani wants to merge 1 commit into
zl/multicast-mgd-ddmfrom
zl/probe-multicast
Open

[probe,multicast] enroll probes as mcast group members#10520
zeeshanlakhani wants to merge 1 commit into
zl/multicast-mgd-ddmfrom
zl/probe-multicast

Conversation

@zeeshanlakhani
Copy link
Copy Markdown
Collaborator

This extends multicast group membership to include probes. Previously, only instances could be members of a multicast group, so much of the work is mechanical: updating the datastore, RPW, and API to handle a polymorphic enum. This introduces Probe as a second "parent kind", with membership fixed at probe creation.

API surface

A new version PROBE_MULTICAST (2026-05-26) reshapes the MulticastGroupMember view from a single instance_id field to one with a kind discriminator plus polymorphic parent_id. ProbeCreate.multicast_groups takes Vec<MulticastGroupJoinSpec>, the same shape as instance joins, so probes and instances share one input form.

Datastore

The multicast_group_member table carries a parent_kind column ('instance' | 'probe') backfilled to 'instance' for pre-existing rows and prior versions of the API. The unique constraint is rebuilt as (external_group_id, parent_kind, parent_id).

We move to a new schema version in this work ~ multicast-member-parent-kind.

Reconciler

The RPW reconciler dispatches on (parent_kind, state). Instance-parented members traverse the VMM-bound state machine and issue sled-agent RPCs to update OPTE multicast subscriptions on midlife join/leave. Probe-parented members skip those RPCs, as probes have no runtime update path, and the multicast subscription set is delivered in the initial probe-create payload (new in this PR). The probe path still runs the lifecycle state machine to drive dataplane teardown on probe-delete.

Sled-agent

Sled-agent API v42 (probe_multicast_groups) extends ProbeCreate with multicast_groups: Vec<InstanceMulticastMembership>. The probe manager applies the subscriptions to the OPTE port during zone provisioning, while empty groups (the default) preserve pre-version behavior.

@zeeshanlakhani zeeshanlakhani force-pushed the zl/probe-multicast branch 2 times, most recently from 5122670 to e4cafa3 Compare May 30, 2026 15:09
@zeeshanlakhani zeeshanlakhani marked this pull request as draft May 31, 2026 07:39
This extends multicast group membership to include probes. Previously, only
instances could be members of a multicast group, so much of the work is
mechanical: updating the datastore, RPW, and API to handle a polymorphic enum.
This introduces `Probe` as a second "parent kind", with membership
fixed at probe creation.

## API surface

A new version PROBE_MULTICAST (2026-05-26) reshapes the
`MulticastGroupMember` view from a single `instance_id` field to one
with a `kind` discriminator plus polymorphic `parent_id`.
`ProbeCreate.multicast_groups` takes `Vec<MulticastGroupJoinSpec>`, the same
shape as instance joins, so probes and instances share one input form.

## Datastore

The `multicast_group_member` table carries a `parent_kind` column
(`'instance' | 'probe'`) backfilled to `'instance'` for pre-existing
rows and prior versions of the API. The unique constraint is rebuilt as
`(external_group_id, parent_kind, parent_id)`.

We move to a new schema version in this work ~ `multicast-member-parent-kind`.

## Reconciler

The RPW reconciler dispatches on `(parent_kind, state)`. Instance-parented
members traverse the VMM-bound state machine and issue sled-agent RPCs to update
OPTE multicast subscriptions on midlife join/leave. Probe-parented members skip
those RPCs, as probes have no runtime update path, and the multicast
subscription set is delivered in the initial probe-create payload
(new in this PR). The probe path still runs the lifecycle state machine to drive
dataplane teardown on probe-delete.

## Sled-agent

Sled-agent API v42 (`probe_multicast_groups`) extends `ProbeCreate` with
`multicast_groups: Vec<InstanceMulticastMembership>`. The probe manager
applies the subscriptions to the OPTE port during zone provisioning, while
empty groups (the default) preserve pre-version behavior.
@zeeshanlakhani zeeshanlakhani marked this pull request as ready for review May 31, 2026 08:57
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