mirror of
https://github.com/milvus-io/milvus.git
synced 2026-07-21 02:05:41 +00:00
issue: #47404 - message trace context: add trace context serialization and restore/inject helpers for WAL messages and msgstream conversion - WAL append trace: normalize WAL spans for autocommit, txn, broadcast, append, appendimpl, and broadcast callback paths - trace propagation: restore message trace context in producer, broadcast retry, replicate primary/secondary, recovery, flusher, and query/data flowgraph consumers --------- Signed-off-by: chyezh <chyezh@outlook.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package broadcaster
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go.opentelemetry.io/otel/codes"
|
|
|
|
"github.com/milvus-io/milvus/pkg/v3/streaming/util/message"
|
|
"github.com/milvus-io/milvus/pkg/v3/streaming/util/types"
|
|
)
|
|
|
|
type broadcasterWithRK struct {
|
|
broadcaster *broadcastTaskManager
|
|
broadcastID uint64
|
|
guards *lockGuards
|
|
}
|
|
|
|
func (b *broadcasterWithRK) Broadcast(ctx context.Context, msg message.BroadcastMutableMessage) (*types.BroadcastAppendResult, error) {
|
|
// Consume the guards before handing them to broadcast to avoid double unlock.
|
|
guards := b.guards
|
|
b.guards = nil
|
|
msg = msg.OverwriteBroadcastHeader(b.broadcastID, guards.ResourceKeys()...)
|
|
ctx, span := message.StartSpanForMessage(ctx, msg, message.SpanNameWALBroadcast)
|
|
defer span.End()
|
|
|
|
// Keep a trace context in the broadcast message so that the DDL ack callback
|
|
// can still extract it after the original caller span is long gone.
|
|
message.InjectTraceContext(ctx, msg)
|
|
|
|
result, err := b.broadcaster.broadcast(ctx, msg, b.broadcastID, guards)
|
|
if err != nil {
|
|
span.RecordError(err)
|
|
span.SetStatus(codes.Error, err.Error())
|
|
}
|
|
return result, err
|
|
}
|
|
|
|
func (b *broadcasterWithRK) Close() {
|
|
if b.guards != nil {
|
|
b.guards.Unlock()
|
|
}
|
|
}
|