From 8d7a586124af51c2e2e5c65c0febe72e9e75b7c4 Mon Sep 17 00:00:00 2001 From: tinswzy Date: Fri, 20 Dec 2024 15:51:37 +0800 Subject: [PATCH] Support passing trace ctx and displaying traceID in case of request errors Signed-off-by: tinswzy --- client/admin.go | 8 +++ client/alias.go | 21 +++++++ client/authentication.go | 27 +++++++++ client/client.go | 3 +- client/collection.go | 87 ++++++++++++++++++++++++++++- client/data.go | 38 +++++++++++++ client/database.go | 35 ++++++++++++ client/index.go | 36 ++++++++++++ client/insert.go | 56 ++++++++++++++++++- client/iterator.go | 13 +++++ client/maintainance.go | 22 ++++++++ client/mq_message.go | 9 +++ client/partition.go | 36 ++++++++++++ client/rbac.go | 116 ++++++++++++++++++++++++++++++++++++++ client/resource_group.go | 40 +++++++++++++ client/row.go | 20 ++++++- client/stats_handler.go | 112 +++++++++++++++++++++++++++++++++++++ go.mod | 37 ++++++++----- go.sum | 117 ++++++++++++++++----------------------- 19 files changed, 744 insertions(+), 89 deletions(-) create mode 100644 client/stats_handler.go diff --git a/client/admin.go b/client/admin.go index 3246d65d..f285e679 100644 --- a/client/admin.go +++ b/client/admin.go @@ -14,12 +14,17 @@ package client import ( "context" + "go.opentelemetry.io/otel" + "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-sdk-go/v2/entity" ) // GetVersion returns milvus server version information. func (c *GrpcClient) GetVersion(ctx context.Context) (string, error) { + method := "GetVersion" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() if c.Service == nil { return "", ErrClientNotReady } @@ -32,6 +37,9 @@ func (c *GrpcClient) GetVersion(ctx context.Context) (string, error) { // CheckHealth returns milvus state func (c *GrpcClient) CheckHealth(ctx context.Context) (*entity.MilvusState, error) { + method := "CheckHealth" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() if c.Service == nil { return nil, ErrClientNotReady } diff --git a/client/alias.go b/client/alias.go index d374aea8..601dd3db 100644 --- a/client/alias.go +++ b/client/alias.go @@ -18,12 +18,19 @@ package client import ( "context" + "log" + + "go.opentelemetry.io/otel" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" ) // CreateAlias creates an alias for collection func (c *GrpcClient) CreateAlias(ctx context.Context, collName string, alias string) error { + method := "CreateAlias" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -36,10 +43,12 @@ func (c *GrpcClient) CreateAlias(ctx context.Context, collName string, alias str resp, err := c.Service.CreateAlias(ctx, req) if err != nil { + log.Fatalf("create alias failed, collName:%s, alias:%s, traceID:%s err: %v", collName, alias, traceID, err) return err } err = handleRespStatus(resp) if err != nil { + log.Fatalf("create alias failed, collName:%s, alias:%s, traceID:%s err: %v", collName, alias, traceID, err) return err } return nil @@ -47,6 +56,10 @@ func (c *GrpcClient) CreateAlias(ctx context.Context, collName string, alias str // DropAlias drops the specified Alias func (c *GrpcClient) DropAlias(ctx context.Context, alias string) error { + method := "DropAlias" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -58,10 +71,12 @@ func (c *GrpcClient) DropAlias(ctx context.Context, alias string) error { resp, err := c.Service.DropAlias(ctx, req) if err != nil { + log.Fatalf("drop alias failed, alias:%s, traceID:%s err: %v", alias, traceID, err) return err } err = handleRespStatus(resp) if err != nil { + log.Fatalf("drop alias failed, alias:%s, traceID:%s err: %v", alias, traceID, err) return err } return nil @@ -69,6 +84,10 @@ func (c *GrpcClient) DropAlias(ctx context.Context, alias string) error { // AlterAlias changes collection alias to provided alias func (c *GrpcClient) AlterAlias(ctx context.Context, collName string, alias string) error { + method := "AlterAlias" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -81,10 +100,12 @@ func (c *GrpcClient) AlterAlias(ctx context.Context, collName string, alias stri resp, err := c.Service.AlterAlias(ctx, req) if err != nil { + log.Fatalf("alter alias failed, collName:%s, alias:%s, traceID:%s err: %v", collName, alias, traceID, err) return err } err = handleRespStatus(resp) if err != nil { + log.Fatalf("alter alias failed, collName:%s, alias:%s, traceID:%s err: %v", collName, alias, traceID, err) return err } return nil diff --git a/client/authentication.go b/client/authentication.go index 8dec4ecf..956f27b6 100644 --- a/client/authentication.go +++ b/client/authentication.go @@ -2,6 +2,9 @@ package client import ( "context" + "log" + + "go.opentelemetry.io/otel" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-sdk-go/v2/internal/utils/crypto" @@ -9,6 +12,10 @@ import ( // CreateCredential create new user and password func (c *GrpcClient) CreateCredential(ctx context.Context, username string, password string) error { + method := "CreateCredential" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -18,10 +25,12 @@ func (c *GrpcClient) CreateCredential(ctx context.Context, username string, pass } resp, err := c.Service.CreateCredential(ctx, req) if err != nil { + log.Fatalf("create credential failed, traceID:%s err: %v", traceID, err) return err } err = handleRespStatus(resp) if err != nil { + log.Fatalf("create credential failed, traceID:%s err: %v", traceID, err) return err } return nil @@ -29,6 +38,10 @@ func (c *GrpcClient) CreateCredential(ctx context.Context, username string, pass // UpdateCredential update password for a user func (c *GrpcClient) UpdateCredential(ctx context.Context, username string, oldPassword string, newPassword string) error { + method := "UpdateCredential" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -39,10 +52,12 @@ func (c *GrpcClient) UpdateCredential(ctx context.Context, username string, oldP } resp, err := c.Service.UpdateCredential(ctx, req) if err != nil { + log.Fatalf("update credential failed, traceID:%s err: %v", traceID, err) return err } err = handleRespStatus(resp) if err != nil { + log.Fatalf("update credential failed, traceID:%s err: %v", traceID, err) return err } return nil @@ -50,6 +65,10 @@ func (c *GrpcClient) UpdateCredential(ctx context.Context, username string, oldP // DeleteCredential delete a user func (c *GrpcClient) DeleteCredential(ctx context.Context, username string) error { + method := "DeleteCredential" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -58,10 +77,12 @@ func (c *GrpcClient) DeleteCredential(ctx context.Context, username string) erro } resp, err := c.Service.DeleteCredential(ctx, req) if err != nil { + log.Fatalf("delete credential failed, traceID:%s err: %v", traceID, err) return err } err = handleRespStatus(resp) if err != nil { + log.Fatalf("delete credential failed, traceID:%s err: %v", traceID, err) return err } return nil @@ -69,16 +90,22 @@ func (c *GrpcClient) DeleteCredential(ctx context.Context, username string) erro // ListCredUsers list all usernames func (c *GrpcClient) ListCredUsers(ctx context.Context) ([]string, error) { + method := "ListCredUsers" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } req := &milvuspb.ListCredUsersRequest{} resp, err := c.Service.ListCredUsers(ctx, req) if err != nil { + log.Fatalf("list credential users failed, traceID:%s err: %v", traceID, err) return nil, err } err = handleRespStatus(resp.Status) if err != nil { + log.Fatalf("list credential users failed, traceID:%s err: %v", traceID, err) return nil, err } return resp.Usernames, nil diff --git a/client/client.go b/client/client.go index 0bff2158..6f0e332a 100644 --- a/client/client.go +++ b/client/client.go @@ -19,7 +19,6 @@ import ( "google.golang.org/grpc" "github.com/milvus-io/milvus-proto/go-api/v2/msgpb" - "github.com/milvus-io/milvus-sdk-go/v2/entity" ) @@ -277,6 +276,8 @@ func NewClient(ctx context.Context, config Config) (Client, error) { // Parse grpc options options := c.config.getDialOption() + traceOpt := grpc.WithStatsHandler(getDynamicClientStatsHandler()) + options = append(options, traceOpt) // Connect the grpc server. if err := c.connect(ctx, addr, options...); err != nil { diff --git a/client/collection.go b/client/collection.go index 65efe504..309d1885 100644 --- a/client/collection.go +++ b/client/collection.go @@ -13,16 +13,16 @@ package client import ( "context" + "log" "time" "github.com/cockroachdb/errors" - "github.com/golang/protobuf/proto" - - "github.com/milvus-io/milvus-sdk-go/v2/entity" + "go.opentelemetry.io/otel" "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" + "github.com/milvus-io/milvus-sdk-go/v2/entity" ) // handles response status @@ -46,6 +46,10 @@ func handleRespStatus(status *commonpb.Status) error { // ListCollections list collections from connection // Note that schema info are not provided in collection list func (c *GrpcClient) ListCollections(ctx context.Context, opts ...ListCollectionOption) ([]*entity.Collection, error) { + method := "ListCollections" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return []*entity.Collection{}, ErrClientNotReady } @@ -66,10 +70,12 @@ func (c *GrpcClient) ListCollections(ctx context.Context, opts ...ListCollection resp, err := c.Service.ShowCollections(ctx, req) if err != nil { + log.Fatalf("list collections failed, traceID:%s err: %v", traceID, err) return []*entity.Collection{}, err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("list collections failed, traceID:%s err: %v", traceID, err) return []*entity.Collection{}, err } collections := make([]*entity.Collection, 0, len(resp.GetCollectionIds())) @@ -137,10 +143,15 @@ func (c *GrpcClient) NewCollection(ctx context.Context, collName string, dimensi // CreateCollection create collection with specified schema func (c *GrpcClient) CreateCollection(ctx context.Context, collSchema *entity.Schema, shardNum int32, opts ...CreateCollectionOption) error { + method := "CreateCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } if err := c.validateSchema(collSchema); err != nil { + log.Fatalf("create collection failed, traceID:%s err: %v", traceID, err) return err } @@ -157,6 +168,10 @@ func (c *GrpcClient) CreateCollection(ctx context.Context, collSchema *entity.Sc } func (c *GrpcClient) requestCreateCollection(ctx context.Context, sch *entity.Schema, opt *createCollOpt, shardNum int32) error { + method := "requestCreateCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if opt.EnableDynamicSchema { sch.EnableDynamicField = true } @@ -178,6 +193,7 @@ func (c *GrpcClient) requestCreateCollection(ctx context.Context, sch *entity.Sc resp, err := c.Service.CreateCollection(ctx, req) if err != nil { + log.Fatalf("request create collection failed, traceID:%s err: %v", traceID, err) return err } err = handleRespStatus(resp) @@ -261,6 +277,10 @@ func (c *GrpcClient) checkCollectionExists(ctx context.Context, collName string) // DescribeCollection describe the collection by name func (c *GrpcClient) DescribeCollection(ctx context.Context, collName string) (*entity.Collection, error) { + method := "DescribeCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -269,10 +289,12 @@ func (c *GrpcClient) DescribeCollection(ctx context.Context, collName string) (* } resp, err := c.Service.DescribeCollection(ctx, req) if err != nil { + log.Fatalf("describe collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("describe collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } collection := &entity.Collection{ @@ -298,6 +320,10 @@ func (c *GrpcClient) DescribeCollection(ctx context.Context, collName string) (* // DropCollection drop collection by name func (c *GrpcClient) DropCollection(ctx context.Context, collName string, opts ...DropCollectionOption) error { + method := "DropCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -310,6 +336,7 @@ func (c *GrpcClient) DropCollection(ctx context.Context, collName string, opts . } resp, err := c.Service.DropCollection(ctx, req) if err != nil { + log.Fatalf("drop collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } err = handleRespStatus(resp) @@ -321,6 +348,10 @@ func (c *GrpcClient) DropCollection(ctx context.Context, collName string, opts . // HasCollection check whether collection name exists func (c *GrpcClient) HasCollection(ctx context.Context, collName string) (bool, error) { + method := "HasCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return false, ErrClientNotReady } @@ -333,6 +364,7 @@ func (c *GrpcClient) HasCollection(ctx context.Context, collName string) (bool, resp, err := c.Service.HasCollection(ctx, req) if err != nil { + log.Fatalf("has collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return false, err } if err := handleRespStatus(resp.GetStatus()); err != nil { @@ -343,6 +375,10 @@ func (c *GrpcClient) HasCollection(ctx context.Context, collName string) (bool, // GetCollectionStatistcis show collection statistics func (c *GrpcClient) GetCollectionStatistics(ctx context.Context, collName string) (map[string]string, error) { + method := "GetCollectionStatistics" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -352,9 +388,11 @@ func (c *GrpcClient) GetCollectionStatistics(ctx context.Context, collName strin } resp, err := c.Service.GetCollectionStatistics(ctx, req) if err != nil { + log.Fatalf("get collection statistics failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("get collection statistics failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } return entity.KvPairsMap(resp.GetStats()), nil @@ -362,6 +400,10 @@ func (c *GrpcClient) GetCollectionStatistics(ctx context.Context, collName strin // ShowCollection show collection status, used to check whether it is loaded or not func (c *GrpcClient) ShowCollection(ctx context.Context, collName string) (*entity.Collection, error) { + method := "ShowCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -373,9 +415,11 @@ func (c *GrpcClient) ShowCollection(ctx context.Context, collName string) (*enti resp, err := c.Service.ShowCollections(ctx, req) if err != nil { + log.Fatalf("show collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("show collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } @@ -390,6 +434,10 @@ func (c *GrpcClient) ShowCollection(ctx context.Context, collName string) (*enti // RenameCollection performs renaming for provided collection. func (c *GrpcClient) RenameCollection(ctx context.Context, collName, newName string) error { + method := "RenameCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -400,6 +448,7 @@ func (c *GrpcClient) RenameCollection(ctx context.Context, collName, newName str } resp, err := c.Service.RenameCollection(ctx, req) if err != nil { + log.Fatalf("rename collection failed, collName:%s, traceID:%s, err: %v", collName, traceID, err) return err } return handleRespStatus(resp) @@ -407,6 +456,10 @@ func (c *GrpcClient) RenameCollection(ctx context.Context, collName, newName str // LoadCollection load collection into memory func (c *GrpcClient) LoadCollection(ctx context.Context, collName string, async bool, opts ...LoadCollectionOption) error { + method := "LoadCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -421,9 +474,11 @@ func (c *GrpcClient) LoadCollection(ctx context.Context, collName string, async resp, err := c.Service.LoadCollection(ctx, req) if err != nil { + log.Fatalf("load collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } if err := handleRespStatus(resp); err != nil { + log.Fatalf("load collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } @@ -450,6 +505,10 @@ func (c *GrpcClient) LoadCollection(ctx context.Context, collName string, async // ReleaseCollection release loaded collection func (c *GrpcClient) ReleaseCollection(ctx context.Context, collName string, opts ...ReleaseCollectionOption) error { + method := "ReleaseCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -463,6 +522,7 @@ func (c *GrpcClient) ReleaseCollection(ctx context.Context, collName string, opt } resp, err := c.Service.ReleaseCollection(ctx, req) if err != nil { + log.Fatalf("release collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } return handleRespStatus(resp) @@ -470,6 +530,10 @@ func (c *GrpcClient) ReleaseCollection(ctx context.Context, collName string, opt // GetReplicas gets the replica groups as well as their querynodes and shards information func (c *GrpcClient) GetReplicas(ctx context.Context, collName string) ([]*entity.ReplicaGroup, error) { + method := "GetReplicas" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -485,9 +549,11 @@ func (c *GrpcClient) GetReplicas(ctx context.Context, collName string) ([]*entit resp, err := c.Service.GetReplicas(ctx, req) if err != nil { + log.Fatalf("get replicas failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("get replicas failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } @@ -513,6 +579,10 @@ func (c *GrpcClient) GetReplicas(ctx context.Context, collName string) ([]*entit // GetLoadingProgress get the collection or partitions loading progress func (c *GrpcClient) GetLoadingProgress(ctx context.Context, collName string, partitionNames []string) (int64, error) { + method := "GetLoadingProgress" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return 0, ErrClientNotReady } @@ -523,6 +593,7 @@ func (c *GrpcClient) GetLoadingProgress(ctx context.Context, collName string, pa } resp, err := c.Service.GetLoadingProgress(ctx, req) if err != nil { + log.Fatalf("get loading progress failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return 0, err } @@ -531,6 +602,10 @@ func (c *GrpcClient) GetLoadingProgress(ctx context.Context, collName string, pa // GetLoadState get the collection or partitions load state func (c *GrpcClient) GetLoadState(ctx context.Context, collName string, partitionNames []string) (entity.LoadState, error) { + method := "GetLoadState" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return 0, ErrClientNotReady } @@ -541,6 +616,7 @@ func (c *GrpcClient) GetLoadState(ctx context.Context, collName string, partitio } resp, err := c.Service.GetLoadState(ctx, req) if err != nil { + log.Fatalf("get load state failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return 0, err } @@ -549,6 +625,10 @@ func (c *GrpcClient) GetLoadState(ctx context.Context, collName string, partitio // AlterCollection changes the collection attribute. func (c *GrpcClient) AlterCollection(ctx context.Context, collName string, attrs ...entity.CollectionAttribute) error { + method := "AlterCollection" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -579,6 +659,7 @@ func (c *GrpcClient) AlterCollection(ctx context.Context, collName string, attrs resp, err := c.Service.AlterCollection(ctx, req) if err != nil { + log.Fatalf("alter collection failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } return handleRespStatus(resp) diff --git a/client/data.go b/client/data.go index 17b82038..fe6ee9da 100644 --- a/client/data.go +++ b/client/data.go @@ -20,6 +20,7 @@ import ( "strings" "github.com/cockroachdb/errors" + "go.opentelemetry.io/otel" "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" @@ -40,12 +41,17 @@ const ( ) func (c *GrpcClient) HybridSearch(ctx context.Context, collName string, partitions []string, limit int, outputFields []string, reranker Reranker, subRequests []*ANNSearchRequest, opts ...SearchQueryOptionFunc) ([]SearchResult, error) { + method := "HybridSearch" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } collInfo, err := c.getCollectionInfo(ctx, collName) if err != nil { + log.Fatalf("hybrid search failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } schema := collInfo.Schema @@ -85,6 +91,7 @@ func (c *GrpcClient) HybridSearch(ctx context.Context, collName string, partitio err = merr.CheckRPCCall(result, err) if err != nil { + log.Fatalf("hybrid search failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } @@ -95,6 +102,10 @@ func (c *GrpcClient) HybridSearch(ctx context.Context, collName string, partitio func (c *GrpcClient) Search(ctx context.Context, collName string, partitions []string, expr string, outputFields []string, vectors []entity.Vector, vectorField string, metricType entity.MetricType, topK int, sp entity.SearchParam, opts ...SearchQueryOptionFunc, ) ([]SearchResult, error) { + method := "Search" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return []SearchResult{}, ErrClientNotReady } @@ -116,6 +127,7 @@ func (c *GrpcClient) Search(ctx context.Context, collName string, partitions []s resp, err := c.Service.Search(ctx, req) if err != nil { + log.Fatalf("search failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { @@ -292,6 +304,9 @@ func (c *GrpcClient) Get(ctx context.Context, collectionName string, ids entity. // QueryByPks query record by specified primary key(s) func (c *GrpcClient) QueryByPks(ctx context.Context, collectionName string, partitionNames []string, ids entity.Column, outputFields []string, opts ...SearchQueryOptionFunc) (ResultSet, error) { + method := "QueryByPks" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() if c.Service == nil { return nil, ErrClientNotReady } @@ -310,6 +325,10 @@ func (c *GrpcClient) QueryByPks(ctx context.Context, collectionName string, part // Query performs query by expression. func (c *GrpcClient) Query(ctx context.Context, collectionName string, partitionNames []string, expr string, outputFields []string, opts ...SearchQueryOptionFunc) (ResultSet, error) { + method := "Query" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -352,10 +371,12 @@ func (c *GrpcClient) Query(ctx context.Context, collectionName string, partition resp, err := c.Service.Query(ctx, req) if err != nil { + log.Fatalf("query failed, collName:%s, traceID:%s err: %v", collectionName, traceID, err) return nil, err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("query failed, collName:%s, traceID:%s err: %v", collectionName, traceID, err) return nil, err } @@ -431,6 +452,10 @@ func prepareSearchRequest(collName string, partitions []string, // GetPersistentSegmentInfo get persistent segment info func (c *GrpcClient) GetPersistentSegmentInfo(ctx context.Context, collName string) ([]*entity.Segment, error) { + method := "GetPersistentSegmentInfo" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return []*entity.Segment{}, ErrClientNotReady } @@ -440,9 +465,11 @@ func (c *GrpcClient) GetPersistentSegmentInfo(ctx context.Context, collName stri } resp, err := c.Service.GetPersistentSegmentInfo(ctx, req) if err != nil { + log.Fatalf("get persistent segment info failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return []*entity.Segment{}, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("get persistent segment info failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return []*entity.Segment{}, err } segments := make([]*entity.Segment, 0, len(resp.GetInfos())) @@ -461,6 +488,10 @@ func (c *GrpcClient) GetPersistentSegmentInfo(ctx context.Context, collName stri // GetQuerySegmentInfo get query query cluster segment loaded info func (c *GrpcClient) GetQuerySegmentInfo(ctx context.Context, collName string) ([]*entity.Segment, error) { + method := "GetQuerySegmentInfo" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return []*entity.Segment{}, ErrClientNotReady } @@ -470,6 +501,7 @@ func (c *GrpcClient) GetQuerySegmentInfo(ctx context.Context, collName string) ( } resp, err := c.Service.GetQuerySegmentInfo(ctx, req) if err != nil { + log.Fatalf("get query segment info failed, collName:%s traceID:%s, err: %v", collName, traceID, err) return []*entity.Segment{}, err } if err := handleRespStatus(resp.GetStatus()); err != nil { @@ -493,6 +525,10 @@ func (c *GrpcClient) GetQuerySegmentInfo(ctx context.Context, collName string) ( func (c *GrpcClient) CalcDistance(ctx context.Context, collName string, partitions []string, metricType entity.MetricType, opLeft, opRight entity.Column, ) (entity.Column, error) { + method := "CalcDistance" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -513,9 +549,11 @@ func (c *GrpcClient) CalcDistance(ctx context.Context, collName string, partitio resp, err := c.Service.CalcDistance(ctx, req) if err != nil { + log.Fatalf("calc distance failed, collName:%s traceID:%s err: %v", collName, traceID, err) return nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("calc distance failed, collName:%s traceID:%s err: %v", collName, traceID, err) return nil, err } diff --git a/client/database.go b/client/database.go index cfa6929e..1868a31e 100644 --- a/client/database.go +++ b/client/database.go @@ -18,8 +18,11 @@ package client import ( "context" + "log" "github.com/cockroachdb/errors" + "go.opentelemetry.io/otel" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-sdk-go/v2/entity" @@ -31,9 +34,14 @@ import ( // 2. goroutine B call UsingDatabase(ctx, "DB2"). // 3. goroutine A access DB2 after 2. func (c *GrpcClient) UsingDatabase(ctx context.Context, dbName string) error { + method := "UsingDatabase" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() c.config.useDatabase(dbName) err := c.connectInternal(ctx) if err != nil { + log.Fatalf("using database failed, traceID:%s err: %v", traceID, err) return err } c.cache.reset() @@ -44,6 +52,10 @@ func (c *GrpcClient) UsingDatabase(ctx context.Context, dbName string) error { // CreateDatabase creates a new database for remote Milvus cluster. // TODO:New options can be added as expanding parameters. func (c *GrpcClient) CreateDatabase(ctx context.Context, dbName string, opts ...CreateDatabaseOption) error { + method := "CreateDatabase" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -63,6 +75,7 @@ func (c *GrpcClient) CreateDatabase(ctx context.Context, dbName string, opts ... resp, err := c.Service.CreateDatabase(ctx, req) if err != nil { + log.Fatalf("create database failed, traceID:%s err: %v", traceID, err) return err } return handleRespStatus(resp) @@ -70,6 +83,10 @@ func (c *GrpcClient) CreateDatabase(ctx context.Context, dbName string, opts ... // ListDatabases list all database in milvus cluster. func (c *GrpcClient) ListDatabases(ctx context.Context) ([]entity.Database, error) { + method := "ListDatabases" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -80,9 +97,11 @@ func (c *GrpcClient) ListDatabases(ctx context.Context) ([]entity.Database, erro req := &milvuspb.ListDatabasesRequest{} resp, err := c.Service.ListDatabases(ctx, req) if err != nil { + log.Fatalf("list databases failed, traceID:%s err: %v", traceID, err) return nil, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("list databases failed, traceID:%s err: %v", traceID, err) return nil, err } databases := make([]entity.Database, len(resp.GetDbNames())) @@ -96,6 +115,10 @@ func (c *GrpcClient) ListDatabases(ctx context.Context) ([]entity.Database, erro // DropDatabase drop all database in milvus cluster. func (c *GrpcClient) DropDatabase(ctx context.Context, dbName string, opts ...DropDatabaseOption) error { + method := "DropDatabase" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -111,6 +134,7 @@ func (c *GrpcClient) DropDatabase(ctx context.Context, dbName string, opts ...Dr } resp, err := c.Service.DropDatabase(ctx, req) if err != nil { + log.Fatalf("DropDatabase failed, traceID:%s err: %v", traceID, err) return err } return handleRespStatus(resp) @@ -118,6 +142,10 @@ func (c *GrpcClient) DropDatabase(ctx context.Context, dbName string, opts ...Dr // AlterDatabase changes the database attribute. func (c *GrpcClient) AlterDatabase(ctx context.Context, dbName string, attrs ...entity.DatabaseAttribute) error { + method := "AlterDatabase" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -151,6 +179,7 @@ func (c *GrpcClient) AlterDatabase(ctx context.Context, dbName string, attrs ... resp, err := c.Service.AlterDatabase(ctx, req) if err != nil { + log.Fatalf("AlterDatabase failed, traceID:%s err: %v", traceID, err) return err } return handleRespStatus(resp) @@ -158,6 +187,10 @@ func (c *GrpcClient) AlterDatabase(ctx context.Context, dbName string, attrs ... // DropDatabase drop all database in milvus cluster. func (c *GrpcClient) DescribeDatabase(ctx context.Context, dbName string) (*entity.Database, error) { + method := "DescribeDatabase" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -171,10 +204,12 @@ func (c *GrpcClient) DescribeDatabase(ctx context.Context, dbName string) (*enti resp, err := c.Service.DescribeDatabase(ctx, req) if err != nil { + log.Fatalf("DescribeDatabase failed, traceID:%s err: %v", traceID, err) return nil, err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("DescribeDatabase failed, traceID:%s err: %v", traceID, err) return nil, err } database := &entity.Database{ diff --git a/client/index.go b/client/index.go index 97d3ef77..e6da0cd1 100644 --- a/client/index.go +++ b/client/index.go @@ -14,9 +14,12 @@ package client import ( "context" "fmt" + "log" "strconv" "time" + "go.opentelemetry.io/otel" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-sdk-go/v2/entity" @@ -105,6 +108,10 @@ func getIndexDef(opts ...IndexOption) indexDef { // Deprecated please use CreateIndexV2 instead. func (c *GrpcClient) CreateIndex(ctx context.Context, collName string, fieldName string, idx entity.Index, async bool, opts ...IndexOption) error { + method := "CreateIndex" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -127,9 +134,11 @@ func (c *GrpcClient) CreateIndex(ctx context.Context, collName string, fieldName resp, err := c.Service.CreateIndex(ctx, req) if err != nil { + log.Fatalf("create index failed, collName:%s, fieldName:%s, traceID:%s err: %v", collName, fieldName, traceID, err) return err } if err = handleRespStatus(resp); err != nil { + log.Fatalf("create index failed, collName:%s, fieldName:%s, traceID:%s err: %v", collName, fieldName, traceID, err) return err } if !async { // sync mode, wait index building result @@ -157,6 +166,10 @@ func (c *GrpcClient) CreateIndex(ctx context.Context, collName string, fieldName // AlterIndex modifies the index params func (c *GrpcClient) AlterIndex(ctx context.Context, collName string, indexName string, opts ...IndexOption) error { + method := "AlterIndex" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -173,6 +186,7 @@ func (c *GrpcClient) AlterIndex(ctx context.Context, collName string, indexName resp, err := c.Service.AlterIndex(ctx, req) if err != nil { + log.Fatalf("alter index failed, collName:%s, indexName:%s, traceID:%s err: %v", collName, indexName, traceID, err) return err } return handleRespStatus(resp) @@ -180,6 +194,10 @@ func (c *GrpcClient) AlterIndex(ctx context.Context, collName string, indexName // DescribeIndex describe index func (c *GrpcClient) DescribeIndex(ctx context.Context, collName string, fieldName string, opts ...IndexOption) ([]entity.Index, error) { + method := "DescribeIndex" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return []entity.Index{}, ErrClientNotReady } @@ -189,6 +207,7 @@ func (c *GrpcClient) DescribeIndex(ctx context.Context, collName string, fieldNa idxDesc, err := c.describeIndex(ctx, collName, fieldName, opts...) if err != nil { + log.Fatalf("describe index failed, collName:%s, fieldName:%s, traceID:%s err: %v", collName, fieldName, traceID, err) return nil, err } @@ -212,6 +231,10 @@ func (c *GrpcClient) DescribeIndex(ctx context.Context, collName string, fieldNa // DropIndex drop index from collection // Deprecate please use DropIndexV2 instead. func (c *GrpcClient) DropIndex(ctx context.Context, collName string, fieldName string, opts ...IndexOption) error { + method := "DropIndex" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -230,6 +253,7 @@ func (c *GrpcClient) DropIndex(ctx context.Context, collName string, fieldName s resp, err := c.Service.DropIndex(ctx, req) if err != nil { + log.Fatalf("drop index failed, collName:%s, fieldName:%s, traceID:%s err: %v", collName, fieldName, traceID, err) return err } return handleRespStatus(resp) @@ -237,6 +261,10 @@ func (c *GrpcClient) DropIndex(ctx context.Context, collName string, fieldName s // GetIndexState get index state func (c *GrpcClient) GetIndexState(ctx context.Context, collName string, fieldName string, opts ...IndexOption) (entity.IndexState, error) { + method := "GetIndexState" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return entity.IndexState(commonpb.IndexState_Failed), ErrClientNotReady } @@ -253,9 +281,11 @@ func (c *GrpcClient) GetIndexState(ctx context.Context, collName string, fieldNa } resp, err := c.Service.GetIndexState(ctx, req) if err != nil { + log.Fatalf("get index state failed, collName:%s, fieldName:%s, traceID:%s err: %v", collName, fieldName, traceID, err) return entity.IndexState(commonpb.IndexState_IndexStateNone), err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("get index state failed, collName:%s, fieldName:%s, traceID:%s err: %v", collName, fieldName, traceID, err) return entity.IndexState(commonpb.IndexState_IndexStateNone), err } @@ -264,6 +294,10 @@ func (c *GrpcClient) GetIndexState(ctx context.Context, collName string, fieldNa // GetIndexBuildProgress get index building progress func (c *GrpcClient) GetIndexBuildProgress(ctx context.Context, collName string, fieldName string, opts ...IndexOption) (total, indexed int64, err error) { + method := "GetIndexBuildProgress" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return 0, 0, ErrClientNotReady } @@ -280,9 +314,11 @@ func (c *GrpcClient) GetIndexBuildProgress(ctx context.Context, collName string, } resp, err := c.Service.GetIndexBuildProgress(ctx, req) if err != nil { + log.Fatalf("get index build progress failed, collName:%s, fieldName:%s, traceID:%s err: %v", collName, fieldName, traceID, err) return 0, 0, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("get index build progress failed, collName:%s, fieldName:%s, traceID:%s err: %v", collName, fieldName, traceID, err) return 0, 0, err } return resp.GetTotalRows(), resp.GetIndexedRows(), nil diff --git a/client/insert.go b/client/insert.go index 4739ecc9..70761916 100644 --- a/client/insert.go +++ b/client/insert.go @@ -15,15 +15,17 @@ import ( "context" "encoding/json" "fmt" + "log" "time" "github.com/cockroachdb/errors" "github.com/golang/protobuf/proto" + "go.opentelemetry.io/otel" + "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-proto/go-api/v2/msgpb" "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" - "github.com/milvus-io/milvus-sdk-go/v2/entity" ) @@ -32,11 +34,16 @@ import ( // partitionName is the partition to insert, if not specified(empty), default partition will be used // columns are slice of the column-based data func (c *GrpcClient) Insert(ctx context.Context, collName string, partitionName string, columns ...entity.Column) (entity.Column, error) { + method := "Insert" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } collInfo, err := c.getCollectionInfo(ctx, collName) if err != nil { + log.Fatalf("insert failed, traceID:%s err: %v", traceID, err) return nil, err } schema := collInfo.Schema @@ -44,6 +51,7 @@ func (c *GrpcClient) Insert(ctx context.Context, collName string, partitionName // convert columns to field data fieldsData, rowSize, err := c.processInsertColumns(schema, columns...) if err != nil { + log.Fatalf("insert failed, traceID:%s err: %v", traceID, err) return nil, err } @@ -59,9 +67,11 @@ func (c *GrpcClient) Insert(ctx context.Context, collName string, partitionName resp, err := c.Service.Insert(ctx, req) if err != nil { + log.Fatalf("insert failed, traceID:%s err: %v", traceID, err) return nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("insert failed, traceID:%s err: %v", traceID, err) return nil, err } c.cache.setSessionTs(collName, resp.Timestamp) @@ -224,6 +234,10 @@ func (c *GrpcClient) Flush(ctx context.Context, collName string, async bool, opt // Flush force collection to flush memory records into storage // in sync mode, flush will wait all segments to be flushed func (c *GrpcClient) FlushV2(ctx context.Context, collName string, async bool, opts ...FlushOption) ([]int64, []int64, int64, map[string]msgpb.MsgPosition, error) { + method := "Flush" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, nil, 0, nil, ErrClientNotReady } @@ -236,9 +250,11 @@ func (c *GrpcClient) FlushV2(ctx context.Context, collName string, async bool, o } resp, err := c.Service.Flush(ctx, req) if err != nil { + log.Fatalf("flush %s failed, traceID:%s err: %v", collName, traceID, err) return nil, nil, 0, nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("flush %s failed, traceID:%s err: %v", collName, traceID, err) return nil, nil, 0, nil, err } channelCPs := resp.GetChannelCps() @@ -262,6 +278,7 @@ func (c *GrpcClient) FlushV2(ctx context.Context, collName string, async bool, o // respect context deadline/cancel select { case <-ctx.Done(): + log.Fatalf("flush %s failed, traceID:%s err: %v", collName, traceID, err) return nil, nil, 0, nil, errors.New("deadline exceeded") default: } @@ -283,6 +300,10 @@ func (c *GrpcClient) FlushV2(ctx context.Context, collName string, async bool, o // DeleteByPks deletes entries related to provided primary keys func (c *GrpcClient) DeleteByPks(ctx context.Context, collName string, partitionName string, ids entity.Column) error { + method := "DeleteByPks" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -297,6 +318,7 @@ func (c *GrpcClient) DeleteByPks(ctx context.Context, collName string, partition coll, err := c.DescribeCollection(ctx, collName) if err != nil { + log.Fatalf("delete by Pks failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } @@ -317,10 +339,12 @@ func (c *GrpcClient) DeleteByPks(ctx context.Context, collName string, partition resp, err := c.Service.Delete(ctx, req) if err != nil { + log.Fatalf("delete by Pks failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("delete by Pks failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } c.cache.setSessionTs(collName, resp.Timestamp) @@ -329,6 +353,10 @@ func (c *GrpcClient) DeleteByPks(ctx context.Context, collName string, partition // Delete deletes entries match expression func (c *GrpcClient) Delete(ctx context.Context, collName string, partitionName string, expr string) error { + method := "Delete" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -342,10 +370,12 @@ func (c *GrpcClient) Delete(ctx context.Context, collName string, partitionName resp, err := c.Service.Delete(ctx, req) if err != nil { + log.Fatalf("delete failed, collName:%s, partitionName:%s, expr:%s, traceID:%s err: %v", collName, partitionName, expr, traceID, err) return err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("delete failed, collName:%s, partitionName:%s, expr:%s, traceID:%s err: %v", collName, partitionName, expr, traceID, err) return err } c.cache.setSessionTs(collName, resp.Timestamp) @@ -357,6 +387,10 @@ func (c *GrpcClient) Delete(ctx context.Context, collName string, partitionName // partitionName is the partition to upsert, if not specified(empty), default partition will be used // columns are slice of the column-based data func (c *GrpcClient) Upsert(ctx context.Context, collName string, partitionName string, columns ...entity.Column) (entity.Column, error) { + method := "Upsert" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -368,6 +402,7 @@ func (c *GrpcClient) Upsert(ctx context.Context, collName string, partitionName fieldsData, rowSize, err := c.processInsertColumns(schema, columns...) if err != nil { + log.Fatalf("upsert failed, collName:%s, partitionName:%s, traceID:%s err: %v", collName, partitionName, traceID, err) return nil, err } @@ -383,9 +418,11 @@ func (c *GrpcClient) Upsert(ctx context.Context, collName string, partitionName resp, err := c.Service.Upsert(ctx, req) if err != nil { + log.Fatalf("upsert failed, collName:%s, partitionName:%s, traceID:%s err: %v", collName, partitionName, traceID, err) return nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("upsert failed, collName:%s, partitionName:%s, traceID:%s err: %v", collName, partitionName, traceID, err) return nil, err } c.cache.setSessionTs(collName, resp.Timestamp) @@ -395,6 +432,10 @@ func (c *GrpcClient) Upsert(ctx context.Context, collName string, partitionName // BulkInsert data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments func (c *GrpcClient) BulkInsert(ctx context.Context, collName string, partitionName string, files []string, opts ...BulkInsertOption) (int64, error) { + method := "BulkInsert" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return 0, ErrClientNotReady } @@ -410,6 +451,7 @@ func (c *GrpcClient) BulkInsert(ctx context.Context, collName string, partitionN resp, err := c.Service.Import(ctx, req) if err != nil { + log.Fatalf("bulk insert failed, collName:%s, partitionName:%s, traceID:%s err: %v", collName, partitionName, traceID, err) return 0, err } if err := handleRespStatus(resp.GetStatus()); err != nil { @@ -421,6 +463,10 @@ func (c *GrpcClient) BulkInsert(ctx context.Context, collName string, partitionN // GetBulkInsertState checks import task state func (c *GrpcClient) GetBulkInsertState(ctx context.Context, taskID int64) (*entity.BulkInsertTaskState, error) { + method := "GetBulkInsertState" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -429,9 +475,11 @@ func (c *GrpcClient) GetBulkInsertState(ctx context.Context, taskID int64) (*ent } resp, err := c.Service.GetImportState(ctx, req) if err != nil { + log.Fatalf("get bulk insert state failed, taskID:%d, traceID:%s err: %v", taskID, traceID, err) return nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("get bulk insert state failed, taskID:%d, traceID:%s err: %v", taskID, traceID, err) return nil, err } @@ -449,6 +497,10 @@ func (c *GrpcClient) GetBulkInsertState(ctx context.Context, taskID int64) (*ent // ListBulkInsertTasks list state of all import tasks func (c *GrpcClient) ListBulkInsertTasks(ctx context.Context, collName string, limit int64) ([]*entity.BulkInsertTaskState, error) { + method := "ListBulkInsertTasks" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -458,9 +510,11 @@ func (c *GrpcClient) ListBulkInsertTasks(ctx context.Context, collName string, l } resp, err := c.Service.ListImportTasks(ctx, req) if err != nil { + log.Fatalf("list bulk insert tasks failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("list bulk insert tasks failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return nil, err } diff --git a/client/iterator.go b/client/iterator.go index 5cb92ff3..747a969f 100644 --- a/client/iterator.go +++ b/client/iterator.go @@ -4,16 +4,24 @@ import ( "context" "fmt" "io" + "log" "strings" "github.com/cockroachdb/errors" + "go.opentelemetry.io/otel" + "github.com/milvus-io/milvus-sdk-go/v2/entity" ) func (c *GrpcClient) SearchIterator(ctx context.Context, opt *SearchIteratorOption) (*SearchIterator, error) { + method := "SearchIterator" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() collectionName := opt.collectionName collInfo, err := c.getCollectionInfo(ctx, collectionName) if err != nil { + log.Fatalf("search iterator failed, traceID:%s err: %v", traceID, err) return nil, err } sch := collInfo.Schema @@ -195,9 +203,14 @@ func (itr *SearchIterator) Next(ctx context.Context) (*SearchResult, error) { } func (c *GrpcClient) QueryIterator(ctx context.Context, opt *QueryIteratorOption) (*QueryIterator, error) { + method := "QueryIterator" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() collectionName := opt.collectionName collInfo, err := c.getCollectionInfo(ctx, collectionName) if err != nil { + log.Fatalf("query iterator failed, traceID:%s err: %v", traceID, err) return nil, err } sch := collInfo.Schema diff --git a/client/maintainance.go b/client/maintainance.go index 1f9ea0ef..e15b4427 100644 --- a/client/maintainance.go +++ b/client/maintainance.go @@ -18,20 +18,28 @@ package client import ( "context" + "log" "time" + "go.opentelemetry.io/otel" + "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-sdk-go/v2/entity" ) // ManualCompaction triggers a compaction on provided collection func (c *GrpcClient) ManualCompaction(ctx context.Context, collName string, _ time.Duration) (int64, error) { + method := "ManualCompaction" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return 0, ErrClientNotReady } coll, err := c.DescribeCollection(ctx, collName) if err != nil { + log.Fatalf("manual compaction failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return 0, err } @@ -41,11 +49,13 @@ func (c *GrpcClient) ManualCompaction(ctx context.Context, collName string, _ ti resp, err := c.Service.ManualCompaction(ctx, req) if err != nil { + log.Fatalf("manual compaction failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return 0, err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("manual compaction failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return 0, err } @@ -54,6 +64,10 @@ func (c *GrpcClient) ManualCompaction(ctx context.Context, collName string, _ ti // GetCompactionState get compaction state of provided compaction id func (c *GrpcClient) GetCompactionState(ctx context.Context, id int64) (entity.CompactionState, error) { + method := "GetCompactionState" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return entity.CompcationStateUndefined, ErrClientNotReady } @@ -61,11 +75,13 @@ func (c *GrpcClient) GetCompactionState(ctx context.Context, id int64) (entity.C req := &milvuspb.GetCompactionStateRequest{CompactionID: id} resp, err := c.Service.GetCompactionState(ctx, req) if err != nil { + log.Fatalf("get compaction state failed, id:%d, traceID:%s err: %v", id, traceID, err) return entity.CompcationStateUndefined, err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("get compaction state failed, id:%d, traceID:%s err: %v", id, traceID, err) return entity.CompcationStateUndefined, err } @@ -75,6 +91,10 @@ func (c *GrpcClient) GetCompactionState(ctx context.Context, id int64) (entity.C // GetCompactionStateWithPlans get compaction state with plans of provided compaction id func (c *GrpcClient) GetCompactionStateWithPlans(ctx context.Context, id int64) (entity.CompactionState, []entity.CompactionPlan, error) { + method := "GetCompactionStateWithPlans" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return entity.CompcationStateUndefined, nil, ErrClientNotReady } @@ -84,11 +104,13 @@ func (c *GrpcClient) GetCompactionStateWithPlans(ctx context.Context, id int64) } resp, err := c.Service.GetCompactionStateWithPlans(ctx, req) if err != nil { + log.Fatalf("get compaction state with plans failed, id:%d, traceID:%s err: %v", id, traceID, err) return entity.CompcationStateUndefined, nil, err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("get compaction state with plans failed, id:%d, traceID:%s err: %v", id, traceID, err) return entity.CompcationStateUndefined, nil, err } diff --git a/client/mq_message.go b/client/mq_message.go index da645a19..ef28c519 100644 --- a/client/mq_message.go +++ b/client/mq_message.go @@ -2,6 +2,9 @@ package client import ( "context" + "log" + + "go.opentelemetry.io/otel" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-proto/go-api/v2/msgpb" @@ -12,6 +15,10 @@ func (c *GrpcClient) ReplicateMessage(ctx context.Context, channelName string, beginTs, endTs uint64, msgsBytes [][]byte, startPositions, endPositions []*msgpb.MsgPosition, opts ...ReplicateMessageOption) (*entity.MessageInfo, error) { + method := "ReplicateMessage" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady @@ -29,10 +36,12 @@ func (c *GrpcClient) ReplicateMessage(ctx context.Context, } resp, err := c.Service.ReplicateMessage(ctx, req) if err != nil { + log.Fatalf("replicate message failed, channelName:%s, traceID:%s err: %v", channelName, traceID, err) return nil, err } err = handleRespStatus(resp.GetStatus()) if err != nil { + log.Fatalf("replicate message failed, channelName:%s, traceID:%s err: %v", channelName, traceID, err) return nil, err } return &entity.MessageInfo{ diff --git a/client/partition.go b/client/partition.go index 30126ecd..0257cb64 100644 --- a/client/partition.go +++ b/client/partition.go @@ -13,9 +13,11 @@ package client import ( "context" + "log" "time" "github.com/cockroachdb/errors" + "go.opentelemetry.io/otel" "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" @@ -24,6 +26,11 @@ import ( // CreatePartition create partition for collection func (c *GrpcClient) CreatePartition(ctx context.Context, collName string, partitionName string, opts ...CreatePartitionOption) error { + method := "CreatePartition" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() + if c.Service == nil { return ErrClientNotReady } @@ -38,6 +45,7 @@ func (c *GrpcClient) CreatePartition(ctx context.Context, collName string, parti } resp, err := c.Service.CreatePartition(ctx, req) if err != nil { + log.Fatalf("create partition failed, collName:%s, partitionName:%s, traceID:%s err: %v", collName, partitionName, traceID, err) return err } return handleRespStatus(resp) @@ -45,6 +53,10 @@ func (c *GrpcClient) CreatePartition(ctx context.Context, collName string, parti // DropPartition drop partition from collection func (c *GrpcClient) DropPartition(ctx context.Context, collName string, partitionName string, opts ...DropPartitionOption) error { + method := "DropPartition" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -59,6 +71,7 @@ func (c *GrpcClient) DropPartition(ctx context.Context, collName string, partiti } resp, err := c.Service.DropPartition(ctx, req) if err != nil { + log.Fatalf("drop partition failed, collName:%s, partitionName:%s, traceID:%s err: %v", collName, partitionName, traceID, err) return err } return handleRespStatus(resp) @@ -66,6 +79,10 @@ func (c *GrpcClient) DropPartition(ctx context.Context, collName string, partiti // HasPartition check whether specified partition exists func (c *GrpcClient) HasPartition(ctx context.Context, collName string, partitionName string) (bool, error) { + method := "HasPartition" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return false, ErrClientNotReady } @@ -76,6 +93,7 @@ func (c *GrpcClient) HasPartition(ctx context.Context, collName string, partitio } resp, err := c.Service.HasPartition(ctx, req) if err != nil { + log.Fatalf("has partition failed, collName:%s, partitionName:%s, traceID:%s err: %v", collName, partitionName, traceID, err) return false, err } if resp.GetStatus().GetErrorCode() != commonpb.ErrorCode_Success { @@ -86,6 +104,10 @@ func (c *GrpcClient) HasPartition(ctx context.Context, collName string, partitio // ShowPartitions list all partitions from collection func (c *GrpcClient) ShowPartitions(ctx context.Context, collName string) ([]*entity.Partition, error) { + method := "ShowPartitions" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return []*entity.Partition{}, ErrClientNotReady } @@ -95,9 +117,11 @@ func (c *GrpcClient) ShowPartitions(ctx context.Context, collName string) ([]*en } resp, err := c.Service.ShowPartitions(ctx, req) if err != nil { + log.Fatalf("show partitions failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return []*entity.Partition{}, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("show partitions failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return []*entity.Partition{}, err } partitions := make([]*entity.Partition, 0, len(resp.GetPartitionIDs())) @@ -117,6 +141,10 @@ func (c *GrpcClient) ShowPartitions(ctx context.Context, collName string) ([]*en // LoadPartitions load collection paritions into memory func (c *GrpcClient) LoadPartitions(ctx context.Context, collName string, partitionNames []string, async bool, opts ...LoadPartitionsOption) error { + method := "LoadPartitions" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -131,9 +159,11 @@ func (c *GrpcClient) LoadPartitions(ctx context.Context, collName string, partit } resp, err := c.Service.LoadPartitions(ctx, req) if err != nil { + log.Fatalf("load partitions failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } if err := handleRespStatus(resp); err != nil { + log.Fatalf("load partitions failed, collName:%s, traceID:%s err: %v", collName, traceID, err) return err } @@ -148,6 +178,7 @@ func (c *GrpcClient) LoadPartitions(ctx context.Context, collName string, partit case <-ticker.C: progress, err := c.getLoadingProgress(ctx, collName, partitionNames...) if err != nil { + log.Fatalf("get loading progress failed, traceID:%s err: %v", traceID, err) return err } if progress == 100 { @@ -162,6 +193,10 @@ func (c *GrpcClient) LoadPartitions(ctx context.Context, collName string, partit // ReleasePartitions release partitions func (c *GrpcClient) ReleasePartitions(ctx context.Context, collName string, partitionNames []string, opts ...ReleasePartitionsOption) error { + method := "ReleasePartitions" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -175,6 +210,7 @@ func (c *GrpcClient) ReleasePartitions(ctx context.Context, collName string, par } resp, err := c.Service.ReleasePartitions(ctx, req) if err != nil { + log.Fatalf("release partitions failed, collName:%s, partitionNames:%v, traceID:%s err: %v", collName, partitionNames, traceID, err) return err } diff --git a/client/rbac.go b/client/rbac.go index 700254fc..4daf79f6 100644 --- a/client/rbac.go +++ b/client/rbac.go @@ -19,6 +19,9 @@ package client import ( "context" "errors" + "log" + + "go.opentelemetry.io/otel" "github.com/milvus-io/milvus-proto/go-api/v2/commonpb" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" @@ -27,6 +30,10 @@ import ( // CreateRole creates a role entity in Milvus. func (c *GrpcClient) CreateRole(ctx context.Context, name string) error { + method := "CreateRole" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -38,6 +45,7 @@ func (c *GrpcClient) CreateRole(ctx context.Context, name string) error { } resp, err := c.Service.CreateRole(ctx, req) if err != nil { + log.Fatalf("create role failed, traceID:%s err: %v", traceID, err) return err } @@ -46,6 +54,10 @@ func (c *GrpcClient) CreateRole(ctx context.Context, name string) error { // DropRole drops a role entity in Milvus. func (c *GrpcClient) DropRole(ctx context.Context, name string) error { + method := "DropRole" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -56,6 +68,7 @@ func (c *GrpcClient) DropRole(ctx context.Context, name string) error { resp, err := c.Service.DropRole(ctx, req) if err != nil { + log.Fatalf("drop role failed, traceID:%s err: %v", traceID, err) return err } @@ -64,6 +77,10 @@ func (c *GrpcClient) DropRole(ctx context.Context, name string) error { // AddUserRole adds one role for user. func (c *GrpcClient) AddUserRole(ctx context.Context, username string, role string) error { + method := "AddUserRole" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -76,6 +93,7 @@ func (c *GrpcClient) AddUserRole(ctx context.Context, username string, role stri resp, err := c.Service.OperateUserRole(ctx, req) if err != nil { + log.Fatalf("add user role failed, traceID:%s err: %v", traceID, err) return err } @@ -84,6 +102,10 @@ func (c *GrpcClient) AddUserRole(ctx context.Context, username string, role stri // RemoveUserRole removes one role from user. func (c *GrpcClient) RemoveUserRole(ctx context.Context, username string, role string) error { + method := "RemoveUserRole" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -96,6 +118,7 @@ func (c *GrpcClient) RemoveUserRole(ctx context.Context, username string, role s resp, err := c.Service.OperateUserRole(ctx, req) if err != nil { + log.Fatalf("remove user role failed, traceID:%s err: %v", traceID, err) return err } @@ -104,6 +127,10 @@ func (c *GrpcClient) RemoveUserRole(ctx context.Context, username string, role s // ListRoles lists the role objects in system. func (c *GrpcClient) ListRoles(ctx context.Context) ([]entity.Role, error) { + method := "ListRoles" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -112,9 +139,11 @@ func (c *GrpcClient) ListRoles(ctx context.Context) ([]entity.Role, error) { resp, err := c.Service.SelectRole(ctx, req) if err != nil { + log.Fatalf("list roles failed, traceID:%s err: %v", traceID, err) return nil, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("list roles failed, traceID:%s err: %v", traceID, err) return nil, err } @@ -128,6 +157,10 @@ func (c *GrpcClient) ListRoles(ctx context.Context) ([]entity.Role, error) { // ListUsers lists the user objects in system. func (c *GrpcClient) ListUsers(ctx context.Context) ([]entity.User, error) { + method := "ListUsers" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -136,9 +169,11 @@ func (c *GrpcClient) ListUsers(ctx context.Context) ([]entity.User, error) { resp, err := c.Service.SelectUser(ctx, req) if err != nil { + log.Fatalf("list users failed, traceID:%s err: %v", traceID, err) return nil, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("list users failed, traceID:%s err: %v", traceID, err) return nil, err } @@ -152,6 +187,10 @@ func (c *GrpcClient) ListUsers(ctx context.Context) ([]entity.User, error) { // DescribeUser lists the user descriptions in the system (name, roles) func (c *GrpcClient) DescribeUser(ctx context.Context, username string) (entity.UserDescription, error) { + method := "DescribeUser" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return entity.UserDescription{}, ErrClientNotReady } @@ -165,9 +204,11 @@ func (c *GrpcClient) DescribeUser(ctx context.Context, username string) (entity. resp, err := c.Service.SelectUser(ctx, req) if err != nil { + log.Fatalf("describe user failed, traceID:%s err: %v", traceID, err) return entity.UserDescription{}, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("describe user failed, traceID:%s err: %v", traceID, err) return entity.UserDescription{}, err } results := resp.GetResults() @@ -189,6 +230,10 @@ func (c *GrpcClient) DescribeUser(ctx context.Context, username string) (entity. // DescribeUsers lists all users with descriptions (names, roles) func (c *GrpcClient) DescribeUsers(ctx context.Context) ([]entity.UserDescription, error) { + method := "DescribeUsers" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -199,9 +244,11 @@ func (c *GrpcClient) DescribeUsers(ctx context.Context) ([]entity.UserDescriptio resp, err := c.Service.SelectUser(ctx, req) if err != nil { + log.Fatalf("describe users failed, traceID:%s err: %v", traceID, err) return nil, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("describe users failed, traceID:%s err: %v", traceID, err) return nil, err } results := resp.GetResults() @@ -224,6 +271,10 @@ func (c *GrpcClient) DescribeUsers(ctx context.Context) ([]entity.UserDescriptio // ListGrants lists the role grants in the system func (c *GrpcClient) ListGrants(ctx context.Context, role string, dbName string) ([]entity.RoleGrants, error) { + method := "ListGrants" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() RoleGrantsList := make([]entity.RoleGrants, 0) if c.Service == nil { return RoleGrantsList, ErrClientNotReady @@ -240,9 +291,11 @@ func (c *GrpcClient) ListGrants(ctx context.Context, role string, dbName string) resp, err := c.Service.SelectGrant(ctx, req) if err != nil { + log.Fatalf("list grants failed, traceID:%s err: %v", traceID, err) return RoleGrantsList, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("list grants failed, traceID:%s err: %v", traceID, err) return RoleGrantsList, err } @@ -269,6 +322,10 @@ func (c *GrpcClient) ListGrants(ctx context.Context, role string, dbName string) // ListGrant lists a grant info for the role and the specific object func (c *GrpcClient) ListGrant(ctx context.Context, role string, object string, objectName string, dbName string) ([]entity.RoleGrants, error) { + method := "ListGrant" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() RoleGrantsList := make([]entity.RoleGrants, 0) if c.Service == nil { return RoleGrantsList, ErrClientNotReady @@ -289,9 +346,11 @@ func (c *GrpcClient) ListGrant(ctx context.Context, role string, object string, resp, err := c.Service.SelectGrant(ctx, req) if err != nil { + log.Fatalf("list grant failed, traceID:%s err: %v", traceID, err) return RoleGrantsList, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("list grant failed, traceID:%s err: %v", traceID, err) return RoleGrantsList, err } @@ -318,6 +377,10 @@ func (c *GrpcClient) ListGrant(ctx context.Context, role string, object string, // Grant adds object privileged for role. func (c *GrpcClient) Grant(ctx context.Context, role string, objectType entity.PriviledgeObjectType, object string, privilege string, options ...entity.OperatePrivilegeOption) error { + method := "Grant" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -349,6 +412,7 @@ func (c *GrpcClient) Grant(ctx context.Context, role string, objectType entity.P resp, err := c.Service.OperatePrivilege(ctx, req) if err != nil { + log.Fatalf("grant failed, traceID:%s err: %v", traceID, err) return err } @@ -357,6 +421,10 @@ func (c *GrpcClient) Grant(ctx context.Context, role string, objectType entity.P // Revoke removes privilege from role. func (c *GrpcClient) Revoke(ctx context.Context, role string, objectType entity.PriviledgeObjectType, object string, privilege string, options ...entity.OperatePrivilegeOption) error { + method := "Revoke" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -387,6 +455,7 @@ func (c *GrpcClient) Revoke(ctx context.Context, role string, objectType entity. resp, err := c.Service.OperatePrivilege(ctx, req) if err != nil { + log.Fatalf("revoke failed, role:%s, traceID:%s err: %v", role, traceID, err) return err } @@ -395,6 +464,10 @@ func (c *GrpcClient) Revoke(ctx context.Context, role string, objectType entity. // GrantV2 adds object privilege for role without object type func (c *GrpcClient) GrantV2(ctx context.Context, role string, colName string, privilege string, options ...entity.OperatePrivilegeOption) error { + method := "GrantV2" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -419,6 +492,7 @@ func (c *GrpcClient) GrantV2(ctx context.Context, role string, colName string, p resp, err := c.Service.OperatePrivilegeV2(ctx, req) if err != nil { + log.Fatalf("grant failed, traceID:%s err: %v", traceID, err) return err } @@ -427,6 +501,10 @@ func (c *GrpcClient) GrantV2(ctx context.Context, role string, colName string, p // Revoke removes privilege from role without object type func (c *GrpcClient) RevokeV2(ctx context.Context, role string, colName string, privilege string, options ...entity.OperatePrivilegeOption) error { + method := "RevokeV2" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -451,6 +529,7 @@ func (c *GrpcClient) RevokeV2(ctx context.Context, role string, colName string, resp, err := c.Service.OperatePrivilegeV2(ctx, req) if err != nil { + log.Fatalf("revoke failed, traceID:%s err: %v", traceID, err) return err } @@ -458,6 +537,10 @@ func (c *GrpcClient) RevokeV2(ctx context.Context, role string, colName string, } func (c *GrpcClient) BackupRBAC(ctx context.Context) (*entity.RBACMeta, error) { + method := "BackupRBAC" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -466,9 +549,11 @@ func (c *GrpcClient) BackupRBAC(ctx context.Context) (*entity.RBACMeta, error) { resp, err := c.Service.BackupRBAC(ctx, req) if err != nil { + log.Fatalf("backup rbac failed, traceID:%s err: %v", traceID, err) return nil, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("backup rbac failed, traceID:%s err: %v", traceID, err) return nil, err } @@ -518,6 +603,10 @@ func (c *GrpcClient) BackupRBAC(ctx context.Context) (*entity.RBACMeta, error) { } func (c *GrpcClient) RestoreRBAC(ctx context.Context, meta *entity.RBACMeta) error { + method := "RestoreRBAC" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -580,6 +669,7 @@ func (c *GrpcClient) RestoreRBAC(ctx context.Context, meta *entity.RBACMeta) err resp, err := c.Service.RestoreRBAC(ctx, req) if err != nil { + log.Fatalf("restore rbac failed, traceID:%s err: %v", traceID, err) return err } @@ -587,6 +677,10 @@ func (c *GrpcClient) RestoreRBAC(ctx context.Context, meta *entity.RBACMeta) err } func (c *GrpcClient) CreatePrivilegeGroup(ctx context.Context, groupName string) error { + method := "CreatePrivilegeGroup" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -597,6 +691,7 @@ func (c *GrpcClient) CreatePrivilegeGroup(ctx context.Context, groupName string) resp, err := c.Service.CreatePrivilegeGroup(ctx, req) if err != nil { + log.Fatalf("create privilege group failed, traceID:%s err: %v", traceID, err) return err } @@ -604,6 +699,10 @@ func (c *GrpcClient) CreatePrivilegeGroup(ctx context.Context, groupName string) } func (c *GrpcClient) DropPrivilegeGroup(ctx context.Context, groupName string) error { + method := "DropPrivilegeGroup" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -614,6 +713,7 @@ func (c *GrpcClient) DropPrivilegeGroup(ctx context.Context, groupName string) e resp, err := c.Service.DropPrivilegeGroup(ctx, req) if err != nil { + log.Fatalf("drop privilege group failed, traceID:%s err: %v", traceID, err) return err } @@ -621,6 +721,10 @@ func (c *GrpcClient) DropPrivilegeGroup(ctx context.Context, groupName string) e } func (c *GrpcClient) ListPrivilegeGroups(ctx context.Context) ([]*entity.PrivilegeGroup, error) { + method := "ListPrivilegeGroups" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() PrivilegeGroupList := make([]*entity.PrivilegeGroup, 0) if c.Service == nil { return PrivilegeGroupList, ErrClientNotReady @@ -630,10 +734,12 @@ func (c *GrpcClient) ListPrivilegeGroups(ctx context.Context) ([]*entity.Privile resp, err := c.Service.ListPrivilegeGroups(ctx, req) if err != nil { + log.Fatalf("list privilege groups failed, traceID:%s err: %v", traceID, err) return PrivilegeGroupList, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("list privilege groups failed, traceID:%s err: %v", traceID, err) return PrivilegeGroupList, err } @@ -659,6 +765,10 @@ func (c *GrpcClient) ListPrivilegeGroups(ctx context.Context) ([]*entity.Privile } func (c *GrpcClient) AddPrivilegesToGroup(ctx context.Context, groupName string, privileges []string) error { + method := "AddPrivilegesToGroup" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -678,6 +788,7 @@ func (c *GrpcClient) AddPrivilegesToGroup(ctx context.Context, groupName string, resp, err := c.Service.OperatePrivilegeGroup(ctx, req) if err != nil { + log.Fatalf("add privilege to group failed, traceID:%s err: %v", traceID, err) return err } @@ -685,6 +796,10 @@ func (c *GrpcClient) AddPrivilegesToGroup(ctx context.Context, groupName string, } func (c *GrpcClient) RemovePrivilegesFromGroup(ctx context.Context, groupName string, privileges []string) error { + method := "RemovePrivilegesFromGroup" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -704,6 +819,7 @@ func (c *GrpcClient) RemovePrivilegesFromGroup(ctx context.Context, groupName st resp, err := c.Service.OperatePrivilegeGroup(ctx, req) if err != nil { + log.Fatalf("remove privilege from group failed, traceID:%s err: %v", traceID, err) return err } diff --git a/client/resource_group.go b/client/resource_group.go index 6cfd6552..e18d777a 100644 --- a/client/resource_group.go +++ b/client/resource_group.go @@ -13,6 +13,9 @@ package client import ( "context" + "log" + + "go.opentelemetry.io/otel" "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-sdk-go/v2/entity" @@ -20,6 +23,10 @@ import ( // ListResourceGroups returns list of resource group names in current Milvus instance. func (c *GrpcClient) ListResourceGroups(ctx context.Context) ([]string, error) { + method := "ListResourceGroups" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -28,9 +35,11 @@ func (c *GrpcClient) ListResourceGroups(ctx context.Context) ([]string, error) { resp, err := c.Service.ListResourceGroups(ctx, req) if err != nil { + log.Fatalf("list resource groups failed, traceID:%s, error: %v", traceID, err) return nil, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("list resource groups failed, traceID:%s, error: %v", traceID, err) return nil, err } @@ -39,6 +48,10 @@ func (c *GrpcClient) ListResourceGroups(ctx context.Context) ([]string, error) { // CreateResourceGroup creates a resource group with provided name. func (c *GrpcClient) CreateResourceGroup(ctx context.Context, rgName string, opts ...CreateResourceGroupOption) error { + method := "CreateResourceGroup" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -52,6 +65,7 @@ func (c *GrpcClient) CreateResourceGroup(ctx context.Context, rgName string, opt resp, err := c.Service.CreateResourceGroup(ctx, req) if err != nil { + log.Fatalf("create resource group failed, traceID:%s, error: %v", traceID, err) return err } return handleRespStatus(resp) @@ -59,6 +73,10 @@ func (c *GrpcClient) CreateResourceGroup(ctx context.Context, rgName string, opt // UpdateResourceGroups updates resource groups with provided options. func (c *GrpcClient) UpdateResourceGroups(ctx context.Context, opts ...UpdateResourceGroupsOption) error { + method := "UpdateResourceGroups" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -70,6 +88,7 @@ func (c *GrpcClient) UpdateResourceGroups(ctx context.Context, opts ...UpdateRes resp, err := c.Service.UpdateResourceGroups(ctx, req) if err != nil { + log.Fatalf("update resource groups failed, traceID:%s, error: %v", traceID, err) return err } return handleRespStatus(resp) @@ -77,6 +96,10 @@ func (c *GrpcClient) UpdateResourceGroups(ctx context.Context, opts ...UpdateRes // DescribeResourceGroup returns resource groups information. func (c *GrpcClient) DescribeResourceGroup(ctx context.Context, rgName string) (*entity.ResourceGroup, error) { + method := "DescribeResourceGroup" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -87,9 +110,11 @@ func (c *GrpcClient) DescribeResourceGroup(ctx context.Context, rgName string) ( resp, err := c.Service.DescribeResourceGroup(ctx, req) if err != nil { + log.Fatalf("describe resource group failed, traceID:%s, error: %v", traceID, err) return nil, err } if err = handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("describe resource group failed, traceID:%s, error: %v", traceID, err) return nil, err } @@ -110,6 +135,10 @@ func (c *GrpcClient) DescribeResourceGroup(ctx context.Context, rgName string) ( // DropResourceGroup drops the resource group with provided name. func (c *GrpcClient) DropResourceGroup(ctx context.Context, rgName string) error { + method := "DropResourceGroup" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -120,6 +149,7 @@ func (c *GrpcClient) DropResourceGroup(ctx context.Context, rgName string) error resp, err := c.Service.DropResourceGroup(ctx, req) if err != nil { + log.Fatalf("drop resource group failed, traceID:%s, error: %v", traceID, err) return err } return handleRespStatus(resp) @@ -127,6 +157,10 @@ func (c *GrpcClient) DropResourceGroup(ctx context.Context, rgName string) error // TransferNode transfers querynodes between resource groups. func (c *GrpcClient) TransferNode(ctx context.Context, sourceRg, targetRg string, nodesNum int32) error { + method := "TransferNode" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -139,6 +173,7 @@ func (c *GrpcClient) TransferNode(ctx context.Context, sourceRg, targetRg string resp, err := c.Service.TransferNode(ctx, req) if err != nil { + log.Fatalf("transfer node failed, traceID:%s, error: %v", traceID, err) return err } return handleRespStatus(resp) @@ -146,6 +181,10 @@ func (c *GrpcClient) TransferNode(ctx context.Context, sourceRg, targetRg string // TransferReplica transfer collection replicas between source,target resource group. func (c *GrpcClient) TransferReplica(ctx context.Context, sourceRg, targetRg string, collectionName string, replicaNum int64) error { + method := "TransferReplica" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -159,6 +198,7 @@ func (c *GrpcClient) TransferReplica(ctx context.Context, sourceRg, targetRg str resp, err := c.Service.TransferReplica(ctx, req) if err != nil { + log.Fatalf("transfer replica failed, traceID:%s, error: %v", traceID, err) return err } return handleRespStatus(resp) diff --git a/client/row.go b/client/row.go index 12014f4b..65f22da5 100644 --- a/client/row.go +++ b/client/row.go @@ -3,11 +3,13 @@ package client import ( "context" "fmt" + "log" "reflect" "github.com/cockroachdb/errors" - "github.com/golang/protobuf/proto" + "go.opentelemetry.io/otel" + "github.com/milvus-io/milvus-proto/go-api/v2/milvuspb" "github.com/milvus-io/milvus-proto/go-api/v2/schemapb" "github.com/milvus-io/milvus-sdk-go/v2/entity" @@ -15,6 +17,10 @@ import ( // CreateCollectionByRow create collection by row func (c *GrpcClient) CreateCollectionByRow(ctx context.Context, row entity.Row, shardNum int32) error { + method := "CreateCollectionByRow" + ctx, span := otel.Tracer("client").Start(ctx, method) + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return ErrClientNotReady } @@ -31,7 +37,7 @@ func (c *GrpcClient) CreateCollectionByRow(ctx context.Context, row entity.Row, } // already exists collection with same name, return error if has { - return fmt.Errorf("collection %s already exist", sch.CollectionName) + return fmt.Errorf("collection %s already exist, traceID:%s", sch.CollectionName, traceID) } // marshal schema to bytes for message transfer p := sch.ProtoMessage() @@ -49,6 +55,7 @@ func (c *GrpcClient) CreateCollectionByRow(ctx context.Context, row entity.Row, resp, err := c.Service.CreateCollection(ctx, req) // handles response if err != nil { + log.Fatalf("create collection failed, collName:%s, traceID:%s, err: %v", sch.CollectionName, traceID, err) return err } err = handleRespStatus(resp) @@ -62,6 +69,8 @@ func (c *GrpcClient) CreateCollectionByRow(ctx context.Context, row entity.Row, func (c *GrpcClient) InsertByRows(ctx context.Context, collName string, partitionName string, rows []entity.Row, ) (entity.Column, error) { + ctx, span := otel.Tracer("client").Start(ctx, "InsertByRows") + defer span.End() anys := make([]interface{}, 0, len(rows)) for _, row := range rows { anys = append(anys, row) @@ -75,6 +84,9 @@ func (c *GrpcClient) InsertByRows(ctx context.Context, collName string, partitio func (c *GrpcClient) InsertRows(ctx context.Context, collName string, partitionName string, rows []interface{}, ) (entity.Column, error) { + ctx, span := otel.Tracer("client").Start(ctx, "InsertRows") + defer span.End() + traceID := span.SpanContext().TraceID().String() if c.Service == nil { return nil, ErrClientNotReady } @@ -84,11 +96,13 @@ func (c *GrpcClient) InsertRows(ctx context.Context, collName string, partitionN coll, err := c.DescribeCollection(ctx, collName) if err != nil { + log.Fatalf("collection %s not exist, traceID:%s, err: %v", collName, traceID, err) return nil, err } // 1. convert rows to columns columns, err := entity.AnyToColumns(rows, coll.Schema) if err != nil { + log.Fatalf("convert row to columns failed, traceID:%s, err: %v", traceID, err) return nil, err } // fieldData @@ -105,9 +119,11 @@ func (c *GrpcClient) InsertRows(ctx context.Context, collName string, partitionN } resp, err := c.Service.Insert(ctx, req) if err != nil { + log.Fatalf("insert failed, traceID:%s, err: %v", traceID, err) return nil, err } if err := handleRespStatus(resp.GetStatus()); err != nil { + log.Fatalf("handle response status failed, traceID:%s, err: %v", traceID, err) return nil, err } c.cache.setSessionTs(collName, resp.Timestamp) diff --git a/client/stats_handler.go b/client/stats_handler.go new file mode 100644 index 00000000..350f4c2b --- /dev/null +++ b/client/stats_handler.go @@ -0,0 +1,112 @@ +package client + +import ( + "context" + "sync" + "sync/atomic" + + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + sdk "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.4.0" + "google.golang.org/grpc/stats" +) + +var ( + dynamicClientHandler *dynamicOtelGrpcStatsHandler + initClientOnce sync.Once +) + +// dynamicOtelGrpcStatsHandler wraps otelgprc.StatsHandler +// to implement runtime configuration update. +type dynamicOtelGrpcStatsHandler struct { + handler atomic.Pointer[stats.Handler] +} + +func getDynamicClientStatsHandler() *dynamicOtelGrpcStatsHandler { + initClientOnce.Do(func() { + // init trace noop provider + tp := sdk.NewTracerProvider( + sdk.WithBatcher(nil), + sdk.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String("Client"), + )), + sdk.WithSampler(sdk.ParentBased( + sdk.TraceIDRatioBased(1), + )), + ) + otel.SetTracerProvider(tp) + otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{})) + + // init trace stats handler + statsHandler := otelgrpc.NewClientHandler( + otelgrpc.WithTracerProvider(otel.GetTracerProvider()), + ) + + dynamicClientHandler = &dynamicOtelGrpcStatsHandler{} + dynamicClientHandler.handler.Store(&statsHandler) + }) + + return dynamicClientHandler +} + +func (h *dynamicOtelGrpcStatsHandler) getHandler() stats.Handler { + return *h.handler.Load() +} + +func (h *dynamicOtelGrpcStatsHandler) setHandler(handler stats.Handler) { + h.handler.Store(&handler) +} + +// TagRPC can attach some information to the given context. +// The context used for the rest lifetime of the RPC will be derived from +// the returned context. +func (h *dynamicOtelGrpcStatsHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context { + handler := h.getHandler() + if handler == nil { + return ctx + } + + return handler.TagRPC(ctx, info) +} + +// HandleRPC processes the RPC stats. +func (h *dynamicOtelGrpcStatsHandler) HandleRPC(ctx context.Context, stats stats.RPCStats) { + handler := h.getHandler() + if handler == nil { + return + } + + handler.HandleRPC(ctx, stats) +} + +// TagConn can attach some information to the given context. +// The returned context will be used for stats handling. +// For conn stats handling, the context used in HandleConn for this +// connection will be derived from the context returned. +// For RPC stats handling, +// - On server side, the context used in HandleRPC for all RPCs on this +// +// connection will be derived from the context returned. +// - On client side, the context is not derived from the context returned. +func (h *dynamicOtelGrpcStatsHandler) TagConn(ctx context.Context, tagInfo *stats.ConnTagInfo) context.Context { + handler := h.getHandler() + if handler == nil { + return ctx + } + + return handler.TagConn(ctx, tagInfo) +} + +// HandleConn processes the Conn stats. +func (h *dynamicOtelGrpcStatsHandler) HandleConn(ctx context.Context, stats stats.ConnStats) { + handler := h.getHandler() + if handler == nil { + return + } + + handler.HandleConn(ctx, stats) +} diff --git a/go.mod b/go.mod index 1fd838ab..e378cff0 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,23 @@ module github.com/milvus-io/milvus-sdk-go/v2 -go 1.17 +go 1.22.7 + +toolchain go1.22.10 require ( github.com/cockroachdb/errors v1.9.1 github.com/go-faker/faker/v4 v4.1.0 - github.com/golang/protobuf v1.5.2 + github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 github.com/milvus-io/milvus-proto/go-api/v2 v2.5.0-beta.0.20241125085227-a6cba3e091b5 - github.com/stretchr/testify v1.8.1 + github.com/stretchr/testify v1.10.0 github.com/tidwall/gjson v1.14.4 github.com/x448/float16 v0.8.4 - golang.org/x/sync v0.8.0 - google.golang.org/grpc v1.48.0 + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 + go.opentelemetry.io/otel v1.33.0 + go.opentelemetry.io/otel/sdk v1.33.0 + golang.org/x/sync v0.10.0 + google.golang.org/grpc v1.68.1 google.golang.org/grpc/examples v0.0.0-20220617181431-3e7b97febc7f ) @@ -21,19 +26,25 @@ require ( github.com/cockroachdb/redact v1.1.3 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/getsentry/sentry-go v0.12.0 // indirect + github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/kr/pretty v0.3.0 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rogpeppe/go-internal v1.8.1 // indirect - github.com/stretchr/objx v0.5.0 // indirect + github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/stretchr/objx v0.5.2 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect - google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 // indirect - google.golang.org/protobuf v1.33.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/otel/metric v1.33.0 // indirect + go.opentelemetry.io/otel/trace v1.33.0 // indirect + golang.org/x/net v0.32.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 // indirect + google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 64969703..6a70fdce 100644 --- a/go.sum +++ b/go.sum @@ -7,18 +7,12 @@ github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMd github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= github.com/cockroachdb/errors v1.9.1/go.mod h1:2sxOtL2WIc096WSZqZ5h8fa17rdDq9HZOZLBCor4mBk= @@ -44,7 +38,6 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= @@ -53,7 +46,6 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= github.com/getsentry/sentry-go v0.12.0 h1:era7g0re5iY13bHSdN/xMkyV+5zZppjRVQhZrXCaEIk= github.com/getsentry/sentry-go v0.12.0/go.mod h1:NSap0JBYWzHND8oMbyi0+XZhUalc1TBdRL1M71JZW2c= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= @@ -63,6 +55,11 @@ github.com/go-faker/faker/v4 v4.1.0 h1:ffuWmpDrducIUOO0QSKSF5Q2dxAht+dhsT9FvVHhP github.com/go-faker/faker/v4 v4.1.0/go.mod h1:uuNc0PSRxF8nMgjGrrrU4Nw5cF30Jc6Kd0/FUTTYbhg= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= @@ -88,10 +85,10 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -99,16 +96,17 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -137,8 +135,9 @@ github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -184,10 +183,11 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= @@ -204,18 +204,15 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM= github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= @@ -245,8 +242,18 @@ github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 h1:PS8wXpbyaDJQ2VDHHncMe9Vct0Zn1fEjpsjrLxGJoSc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0/go.mod h1:HDBUsEjOuRC0EzKZ1bSaRGZWUBAzo+MhAcUUORSr4D0= +go.opentelemetry.io/otel v1.33.0 h1:/FerN9bax5LoK51X/sI0SVYrjSE0/yUL7DpxW4K3FWw= +go.opentelemetry.io/otel v1.33.0/go.mod h1:SUUkR6csvUQl+yjReHu5uM3EtVV7MBm5FHKRlNx4I8I= +go.opentelemetry.io/otel/metric v1.33.0 h1:r+JOocAyeRVXD8lZpjdQjzMadVZp2M4WmQ+5WtEnklQ= +go.opentelemetry.io/otel/metric v1.33.0/go.mod h1:L9+Fyctbp6HFTddIxClbQkjtubW6O9QS3Ann/M82u6M= +go.opentelemetry.io/otel/sdk v1.33.0 h1:iax7M131HuAm9QkZotNHEfstof92xM+N8sr3uHXc2IM= +go.opentelemetry.io/otel/sdk v1.33.0/go.mod h1:A1Q5oi7/9XaMlIWzPSxLRWOI8nG3FnzHJNbiENQuihM= +go.opentelemetry.io/otel/trace v1.33.0 h1:cCJuF7LRjUFso9LPnEAHJDB2pqzp+hbO8eu1qqW2d/s= +go.opentelemetry.io/otel/trace v1.33.0/go.mod h1:uIcdVUZMpTAmz0tI1z04GoVSezK37CbGV4fr1f2nBck= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= @@ -258,7 +265,6 @@ golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -268,8 +274,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -284,16 +288,12 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= +golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -304,10 +304,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -319,10 +317,8 @@ golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -332,27 +328,17 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -367,12 +353,9 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -380,24 +363,21 @@ google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoA google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29 h1:DJUvgAPiJWeMBiT+RzBVcJGQN7bAEWS5UEoMshES9xs= -google.golang.org/genproto v0.0.0-20220503193339-ba3ae3f07e29/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576 h1:8ZmaLZE4XWrtU3MyClkYqqtl6Oegr3235h7jxsDyqCY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241209162323-e6fa225c2576/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.68.1 h1:oI5oTa11+ng8r8XMMN7jAOmWfPZWbYpCFaMUTACxkM0= +google.golang.org/grpc v1.68.1/go.mod h1:+q1XYFJjShcqn0QZHvCyeR4CXPA+llXIeUIfIe00waw= google.golang.org/grpc/examples v0.0.0-20220617181431-3e7b97febc7f h1:rqzndB2lIQGivcXdTuY3Y9NBvr70X+y77woofSRluec= google.golang.org/grpc/examples v0.0.0-20220617181431-3e7b97febc7f/go.mod h1:gxndsbNG1n4TZcHGgsYEfVGnTxqfEdfiDv6/DADXX9o= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -413,13 +393,13 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= +google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= @@ -428,7 +408,6 @@ gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=