mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-08 10:08:42 +08:00
issue: #38399 pr: #40235 related PR: #39522 - Just implement exclusive broadcaster between broadcast message with same resource key to keep same order in different wal. - After simplify the broadcast model, original watch-based broadcast is too complicated and redundant, remove it. - Add metrics for broadcast. --------- Signed-off-by: chyezh <chyezh@outlook.com>
37 lines
1.0 KiB
Go
37 lines
1.0 KiB
Go
package streaming
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/milvus-io/milvus/pkg/v2/streaming/util/message"
|
|
"github.com/milvus-io/milvus/pkg/v2/streaming/util/types"
|
|
"github.com/milvus-io/milvus/pkg/v2/util/typeutil"
|
|
)
|
|
|
|
var _ Broadcast = broadcast{}
|
|
|
|
type broadcast struct {
|
|
*walAccesserImpl
|
|
}
|
|
|
|
func (b broadcast) Append(ctx context.Context, msg message.BroadcastMutableMessage) (*types.BroadcastAppendResult, error) {
|
|
assertValidBroadcastMessage(msg)
|
|
if !b.lifetime.Add(typeutil.LifetimeStateWorking) {
|
|
return nil, ErrWALAccesserClosed
|
|
}
|
|
defer b.lifetime.Done()
|
|
|
|
// The broadcast operation will be sent to the coordinator.
|
|
// The coordinator will dispatch the message to all the vchannels with an eventual consistency guarantee.
|
|
return b.streamingCoordClient.Broadcast().Broadcast(ctx, msg)
|
|
}
|
|
|
|
func (b broadcast) Ack(ctx context.Context, req types.BroadcastAckRequest) error {
|
|
if !b.lifetime.Add(typeutil.LifetimeStateWorking) {
|
|
return ErrWALAccesserClosed
|
|
}
|
|
defer b.lifetime.Done()
|
|
|
|
return b.streamingCoordClient.Broadcast().Ack(ctx, req)
|
|
}
|