chyezh 86eff6e589
enhance: streaming node client implementation (#34653)
issue: #33285

- add streaming node grpc client wrapper
- add unittest for streaming node grpc client side
- fix binary unsafe bug for message

---------

Signed-off-by: chyezh <chyezh@outlook.com>
2024-07-19 17:37:40 +08:00

52 lines
1.4 KiB
Go

package handler
import (
"context"
"github.com/milvus-io/milvus/internal/streamingnode/client/handler/producer"
"github.com/milvus-io/milvus/pkg/streaming/util/message"
"github.com/milvus-io/milvus/pkg/streaming/util/types"
"github.com/milvus-io/milvus/pkg/util/typeutil"
)
var _ producer.Producer = (*sharedProducer)(nil)
// newSharedProducer creates a shared producer.
func newSharedProducer(ref *typeutil.SharedReference[Producer]) sharedProducer {
return sharedProducer{
SharedReference: ref,
}
}
// sharedProducer is a shared producer.
type sharedProducer struct {
*typeutil.SharedReference[Producer]
}
// Clone clones the shared producer.
func (sp sharedProducer) Clone() *sharedProducer {
return &sharedProducer{
SharedReference: sp.SharedReference.Clone(),
}
}
// Assignment returns the assignment of the producer.
func (sp sharedProducer) Assignment() types.PChannelInfoAssigned {
return sp.Deref().Assignment()
}
// Produce sends the produce message to server.
func (sp sharedProducer) Produce(ctx context.Context, msg message.MutableMessage) (message.MessageID, error) {
return sp.Deref().Produce(ctx, msg)
}
// Check if a producer is available.
func (sp sharedProducer) IsAvailable() bool {
return sp.Deref().IsAvailable()
}
// Available returns a channel that will be closed when the producer is unavailable.
func (sp sharedProducer) Available() <-chan struct{} {
return sp.Deref().Available()
}