SIGN IN SIGN UP
milvus-io / milvus UNCLAIMED

Milvus is a high-performance, cloud-native vector database built for scalable vector ANN search

0 0 146 Go

fix: ack stale alter-load-config on dropped-sentinel channel (#50161)

## Summary

Follow-up to #50002.

After #50002 added the dropped-channel-sentinel guard in
`TargetManager.UpdateCollectionNextTarget`, the new error bubbles up
through `LoadCollectionJob.Execute` and back into the streamingcoord
broadcaster's `alterLoadConfigV2AckCallback`. That callback has no
terminal condition for "channel was dropped" and therefore retries the
broadcast every 5–10 s **forever**, which:

- keeps the broadcast task uncommitted on the secondary,
- blocks rootcoord's collection meta cleanup,
- leaves the half-dropped collection visible in `list_collections` on
the CDC replica even after the primary has fully dropped it.

This PR introduces `merr.ErrChannelDroppedSentinel` so the sentinel
rejection can be distinguished from other `ChannelNotAvailable` causes,
returns it from `TargetManager.UpdateCollectionNextTarget`, and
acks-with-no-op in `alterLoadConfigV2AckCallback` when it appears. The
behavior mirrors the existing `ErrCollectionNotFound` early-return
inside `LoadCollectionJob`, and is safe because
`IsDroppedChannelCheckpoint` is sticky — it is only ever written by
`datacoord.MarkChannelCheckpointDropped` and `UpdateChannelCheckpoint`
refuses to overwrite it (per the design notes of #50002).

### Recovery

The fix is self-healing: the next retry attempt of any stuck
`AlterLoadConfig` broadcast on a CDC secondary will hit the new code
path, return `nil`, and let the broadcast tombstone. Pending rootcoord
meta cleanup then proceeds and the half-dropped collection disappears
from `list_collections`. No manual intervention required on existing
stuck instances after deploy.

issue: #49996

## Test plan

- [x] `pkg/util/merr` `TestWrap`: adds assertions for
`WrapErrChannelDroppedSentinel` and confirms `errors.Is` distinctness
from `ErrChannelNotAvailable` (passes locally)
- [x] `internal/querycoordv2/meta` `TestTargetManager`: 3 existing
sub-tests from #50002 updated to assert the new error type
- [x] `go build` and `go vet` clean on `internal/querycoordv2/...` and
`pkg/util/merr/...`
- [x] `golangci-lint` clean on touched packages (`new-from-rev`)
- [ ] CI

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Signed-off-by: bigsheeper <yihao.dai@zilliz.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Y
yihao.dai committed
e0ae33a5993b1ad9499e5b45b64bfb2a69ae4bee
Parent: 64ae98b
Committed by GitHub <noreply@github.com> on 6/1/2026, 8:58:20 AM