From fb42466c65886089c4fae29603fdefd9c6a55543 Mon Sep 17 00:00:00 2001 From: Enwei Jiao Date: Thu, 12 Jan 2023 16:09:39 +0800 Subject: [PATCH] Use opentelemetry (#21509) Signed-off-by: Enwei Jiao --- cmd/components/root_coord.go | 5 - cmd/roles/roles.go | 75 ++--- configs/milvus.yaml | 12 + go.mod | 75 ++--- go.sum | 157 +++++----- internal/datacoord/segment_manager.go | 27 +- internal/datacoord/services.go | 6 +- internal/datanode/flow_graph_dd_node.go | 9 +- internal/datanode/flow_graph_delete_node.go | 12 +- .../datanode/flow_graph_insert_buffer_node.go | 9 +- internal/datanode/{type_def.go => util.go} | 17 +- internal/distributed/connection_manager.go | 12 +- internal/distributed/datacoord/service.go | 20 +- internal/distributed/datanode/service.go | 20 +- internal/distributed/indexnode/service.go | 20 +- internal/distributed/proxy/service.go | 23 +- internal/distributed/querycoord/service.go | 21 +- internal/distributed/querynode/service.go | 22 +- internal/distributed/rootcoord/service.go | 21 +- internal/indexnode/indexnode.go | 5 - internal/indexnode/indexnode_service.go | 17 +- internal/log/meta_logger.go | 129 -------- internal/log/meta_logger_test.go | 50 ---- internal/log/meta_ops.go | 17 -- internal/mq/msgstream/mq_msgstream.go | 50 ++-- internal/mq/msgstream/trace.go | 91 +++--- internal/proxy/accesslog/access_log_test.go | 11 - internal/proxy/accesslog/util.go | 9 +- internal/proxy/accesslog/util_test.go | 17 +- internal/proxy/impl.go | 276 +++++++++--------- internal/proxy/proxy_test.go | 11 +- internal/proxy/task_delete.go | 6 +- internal/proxy/task_insert.go | 11 +- internal/proxy/task_scheduler.go | 36 +-- internal/proxy/task_search.go | 14 +- internal/proxy/task_statistic.go | 15 +- internal/proxy/task_upsert.go | 10 +- .../balance/rowcount_based_balancer.go | 4 + internal/querynode/flow_graph_delete_node.go | 25 +- .../flow_graph_filter_delete_node.go | 15 +- .../querynode/flow_graph_filter_dm_node.go | 21 +- internal/querynode/flow_graph_insert_node.go | 10 +- internal/querynode/impl.go | 30 +- internal/querynode/mock_test.go | 1 + internal/querynode/search.go | 8 + internal/querynode/segment.go | 3 +- .../trace => tracer}/interceptor_suite.go | 36 +-- .../{util/trace => tracer}/stack_trace.go | 2 +- .../trace => tracer}/stack_trace_test.go | 2 +- internal/tracer/tracer.go | 67 +++++ internal/util/flowgraph/input_node.go | 19 +- internal/util/grpcclient/client.go | 20 +- internal/util/logutil/grpc_interceptor.go | 15 +- internal/util/mock/grpcclient.go | 8 +- internal/util/paramtable/component_param.go | 29 ++ internal/util/timerecord/time_recorder.go | 6 +- internal/util/trace/util.go | 220 -------------- internal/util/trace/util_test.go | 135 --------- scripts/run_go_unittest.sh | 1 - 59 files changed, 773 insertions(+), 1242 deletions(-) rename internal/datanode/{type_def.go => util.go} (74%) delete mode 100644 internal/log/meta_logger.go delete mode 100644 internal/log/meta_logger_test.go delete mode 100644 internal/log/meta_ops.go rename internal/{util/trace => tracer}/interceptor_suite.go (54%) rename internal/{util/trace => tracer}/stack_trace.go (98%) rename internal/{util/trace => tracer}/stack_trace_test.go (98%) create mode 100644 internal/tracer/tracer.go delete mode 100644 internal/util/trace/util.go delete mode 100644 internal/util/trace/util_test.go diff --git a/cmd/components/root_coord.go b/cmd/components/root_coord.go index f12705969e..c480f39fc1 100644 --- a/cmd/components/root_coord.go +++ b/cmd/components/root_coord.go @@ -18,7 +18,6 @@ package components import ( "context" - "io" "github.com/milvus-io/milvus-proto/go-api/commonpb" "github.com/milvus-io/milvus-proto/go-api/milvuspb" @@ -27,7 +26,6 @@ import ( "github.com/milvus-io/milvus/internal/util/dependency" "github.com/milvus-io/milvus/internal/util/typeutil" - "github.com/opentracing/opentracing-go" "go.uber.org/zap" ) @@ -35,9 +33,6 @@ import ( type RootCoord struct { ctx context.Context svr *rc.Server - - tracer opentracing.Tracer - closer io.Closer } // NewRootCoord creates a new RoorCoord diff --git a/cmd/roles/roles.go b/cmd/roles/roles.go index 926ab078a4..83733a921b 100644 --- a/cmd/roles/roles.go +++ b/cmd/roles/roles.go @@ -26,6 +26,8 @@ import ( "syscall" "time" + "github.com/milvus-io/milvus/internal/tracer" + "go.uber.org/zap" "github.com/milvus-io/milvus/cmd/components" @@ -40,7 +42,6 @@ import ( "github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/paramtable" _ "github.com/milvus-io/milvus/internal/util/symbolizer" // support symbolizer and crash dump - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" "github.com/prometheus/client_golang/prometheus" ) @@ -67,6 +68,7 @@ type component interface { func runComponent[T component](ctx context.Context, localMsg bool, + runWg *sync.WaitGroup, creator func(context.Context, dependency.Factory) (T, error), metricRegister func(*prometheus.Registry)) T { var role T @@ -87,6 +89,7 @@ func runComponent[T component](ctx context.Context, } wg.Done() _ = role.Run() + runWg.Done() }() wg.Wait() @@ -122,36 +125,44 @@ func (mr *MilvusRoles) printLDPreLoad() { } } -func (mr *MilvusRoles) runRootCoord(ctx context.Context, localMsg bool) *components.RootCoord { - return runComponent(ctx, localMsg, components.NewRootCoord, metrics.RegisterRootCoord) +func (mr *MilvusRoles) runRootCoord(ctx context.Context, localMsg bool, wg *sync.WaitGroup) *components.RootCoord { + wg.Add(1) + return runComponent(ctx, localMsg, wg, components.NewRootCoord, metrics.RegisterRootCoord) } -func (mr *MilvusRoles) runProxy(ctx context.Context, localMsg bool) *components.Proxy { - return runComponent(ctx, localMsg, components.NewProxy, metrics.RegisterProxy) +func (mr *MilvusRoles) runProxy(ctx context.Context, localMsg bool, wg *sync.WaitGroup) *components.Proxy { + wg.Add(1) + return runComponent(ctx, localMsg, wg, components.NewProxy, metrics.RegisterProxy) } -func (mr *MilvusRoles) runQueryCoord(ctx context.Context, localMsg bool) *components.QueryCoord { - return runComponent(ctx, localMsg, components.NewQueryCoord, metrics.RegisterQueryCoord) +func (mr *MilvusRoles) runQueryCoord(ctx context.Context, localMsg bool, wg *sync.WaitGroup) *components.QueryCoord { + wg.Add(1) + return runComponent(ctx, localMsg, wg, components.NewQueryCoord, metrics.RegisterQueryCoord) } -func (mr *MilvusRoles) runQueryNode(ctx context.Context, localMsg bool) *components.QueryNode { - return runComponent(ctx, localMsg, components.NewQueryNode, metrics.RegisterQueryNode) +func (mr *MilvusRoles) runQueryNode(ctx context.Context, localMsg bool, wg *sync.WaitGroup) *components.QueryNode { + wg.Add(1) + return runComponent(ctx, localMsg, wg, components.NewQueryNode, metrics.RegisterQueryNode) } -func (mr *MilvusRoles) runDataCoord(ctx context.Context, localMsg bool) *components.DataCoord { - return runComponent(ctx, localMsg, components.NewDataCoord, metrics.RegisterDataCoord) +func (mr *MilvusRoles) runDataCoord(ctx context.Context, localMsg bool, wg *sync.WaitGroup) *components.DataCoord { + wg.Add(1) + return runComponent(ctx, localMsg, wg, components.NewDataCoord, metrics.RegisterDataCoord) } -func (mr *MilvusRoles) runDataNode(ctx context.Context, localMsg bool) *components.DataNode { - return runComponent(ctx, localMsg, components.NewDataNode, metrics.RegisterDataNode) +func (mr *MilvusRoles) runDataNode(ctx context.Context, localMsg bool, wg *sync.WaitGroup) *components.DataNode { + wg.Add(1) + return runComponent(ctx, localMsg, wg, components.NewDataNode, metrics.RegisterDataNode) } -func (mr *MilvusRoles) runIndexCoord(ctx context.Context, localMsg bool) *components.IndexCoord { - return runComponent(ctx, localMsg, components.NewIndexCoord, func(registry *prometheus.Registry) {}) +func (mr *MilvusRoles) runIndexCoord(ctx context.Context, localMsg bool, wg *sync.WaitGroup) *components.IndexCoord { + wg.Add(1) + return runComponent(ctx, localMsg, wg, components.NewIndexCoord, func(registry *prometheus.Registry) {}) } -func (mr *MilvusRoles) runIndexNode(ctx context.Context, localMsg bool) *components.IndexNode { - return runComponent(ctx, localMsg, components.NewIndexNode, metrics.RegisterIndexNode) +func (mr *MilvusRoles) runIndexNode(ctx context.Context, localMsg bool, wg *sync.WaitGroup) *components.IndexNode { + wg.Add(1) + return runComponent(ctx, localMsg, wg, components.NewIndexNode, metrics.RegisterIndexNode) } func (mr *MilvusRoles) setupLogger() { @@ -209,6 +220,7 @@ func (mr *MilvusRoles) Run(local bool, alias string) { params.EtcdCfg.EtcdLogLevel.GetValue()) defer etcd.StopEtcdServer() } + paramtable.SetRole(typeutil.StandaloneRole) } else { if err := os.Setenv(metricsinfo.DeployModeEnvKey, metricsinfo.ClusterDeployMode); err != nil { log.Error("Failed to set deploy mode: ", zap.Error(err)) @@ -216,16 +228,10 @@ func (mr *MilvusRoles) Run(local bool, alias string) { paramtable.Init() } - if os.Getenv(metricsinfo.DeployModeEnvKey) == metricsinfo.StandaloneDeployMode { - closer := trace.InitTracing("standalone") - if closer != nil { - defer closer.Close() - } - } - var rc *components.RootCoord + var wg sync.WaitGroup if mr.EnableRootCoord { - rc = mr.runRootCoord(ctx, local) + rc = mr.runRootCoord(ctx, local, &wg) if rc != nil { defer rc.Stop() } @@ -233,8 +239,7 @@ func (mr *MilvusRoles) Run(local bool, alias string) { var pn *components.Proxy if mr.EnableProxy { - pctx := log.WithModule(ctx, "Proxy") - pn = mr.runProxy(pctx, local) + pn = mr.runProxy(ctx, local, &wg) if pn != nil { defer pn.Stop() } @@ -242,7 +247,7 @@ func (mr *MilvusRoles) Run(local bool, alias string) { var qs *components.QueryCoord if mr.EnableQueryCoord { - qs = mr.runQueryCoord(ctx, local) + qs = mr.runQueryCoord(ctx, local, &wg) if qs != nil { defer qs.Stop() } @@ -250,7 +255,7 @@ func (mr *MilvusRoles) Run(local bool, alias string) { var qn *components.QueryNode if mr.EnableQueryNode { - qn = mr.runQueryNode(ctx, local) + qn = mr.runQueryNode(ctx, local, &wg) if qn != nil { defer qn.Stop() } @@ -258,7 +263,7 @@ func (mr *MilvusRoles) Run(local bool, alias string) { var ds *components.DataCoord if mr.EnableDataCoord { - ds = mr.runDataCoord(ctx, local) + ds = mr.runDataCoord(ctx, local, &wg) if ds != nil { defer ds.Stop() } @@ -266,7 +271,7 @@ func (mr *MilvusRoles) Run(local bool, alias string) { var dn *components.DataNode if mr.EnableDataNode { - dn = mr.runDataNode(ctx, local) + dn = mr.runDataNode(ctx, local, &wg) if dn != nil { defer dn.Stop() } @@ -274,7 +279,7 @@ func (mr *MilvusRoles) Run(local bool, alias string) { var is *components.IndexCoord if mr.EnableIndexCoord { - is = mr.runIndexCoord(ctx, local) + is = mr.runIndexCoord(ctx, local, &wg) if is != nil { defer is.Stop() } @@ -282,14 +287,16 @@ func (mr *MilvusRoles) Run(local bool, alias string) { var in *components.IndexNode if mr.EnableIndexNode { - in = mr.runIndexNode(ctx, local) + in = mr.runIndexNode(ctx, local, &wg) if in != nil { defer in.Stop() } } - mr.setupLogger() + wg.Wait() + mr.setupLogger() + tracer.Init() metrics.Register(Registry) management.ServeHTTP() diff --git a/configs/milvus.yaml b/configs/milvus.yaml index 7ed05f2e23..536d86deda 100644 --- a/configs/milvus.yaml +++ b/configs/milvus.yaml @@ -523,3 +523,15 @@ quotaAndLimits: maxReadResultRate: -1 # MB/s, default no limit # coolOffSpeed is the speed of search&query rates cool off. coolOffSpeed: 0.9 # (0, 1] + +trace: + # trace exporter type, default is empty, + # optional values: ['stdout', 'jaeger'] + exporter: 'stdout' + # fraction of traceID based sampler, + # optional values: [0, 1] + # Fractions >= 1 will always sample. Fractions < 0 are treated as zero. + sampleFraction: 0 + # when exporter is jaeger should set the jaeger's URL + jaeger: + url: '' diff --git a/go.mod b/go.mod index b554a7a4ad..b8155411dc 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,6 @@ require ( github.com/99designs/keyring v1.2.1 // indirect github.com/BurntSushi/toml v1.0.0 // indirect github.com/DATA-DOG/go-sqlmock v1.5.0 - github.com/HdrHistogram/hdrhistogram-go v1.0.1 // indirect github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e github.com/antonmedv/expr v1.8.9 github.com/apache/arrow/go/v8 v8.0.0-20220322092137-778b1772fd20 @@ -30,7 +29,6 @@ require ( github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d github.com/milvus-io/milvus-proto/go-api v0.0.0-20230105121931-9f9303dcc729 github.com/minio/minio-go/v7 v7.0.17 - github.com/opentracing/opentracing-go v1.2.0 github.com/panjf2000/ants/v2 v2.4.8 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.11.1 @@ -42,21 +40,20 @@ require ( github.com/spf13/cast v1.3.1 github.com/spf13/viper v1.8.1 github.com/streamnative/pulsarctl v0.5.0 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.8.1 github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c - github.com/uber/jaeger-client-go v2.25.0+incompatible - go.etcd.io/etcd/api/v3 v3.5.0 - go.etcd.io/etcd/client/v3 v3.5.0 - go.etcd.io/etcd/server/v3 v3.5.0 + go.etcd.io/etcd/api/v3 v3.5.5 + go.etcd.io/etcd/client/v3 v3.5.5 + go.etcd.io/etcd/server/v3 v3.5.5 go.uber.org/atomic v1.7.0 go.uber.org/automaxprocs v1.4.0 go.uber.org/zap v1.17.0 - golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 + golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 golang.org/x/exp v0.0.0-20220303212507-bbda1eaf7a17 - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - google.golang.org/grpc v1.46.0 + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 + google.golang.org/grpc v1.51.0 google.golang.org/grpc/examples v0.0.0-20220617181431-3e7b97febc7f - google.golang.org/protobuf v1.28.0 + google.golang.org/protobuf v1.28.1 gopkg.in/natefinch/lumberjack.v2 v2.0.0 gorm.io/driver/mysql v1.3.5 gorm.io/gorm v1.23.8 @@ -144,40 +141,34 @@ require ( github.com/spf13/afero v1.6.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/objx v0.4.0 // indirect + github.com/stretchr/objx v0.5.0 // indirect github.com/subosito/gotenv v1.2.0 // indirect github.com/tklauser/go-sysconf v0.3.10 // indirect github.com/tklauser/numcpus v0.4.0 // indirect github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect - github.com/uber/jaeger-lib v2.4.0+incompatible // indirect github.com/ugorji/go/codec v1.1.7 // indirect github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect github.com/yusufpapurcu/wmi v1.2.2 // indirect github.com/zeebo/xxh3 v1.0.1 // indirect go.etcd.io/bbolt v1.3.6 // indirect - go.etcd.io/etcd/client/pkg/v3 v3.5.0 // indirect - go.etcd.io/etcd/client/v2 v2.305.0 // indirect - go.etcd.io/etcd/pkg/v3 v3.5.0 // indirect - go.etcd.io/etcd/raft/v3 v3.5.0 // indirect - go.opentelemetry.io/contrib v0.20.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0 // indirect - go.opentelemetry.io/otel v0.20.0 // indirect - go.opentelemetry.io/otel/exporters/otlp v0.20.0 // indirect - go.opentelemetry.io/otel/metric v0.20.0 // indirect - go.opentelemetry.io/otel/sdk v0.20.0 // indirect - go.opentelemetry.io/otel/sdk/export/metric v0.20.0 // indirect - go.opentelemetry.io/otel/sdk/metric v0.20.0 // indirect - go.opentelemetry.io/otel/trace v0.20.0 // indirect - go.opentelemetry.io/proto/otlp v0.7.0 // indirect + go.etcd.io/etcd/client/pkg/v3 v3.5.5 // indirect + go.etcd.io/etcd/client/v2 v2.305.5 // indirect + go.etcd.io/etcd/pkg/v3 v3.5.5 // indirect + go.etcd.io/etcd/raft/v3 v3.5.5 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0 + go.opentelemetry.io/otel v1.11.2 + go.opentelemetry.io/otel/sdk v1.11.2 + go.opentelemetry.io/otel/trace v1.11.2 + go.opentelemetry.io/proto/otlp v0.19.0 // indirect go.uber.org/multierr v1.6.0 - golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 // indirect - golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect - golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 - golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect + golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 + golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 // indirect golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect - golang.org/x/text v0.3.7 + golang.org/x/text v0.4.0 golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba // indirect - golang.org/x/tools v0.1.9 // indirect + golang.org/x/tools v0.1.12 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gonum.org/v1/gonum v0.9.3 // indirect google.golang.org/appengine v1.6.7 // indirect @@ -190,6 +181,24 @@ require ( require github.com/ianlancetaylor/cgosymbolizer v0.0.0-20221217025313-27d3c9f66b6a // indirect +require ( + github.com/uber/jaeger-client-go v2.30.0+incompatible + go.opentelemetry.io/otel/exporters/jaeger v1.11.2 + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.11.2 +) + +require ( + github.com/cenkalti/backoff/v4 v4.2.0 // indirect + github.com/go-logr/logr v1.2.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 // indirect + go.opentelemetry.io/otel/metric v0.34.0 // indirect +) + replace ( github.com/apache/pulsar-client-go => github.com/milvus-io/pulsar-client-go v0.6.10 github.com/bketelsen/crypt => github.com/bketelsen/crypt v0.0.4 // Fix security alert for core-os/etcd diff --git a/go.sum b/go.sum index aa2b3b7e34..56d132e17d 100644 --- a/go.sum +++ b/go.sum @@ -55,8 +55,6 @@ github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20O github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/zstd v1.5.0 h1:+K/VEwIAaPcHiMtQvpLD4lqW7f0Gk3xdYZmI1hD+CXo= github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/HdrHistogram/hdrhistogram-go v1.0.1 h1:GX8GAYDuhlFQnI2fRDHQhTlkHMz8bEn0jTI6LJU0mpw= -github.com/HdrHistogram/hdrhistogram-go v1.0.1/go.mod h1:BWJ+nMSHY3L41Zj7CA3uXnloDp7xxV0YvstAE7nKTaM= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU= github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= @@ -89,8 +87,6 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aws/aws-sdk-go v1.32.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/benbjohnson/clock v1.0.3 h1:vkLuvpK4fmtSCuo60+yC63p7y0BmQ8gm5ZXGuBCJyXg= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b h1:5JgaFtHFRnOPReItxvhMDXbvuBkjSWE+9glJyF466yw= github.com/benesch/cgosymbolizer v0.0.0-20190515212042-bec6fe6e597b/go.mod h1:eMD2XUcPsHYbakFEocKrWZp47G0MRJYoC60qFblGjpA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -114,6 +110,9 @@ github.com/casbin/casbin/v2 v2.44.2 h1:mlWtgbX872r707frOq+REaHzfvsl+qQw0Eq+ekzJ7 github.com/casbin/casbin/v2 v2.44.2/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/casbin/json-adapter/v2 v2.0.0 h1:nOCN3TK1CJKSNQQ/MnakbU9/cUcNR3N0AxBDnEBLSDI= github.com/casbin/json-adapter/v2 v2.0.0/go.mod h1:LvsfPXXr8CD0ZFucAxawcY9Xb0FtLk3mozJ1qcSTUD4= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= +github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054 h1:uH66TXeswKn5PW5zdZ39xEwfS9an067BirqA+P4QaLI= @@ -124,7 +123,6 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= 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-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -152,7 +150,6 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7 github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -197,7 +194,6 @@ github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD github.com/frankban/quicktest v1.2.2/go.mod h1:Qh/WofXFeiAFII1aEBu529AtJo6Zg2VHscnEsbBnJ20= github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss= github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= @@ -227,6 +223,11 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +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-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= @@ -260,6 +261,8 @@ github.com/golang-jwt/jwt v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -355,6 +358,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= github.com/hamba/avro v1.5.6/go.mod h1:3vNT0RLXXpFm2Tb/5KC71ZRJlOroggq1Rcitb6k4Fr8= @@ -444,7 +449,6 @@ github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= 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.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -477,8 +481,9 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.8 h1:3tS41NlGYSmhhe/8fhGRzc+z3AYCw1Fe1WAyLuujKs0= github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= @@ -486,8 +491,6 @@ github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyex github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/milvus-io/gorocksdb v0.0.0-20220624081344-8c5f4212846b h1:TfeY0NxYxZzUfIfYe5qYDBzt4ZYRqzUjTR6CvUzjat8= github.com/milvus-io/gorocksdb v0.0.0-20220624081344-8c5f4212846b/go.mod h1:iwW+9cWfIzzDseEBCCeDSN5SD16Tidvy8cwQ7ZY8Qj4= -github.com/milvus-io/milvus-proto/go-api v0.0.0-20221226093525-ce18c3347db0 h1:GSiYfmb/CgWCdTKHzI0zl0L1xTr9/kaM6wr1O882lYc= -github.com/milvus-io/milvus-proto/go-api v0.0.0-20221226093525-ce18c3347db0/go.mod h1:148qnlmZ0Fdm1Fq+Mj/OW2uDoEP25g3mjh0vMGtkgmk= github.com/milvus-io/milvus-proto/go-api v0.0.0-20230105121931-9f9303dcc729 h1:hsb1ifdNe3qlXi1YY5dWPPzWMNZmnqe5uunYPYK3gd0= github.com/milvus-io/milvus-proto/go-api v0.0.0-20230105121931-9f9303dcc729/go.mod h1:148qnlmZ0Fdm1Fq+Mj/OW2uDoEP25g3mjh0vMGtkgmk= github.com/milvus-io/pulsar-client-go v0.6.10 h1:eqpJjU+/QX0iIhEo3nhOqMNXL+TyInAs1IAHZCrCM/A= @@ -530,7 +533,8 @@ github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= @@ -545,7 +549,6 @@ github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9 github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/panjf2000/ants/v2 v2.4.8 h1:JgTbolX6K6RreZ4+bfctI0Ifs+3mrE5BIHudQxUDQ9k= github.com/panjf2000/ants/v2 v2.4.8/go.mod h1:f6F0NZVFsGCp5A7QW/Zj/m92atWwOkY0OIhFxRNFr4A= @@ -576,7 +579,6 @@ github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXP github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -664,8 +666,9 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= 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/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -675,8 +678,9 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= 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/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= @@ -687,14 +691,11 @@ github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hM github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4dN7GR16kFc5fp3d1RIYzJW5onx8Ybykw2YQFA= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= -github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v2.4.0+incompatible h1:fY7QsGQWiCt8pajv4r7JEvmATdCVaWxXbjwyYwsNaLQ= -github.com/uber/jaeger-lib v2.4.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xiaofan-luan/pulsarctl v0.5.1 h1:2V+IWFarElzcln5WBbU3VNu3zC8Q7RS6rMpVs9oUfLg= @@ -712,20 +713,23 @@ github.com/zeebo/xxh3 v1.0.1/go.mod h1:8VHV24/3AZLn3b6Mlp/KuC33LWH687Wq6EnziEB+r go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/6PU= +go.etcd.io/etcd/api/v3 v3.5.5 h1:BX4JIbQ7hl7+jL+g+2j5UAr0o1bctCm6/Ct+ArBGkf0= +go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0 h1:ftQ0nOOHMcbMS3KIaDQ0g5Qcd6bhaBrQT6b89DfwLTs= +go.etcd.io/etcd/client/pkg/v3 v3.5.5 h1:9S0JUVvmrVl7wCF39iTQthdaaNIiAaQbmK75ogO6GU8= +go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v3 v3.5.0 h1:62Eh0XOro+rDwkrypAGDfgmNh5Joq+z+W9HZdlXMzek= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/pkg/v3 v3.5.0 h1:ntrg6vvKRW26JRmHTE0iNlDgYK6JX3hg/4cD62X0ixk= -go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= -go.etcd.io/etcd/raft/v3 v3.5.0 h1:kw2TmO3yFTgE+F0mdKkG7xMxkit2duBDa2Hu6D/HMlw= -go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= -go.etcd.io/etcd/server/v3 v3.5.0 h1:jk8D/lwGEDlQU9kZXUFMSANkE22Sg5+mW27ip8xcF9E= -go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= +go.etcd.io/etcd/client/v2 v2.305.5 h1:DktRP60//JJpnPC0VBymAN/7V71GHMdjDCBt4ZPXDjI= +go.etcd.io/etcd/client/v2 v2.305.5/go.mod h1:zQjKllfqfBVyVStbt4FaosoX2iYd8fV/GRy/PbowgP4= +go.etcd.io/etcd/client/v3 v3.5.5 h1:q++2WTJbUgpQu4B6hCuT7VkdwaTP7Qz6Daak3WzbrlI= +go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c= +go.etcd.io/etcd/pkg/v3 v3.5.5 h1:Ablg7T7OkR+AeeeU32kdVhw/AGDsitkKPl7aW73ssjU= +go.etcd.io/etcd/pkg/v3 v3.5.5/go.mod h1:6ksYFxttiUGzC2uxyqiyOEvhAiD0tuIqSZkX3TyPdaE= +go.etcd.io/etcd/raft/v3 v3.5.5 h1:Ibz6XyZ60OYyRopu73lLM/P+qco3YtlZMOhnXNS051I= +go.etcd.io/etcd/raft/v3 v3.5.5/go.mod h1:76TA48q03g1y1VpTue92jZLr9lIHKUNcYdZOOGyx8rI= +go.etcd.io/etcd/server/v3 v3.5.5 h1:jNjYm/9s+f9A9r6+SC4RvNaz6AqixpOvhrFdT0PvIj0= +go.etcd.io/etcd/server/v3 v3.5.5/go.mod h1:rZ95vDw/jrvsbj9XpTqPrTAB9/kzchVdhRirySPkUBc= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -733,36 +737,48 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0= -go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0 h1:sO4WKdPAudZGKPcpZT4MJn6JaDmpyLrMPDGGyA1SttE= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= -go.opentelemetry.io/otel v0.20.0 h1:eaP0Fqu7SXHwvjiqDq83zImeehOHX8doTvU9AwXON8g= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.25.0/go.mod h1:E5NNboN0UqSAki0Atn9kVwaN7I+l25gGxDqBueo/74E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0 h1:+uFejS4DCfNH6d3xODVIGsdhzgzhh45p9gpbHQMbdZI= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.37.0/go.mod h1:HSmzQvagH8pS2/xrK7ScWsk0vAMtRTGbMFgInXCi8Tc= go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= -go.opentelemetry.io/otel/exporters/otlp v0.20.0 h1:PTNgq9MRmQqqJY0REVbZFvwkYOA85vbdQU/nVfxDyqg= -go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= -go.opentelemetry.io/otel/metric v0.20.0 h1:4kzhXFP+btKm4jwxpjIqjs41A7MakRFUS86bqLHTIw8= +go.opentelemetry.io/otel v1.0.1/go.mod h1:OPEOD4jIT2SlZPMmwT6FqZz2C0ZNdQqiWcoK6M0SNFU= +go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= +go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= +go.opentelemetry.io/otel/exporters/jaeger v1.11.2 h1:ES8/j2+aB+3/BUw51ioxa50V9btN1eew/2J7N7n1tsE= +go.opentelemetry.io/otel/exporters/jaeger v1.11.2/go.mod h1:nwcF/DK4Hk0auZ/a5vw20uMsaJSXbzeeimhN5f9d0Lc= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2 h1:htgM8vZIF8oPSCxa341e3IZ4yr/sKxgu8KZYllByiVY= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.11.2/go.mod h1:rqbht/LlhVBgn5+k3M5QK96K5Xb0DvXpMJ5SFQpY6uw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.1/go.mod h1:Kv8liBeVNFkkkbilbgWRpV+wWuu+H5xdOT6HAgd30iw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2 h1:fqR1kli93643au1RKo0Uma3d2aPQKT+WBKfTSBaKbOc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.11.2/go.mod h1:5Qn6qvgkMsLDX+sYK64rHb1FPhpn0UtxF+ouX1uhyJE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.1/go.mod h1:xOvWoTOrQjxjW61xtOmD/WKGRYb/P4NzRo3bs65U6Rk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2 h1:ERwKPn9Aer7Gxsc0+ZlutlH1bEEAUXAUhqm3Y45ABbk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.11.2/go.mod h1:jWZUM2MWhWCJ9J9xVbRx7tzK1mXKpAlze4CeulycwVY= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.11.2 h1:BhEVgvuE1NWLLuMLvC6sif791F45KFHi5GhOs1KunZU= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.11.2/go.mod h1:bx//lU66dPzNT+Y0hHA12ciKoMOH9iixEwCqC1OeQWQ= go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= -go.opentelemetry.io/otel/oteltest v0.20.0 h1:HiITxCawalo5vQzdHfKeZurV8x7ljcqAgiWzF6Vaeaw= +go.opentelemetry.io/otel/metric v0.34.0 h1:MCPoQxcg/26EuuJwpYN1mZTeCYAUGx8ABxfW07YkjP8= +go.opentelemetry.io/otel/metric v0.34.0/go.mod h1:ZFuI4yQGNCupurTXCwkeD/zHBt+C2bR7bw5JqUm/AP8= go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= -go.opentelemetry.io/otel/sdk v0.20.0 h1:JsxtGXd06J8jrnya7fdI/U/MR6yXA5DtbZy+qoHQlr8= go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= -go.opentelemetry.io/otel/sdk/export/metric v0.20.0 h1:c5VRjxCXdQlx1HjzwGdQHzZaVI82b5EbBgOu2ljD92g= -go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= -go.opentelemetry.io/otel/sdk/metric v0.20.0 h1:7ao1wpzHRVKf0OQ7GIxiQJA6X7DLX9o14gmVon7mMK8= -go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= -go.opentelemetry.io/otel/trace v0.20.0 h1:1DL6EXUdcg95gukhuRRvLDO/4X5THh/5dIV52lqtnbw= +go.opentelemetry.io/otel/sdk v1.0.1/go.mod h1:HrdXne+BiwsOHYYkBE5ysIcv2bvdZstxzmCQhxTcZkI= +go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= +go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= -go.opentelemetry.io/proto/otlp v0.7.0 h1:rwOQPCuKAKmwGKq2aVNnYIibI6wnV7EvzgfTCzcdGg8= +go.opentelemetry.io/otel/trace v1.0.1/go.mod h1:5g4i4fKLaX2BQpSBsxw8YYcgKpMMSW3x7ZTuYBr3sUk= +go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= +go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.9.0/go.mod h1:1vKfU9rv61e9EVGthD1zNvUbiwPcimSsOPU9brfSHJg= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/automaxprocs v1.4.0 h1:CpDZl6aOlLhReez+8S3eEotD7Jx0Os++lemPlMULQP0= go.uber.org/automaxprocs v1.4.0/go.mod h1:/mTEdr7LvHhs0v7mjdxDreTz1OG5zdZGqgOnhWiR/+Q= -go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= @@ -781,10 +797,10 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -823,7 +839,6 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= @@ -839,8 +854,9 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57 h1:LQmS1nU0twXLA96Kt7U9qtHJEbBk3z6Q0V4UXjZkpr4= golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 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= @@ -887,9 +903,11 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -901,8 +919,9 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -913,8 +932,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -975,6 +995,7 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w 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= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -984,8 +1005,9 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8 h1:h+EGohizhe9XlX18rfpa8k8RAc5XyaeamM+0VHRd4lc= +golang.org/x/sys v0.0.0-20220919091848-fb04ddd9f9c8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= @@ -998,8 +1020,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/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 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0 h1:BrVqGRd7+k1DiOgtnFvAkoQEWQvBc25ouMJM6429SFg= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1028,7 +1051,6 @@ golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -1068,8 +1090,9 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 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= @@ -1156,6 +1179,7 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= 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= @@ -1178,12 +1202,15 @@ google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA5 google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.46.0 h1:oCjezcn6g6A75TGoKYBPgKmVBLexhYLM6MebdrPApP8= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= 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= @@ -1199,14 +1226,14 @@ 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 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/avro.v0 v0.0.0-20171217001914-a730b5802183/go.mod h1:FvqrFXt+jCsyQibeRv4xxEJBL5iG2DDW5aeJwzDiq4A= 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/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v1 v1.0.0/go.mod h1:CxwszS/Xz1C49Ucd2i6Zil5UToP1EmyrFhKaMVbg1mk= diff --git a/internal/datacoord/segment_manager.go b/internal/datacoord/segment_manager.go index 4889dc1b05..688b0fa557 100644 --- a/internal/datacoord/segment_manager.go +++ b/internal/datacoord/segment_manager.go @@ -23,14 +23,16 @@ import ( "sync" "time" + "go.opentelemetry.io/otel" + "github.com/milvus-io/milvus-proto/go-api/commonpb" - "go.uber.org/zap" "github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/proto/datapb" "github.com/milvus-io/milvus/internal/types" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/tsoutil" + "github.com/milvus-io/milvus/internal/util/typeutil" + "go.uber.org/zap" ) var ( @@ -230,8 +232,9 @@ func (s *SegmentManager) loadSegmentsFromMeta() { // AllocSegment allocate segment per request collcation, partication, channel and rows func (s *SegmentManager) AllocSegment(ctx context.Context, collectionID UniqueID, partitionID UniqueID, channelName string, requestRows int64) ([]*Allocation, error) { - sp, _ := trace.StartSpanFromContext(ctx) - defer sp.Finish() + + _, sp := otel.Tracer(typeutil.DataCoordRole).Start(ctx, "Alloc-Segment") + defer sp.End() s.mu.Lock() defer s.mu.Unlock() @@ -339,8 +342,8 @@ func (s *SegmentManager) genExpireTs(ctx context.Context) (Timestamp, error) { func (s *SegmentManager) openNewSegment(ctx context.Context, collectionID UniqueID, partitionID UniqueID, channelName string, segmentState commonpb.SegmentState) (*SegmentInfo, error) { - sp, _ := trace.StartSpanFromContext(ctx) - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.DataCoordRole).Start(ctx, "open-Segment") + defer sp.End() id, err := s.allocator.allocID(ctx) if err != nil { log.Error("failed to open new segment while allocID", zap.Error(err)) @@ -391,8 +394,8 @@ func (s *SegmentManager) estimateMaxNumOfRows(collectionID UniqueID) (int, error // DropSegment drop the segment from manager. func (s *SegmentManager) DropSegment(ctx context.Context, segmentID UniqueID) { - sp, _ := trace.StartSpanFromContext(ctx) - defer sp.Finish() + _, sp := otel.Tracer(typeutil.DataCoordRole).Start(ctx, "Drop-Segment") + defer sp.End() s.mu.Lock() defer s.mu.Unlock() for i, id := range s.segments { @@ -414,8 +417,8 @@ func (s *SegmentManager) DropSegment(ctx context.Context, segmentID UniqueID) { // SealAllSegments seals all segments of collection with collectionID and return sealed segments func (s *SegmentManager) SealAllSegments(ctx context.Context, collectionID UniqueID, segIDs []UniqueID) ([]UniqueID, error) { - sp, _ := trace.StartSpanFromContext(ctx) - defer sp.Finish() + _, sp := otel.Tracer(typeutil.DataCoordRole).Start(ctx, "Seal-Segments") + defer sp.End() s.mu.Lock() defer s.mu.Unlock() var ret []UniqueID @@ -450,10 +453,10 @@ func (s *SegmentManager) SealAllSegments(ctx context.Context, collectionID Uniqu // GetFlushableSegments get segment ids with Sealed State and flushable (meets flushPolicy) func (s *SegmentManager) GetFlushableSegments(ctx context.Context, channel string, t Timestamp) ([]UniqueID, error) { + _, sp := otel.Tracer(typeutil.DataCoordRole).Start(ctx, "Get-Segments") + defer sp.End() s.mu.Lock() defer s.mu.Unlock() - sp, _ := trace.StartSpanFromContext(ctx) - defer sp.Finish() // TODO:move tryToSealSegment and dropEmptySealedSegment outside if err := s.tryToSealSegment(t, channel); err != nil { return nil, err diff --git a/internal/datacoord/services.go b/internal/datacoord/services.go index 32d774849a..be465c658d 100644 --- a/internal/datacoord/services.go +++ b/internal/datacoord/services.go @@ -24,6 +24,7 @@ import ( "sync" "github.com/samber/lo" + "go.opentelemetry.io/otel" "go.uber.org/zap" "golang.org/x/sync/errgroup" @@ -39,7 +40,6 @@ import ( "github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/segmentutil" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/tsoutil" "github.com/milvus-io/milvus/internal/util/typeutil" ) @@ -74,8 +74,8 @@ func (s *Server) GetStatisticsChannel(ctx context.Context) (*milvuspb.StringResp // these segments will be flushed only after the Flush policy is fulfilled func (s *Server) Flush(ctx context.Context, req *datapb.FlushRequest) (*datapb.FlushResponse, error) { log.Info("receive flush request", zap.Int64("dbID", req.GetDbID()), zap.Int64("collectionID", req.GetCollectionID())) - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "DataCoord-Flush") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.DataCoordRole).Start(ctx, "DataCoord-Flush") + defer sp.End() resp := &datapb.FlushResponse{ Status: &commonpb.Status{ ErrorCode: commonpb.ErrorCode_UnexpectedError, diff --git a/internal/datanode/flow_graph_dd_node.go b/internal/datanode/flow_graph_dd_node.go index 8080966f67..ed97f7fe32 100644 --- a/internal/datanode/flow_graph_dd_node.go +++ b/internal/datanode/flow_graph_dd_node.go @@ -23,9 +23,9 @@ import ( "sync/atomic" "github.com/milvus-io/milvus/internal/util/timerecord" + "go.opentelemetry.io/otel/trace" "github.com/golang/protobuf/proto" - "github.com/opentracing/opentracing-go" "go.uber.org/zap" "github.com/milvus-io/milvus-proto/go-api/commonpb" @@ -41,7 +41,6 @@ import ( "github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/retry" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/tsoutil" ) @@ -129,15 +128,15 @@ func (ddn *ddNode) Operate(in []Msg) []Msg { return []Msg{} } - var spans []opentracing.Span + var spans []trace.Span for _, msg := range msMsg.TsMessages() { - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx, sp := startTracer(msg, "DDNode-Operate") spans = append(spans, sp) msg.SetTraceCtx(ctx) } defer func() { for _, sp := range spans { - sp.Finish() + sp.End() } }() diff --git a/internal/datanode/flow_graph_delete_node.go b/internal/datanode/flow_graph_delete_node.go index 580aece05c..2d76606594 100644 --- a/internal/datanode/flow_graph_delete_node.go +++ b/internal/datanode/flow_graph_delete_node.go @@ -21,7 +21,8 @@ import ( "fmt" "reflect" - "github.com/opentracing/opentracing-go" + "go.opentelemetry.io/otel/trace" + "go.uber.org/zap" "github.com/milvus-io/milvus/internal/log" @@ -29,7 +30,6 @@ import ( "github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/storage" "github.com/milvus-io/milvus/internal/util/retry" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/tsoutil" ) @@ -83,9 +83,9 @@ func (dn *deleteNode) IsValidInMsg(in []Msg) bool { func (dn *deleteNode) Operate(in []Msg) []Msg { fgMsg := in[0].(*flowGraphMsg) - var spans []opentracing.Span + var spans []trace.Span for _, msg := range fgMsg.deleteMessages { - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx, sp := startTracer(msg, "Delete-Node") spans = append(spans, sp) msg.SetTraceCtx(ctx) } @@ -96,7 +96,7 @@ func (dn *deleteNode) Operate(in []Msg) []Msg { // process delete messages var segIDs []UniqueID for i, msg := range fgMsg.deleteMessages { - traceID, _, _ := trace.InfoFromSpan(spans[i]) + traceID := spans[i].SpanContext().TraceID().String() log.Debug("Buffer delete request in DataNode", zap.String("traceID", traceID)) tmpSegIDs, err := dn.bufferDeleteMsg(msg, fgMsg.timeRange, fgMsg.startPositions[0], fgMsg.endPositions[0]) if err != nil { @@ -148,7 +148,7 @@ func (dn *deleteNode) Operate(in []Msg) []Msg { } for _, sp := range spans { - sp.Finish() + sp.End() } return in } diff --git a/internal/datanode/flow_graph_insert_buffer_node.go b/internal/datanode/flow_graph_insert_buffer_node.go index f1ac82a5cc..4992bec11a 100644 --- a/internal/datanode/flow_graph_insert_buffer_node.go +++ b/internal/datanode/flow_graph_insert_buffer_node.go @@ -24,7 +24,7 @@ import ( "sync" "github.com/golang/protobuf/proto" - "github.com/opentracing/opentracing-go" + "go.opentelemetry.io/otel/trace" "go.uber.org/atomic" "go.uber.org/zap" @@ -40,7 +40,6 @@ import ( "github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/retry" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/tsoutil" ) @@ -140,16 +139,16 @@ func (ibNode *insertBufferNode) Operate(in []Msg) []Msg { ibNode.flushManager.startDropping() } - var spans []opentracing.Span + var spans []trace.Span for _, msg := range fgMsg.insertMessages { - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx, sp := startTracer(msg, "InsertBuffer-Node") spans = append(spans, sp) msg.SetTraceCtx(ctx) } defer func() { for _, sp := range spans { - sp.Finish() + sp.End() } }() diff --git a/internal/datanode/type_def.go b/internal/datanode/util.go similarity index 74% rename from internal/datanode/type_def.go rename to internal/datanode/util.go index d4ebe83e9a..44ae37d2b9 100644 --- a/internal/datanode/type_def.go +++ b/internal/datanode/util.go @@ -16,7 +16,14 @@ package datanode -import "github.com/milvus-io/milvus/internal/util/typeutil" +import ( + "context" + + "github.com/milvus-io/milvus/internal/mq/msgstream" + "github.com/milvus-io/milvus/internal/util/typeutil" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" +) type ( // UniqueID is type int64 @@ -37,3 +44,11 @@ type TimeRange struct { timestampMin Timestamp timestampMax Timestamp } + +func startTracer(msg msgstream.TsMsg, name string) (context.Context, trace.Span) { + ctx := msg.TraceCtx() + if ctx == nil { + ctx = context.Background() + } + return otel.Tracer(typeutil.DataNodeRole).Start(ctx, name) +} diff --git a/internal/distributed/connection_manager.go b/internal/distributed/connection_manager.go index afbd463bcb..9b269ac2b6 100644 --- a/internal/distributed/connection_manager.go +++ b/internal/distributed/connection_manager.go @@ -26,16 +26,16 @@ import ( grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" grpc_retry "github.com/grpc-ecosystem/go-grpc-middleware/retry" - grpc_opentracing "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" "github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/proto/datapb" "github.com/milvus-io/milvus/internal/proto/indexpb" "github.com/milvus-io/milvus/internal/proto/querypb" "github.com/milvus-io/milvus/internal/proto/rootcoordpb" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/util/retry" "github.com/milvus-io/milvus/internal/util/sessionutil" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -374,8 +374,8 @@ func (bct *buildClientTask) Run() { go func() { defer bct.finish() connectGrpcFunc := func() error { - opts := trace.GetInterceptorOpts() - log.Debug("Grpc connect ", zap.String("Address", bct.sess.Address)) + opts := tracer.GetInterceptorOpts() + log.Debug("Grpc connect", zap.String("Address", bct.sess.Address)) conn, err := grpc.DialContext(bct.ctx, bct.sess.Address, grpc.WithInsecure(), grpc.WithBlock(), grpc.WithTimeout(30*time.Second), grpc.WithDisableRetry(), @@ -385,7 +385,7 @@ func (bct *buildClientTask) Run() { grpc_retry.WithMax(3), grpc_retry.WithCodes(codes.Aborted, codes.Unavailable), ), - grpc_opentracing.UnaryClientInterceptor(opts...), + otelgrpc.UnaryClientInterceptor(opts...), )), grpc.WithStreamInterceptor( grpc_middleware.ChainStreamClient( @@ -393,7 +393,7 @@ func (bct *buildClientTask) Run() { grpc_retry.WithMax(3), grpc_retry.WithCodes(codes.Aborted, codes.Unavailable), ), - grpc_opentracing.StreamClientInterceptor(opts...), + otelgrpc.StreamClientInterceptor(opts...), )), ) if err != nil { diff --git a/internal/distributed/datacoord/service.go b/internal/distributed/datacoord/service.go index 3d56d1aca0..9efeebb353 100644 --- a/internal/distributed/datacoord/service.go +++ b/internal/distributed/datacoord/service.go @@ -19,7 +19,6 @@ package grpcdatacoord import ( "context" - "io" "net" "strconv" "sync" @@ -28,8 +27,9 @@ import ( "github.com/milvus-io/milvus/internal/proto/indexpb" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" - ot "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" + "github.com/milvus-io/milvus/internal/tracer" clientv3 "go.etcd.io/etcd/client/v3" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "go.uber.org/zap" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" @@ -46,7 +46,6 @@ import ( "github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/logutil" "github.com/milvus-io/milvus/internal/util/paramtable" - "github.com/milvus-io/milvus/internal/util/trace" ) // Server is the grpc server of datacoord @@ -61,7 +60,6 @@ type Server struct { grpcErrChan chan error grpcServer *grpc.Server - closer io.Closer } // NewServer new data service grpc server @@ -81,9 +79,6 @@ func (s *Server) init() error { etcdConfig := ¶mtable.Get().EtcdCfg Params := ¶mtable.Get().DataCoordGrpcServerCfg - closer := trace.InitTracing("datacoord") - s.closer = closer - etcdCli, err := etcd.GetEtcdClient( etcdConfig.UseEmbedEtcd.GetAsBool(), etcdConfig.EtcdUseSSL.GetAsBool(), @@ -148,17 +143,17 @@ func (s *Server) startGrpcLoop(grpcPort int) { Timeout: 10 * time.Second, // Wait 10 second for the ping ack before assuming the connection is dead } - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() s.grpcServer = grpc.NewServer( grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp), grpc.MaxRecvMsgSize(Params.ServerMaxRecvSize.GetAsInt()), grpc.MaxSendMsgSize(Params.ServerMaxSendSize.GetAsInt()), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( - ot.UnaryServerInterceptor(opts...), + otelgrpc.UnaryServerInterceptor(opts...), logutil.UnaryTraceLoggerInterceptor)), grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( - ot.StreamServerInterceptor(opts...), + otelgrpc.StreamServerInterceptor(opts...), logutil.StreamTraceLoggerInterceptor))) indexpb.RegisterIndexCoordServer(s.grpcServer, s) datapb.RegisterDataCoordServer(s.grpcServer, s) @@ -188,11 +183,6 @@ func (s *Server) Stop() error { Params := ¶mtable.Get().DataCoordGrpcServerCfg log.Debug("Datacoord stop", zap.String("Address", Params.GetAddress())) var err error - if s.closer != nil { - if err = s.closer.Close(); err != nil { - return err - } - } s.cancel() if s.etcdCli != nil { diff --git a/internal/distributed/datanode/service.go b/internal/distributed/datanode/service.go index 60a2e9f830..54d5541458 100644 --- a/internal/distributed/datanode/service.go +++ b/internal/distributed/datanode/service.go @@ -20,15 +20,14 @@ import ( "context" "errors" "fmt" - "io" "net" "strconv" "sync" "time" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" - ot "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" clientv3 "go.etcd.io/etcd/client/v3" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "go.uber.org/zap" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" @@ -41,6 +40,7 @@ import ( "github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/proto/datapb" "github.com/milvus-io/milvus/internal/proto/internalpb" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/types" "github.com/milvus-io/milvus/internal/util/dependency" "github.com/milvus-io/milvus/internal/util/etcd" @@ -48,7 +48,6 @@ import ( "github.com/milvus-io/milvus/internal/util/logutil" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/retry" - "github.com/milvus-io/milvus/internal/util/trace" ) type Server struct { @@ -66,8 +65,6 @@ type Server struct { newRootCoordClient func(string, *clientv3.Client) (types.RootCoord, error) newDataCoordClient func(string, *clientv3.Client) (types.DataCoord, error) - - closer io.Closer } // NewServer new DataNode grpc server @@ -128,17 +125,17 @@ func (s *Server) startGrpcLoop(grpcPort int) { return } - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() s.grpcServer = grpc.NewServer( grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp), grpc.MaxRecvMsgSize(Params.ServerMaxRecvSize.GetAsInt()), grpc.MaxSendMsgSize(Params.ServerMaxSendSize.GetAsInt()), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( - ot.UnaryServerInterceptor(opts...), + otelgrpc.UnaryServerInterceptor(opts...), logutil.UnaryTraceLoggerInterceptor)), grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( - ot.StreamServerInterceptor(opts...), + otelgrpc.StreamServerInterceptor(opts...), logutil.StreamTraceLoggerInterceptor))) datapb.RegisterDataNodeServer(s.grpcServer, s) @@ -184,11 +181,6 @@ func (s *Server) Run() error { func (s *Server) Stop() error { Params := ¶mtable.Get().DataNodeGrpcServerCfg log.Debug("Datanode stop", zap.String("Address", Params.GetAddress())) - if s.closer != nil { - if err := s.closer.Close(); err != nil { - return err - } - } s.cancel() if s.etcdCli != nil { defer s.etcdCli.Close() @@ -245,8 +237,6 @@ func (s *Server) init() error { s.etcdCli = etcdCli s.SetEtcdClient(s.etcdCli) s.datanode.SetAddress(Params.GetAddress()) - closer := trace.InitTracing(fmt.Sprintf("DataNode IP: %s, port: %d", Params.IP, Params.Port.GetAsInt())) - s.closer = closer log.Info("DataNode address", zap.String("address", Params.IP+":"+strconv.Itoa(Params.Port.GetAsInt()))) err = s.startGrpc() diff --git a/internal/distributed/indexnode/service.go b/internal/distributed/indexnode/service.go index be32cc79cb..c71d650f64 100644 --- a/internal/distributed/indexnode/service.go +++ b/internal/distributed/indexnode/service.go @@ -19,15 +19,14 @@ package grpcindexnode import ( "context" "fmt" - "io" "net" "strconv" "sync" "time" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" - ot "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" clientv3 "go.etcd.io/etcd/client/v3" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "go.uber.org/zap" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" @@ -38,13 +37,13 @@ import ( "github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/proto/indexpb" "github.com/milvus-io/milvus/internal/proto/internalpb" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/types" "github.com/milvus-io/milvus/internal/util/dependency" "github.com/milvus-io/milvus/internal/util/etcd" "github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/logutil" "github.com/milvus-io/milvus/internal/util/paramtable" - "github.com/milvus-io/milvus/internal/util/trace" ) // Server is the grpc wrapper of IndexNode. @@ -59,7 +58,6 @@ type Server struct { loopWg sync.WaitGroup etcdCli *clientv3.Client - closer io.Closer } // Run initializes and starts IndexNode's grpc service. @@ -101,17 +99,17 @@ func (s *Server) startGrpcLoop(grpcPort int) { Timeout: 10 * time.Second, // Wait 10 second for the ping ack before assuming the connection is dead } - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() s.grpcServer = grpc.NewServer( grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp), grpc.MaxRecvMsgSize(Params.ServerMaxRecvSize.GetAsInt()), grpc.MaxSendMsgSize(Params.ServerMaxSendSize.GetAsInt()), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( - ot.UnaryServerInterceptor(opts...), + otelgrpc.UnaryServerInterceptor(opts...), logutil.UnaryTraceLoggerInterceptor)), grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( - ot.StreamServerInterceptor(opts...), + otelgrpc.StreamServerInterceptor(opts...), logutil.StreamTraceLoggerInterceptor))) indexpb.RegisterIndexNodeServer(s.grpcServer, s) go funcutil.CheckGrpcReady(ctx, s.grpcErrChan) @@ -130,9 +128,6 @@ func (s *Server) init() error { log.Warn("IndexNode get available port when init", zap.Int("Port", Params.Port.GetAsInt())) } - closer := trace.InitTracing(fmt.Sprintf("IndexNode-%d", paramtable.GetNodeID())) - s.closer = closer - defer func() { if err != nil { err = s.Stop() @@ -194,11 +189,6 @@ func (s *Server) start() error { func (s *Server) Stop() error { Params := ¶mtable.Get().IndexNodeGrpcServerCfg log.Debug("IndexNode stop", zap.String("Address", Params.GetAddress())) - if s.closer != nil { - if err := s.closer.Close(); err != nil { - return err - } - } if s.indexnode != nil { s.indexnode.Stop() } diff --git a/internal/distributed/proxy/service.go b/internal/distributed/proxy/service.go index c01071b509..2a930f933f 100644 --- a/internal/distributed/proxy/service.go +++ b/internal/distributed/proxy/service.go @@ -31,12 +31,13 @@ import ( "time" "github.com/milvus-io/milvus/internal/proxy/accesslog" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/util/metricsinfo" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "github.com/gin-gonic/gin" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" grpc_auth "github.com/grpc-ecosystem/go-grpc-middleware/auth" - ot "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" "github.com/milvus-io/milvus-proto/go-api/commonpb" "github.com/milvus-io/milvus-proto/go-api/milvuspb" dcc "github.com/milvus-io/milvus/internal/distributed/datacoord/client" @@ -53,8 +54,6 @@ import ( "github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/logutil" "github.com/milvus-io/milvus/internal/util/paramtable" - "github.com/milvus-io/milvus/internal/util/trace" - "github.com/opentracing/opentracing-go" clientv3 "go.etcd.io/etcd/client/v3" "go.uber.org/zap" "google.golang.org/grpc" @@ -86,9 +85,6 @@ type Server struct { rootCoordClient types.RootCoord dataCoordClient types.DataCoord queryCoordClient types.QueryCoord - - tracer opentracing.Tracer - closer io.Closer } // NewServer create a Proxy server. @@ -164,14 +160,14 @@ func (s *Server) startExternalGrpc(grpcPort int, errChan chan error) { } log.Debug("Get proxy rate limiter done", zap.Int("port", grpcPort)) - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() grpcOpts := []grpc.ServerOption{ grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp), grpc.MaxRecvMsgSize(Params.ServerMaxRecvSize.GetAsInt()), grpc.MaxSendMsgSize(Params.ServerMaxSendSize.GetAsInt()), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( - ot.UnaryServerInterceptor(opts...), + otelgrpc.UnaryServerInterceptor(opts...), grpc_auth.UnaryServerInterceptor(proxy.AuthenticationInterceptor), proxy.UnaryServerHookInterceptor(), proxy.UnaryServerInterceptor(proxy.PrivilegeInterceptor), @@ -256,14 +252,14 @@ func (s *Server) startInternalGrpc(grpcPort int, errChan chan error) { } log.Debug("Proxy internal server already listen on tcp", zap.Int("port", grpcPort)) - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() s.grpcInternalServer = grpc.NewServer( grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp), grpc.MaxRecvMsgSize(Params.ServerMaxRecvSize.GetAsInt()), grpc.MaxSendMsgSize(Params.ServerMaxSendSize.GetAsInt()), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( - ot.UnaryServerInterceptor(opts...), + otelgrpc.UnaryServerInterceptor(opts...), logutil.UnaryTraceLoggerInterceptor, )), ) @@ -316,8 +312,6 @@ func (s *Server) init() error { log.Debug("init Proxy's parameter table done", zap.String("internal address", Params.GetInternalAddress()), zap.String("external address", Params.GetAddress())) serviceName := fmt.Sprintf("Proxy ip: %s, port: %d", Params.IP, Params.Port.GetAsInt()) - closer := trace.InitTracing(serviceName) - s.closer = closer log.Debug("init Proxy's tracer done", zap.String("service name", serviceName)) etcdCli, err := etcd.GetEtcdClient( @@ -480,11 +474,6 @@ func (s *Server) Stop() error { Params := ¶mtable.Get().ProxyGrpcServerCfg log.Debug("Proxy stop", zap.String("internal address", Params.GetInternalAddress()), zap.String("external address", Params.GetInternalAddress())) var err error - if s.closer != nil { - if err = s.closer.Close(); err != nil { - return err - } - } if s.etcdCli != nil { defer s.etcdCli.Close() diff --git a/internal/distributed/querycoord/service.go b/internal/distributed/querycoord/service.go index fa48e9ef17..f0fb454162 100644 --- a/internal/distributed/querycoord/service.go +++ b/internal/distributed/querycoord/service.go @@ -18,15 +18,14 @@ package grpcquerycoord import ( "context" - "io" "net" "strconv" "sync" "time" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" - ot "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" clientv3 "go.etcd.io/etcd/client/v3" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "go.uber.org/zap" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" @@ -39,13 +38,13 @@ import ( "github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/querypb" qc "github.com/milvus-io/milvus/internal/querycoordv2" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/types" "github.com/milvus-io/milvus/internal/util/dependency" "github.com/milvus-io/milvus/internal/util/etcd" "github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/logutil" "github.com/milvus-io/milvus/internal/util/paramtable" - "github.com/milvus-io/milvus/internal/util/trace" ) // Server is the grpc server of QueryCoord. @@ -65,8 +64,6 @@ type Server struct { dataCoord types.DataCoord rootCoord types.RootCoord - - closer io.Closer } // NewServer create a new QueryCoord grpc server. @@ -107,9 +104,6 @@ func (s *Server) init() error { etcdConfig := ¶mtable.Get().EtcdCfg Params := ¶mtable.Get().QueryCoordGrpcServerCfg - closer := trace.InitTracing("querycoord") - s.closer = closer - etcdCli, err := etcd.GetEtcdClient( etcdConfig.UseEmbedEtcd.GetAsBool(), etcdConfig.EtcdUseSSL.GetAsBool(), @@ -224,17 +218,17 @@ func (s *Server) startGrpcLoop(grpcPort int) { ctx, cancel := context.WithCancel(s.loopCtx) defer cancel() - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() s.grpcServer = grpc.NewServer( grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp), grpc.MaxRecvMsgSize(Params.ServerMaxRecvSize.GetAsInt()), grpc.MaxSendMsgSize(Params.ServerMaxSendSize.GetAsInt()), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( - ot.UnaryServerInterceptor(opts...), + otelgrpc.UnaryServerInterceptor(opts...), logutil.UnaryTraceLoggerInterceptor)), grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( - ot.StreamServerInterceptor(opts...), + otelgrpc.StreamServerInterceptor(opts...), logutil.StreamTraceLoggerInterceptor))) querypb.RegisterQueryCoordServer(s.grpcServer, s) @@ -257,11 +251,6 @@ func (s *Server) start() error { func (s *Server) Stop() error { Params := ¶mtable.Get().QueryCoordGrpcServerCfg log.Debug("QueryCoord stop", zap.String("Address", Params.GetAddress())) - if s.closer != nil { - if err := s.closer.Close(); err != nil { - return err - } - } if s.etcdCli != nil { defer s.etcdCli.Close() } diff --git a/internal/distributed/querynode/service.go b/internal/distributed/querynode/service.go index 9111f89304..6687e58005 100644 --- a/internal/distributed/querynode/service.go +++ b/internal/distributed/querynode/service.go @@ -19,15 +19,14 @@ package grpcquerynode import ( "context" "fmt" - "io" "net" "strconv" "sync" "time" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" - ot "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" clientv3 "go.etcd.io/etcd/client/v3" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "go.uber.org/zap" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" @@ -38,6 +37,7 @@ import ( "github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/querypb" qn "github.com/milvus-io/milvus/internal/querynode" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/types" "github.com/milvus-io/milvus/internal/util/dependency" "github.com/milvus-io/milvus/internal/util/etcd" @@ -45,7 +45,6 @@ import ( "github.com/milvus-io/milvus/internal/util/logutil" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/retry" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" ) @@ -63,8 +62,6 @@ type Server struct { grpcServer *grpc.Server etcdCli *clientv3.Client - - closer io.Closer } func (s *Server) GetStatistics(ctx context.Context, request *querypb.GetStatisticsRequest) (*internalpb.GetStatisticsResponse, error) { @@ -94,9 +91,6 @@ func (s *Server) init() error { log.Warn("QueryNode get available port when init", zap.Int("Port", Params.Port.GetAsInt())) } - closer := trace.InitTracing(fmt.Sprintf("query_node ip: %s, port: %d", Params.IP, Params.Port.GetAsInt())) - s.closer = closer - log.Debug("QueryNode", zap.Int("port", Params.Port.GetAsInt())) etcdCli, err := etcd.GetEtcdClient( @@ -178,17 +172,17 @@ func (s *Server) startGrpcLoop(grpcPort int) { return } - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() s.grpcServer = grpc.NewServer( grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp), grpc.MaxRecvMsgSize(Params.ServerMaxRecvSize.GetAsInt()), grpc.MaxSendMsgSize(Params.ServerMaxSendSize.GetAsInt()), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( - ot.UnaryServerInterceptor(opts...), + otelgrpc.UnaryServerInterceptor(opts...), logutil.UnaryTraceLoggerInterceptor)), grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( - ot.StreamServerInterceptor(opts...), + otelgrpc.StreamServerInterceptor(opts...), logutil.StreamTraceLoggerInterceptor))) querypb.RegisterQueryNodeServer(s.grpcServer, s) @@ -226,12 +220,6 @@ func (s *Server) Stop() error { if err != nil { return err } - - if s.closer != nil { - if err := s.closer.Close(); err != nil { - return err - } - } if s.etcdCli != nil { defer s.etcdCli.Close() } diff --git a/internal/distributed/rootcoord/service.go b/internal/distributed/rootcoord/service.go index 9033396c20..fbbc165573 100644 --- a/internal/distributed/rootcoord/service.go +++ b/internal/distributed/rootcoord/service.go @@ -18,15 +18,14 @@ package grpcrootcoord import ( "context" - "io" "net" "strconv" "sync" "time" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" - ot "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" clientv3 "go.etcd.io/etcd/client/v3" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "go.uber.org/zap" "google.golang.org/grpc" "google.golang.org/grpc/keepalive" @@ -38,13 +37,13 @@ import ( "github.com/milvus-io/milvus/internal/proto/proxypb" "github.com/milvus-io/milvus/internal/proto/rootcoordpb" "github.com/milvus-io/milvus/internal/rootcoord" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/types" "github.com/milvus-io/milvus/internal/util/dependency" "github.com/milvus-io/milvus/internal/util/etcd" "github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/logutil" "github.com/milvus-io/milvus/internal/util/paramtable" - "github.com/milvus-io/milvus/internal/util/trace" dcc "github.com/milvus-io/milvus/internal/distributed/datacoord/client" qcc "github.com/milvus-io/milvus/internal/distributed/querycoord/client" @@ -67,8 +66,6 @@ type Server struct { newDataCoordClient func(string, *clientv3.Client) types.DataCoord newQueryCoordClient func(string, *clientv3.Client) types.QueryCoord - - closer io.Closer } func (s *Server) CheckHealth(ctx context.Context, request *milvuspb.CheckHealthRequest) (*milvuspb.CheckHealthResponse, error) { @@ -144,9 +141,6 @@ func (s *Server) init() error { Params := ¶mtable.Get().RootCoordGrpcServerCfg log.Debug("init params done..") - closer := trace.InitTracing("root_coord") - s.closer = closer - etcdCli, err := etcd.GetEtcdClient( etcdConfig.UseEmbedEtcd.GetAsBool(), etcdConfig.EtcdUseSSL.GetAsBool(), @@ -225,17 +219,17 @@ func (s *Server) startGrpcLoop(port int) { ctx, cancel := context.WithCancel(s.ctx) defer cancel() - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() s.grpcServer = grpc.NewServer( grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp), grpc.MaxRecvMsgSize(Params.ServerMaxRecvSize.GetAsInt()), grpc.MaxSendMsgSize(Params.ServerMaxSendSize.GetAsInt()), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( - ot.UnaryServerInterceptor(opts...), + otelgrpc.UnaryServerInterceptor(opts...), logutil.UnaryTraceLoggerInterceptor)), grpc.StreamInterceptor(grpc_middleware.ChainStreamServer( - ot.StreamServerInterceptor(opts...), + otelgrpc.StreamServerInterceptor(opts...), logutil.StreamTraceLoggerInterceptor))) rootcoordpb.RegisterRootCoordServer(s.grpcServer, s) @@ -262,11 +256,6 @@ func (s *Server) start() error { func (s *Server) Stop() error { Params := ¶mtable.Get().RootCoordGrpcServerCfg log.Debug("Rootcoord stop", zap.String("Address", Params.GetAddress())) - if s.closer != nil { - if err := s.closer.Close(); err != nil { - log.Error("Failed to close opentracing", zap.Error(err)) - } - } if s.etcdCli != nil { defer s.etcdCli.Close() } diff --git a/internal/indexnode/indexnode.go b/internal/indexnode/indexnode.go index 83e4cc6046..f107e1371d 100644 --- a/internal/indexnode/indexnode.go +++ b/internal/indexnode/indexnode.go @@ -28,7 +28,6 @@ import "C" import ( "context" "errors" - "io" "math/rand" "os" "path" @@ -50,7 +49,6 @@ import ( "github.com/milvus-io/milvus/internal/util/initcore" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/sessionutil" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" clientv3 "go.etcd.io/etcd/client/v3" "go.uber.org/zap" @@ -93,8 +91,6 @@ type IndexNode struct { etcdCli *clientv3.Client address string - closer io.Closer - initOnce sync.Once stateLock sync.Mutex tasks map[taskKey]*taskInfo @@ -195,7 +191,6 @@ func (i *IndexNode) Init() error { } log.Info("IndexNode NewMinIOKV succeeded") - i.closer = trace.InitTracing("index_node") i.initKnowhere() }) diff --git a/internal/indexnode/indexnode_service.go b/internal/indexnode/indexnode_service.go index 2d7158eccd..6a7f7adfe7 100644 --- a/internal/indexnode/indexnode_service.go +++ b/internal/indexnode/indexnode_service.go @@ -22,6 +22,11 @@ import ( "strconv" "github.com/golang/protobuf/proto" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/trace" + "go.uber.org/zap" + "github.com/milvus-io/milvus-proto/go-api/commonpb" "github.com/milvus-io/milvus-proto/go-api/milvuspb" "github.com/milvus-io/milvus/internal/common" @@ -32,8 +37,7 @@ import ( "github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/timerecord" - "github.com/milvus-io/milvus/internal/util/trace" - "go.uber.org/zap" + "github.com/milvus-io/milvus/internal/util/typeutil" ) func (i *IndexNode) CreateJob(ctx context.Context, req *indexpb.CreateJobRequest) (*commonpb.Status, error) { @@ -56,10 +60,11 @@ func (i *IndexNode) CreateJob(ctx context.Context, req *indexpb.CreateJobRequest zap.Any("TypeParams", req.TypeParams), zap.Any("IndexParams", req.IndexParams), zap.Int64("num_rows", req.GetNumRows())) - sp, _ := trace.StartSpanFromContextWithOperationName(ctx, "IndexNode-CreateIndex") - defer sp.Finish() - sp.SetTag("IndexBuildID", strconv.FormatInt(req.BuildID, 10)) - sp.SetTag("ClusterID", req.ClusterID) + ctx, sp := otel.Tracer(typeutil.IndexNodeRole).Start(ctx, "IndexNode-CreateIndex", trace.WithAttributes( + attribute.Int64("IndexBuildID", req.BuildID), + attribute.String("ClusterID", req.ClusterID), + )) + defer sp.End() metrics.IndexNodeBuildIndexTaskCounter.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), metrics.TotalLabel).Inc() taskCtx, taskCancel := context.WithCancel(i.loopCtx) diff --git a/internal/log/meta_logger.go b/internal/log/meta_logger.go deleted file mode 100644 index f3e775835a..0000000000 --- a/internal/log/meta_logger.go +++ /dev/null @@ -1,129 +0,0 @@ -package log - -import ( - "encoding/json" - - "github.com/milvus-io/milvus/internal/metastore/model" - "go.uber.org/zap" -) - -type Operator string - -const ( - // CreateCollection operator - Creator Operator = "create" - Update Operator = "update" - Delete Operator = "delete" - Insert Operator = "insert" - Sealed Operator = "sealed" -) - -type MetaLogger struct { - fields []zap.Field - logger *zap.Logger -} - -func NewMetaLogger() *MetaLogger { - l := infoL() - fields := []zap.Field{zap.Bool("MetaLogInfo", true)} - return &MetaLogger{ - fields: fields, - logger: l, - } -} - -func (m *MetaLogger) WithCollectionMeta(coll *model.Collection) *MetaLogger { - payload, _ := json.Marshal(coll) - m.fields = append(m.fields, zap.Binary("CollectionMeta", payload)) - return m -} - -func (m *MetaLogger) WithIndexMeta(idx *model.Index) *MetaLogger { - payload, _ := json.Marshal(idx) - m.fields = append(m.fields, zap.Binary("IndexMeta", payload)) - return m -} - -func (m *MetaLogger) WithCollectionID(collID int64) *MetaLogger { - m.fields = append(m.fields, zap.Int64("CollectionID", collID)) - return m -} - -func (m *MetaLogger) WithCollectionName(collname string) *MetaLogger { - m.fields = append(m.fields, zap.String("CollectionName", collname)) - return m -} - -func (m *MetaLogger) WithPartitionID(partID int64) *MetaLogger { - m.fields = append(m.fields, zap.Int64("PartitionID", partID)) - return m -} - -func (m *MetaLogger) WithPartitionName(partName string) *MetaLogger { - m.fields = append(m.fields, zap.String("PartitionName", partName)) - return m -} - -func (m *MetaLogger) WithFieldID(fieldID int64) *MetaLogger { - m.fields = append(m.fields, zap.Int64("FieldID", fieldID)) - return m -} - -func (m *MetaLogger) WithFieldName(fieldName string) *MetaLogger { - m.fields = append(m.fields, zap.String("FieldName", fieldName)) - return m -} - -func (m *MetaLogger) WithIndexID(idxID int64) *MetaLogger { - m.fields = append(m.fields, zap.Int64("IndexID", idxID)) - return m -} - -func (m *MetaLogger) WithIndexName(idxName string) *MetaLogger { - m.fields = append(m.fields, zap.String("IndexName", idxName)) - return m -} - -func (m *MetaLogger) WithBuildID(buildID int64) *MetaLogger { - m.fields = append(m.fields, zap.Int64("BuildID", buildID)) - return m -} - -func (m *MetaLogger) WithBuildIDS(buildIDs []int64) *MetaLogger { - m.fields = append(m.fields, zap.Int64s("BuildIDs", buildIDs)) - return m -} - -func (m *MetaLogger) WithSegmentID(segID int64) *MetaLogger { - m.fields = append(m.fields, zap.Int64("SegmentID", segID)) - return m -} - -func (m *MetaLogger) WithIndexFiles(files []string) *MetaLogger { - m.fields = append(m.fields, zap.Strings("IndexFiles", files)) - return m -} - -func (m *MetaLogger) WithIndexVersion(version int64) *MetaLogger { - m.fields = append(m.fields, zap.Int64("IndexVersion", version)) - return m -} - -func (m *MetaLogger) WithTSO(tso uint64) *MetaLogger { - m.fields = append(m.fields, zap.Uint64("TSO", tso)) - return m -} - -func (m *MetaLogger) WithAlias(alias string) *MetaLogger { - m.fields = append(m.fields, zap.String("Alias", alias)) - return m -} - -func (m *MetaLogger) WithOperation(op MetaOperation) *MetaLogger { - m.fields = append(m.fields, zap.Int("Operation", int(op))) - return m -} - -func (m *MetaLogger) Info() { - m.logger.Info("", m.fields...) -} diff --git a/internal/log/meta_logger_test.go b/internal/log/meta_logger_test.go deleted file mode 100644 index a5eab75da9..0000000000 --- a/internal/log/meta_logger_test.go +++ /dev/null @@ -1,50 +0,0 @@ -package log - -import ( - "testing" - - "github.com/milvus-io/milvus/internal/metastore/model" -) - -func TestMetaLogger(t *testing.T) { - ts := newTestLogSpy(t) - conf := &Config{Level: "debug", DisableTimestamp: true, DisableCaller: true} - logger, _, _ := InitTestLogger(ts, conf) - replaceLeveledLoggers(logger) - - NewMetaLogger().WithCollectionID(0). - WithCollectionMeta(&model.Collection{}). - WithIndexMeta(&model.Index{}). - WithCollectionName("coll"). - WithPartitionID(0). - WithPartitionName("part"). - WithFieldID(0). - WithFieldName("field"). - WithIndexID(0). - WithIndexName("idx"). - WithBuildID(0). - WithBuildIDS([]int64{0, 0}). - WithSegmentID(0). - WithIndexFiles([]string{"idx", "idx"}). - WithIndexVersion(0). - WithTSO(0). - WithAlias("alias"). - WithOperation(DropCollection).Info() - - ts.assertMessagesContains("CollectionID=0") - ts.assertMessagesContains("CollectionName=coll") - ts.assertMessagesContains("PartitionID=0") - ts.assertMessagesContains("PartitionName=part") - ts.assertMessagesContains("FieldID=0") - ts.assertMessagesContains("FieldName=field") - ts.assertMessagesContains("IndexID=0") - ts.assertMessagesContains("IndexName=idx") - ts.assertMessagesContains("BuildID=0") - ts.assertMessagesContains("\"[0,0]\"") - ts.assertMessagesContains("SegmentID=0") - ts.assertMessagesContains("IndexFiles=\"[idx,idx]\"") - ts.assertMessagesContains("IndexVersion=0") - ts.assertMessagesContains("TSO=0") - ts.assertMessagesContains("Alias=alias") - ts.assertMessagesContains("Operation=1") -} diff --git a/internal/log/meta_ops.go b/internal/log/meta_ops.go deleted file mode 100644 index 34e63b7095..0000000000 --- a/internal/log/meta_ops.go +++ /dev/null @@ -1,17 +0,0 @@ -package log - -type MetaOperation int - -const ( - InvalidMetaOperation MetaOperation = iota - 1 - CreateCollection - DropCollection - CreateCollectionAlias - AlterCollectionAlias - DropCollectionAlias - CreatePartition - DropPartition - CreateIndex - DropIndex - BuildSegmentIndex -) diff --git a/internal/mq/msgstream/mq_msgstream.go b/internal/mq/msgstream/mq_msgstream.go index 77fbca2834..7bb7bcf57a 100644 --- a/internal/mq/msgstream/mq_msgstream.go +++ b/internal/mq/msgstream/mq_msgstream.go @@ -33,9 +33,7 @@ import ( "github.com/milvus-io/milvus/internal/mq/msgstream/mqwrapper" "github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/util/retry" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" - "github.com/opentracing/opentracing-go" ) var _ MsgStream = (*mqMsgStream)(nil) @@ -197,7 +195,6 @@ func (ms *mqMsgStream) Close() { } ms.client.Close() - close(ms.receiveBuf) } @@ -258,7 +255,7 @@ func (ms *mqMsgStream) Produce(msgPack *MsgPack) error { for k, v := range result { channel := ms.producerChannels[k] for i := 0; i < len(v.Msgs); i++ { - sp, spanCtx := MsgSpanFromCtx(v.Msgs[i].TraceCtx(), v.Msgs[i]) + spanCtx, sp := MsgSpanFromCtx(v.Msgs[i].TraceCtx(), v.Msgs[i]) mb, err := v.Msgs[i].Marshal(v.Msgs[i]) if err != nil { @@ -272,34 +269,31 @@ func (ms *mqMsgStream) Produce(msgPack *MsgPack) error { msg := &mqwrapper.ProducerMessage{Payload: m, Properties: map[string]string{}} - trace.InjectContextToMsgProperties(sp.Context(), msg.Properties) + InjectCtx(spanCtx, msg.Properties) ms.producerLock.Lock() - if _, err := ms.producers[channel].Send( - spanCtx, - msg, - ); err != nil { + if _, err := ms.producers[channel].Send(spanCtx, msg); err != nil { ms.producerLock.Unlock() - trace.LogError(sp, err) - sp.Finish() + sp.RecordError(err) + sp.End() return err } - sp.Finish() + sp.End() ms.producerLock.Unlock() } } return nil } -// Broadcast put msgPack to all producer in current msgstream and returned message id -// which ignores repackFunc logic +// BroadcastMark broadcast msg pack to all producers and returns corresponding msg id +// the returned message id serves as marking func (ms *mqMsgStream) Broadcast(msgPack *MsgPack) (map[string][]MessageID, error) { ids := make(map[string][]MessageID) if msgPack == nil || len(msgPack.Msgs) <= 0 { return ids, errors.New("empty msgs") } for _, v := range msgPack.Msgs { - sp, spanCtx := MsgSpanFromCtx(v.TraceCtx(), v) + spanCtx, sp := MsgSpanFromCtx(v.TraceCtx(), v) mb, err := v.Marshal(v) if err != nil { @@ -313,21 +307,21 @@ func (ms *mqMsgStream) Broadcast(msgPack *MsgPack) (map[string][]MessageID, erro msg := &mqwrapper.ProducerMessage{Payload: m, Properties: map[string]string{}} - trace.InjectContextToMsgProperties(sp.Context(), msg.Properties) + InjectCtx(spanCtx, msg.Properties) ms.producerLock.Lock() for channel, producer := range ms.producers { id, err := producer.Send(spanCtx, msg) if err != nil { ms.producerLock.Unlock() - trace.LogError(sp, err) - sp.Finish() + sp.RecordError(err) + sp.End() return ids, err } ids[channel] = append(ids[channel], id) } ms.producerLock.Unlock() - sp.Finish() + sp.End() } return ids, nil } @@ -391,9 +385,9 @@ func (ms *mqMsgStream) receiveMsg(consumer mqwrapper.Consumer) { Timestamp: tsMsg.BeginTs(), }) - sp, ok := ExtractFromMsgProperties(tsMsg, msg.Properties()) - if ok { - tsMsg.SetTraceCtx(opentracing.ContextWithSpan(context.Background(), sp)) + ctx, sp := ExtractCtx(tsMsg, msg.Properties()) + if ctx != nil { + tsMsg.SetTraceCtx(ctx) } msgPack := MsgPack{ @@ -407,7 +401,7 @@ func (ms *mqMsgStream) receiveMsg(consumer mqwrapper.Consumer) { return } - sp.Finish() + sp.End() } } } @@ -694,9 +688,9 @@ func (ms *MqTtMsgStream) consumeToTtMsg(consumer mqwrapper.Consumer) { continue } - sp, ok := ExtractFromMsgProperties(tsMsg, msg.Properties()) - if ok { - tsMsg.SetTraceCtx(opentracing.ContextWithSpan(context.Background(), sp)) + ctx, sp := ExtractCtx(tsMsg, msg.Properties()) + if ctx != nil { + tsMsg.SetTraceCtx(ctx) } ms.chanMsgBufMutex.Lock() @@ -707,10 +701,10 @@ func (ms *MqTtMsgStream) consumeToTtMsg(consumer mqwrapper.Consumer) { ms.chanTtMsgTimeMutex.Lock() ms.chanTtMsgTime[consumer] = tsMsg.(*TimeTickMsg).Base.Timestamp ms.chanTtMsgTimeMutex.Unlock() - sp.Finish() + sp.End() return } - sp.Finish() + sp.End() } } } diff --git a/internal/mq/msgstream/trace.go b/internal/mq/msgstream/trace.go index dce78f1e1c..85c73ebb73 100644 --- a/internal/mq/msgstream/trace.go +++ b/internal/mq/msgstream/trace.go @@ -18,72 +18,59 @@ package msgstream import ( "context" - "errors" - "runtime" - - "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/ext" - "github.com/opentracing/opentracing-go/log" "github.com/milvus-io/milvus-proto/go-api/commonpb" - "github.com/milvus-io/milvus/internal/util/trace" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/trace" ) -// ExtractFromMsgProperties extracts trace span from msg.properties. +// ExtractCtx extracts trace span from msg.properties. // And it will attach some default tags to the span. -func ExtractFromMsgProperties(msg TsMsg, properties map[string]string) (opentracing.Span, bool) { - if !allowTrace(msg) { - return trace.NoopSpan(), false +func ExtractCtx(msg TsMsg, properties map[string]string) (context.Context, trace.Span) { + ctx := msg.TraceCtx() + if ctx == nil { + return ctx, trace.SpanFromContext(ctx) } - tracer := opentracing.GlobalTracer() - sc, _ := tracer.Extract(opentracing.TextMap, trace.PropertiesReaderWriter{PpMap: properties}) - name := "receive pulsar msg" - opts := []opentracing.StartSpanOption{ - ext.RPCServerOption(sc), - opentracing.Tags{ - "ID": msg.ID(), - "Type": msg.Type(), - "HashKeys": msg.HashKeys(), - "Position": msg.Position(), - }} - return opentracing.StartSpan(name, opts...), true + if !allowTrace(msg) { + return ctx, trace.SpanFromContext(ctx) + } + ctx = otel.GetTextMapPropagator().Extract(msg.TraceCtx(), propagation.MapCarrier(properties)) + name := "receive msg" + return otel.Tracer(name).Start(ctx, name, trace.WithAttributes( + attribute.Int64("ID", msg.ID()), + attribute.String("Type", msg.Type().String()), + // attribute.Int64Value("HashKeys", msg.HashKeys()), + attribute.String("Position", msg.Position().String()), + )) +} + +// InjectCtx is a method inject span to pulsr message. +func InjectCtx(sc context.Context, properties map[string]string) { + if sc == nil { + return + } + otel.GetTextMapPropagator().Inject(sc, propagation.MapCarrier(properties)) } // MsgSpanFromCtx extracts the span from context. // And it will attach some default tags to the span. -func MsgSpanFromCtx(ctx context.Context, msg TsMsg, opts ...opentracing.StartSpanOption) (opentracing.Span, context.Context) { +func MsgSpanFromCtx(ctx context.Context, msg TsMsg) (context.Context, trace.Span) { if ctx == nil { - return trace.NoopSpan(), ctx + return ctx, trace.SpanFromContext(ctx) } if !allowTrace(msg) { - return trace.NoopSpan(), ctx + return ctx, trace.SpanFromContext(ctx) } - operationName := "send pulsar msg" - opts = append(opts, opentracing.Tags{ - "ID": msg.ID(), - "Type": msg.Type(), - "HashKeys": msg.HashKeys(), - "Position": msg.Position(), - }) - - var pcs [1]uintptr - n := runtime.Callers(2, pcs[:]) - if n < 1 { - span, ctx := opentracing.StartSpanFromContext(ctx, operationName, opts...) - span.LogFields(log.Error(errors.New("runtime.Callers failed"))) - return span, ctx - } - file, line := runtime.FuncForPC(pcs[0]).FileLine(pcs[0]) - - if parentSpan := opentracing.SpanFromContext(ctx); parentSpan != nil { - opts = append(opts, opentracing.ChildOf(parentSpan.Context())) - } - span := opentracing.StartSpan(operationName, opts...) - ctx = opentracing.ContextWithSpan(ctx, span) - - span.LogFields(log.String("filename", file), log.Int("line", line)) - - return span, ctx + operationName := "send msg" + opts := trace.WithAttributes( + attribute.Int64("ID", msg.ID()), + attribute.String("Type", msg.Type().String()), + // attribute.Int64Value("HashKeys", msg.HashKeys()), + attribute.String("Position", msg.Position().String()), + ) + return otel.Tracer(operationName).Start(ctx, operationName, opts) } func allowTrace(in interface{}) bool { diff --git a/internal/proxy/accesslog/access_log_test.go b/internal/proxy/accesslog/access_log_test.go index d0fe73a18b..338873a9f4 100644 --- a/internal/proxy/accesslog/access_log_test.go +++ b/internal/proxy/accesslog/access_log_test.go @@ -26,7 +26,6 @@ import ( "github.com/milvus-io/milvus-proto/go-api/commonpb" "github.com/milvus-io/milvus-proto/go-api/milvuspb" "github.com/milvus-io/milvus/internal/util/paramtable" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/stretchr/testify/assert" "google.golang.org/grpc" "google.golang.org/grpc/metadata" @@ -35,8 +34,6 @@ import ( func TestAccessLogger_NotEnable(t *testing.T) { var Params paramtable.ComponentParam - closer := trace.InitTracing("test-trace") - defer closer.Close() Params.Init() Params.Save(Params.ProxyCfg.AccessLog.Enable.Key, "false") @@ -68,8 +65,6 @@ func TestAccessLogger_NotEnable(t *testing.T) { func TestAccessLogger_Basic(t *testing.T) { var Params paramtable.ComponentParam - closer := trace.InitTracing("test-trace") - defer closer.Close() Params.Init() testPath := "/tmp/accesstest" @@ -103,8 +98,6 @@ func TestAccessLogger_Basic(t *testing.T) { func TestAccessLogger_Stdout(t *testing.T) { var Params paramtable.ComponentParam - closer := trace.InitTracing("test-trace") - defer closer.Close() Params.Init() Params.Save(Params.ProxyCfg.AccessLog.Filename.Key, "") @@ -135,8 +128,6 @@ func TestAccessLogger_Stdout(t *testing.T) { } func TestAccessLogger_WithMinio(t *testing.T) { var Params paramtable.ComponentParam - closer := trace.InitTracing("test-trace") - defer closer.Close() Params.Init() testPath := "/tmp/accesstest" @@ -181,8 +172,6 @@ func TestAccessLogger_WithMinio(t *testing.T) { func TestAccessLogger_Error(t *testing.T) { var Params paramtable.ComponentParam - closer := trace.InitTracing("test-trace") - defer closer.Close() Params.Init() testPath := "/tmp/accesstest" diff --git a/internal/proxy/accesslog/util.go b/internal/proxy/accesslog/util.go index 6075f402e2..27a5cb6ff1 100644 --- a/internal/proxy/accesslog/util.go +++ b/internal/proxy/accesslog/util.go @@ -25,7 +25,7 @@ import ( "github.com/golang/protobuf/proto" "github.com/milvus-io/milvus-proto/go-api/commonpb" - "github.com/milvus-io/milvus/internal/util/trace" + "go.opentelemetry.io/otel/trace" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" @@ -76,11 +76,8 @@ func getTraceID(ctx context.Context) (id string, ok bool) { return meta.Get(clientRequestIDKey)[0], true } - traceID, _, ok := trace.InfoFromContext(ctx) - if ok { - return traceID, true - } - return "", false + traceID := trace.SpanFromContext(ctx).SpanContext().TraceID() + return traceID.String(), traceID.IsValid() } func getResponseSize(resq interface{}) (int, bool) { diff --git a/internal/proxy/accesslog/util_test.go b/internal/proxy/accesslog/util_test.go index 8246607e80..db3a3f6486 100644 --- a/internal/proxy/accesslog/util_test.go +++ b/internal/proxy/accesslog/util_test.go @@ -23,8 +23,12 @@ import ( "github.com/milvus-io/milvus-proto/go-api/commonpb" "github.com/milvus-io/milvus-proto/go-api/milvuspb" - "github.com/milvus-io/milvus/internal/util/trace" + "github.com/milvus-io/milvus/internal/log" + "github.com/milvus-io/milvus/internal/tracer" + "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/stretchr/testify/assert" + "go.opentelemetry.io/otel" + "go.uber.org/zap" "google.golang.org/grpc/metadata" "google.golang.org/grpc/peer" ) @@ -48,12 +52,17 @@ func TestGetAccessAddr(t *testing.T) { } func TestGetTraceID(t *testing.T) { + paramtable.Init() + tracer.Init() + ctx := context.Background() - _, ok := getTraceID(ctx) + traceID, ok := getTraceID(ctx) + log.Debug("traceID", zap.String("id", traceID)) assert.False(t, ok) - traceSpan, traceContext := trace.StartSpanFromContext(ctx) - trueTraceID, _, _ := trace.InfoFromSpan(traceSpan) + traceContext, traceSpan := otel.Tracer("proxy").Start(ctx, "demo") + trueTraceID := traceSpan.SpanContext().TraceID().String() + log.Debug("traceID", zap.String("trueTraceID", trueTraceID)) ID, ok := getTraceID(traceContext) assert.True(t, ok) assert.Equal(t, trueTraceID, ID) diff --git a/internal/proxy/impl.go b/internal/proxy/impl.go index c218358bcd..615330742a 100644 --- a/internal/proxy/impl.go +++ b/internal/proxy/impl.go @@ -24,6 +24,7 @@ import ( "strconv" "sync" + "go.opentelemetry.io/otel" "golang.org/x/sync/errgroup" "github.com/golang/protobuf/proto" @@ -47,7 +48,6 @@ import ( "github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/timerecord" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" "go.uber.org/zap" ) @@ -106,8 +106,9 @@ func (node *Proxy) InvalidateCollectionMetaCache(ctx context.Context, request *p return unhealthyStatus(), nil } ctx = logutil.WithModule(ctx, moduleName) - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-InvalidateCollectionMetaCache") - defer sp.Finish() + + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-InvalidateCollectionMetaCache") + defer sp.End() log := log.Ctx(ctx).With( zap.String("role", typeutil.ProxyRole), zap.String("db", request.DbName), @@ -152,8 +153,8 @@ func (node *Proxy) CreateCollection(ctx context.Context, request *milvuspb.Creat return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-CreateCollection") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-CreateCollection") + defer sp.End() method := "CreateCollection" tr := timerecord.NewTimeRecorder(method) @@ -227,8 +228,8 @@ func (node *Proxy) DropCollection(ctx context.Context, request *milvuspb.DropCol return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-DropCollection") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-DropCollection") + defer sp.End() method := "DropCollection" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, metrics.TotalLabel).Inc() @@ -294,8 +295,8 @@ func (node *Proxy) HasCollection(ctx context.Context, request *milvuspb.HasColle }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-HasCollection") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-HasCollection") + defer sp.End() method := "HasCollection" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, @@ -365,8 +366,8 @@ func (node *Proxy) LoadCollection(ctx context.Context, request *milvuspb.LoadCol return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-LoadCollection") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-LoadCollection") + defer sp.End() method := "LoadCollection" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, @@ -431,8 +432,8 @@ func (node *Proxy) ReleaseCollection(ctx context.Context, request *milvuspb.Rele return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-ReleaseCollection") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-ReleaseCollection") + defer sp.End() method := "ReleaseCollection" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, @@ -504,8 +505,8 @@ func (node *Proxy) DescribeCollection(ctx context.Context, request *milvuspb.Des }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-DescribeCollection") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-DescribeCollection") + defer sp.End() method := "DescribeCollection" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, @@ -579,8 +580,8 @@ func (node *Proxy) GetStatistics(ctx context.Context, request *milvuspb.GetStati }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetStatistics") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetStatistics") + defer sp.End() method := "GetStatistics" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, @@ -665,8 +666,8 @@ func (node *Proxy) GetCollectionStatistics(ctx context.Context, request *milvusp }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetCollectionStatistics") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetCollectionStatistics") + defer sp.End() method := "GetCollectionStatistics" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, @@ -742,8 +743,8 @@ func (node *Proxy) ShowCollections(ctx context.Context, request *milvuspb.ShowCo Status: unhealthyStatus(), }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-ShowCollections") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-ShowCollections") + defer sp.End() method := "ShowCollections" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, metrics.TotalLabel).Inc() @@ -813,8 +814,8 @@ func (node *Proxy) AlterCollection(ctx context.Context, request *milvuspb.AlterC return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-AlterCollection") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-AlterCollection") + defer sp.End() method := "AlterCollection" tr := timerecord.NewTimeRecorder(method) @@ -883,8 +884,8 @@ func (node *Proxy) CreatePartition(ctx context.Context, request *milvuspb.Create return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-CreatePartition") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-CreatePartition") + defer sp.End() method := "CreatePartition" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, metrics.TotalLabel).Inc() @@ -954,8 +955,8 @@ func (node *Proxy) DropPartition(ctx context.Context, request *milvuspb.DropPart return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-DropPartition") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-DropPartition") + defer sp.End() method := "DropPartition" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, metrics.TotalLabel).Inc() @@ -1028,8 +1029,8 @@ func (node *Proxy) HasPartition(ctx context.Context, request *milvuspb.HasPartit }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-HasPartition") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-HasPartition") + defer sp.End() method := "HasPartition" tr := timerecord.NewTimeRecorder(method) //TODO: use collectionID instead of collectionName @@ -1110,8 +1111,8 @@ func (node *Proxy) LoadPartitions(ctx context.Context, request *milvuspb.LoadPar return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-LoadPartitions") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-LoadPartitions") + defer sp.End() method := "LoadPartitions" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, @@ -1184,8 +1185,8 @@ func (node *Proxy) ReleasePartitions(ctx context.Context, request *milvuspb.Rele return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-ReleasePartitions") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-ReleasePartitions") + defer sp.End() rpt := &releasePartitionsTask{ ctx: ctx, @@ -1261,8 +1262,8 @@ func (node *Proxy) GetPartitionStatistics(ctx context.Context, request *milvuspb }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetPartitionStatistics") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetPartitionStatistics") + defer sp.End() method := "GetPartitionStatistics" tr := timerecord.NewTimeRecorder(method) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, @@ -1341,8 +1342,8 @@ func (node *Proxy) ShowPartitions(ctx context.Context, request *milvuspb.ShowPar }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-ShowPartitions") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-ShowPartitions") + defer sp.End() spt := &showPartitionsTask{ ctx: ctx, @@ -1431,8 +1432,8 @@ func (node *Proxy) GetLoadingProgress(ctx context.Context, request *milvuspb.Get } method := "GetLoadingProgress" tr := timerecord.NewTimeRecorder(method) - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetLoadingProgress") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetLoadingProgress") + defer sp.End() metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, metrics.TotalLabel).Inc() log := log.Ctx(ctx) @@ -1510,8 +1511,8 @@ func (node *Proxy) GetLoadState(ctx context.Context, request *milvuspb.GetLoadSt } method := "GetLoadState" tr := timerecord.NewTimeRecorder(method) - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetLoadState") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetLoadState") + defer sp.End() metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, metrics.TotalLabel).Inc() log := log.Ctx(ctx) @@ -1614,8 +1615,8 @@ func (node *Proxy) CreateIndex(ctx context.Context, request *milvuspb.CreateInde return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-CreateIndex") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-CreateIndex") + defer sp.End() cit := &createIndexTask{ ctx: ctx, @@ -1694,8 +1695,8 @@ func (node *Proxy) DescribeIndex(ctx context.Context, request *milvuspb.Describe }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-DescribeIndex") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-DescribeIndex") + defer sp.End() dit := &describeIndexTask{ ctx: ctx, @@ -1779,8 +1780,8 @@ func (node *Proxy) DropIndex(ctx context.Context, request *milvuspb.DropIndexReq return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-DropIndex") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-DropIndex") + defer sp.End() dit := &dropIndexTask{ ctx: ctx, @@ -1859,8 +1860,8 @@ func (node *Proxy) GetIndexBuildProgress(ctx context.Context, request *milvuspb. }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetIndexBuildProgress") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetIndexBuildProgress") + defer sp.End() gibpt := &getIndexBuildProgressTask{ ctx: ctx, @@ -1941,8 +1942,8 @@ func (node *Proxy) GetIndexState(ctx context.Context, request *milvuspb.GetIndex }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-Insert") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Insert") + defer sp.End() dipt := &getIndexStateTask{ ctx: ctx, @@ -2017,11 +2018,8 @@ func (node *Proxy) GetIndexState(ctx context.Context, request *milvuspb.GetIndex // Insert insert records into collection. func (node *Proxy) Insert(ctx context.Context, request *milvuspb.InsertRequest) (*milvuspb.MutationResult, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-Insert") - defer sp.Finish() - log := log.Ctx(ctx) - log.Debug("Start processing insert request in Proxy") - defer log.Debug("Finish processing insert request in Proxy") + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Insert") + defer sp.End() if !node.checkHealthy() { return &milvuspb.MutationResult{ @@ -2143,8 +2141,8 @@ func (node *Proxy) Insert(ctx context.Context, request *milvuspb.InsertRequest) // Delete delete records from collection, then these records cannot be searched. func (node *Proxy) Delete(ctx context.Context, request *milvuspb.DeleteRequest) (*milvuspb.MutationResult, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-Delete") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Delete") + defer sp.End() log := log.Ctx(ctx) log.Debug("Start processing delete request in Proxy") defer log.Debug("Finish processing delete request in Proxy") @@ -2238,8 +2236,8 @@ func (node *Proxy) Delete(ctx context.Context, request *milvuspb.DeleteRequest) // Upsert upsert records into collection. func (node *Proxy) Upsert(ctx context.Context, request *milvuspb.UpsertRequest) (*milvuspb.MutationResult, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-Upsert") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Upsert") + defer sp.End() log := log.Ctx(ctx).With( zap.String("role", typeutil.ProxyRole), @@ -2387,8 +2385,8 @@ func (node *Proxy) Search(ctx context.Context, request *milvuspb.SearchRequest) metrics.ProxyFunctionCall.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10), method, metrics.TotalLabel).Inc() - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-Search") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Search") + defer sp.End() qt := &searchTask{ ctx: ctx, @@ -2496,8 +2494,8 @@ func (node *Proxy) Flush(ctx context.Context, request *milvuspb.FlushRequest) (* return resp, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-Flush") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Flush") + defer sp.End() ft := &flushTask{ ctx: ctx, @@ -2570,8 +2568,8 @@ func (node *Proxy) Query(ctx context.Context, request *milvuspb.QueryRequest) (* }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-Query") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Query") + defer sp.End() tr := timerecord.NewTimeRecorder("Query") qt := &queryTask{ @@ -2672,8 +2670,8 @@ func (node *Proxy) CreateAlias(ctx context.Context, request *milvuspb.CreateAlia return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-CreateAlias") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-CreateAlias") + defer sp.End() cat := &CreateAliasTask{ ctx: ctx, @@ -2742,8 +2740,8 @@ func (node *Proxy) DropAlias(ctx context.Context, request *milvuspb.DropAliasReq return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-DropAlias") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-DropAlias") + defer sp.End() dat := &DropAliasTask{ ctx: ctx, @@ -2811,8 +2809,8 @@ func (node *Proxy) AlterAlias(ctx context.Context, request *milvuspb.AlterAliasR return unhealthyStatus(), nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-AlterAlias") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-AlterAlias") + defer sp.End() aat := &AlterAliasTask{ ctx: ctx, @@ -2883,9 +2881,8 @@ func (node *Proxy) CalcDistance(ctx context.Context, request *milvuspb.CalcDista }, nil } - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-CalcDistance") - defer sp.Finish() - traceID, _, _ := trace.InfoFromSpan(sp) + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-CalcDistance") + defer sp.End() query := func(ids *milvuspb.VectorIDs) (*milvuspb.QueryResults, error) { outputFields := []string{ids.FieldName} @@ -2958,7 +2955,7 @@ func (node *Proxy) CalcDistance(ctx context.Context, request *milvuspb.CalcDista // calcDistanceTask is not a standard task, no need to enqueue task := &calcDistanceTask{ - traceID: traceID, + traceID: sp.SpanContext().TraceID().String(), queryFunc: query, } @@ -2972,8 +2969,8 @@ func (node *Proxy) GetDdChannel(ctx context.Context, request *internalpb.GetDdCh // GetPersistentSegmentInfo get the information of sealed segment. func (node *Proxy) GetPersistentSegmentInfo(ctx context.Context, req *milvuspb.GetPersistentSegmentInfoRequest) (*milvuspb.GetPersistentSegmentInfoResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetPersistentSegmentInfo") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetPersistentSegmentInfo") + defer sp.End() log := log.Ctx(ctx) @@ -3062,8 +3059,8 @@ func (node *Proxy) GetPersistentSegmentInfo(ctx context.Context, req *milvuspb.G // GetQuerySegmentInfo gets segment information from QueryCoord. func (node *Proxy) GetQuerySegmentInfo(ctx context.Context, req *milvuspb.GetQuerySegmentInfoRequest) (*milvuspb.GetQuerySegmentInfoResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetQuerySegmentInfo") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetQuerySegmentInfo") + defer sp.End() log := log.Ctx(ctx) @@ -3149,8 +3146,8 @@ func (node *Proxy) Dummy(ctx context.Context, req *milvuspb.DummyRequest) (*milv // TODO(wxyu): change name RequestType to Request drt, err := parseDummyRequestType(req.RequestType) - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-Dummy") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Dummy") + defer sp.End() log := log.Ctx(ctx) @@ -3195,8 +3192,8 @@ func (node *Proxy) Dummy(ctx context.Context, req *milvuspb.DummyRequest) (*milv func (node *Proxy) RegisterLink(ctx context.Context, req *milvuspb.RegisterLinkRequest) (*milvuspb.RegisterLinkResponse, error) { code := node.stateCode.Load().(commonpb.StateCode) - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-RegisterLink") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-RegisterLink") + defer sp.End() log := log.Ctx(ctx).With( zap.String("role", typeutil.ProxyRole), @@ -3226,8 +3223,8 @@ func (node *Proxy) RegisterLink(ctx context.Context, req *milvuspb.RegisterLinkR // GetMetrics gets the metrics of proxy // TODO(dragondriver): cache the Metrics and set a retention to the cache func (node *Proxy) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetMetrics") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetMetrics") + defer sp.End() log := log.Ctx(ctx) @@ -3306,8 +3303,8 @@ func (node *Proxy) GetMetrics(ctx context.Context, req *milvuspb.GetMetricsReque // GetProxyMetrics gets the metrics of proxy, it's an internal interface which is different from GetMetrics interface, // because it only obtains the metrics of Proxy, not including the topological metrics of Query cluster and Data cluster. func (node *Proxy) GetProxyMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetProxyMetrics") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetProxyMetrics") + defer sp.End() log := log.Ctx(ctx).With( zap.Int64("nodeID", paramtable.GetNodeID()), @@ -3377,8 +3374,8 @@ func (node *Proxy) GetProxyMetrics(ctx context.Context, req *milvuspb.GetMetrics // LoadBalance would do a load balancing operation between query nodes func (node *Proxy) LoadBalance(ctx context.Context, req *milvuspb.LoadBalanceRequest) (*commonpb.Status, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-LoadBalance") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-LoadBalance") + defer sp.End() log := log.Ctx(ctx) @@ -3436,8 +3433,8 @@ func (node *Proxy) LoadBalance(ctx context.Context, req *milvuspb.LoadBalanceReq // GetReplicas gets replica info func (node *Proxy) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasRequest) (*milvuspb.GetReplicasResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetReplicas") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetReplicas") + defer sp.End() log := log.Ctx(ctx) @@ -3471,8 +3468,8 @@ func (node *Proxy) GetReplicas(ctx context.Context, req *milvuspb.GetReplicasReq // GetCompactionState gets the compaction state of multiple segments func (node *Proxy) GetCompactionState(ctx context.Context, req *milvuspb.GetCompactionStateRequest) (*milvuspb.GetCompactionStateResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetCompactionState") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetCompactionState") + defer sp.End() log := log.Ctx(ctx).With( zap.Int64("compactionID", req.GetCompactionID())) @@ -3493,8 +3490,8 @@ func (node *Proxy) GetCompactionState(ctx context.Context, req *milvuspb.GetComp // ManualCompaction invokes compaction on specified collection func (node *Proxy) ManualCompaction(ctx context.Context, req *milvuspb.ManualCompactionRequest) (*milvuspb.ManualCompactionResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-ManualCompaction") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-ManualCompaction") + defer sp.End() log := log.Ctx(ctx).With( zap.Int64("collectionID", req.GetCollectionID())) @@ -3515,8 +3512,8 @@ func (node *Proxy) ManualCompaction(ctx context.Context, req *milvuspb.ManualCom // GetCompactionStateWithPlans returns the compactions states with the given plan ID func (node *Proxy) GetCompactionStateWithPlans(ctx context.Context, req *milvuspb.GetCompactionPlansRequest) (*milvuspb.GetCompactionPlansResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetCompactionStateWithPlans") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetCompactionStateWithPlans") + defer sp.End() log := log.Ctx(ctx).With( zap.Int64("compactionID", req.GetCompactionID())) @@ -3537,8 +3534,8 @@ func (node *Proxy) GetCompactionStateWithPlans(ctx context.Context, req *milvusp // GetFlushState gets the flush state of multiple segments func (node *Proxy) GetFlushState(ctx context.Context, req *milvuspb.GetFlushStateRequest) (*milvuspb.GetFlushStateResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetFlushState") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetFlushState") + defer sp.End() log := log.Ctx(ctx) @@ -3584,8 +3581,8 @@ func unhealthyStatus() *commonpb.Status { // Import data files(json, numpy, etc.) on MinIO/S3 storage, read and parse them into sealed segments func (node *Proxy) Import(ctx context.Context, req *milvuspb.ImportRequest) (*milvuspb.ImportResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-Import") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Import") + defer sp.End() log := log.Ctx(ctx) @@ -3636,8 +3633,8 @@ func (node *Proxy) Import(ctx context.Context, req *milvuspb.ImportRequest) (*mi // GetImportState checks import task state from RootCoord. func (node *Proxy) GetImportState(ctx context.Context, req *milvuspb.GetImportStateRequest) (*milvuspb.GetImportStateResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-GetImportState") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetImportState") + defer sp.End() log := log.Ctx(ctx) @@ -3673,8 +3670,8 @@ func (node *Proxy) GetImportState(ctx context.Context, req *milvuspb.GetImportSt // ListImportTasks get id array of all import tasks from rootcoord func (node *Proxy) ListImportTasks(ctx context.Context, req *milvuspb.ListImportTasksRequest) (*milvuspb.ListImportTasksResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-ListImportTasks") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-ListImportTasks") + defer sp.End() log := log.Ctx(ctx) @@ -3708,10 +3705,8 @@ func (node *Proxy) ListImportTasks(ctx context.Context, req *milvuspb.ListImport // InvalidateCredentialCache invalidate the credential cache of specified username. func (node *Proxy) InvalidateCredentialCache(ctx context.Context, request *proxypb.InvalidateCredCacheRequest) (*commonpb.Status, error) { - ctx = logutil.WithModule(ctx, moduleName) - - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-InvalidateCredentialCache") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-InvalidateCredentialCache") + defer sp.End() log := log.Ctx(ctx).With( zap.String("role", typeutil.ProxyRole), @@ -3736,10 +3731,8 @@ func (node *Proxy) InvalidateCredentialCache(ctx context.Context, request *proxy // UpdateCredentialCache update the credential cache of specified username. func (node *Proxy) UpdateCredentialCache(ctx context.Context, request *proxypb.UpdateCredCacheRequest) (*commonpb.Status, error) { - ctx = logutil.WithModule(ctx, moduleName) - - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-UpdateCredentialCache") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-UpdateCredentialCache") + defer sp.End() log := log.Ctx(ctx).With( zap.String("role", typeutil.ProxyRole), @@ -3765,9 +3758,10 @@ func (node *Proxy) UpdateCredentialCache(ctx context.Context, request *proxypb.U }, nil } +// func (node *Proxy) CreateCredential(ctx context.Context, req *milvuspb.CreateCredentialRequest) (*commonpb.Status, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-CreateCredential") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-CreateCredential") + defer sp.End() log := log.Ctx(ctx).With( zap.String("username", req.Username)) @@ -3829,9 +3823,10 @@ func (node *Proxy) CreateCredential(ctx context.Context, req *milvuspb.CreateCre return result, err } +// func (node *Proxy) UpdateCredential(ctx context.Context, req *milvuspb.UpdateCredentialRequest) (*commonpb.Status, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-UpdateCredential") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-UpdateCredential") + defer sp.End() log := log.Ctx(ctx).With( zap.String("username", req.Username)) @@ -3902,9 +3897,10 @@ func (node *Proxy) UpdateCredential(ctx context.Context, req *milvuspb.UpdateCre return result, err } +// func (node *Proxy) DeleteCredential(ctx context.Context, req *milvuspb.DeleteCredentialRequest) (*commonpb.Status, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-DeleteCredential") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-DeleteCredential") + defer sp.End() log := log.Ctx(ctx).With( zap.String("username", req.Username)) @@ -3934,8 +3930,8 @@ func (node *Proxy) DeleteCredential(ctx context.Context, req *milvuspb.DeleteCre } func (node *Proxy) ListCredUsers(ctx context.Context, req *milvuspb.ListCredUsersRequest) (*milvuspb.ListCredUsersResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-ListCredUsers") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-ListCredUsers") + defer sp.End() log := log.Ctx(ctx).With( zap.String("role", typeutil.ProxyRole)) @@ -3967,8 +3963,8 @@ func (node *Proxy) ListCredUsers(ctx context.Context, req *milvuspb.ListCredUser } func (node *Proxy) CreateRole(ctx context.Context, req *milvuspb.CreateRoleRequest) (*commonpb.Status, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-CreateRole") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-CreateRole") + defer sp.End() log := log.Ctx(ctx) @@ -4002,8 +3998,8 @@ func (node *Proxy) CreateRole(ctx context.Context, req *milvuspb.CreateRoleReque } func (node *Proxy) DropRole(ctx context.Context, req *milvuspb.DropRoleRequest) (*commonpb.Status, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-DropRole") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-DropRole") + defer sp.End() log := log.Ctx(ctx) @@ -4039,8 +4035,8 @@ func (node *Proxy) DropRole(ctx context.Context, req *milvuspb.DropRoleRequest) } func (node *Proxy) OperateUserRole(ctx context.Context, req *milvuspb.OperateUserRoleRequest) (*commonpb.Status, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-OperateUserRole") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-OperateUserRole") + defer sp.End() log := log.Ctx(ctx) @@ -4075,8 +4071,8 @@ func (node *Proxy) OperateUserRole(ctx context.Context, req *milvuspb.OperateUse } func (node *Proxy) SelectRole(ctx context.Context, req *milvuspb.SelectRoleRequest) (*milvuspb.SelectRoleResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-SelectRole") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-SelectRole") + defer sp.End() log := log.Ctx(ctx) @@ -4111,8 +4107,8 @@ func (node *Proxy) SelectRole(ctx context.Context, req *milvuspb.SelectRoleReque } func (node *Proxy) SelectUser(ctx context.Context, req *milvuspb.SelectUserRequest) (*milvuspb.SelectUserResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-SelectUser") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-SelectUser") + defer sp.End() log := log.Ctx(ctx) @@ -4180,8 +4176,8 @@ func (node *Proxy) validPrivilegeParams(req *milvuspb.OperatePrivilegeRequest) e } func (node *Proxy) OperatePrivilege(ctx context.Context, req *milvuspb.OperatePrivilegeRequest) (*commonpb.Status, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-OperatePrivilege") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-OperatePrivilege") + defer sp.End() log := log.Ctx(ctx) @@ -4243,8 +4239,8 @@ func (node *Proxy) validGrantParams(req *milvuspb.SelectGrantRequest) error { } func (node *Proxy) SelectGrant(ctx context.Context, req *milvuspb.SelectGrantRequest) (*milvuspb.SelectGrantResponse, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-SelectGrant") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-SelectGrant") + defer sp.End() log := log.Ctx(ctx) @@ -4278,8 +4274,8 @@ func (node *Proxy) SelectGrant(ctx context.Context, req *milvuspb.SelectGrantReq } func (node *Proxy) RefreshPolicyInfoCache(ctx context.Context, req *proxypb.RefreshPolicyInfoCacheRequest) (*commonpb.Status, error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-RefreshPolicyInfoCache") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-RefreshPolicyInfoCache") + defer sp.End() log := log.Ctx(ctx) @@ -4354,8 +4350,8 @@ func (node *Proxy) CheckHealth(ctx context.Context, request *milvuspb.CheckHealt mu.Lock() defer mu.Unlock() - sp, ctx := trace.StartSpanFromContextWithOperationName(ctx, "Proxy-RefreshPolicyInfoCache") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-RefreshPolicyInfoCache") + defer sp.End() log := log.Ctx(ctx).With(zap.String("role", role)) diff --git a/internal/proxy/proxy_test.go b/internal/proxy/proxy_test.go index 31860770a8..3716702408 100644 --- a/internal/proxy/proxy_test.go +++ b/internal/proxy/proxy_test.go @@ -29,7 +29,8 @@ import ( "github.com/golang/protobuf/proto" grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" - ot "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" + "github.com/milvus-io/milvus-proto/go-api/commonpb" "github.com/milvus-io/milvus-proto/go-api/milvuspb" "github.com/milvus-io/milvus-proto/go-api/schemapb" @@ -55,6 +56,7 @@ import ( querycoord "github.com/milvus-io/milvus/internal/querycoordv2" "github.com/milvus-io/milvus/internal/querynode" "github.com/milvus-io/milvus/internal/rootcoord" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/util" "github.com/milvus-io/milvus/internal/util/crypto" "github.com/milvus-io/milvus/internal/util/dependency" @@ -66,7 +68,6 @@ import ( "github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/sessionutil" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" "github.com/prometheus/client_golang/prometheus" "github.com/stretchr/testify/assert" @@ -326,17 +327,17 @@ func (s *proxyTestServer) startGrpc(ctx context.Context, wg *sync.WaitGroup, p * multiLimiter := NewMultiRateLimiter() s.multiRateLimiter = multiLimiter - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() s.grpcServer = grpc.NewServer( grpc.KeepaliveEnforcementPolicy(kaep), grpc.KeepaliveParams(kasp), grpc.MaxRecvMsgSize(p.ServerMaxRecvSize.GetAsInt()), grpc.MaxSendMsgSize(p.ServerMaxSendSize.GetAsInt()), grpc.UnaryInterceptor(grpc_middleware.ChainUnaryServer( - ot.UnaryServerInterceptor(opts...), + otelgrpc.UnaryServerInterceptor(opts...), RateLimitInterceptor(multiLimiter), )), - grpc.StreamInterceptor(ot.StreamServerInterceptor(opts...))) + grpc.StreamInterceptor(otelgrpc.StreamServerInterceptor(opts...))) proxypb.RegisterProxyServer(s.grpcServer, s) milvuspb.RegisterMilvusServiceServer(s.grpcServer, s) diff --git a/internal/proxy/task_delete.go b/internal/proxy/task_delete.go index ecb17ca7bc..9cc23fd8d4 100644 --- a/internal/proxy/task_delete.go +++ b/internal/proxy/task_delete.go @@ -5,6 +5,7 @@ import ( "fmt" "strconv" + "go.opentelemetry.io/otel" "go.uber.org/zap" "github.com/milvus-io/milvus-proto/go-api/commonpb" @@ -19,7 +20,6 @@ import ( "github.com/milvus-io/milvus/internal/util/commonpbutil" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/timerecord" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" ) @@ -232,8 +232,8 @@ func (dt *deleteTask) PreExecute(ctx context.Context) error { } func (dt *deleteTask) Execute(ctx context.Context) (err error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(dt.ctx, "Proxy-Delete-Execute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Delete-Execute") + defer sp.End() tr := timerecord.NewTimeRecorder(fmt.Sprintf("proxy execute delete %d", dt.ID())) diff --git a/internal/proxy/task_insert.go b/internal/proxy/task_insert.go index 9ae2402e0f..73b974e897 100644 --- a/internal/proxy/task_insert.go +++ b/internal/proxy/task_insert.go @@ -14,7 +14,8 @@ import ( "github.com/milvus-io/milvus/internal/mq/msgstream" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/timerecord" - "github.com/milvus-io/milvus/internal/util/trace" + "github.com/milvus-io/milvus/internal/util/typeutil" + "go.opentelemetry.io/otel" "go.uber.org/zap" ) @@ -101,8 +102,8 @@ func (it *insertTask) OnEnqueue() error { } func (it *insertTask) PreExecute(ctx context.Context) error { - sp, ctx := trace.StartSpanFromContextWithOperationName(it.ctx, "Proxy-Insert-PreExecute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Insert-PreExecute") + defer sp.End() it.result = &milvuspb.MutationResult{ Status: &commonpb.Status{ @@ -192,8 +193,8 @@ func (it *insertTask) PreExecute(ctx context.Context) error { } func (it *insertTask) Execute(ctx context.Context) error { - sp, ctx := trace.StartSpanFromContextWithOperationName(it.ctx, "Proxy-Insert-Execute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Insert-PreExecute") + defer sp.End() tr := timerecord.NewTimeRecorder(fmt.Sprintf("proxy execute insert %d", it.ID())) defer tr.Elapse("insert execute done") diff --git a/internal/proxy/task_scheduler.go b/internal/proxy/task_scheduler.go index 461504c404..18c58d9952 100644 --- a/internal/proxy/task_scheduler.go +++ b/internal/proxy/task_scheduler.go @@ -23,13 +23,12 @@ import ( "fmt" "sync" + "go.opentelemetry.io/otel" "go.uber.org/zap" "github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/mq/msgstream" - "github.com/milvus-io/milvus/internal/util/trace" - "github.com/opentracing/opentracing-go" - oplog "github.com/opentracing/opentracing-go/log" + "github.com/milvus-io/milvus/internal/util/typeutil" ) type taskQueue interface { @@ -426,22 +425,17 @@ func (sched *taskScheduler) getTaskByReqID(reqID UniqueID) task { } func (sched *taskScheduler) processTask(t task, q taskQueue) { - span, ctx := trace.StartSpanFromContext(t.TraceCtx(), - opentracing.Tags{ - "Type": t.Name(), - "ID": t.ID(), - }) - defer span.Finish() - log := log.Ctx(ctx) + ctx, span := otel.Tracer(typeutil.ProxyRole).Start(t.TraceCtx(), t.Name()) + defer span.End() - span.LogFields(oplog.Int64("scheduler process AddActiveTask", t.ID())) + span.AddEvent("scheduler process AddActiveTask") q.AddActiveTask(t) defer func() { - span.LogFields(oplog.Int64("scheduler process PopActiveTask", t.ID())) + span.AddEvent("scheduler process PopActiveTask") q.PopActiveTask(t.ID()) }() - span.LogFields(oplog.Int64("scheduler process PreExecute", t.ID())) + span.AddEvent("scheduler process PreExecute") err := t.PreExecute(ctx) @@ -449,25 +443,25 @@ func (sched *taskScheduler) processTask(t task, q taskQueue) { t.Notify(err) }() if err != nil { - trace.LogError(span, err) - log.Warn("Failed to pre-execute task: " + err.Error()) + span.RecordError(err) + log.Ctx(ctx).Error("Failed to pre-execute task: " + err.Error()) return } - span.LogFields(oplog.Int64("scheduler process Execute", t.ID())) + span.AddEvent("scheduler process Execute") err = t.Execute(ctx) if err != nil { - trace.LogError(span, err) - log.Warn("Failed to execute task: ", zap.Error(err)) + span.RecordError(err) + log.Ctx(ctx).Error("Failed to execute task: ", zap.Error(err)) return } - span.LogFields(oplog.Int64("scheduler process PostExecute", t.ID())) + span.AddEvent("scheduler process PostExecute") err = t.PostExecute(ctx) if err != nil { - trace.LogError(span, err) - log.Warn("Failed to post-execute task: ", zap.Error(err)) + span.RecordError(err) + log.Ctx(ctx).Error("Failed to post-execute task: ", zap.Error(err)) return } } diff --git a/internal/proxy/task_search.go b/internal/proxy/task_search.go index 5af7543f3f..e5184c5b2a 100644 --- a/internal/proxy/task_search.go +++ b/internal/proxy/task_search.go @@ -13,6 +13,7 @@ import ( "github.com/milvus-io/milvus/internal/querynode" "github.com/golang/protobuf/proto" + "go.opentelemetry.io/otel" "go.uber.org/zap" "github.com/milvus-io/milvus/internal/log" @@ -25,7 +26,6 @@ import ( "github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/timerecord" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/tsoutil" "github.com/milvus-io/milvus/internal/util/typeutil" @@ -259,8 +259,8 @@ func getNq(req *milvuspb.SearchRequest) (int64, error) { } func (t *searchTask) PreExecute(ctx context.Context) error { - sp, ctx := trace.StartSpanFromContextWithOperationName(t.TraceCtx(), "Proxy-Search-PreExecute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Search-PreExecute") + defer sp.End() if t.searchShardPolicy == nil { t.searchShardPolicy = mergeRoundRobinPolicy @@ -386,8 +386,8 @@ func (t *searchTask) PreExecute(ctx context.Context) error { } func (t *searchTask) Execute(ctx context.Context) error { - sp, ctx := trace.StartSpanFromContextWithOperationName(t.TraceCtx(), "Proxy-Search-Execute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Search-Execute") + defer sp.End() log := log.Ctx(ctx) tr := timerecord.NewTimeRecorder(fmt.Sprintf("proxy execute search %d", t.ID())) @@ -424,8 +424,8 @@ func (t *searchTask) Execute(ctx context.Context) error { } func (t *searchTask) PostExecute(ctx context.Context) error { - sp, ctx := trace.StartSpanFromContextWithOperationName(t.TraceCtx(), "Proxy-Search-PostExecute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Search-PostExecute") + defer sp.End() tr := timerecord.NewTimeRecorder("searchTask PostExecute") defer func() { diff --git a/internal/proxy/task_statistic.go b/internal/proxy/task_statistic.go index dc3c61d056..89b193b72b 100644 --- a/internal/proxy/task_statistic.go +++ b/internal/proxy/task_statistic.go @@ -8,6 +8,7 @@ import ( "github.com/milvus-io/milvus-proto/go-api/milvuspb" "github.com/milvus-io/milvus/internal/proto/datapb" + "go.opentelemetry.io/otel" "github.com/milvus-io/milvus-proto/go-api/commonpb" "github.com/milvus-io/milvus/internal/log" @@ -19,8 +20,8 @@ import ( "github.com/milvus-io/milvus/internal/util/grpcclient" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/timerecord" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/tsoutil" + "github.com/milvus-io/milvus/internal/util/typeutil" "go.uber.org/zap" ) @@ -102,8 +103,8 @@ func (g *getStatisticsTask) PreExecute(ctx context.Context) error { // g.TravelTimestamp = g.request.GetTravelTimestamp() g.GuaranteeTimestamp = g.request.GetGuaranteeTimestamp() - sp, ctx := trace.StartSpanFromContextWithOperationName(g.TraceCtx(), "Proxy-GetStatistics-PreExecute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetStatistics-PreExecute") + defer sp.End() if g.statisticShardPolicy == nil { g.statisticShardPolicy = mergeRoundRobinPolicy @@ -170,8 +171,8 @@ func (g *getStatisticsTask) PreExecute(ctx context.Context) error { } func (g *getStatisticsTask) Execute(ctx context.Context) error { - sp, ctx := trace.StartSpanFromContextWithOperationName(g.TraceCtx(), "Proxy-GetStatistics-Execute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetStatistics-Execute") + defer sp.End() if g.fromQueryNode { // if request get statistics of collection which is full loaded into query node // then we need not pass partition ids params @@ -195,8 +196,8 @@ func (g *getStatisticsTask) Execute(ctx context.Context) error { } func (g *getStatisticsTask) PostExecute(ctx context.Context) error { - sp, _ := trace.StartSpanFromContextWithOperationName(g.TraceCtx(), "Proxy-GetStatistic-PostExecute") - defer sp.Finish() + _, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-GetStatistic-PostExecute") + defer sp.End() tr := timerecord.NewTimeRecorder("getStatisticTask PostExecute") defer func() { tr.Elapse("done") diff --git a/internal/proxy/task_upsert.go b/internal/proxy/task_upsert.go index fb535fb89f..aedf7c216d 100644 --- a/internal/proxy/task_upsert.go +++ b/internal/proxy/task_upsert.go @@ -32,8 +32,8 @@ import ( "github.com/milvus-io/milvus/internal/util/commonpbutil" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/timerecord" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" + "go.opentelemetry.io/otel" "go.uber.org/zap" ) @@ -237,8 +237,8 @@ func (it *upsertTask) deletePreExecute(ctx context.Context) error { } func (it *upsertTask) PreExecute(ctx context.Context) error { - sp, ctx := trace.StartSpanFromContextWithOperationName(it.ctx, "Proxy-Upsert-PreExecute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Upsert-PreExecute") + defer sp.End() log := log.Ctx(ctx).With(zap.String("collectionName", it.req.CollectionName)) it.req.Base = commonpbutil.NewMsgBase( @@ -463,8 +463,8 @@ func (it *upsertTask) deleteExecute(ctx context.Context, msgPack *msgstream.MsgP } func (it *upsertTask) Execute(ctx context.Context) (err error) { - sp, ctx := trace.StartSpanFromContextWithOperationName(it.ctx, "Proxy-Upsert-Execute") - defer sp.Finish() + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(ctx, "Proxy-Upsert-Execute") + defer sp.End() log := log.Ctx(ctx).With(zap.String("collectionName", it.req.CollectionName)) tr := timerecord.NewTimeRecorder(fmt.Sprintf("proxy execute upsert %d", it.ID())) diff --git a/internal/querycoordv2/balance/rowcount_based_balancer.go b/internal/querycoordv2/balance/rowcount_based_balancer.go index 1e95f05796..c2ec67909d 100644 --- a/internal/querycoordv2/balance/rowcount_based_balancer.go +++ b/internal/querycoordv2/balance/rowcount_based_balancer.go @@ -141,6 +141,10 @@ func (b *RowCountBasedBalancer) balanceReplica(replica *meta.Replica) ([]Segment return b.handleStoppingNodes(replica, stoppingNodesSegments) } + if len(nodesSegments) == 0 { + return nil, nil + } + average := totalCnt / len(nodesSegments) neededRowCnt := 0 for nodeID := range nodesSegments { diff --git a/internal/querynode/flow_graph_delete_node.go b/internal/querynode/flow_graph_delete_node.go index d1ff862cdb..972472f9ea 100644 --- a/internal/querynode/flow_graph_delete_node.go +++ b/internal/querynode/flow_graph_delete_node.go @@ -22,14 +22,15 @@ import ( "reflect" "sync" - "github.com/opentracing/opentracing-go" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/storage" "github.com/milvus-io/milvus/internal/util/flowgraph" "github.com/milvus-io/milvus/internal/util/funcutil" - "github.com/milvus-io/milvus/internal/util/trace" + "github.com/milvus-io/milvus/internal/util/typeutil" ) type primaryKey = storage.PrimaryKey @@ -73,16 +74,22 @@ func (dNode *deleteNode) Operate(in []flowgraph.Msg) []flowgraph.Msg { return []Msg{} } - var spans []opentracing.Span + delData := &deleteData{ + deleteIDs: map[UniqueID][]primaryKey{}, + deleteTimestamps: map[UniqueID][]Timestamp{}, + deleteOffset: map[UniqueID]int64{}, + } + + var spans []trace.Span for _, msg := range dMsg.deleteMessages { - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx, sp := otel.Tracer(typeutil.QueryNodeRole).Start(msg.TraceCtx(), "Delete_Node") spans = append(spans, sp) msg.SetTraceCtx(ctx) } defer func() { for _, sp := range spans { - sp.Finish() + sp.End() } }() @@ -92,15 +99,9 @@ func (dNode *deleteNode) Operate(in []flowgraph.Msg) []flowgraph.Msg { } } - delData := &deleteData{ - deleteIDs: map[UniqueID][]primaryKey{}, - deleteTimestamps: map[UniqueID][]Timestamp{}, - deleteOffset: map[UniqueID]int64{}, - } - // 1. filter segment by bloom filter for i, delMsg := range dMsg.deleteMessages { - traceID, _, _ := trace.InfoFromSpan(spans[i]) + traceID := spans[i].SpanContext().TraceID().String() log.Debug("delete in historical replica", zap.String("vchannel", dNode.deltaVchannel), zap.Int64("collectionID", delMsg.CollectionID), diff --git a/internal/querynode/flow_graph_filter_delete_node.go b/internal/querynode/flow_graph_filter_delete_node.go index eda315b36d..8ce301ec6d 100644 --- a/internal/querynode/flow_graph_filter_delete_node.go +++ b/internal/querynode/flow_graph_filter_delete_node.go @@ -20,14 +20,15 @@ import ( "fmt" "reflect" - "github.com/opentracing/opentracing-go" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "github.com/milvus-io/milvus-proto/go-api/commonpb" "github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/mq/msgstream" "github.com/milvus-io/milvus/internal/util/flowgraph" - "github.com/milvus-io/milvus/internal/util/trace" + "github.com/milvus-io/milvus/internal/util/typeutil" ) // filterDeleteNode is one of the nodes in delta flow graph @@ -59,16 +60,16 @@ func (fddNode *filterDeleteNode) IsValidInMsg(in []Msg) bool { func (fddNode *filterDeleteNode) Operate(in []flowgraph.Msg) []flowgraph.Msg { msgStreamMsg := in[0].(*MsgStreamMsg) - var spans []opentracing.Span + var spans []trace.Span for _, msg := range msgStreamMsg.TsMessages() { - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx, sp := otel.Tracer(typeutil.QueryCoordRole).Start(msg.TraceCtx(), "FilterDelete_Node") spans = append(spans, sp) msg.SetTraceCtx(ctx) } defer func() { for _, sp := range spans { - sp.Finish() + sp.End() } }() @@ -122,9 +123,9 @@ func (fddNode *filterDeleteNode) filterInvalidDeleteMessage(msg *msgstream.Delet return nil, fmt.Errorf("CheckAligned failed, err = %s", err) } - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx, sp := otel.Tracer(typeutil.QueryCoordRole).Start(msg.TraceCtx(), "FilterDelete_Node") msg.SetTraceCtx(ctx) - defer sp.Finish() + defer sp.End() if msg.CollectionID != fddNode.collectionID { return nil, nil diff --git a/internal/querynode/flow_graph_filter_dm_node.go b/internal/querynode/flow_graph_filter_dm_node.go index 703a39d16c..90d9a5f5ae 100644 --- a/internal/querynode/flow_graph_filter_dm_node.go +++ b/internal/querynode/flow_graph_filter_dm_node.go @@ -22,7 +22,8 @@ import ( "strconv" "github.com/golang/protobuf/proto" - "github.com/opentracing/opentracing-go" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "github.com/milvus-io/milvus-proto/go-api/commonpb" @@ -32,7 +33,7 @@ import ( "github.com/milvus-io/milvus/internal/util/flowgraph" "github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/paramtable" - "github.com/milvus-io/milvus/internal/util/trace" + "github.com/milvus-io/milvus/internal/util/typeutil" ) // filterDmNode is one of the nodes in query node flow graph @@ -64,15 +65,15 @@ func (fdmNode *filterDmNode) IsValidInMsg(in []Msg) bool { func (fdmNode *filterDmNode) Operate(in []flowgraph.Msg) []flowgraph.Msg { msgStreamMsg := in[0].(*MsgStreamMsg) - var spans []opentracing.Span + var spans []trace.Span for _, msg := range msgStreamMsg.TsMessages() { - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx, sp := otel.Tracer(typeutil.QueryNodeRole).Start(msg.TraceCtx(), "Filter_Node") spans = append(spans, sp) msg.SetTraceCtx(ctx) } defer func() { for _, sp := range spans { - sp.Finish() + sp.End() } }() @@ -98,7 +99,7 @@ func (fdmNode *filterDmNode) Operate(in []flowgraph.Msg) []flowgraph.Msg { } for i, msg := range msgStreamMsg.TsMessages() { - traceID, _, _ := trace.InfoFromSpan(spans[i]) + traceID := spans[i].SpanContext().TraceID().String() log.Debug("Filter invalid message in QueryNode", zap.String("traceID", traceID)) switch msg.Type() { case commonpb.MsgType_Insert: @@ -152,9 +153,9 @@ func (fdmNode *filterDmNode) filterInvalidDeleteMessage(msg *msgstream.DeleteMsg return nil, nil } - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(msg.TraceCtx(), "Filter-Delete-Message") msg.SetTraceCtx(ctx) - defer sp.Finish() + defer sp.End() if msg.CollectionID != fdmNode.collectionID { // filter out msg which not belongs to the current collection @@ -185,9 +186,9 @@ func (fdmNode *filterDmNode) filterInvalidInsertMessage(msg *msgstream.InsertMsg return nil, nil } - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx, sp := otel.Tracer(typeutil.ProxyRole).Start(msg.TraceCtx(), "Filter-Insert-Message") msg.SetTraceCtx(ctx) - defer sp.Finish() + defer sp.End() // check if the collection from message is target collection if msg.CollectionID != fdmNode.collectionID { diff --git a/internal/querynode/flow_graph_insert_node.go b/internal/querynode/flow_graph_insert_node.go index e714f01ee3..fcfbdf2a89 100644 --- a/internal/querynode/flow_graph_insert_node.go +++ b/internal/querynode/flow_graph_insert_node.go @@ -27,7 +27,7 @@ import ( "strconv" "sync" - "github.com/opentracing/opentracing-go" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "github.com/milvus-io/milvus-proto/go-api/schemapb" @@ -38,7 +38,6 @@ import ( "github.com/milvus-io/milvus/internal/proto/segcorepb" "github.com/milvus-io/milvus/internal/storage" "github.com/milvus-io/milvus/internal/util/flowgraph" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" ) @@ -87,15 +86,16 @@ func (iNode *insertNode) IsValidInMsg(in []Msg) bool { func (iNode *insertNode) Operate(in []Msg) []Msg { iMsg := in[0].(*insertMsg) - var spans []opentracing.Span + var spans []trace.Span for _, msg := range iMsg.insertMessages { - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) + ctx := msg.TraceCtx() + sp := trace.SpanFromContext(msg.TraceCtx()) spans = append(spans, sp) msg.SetTraceCtx(ctx) } defer func() { for _, sp := range spans { - sp.Finish() + sp.End() } }() diff --git a/internal/querynode/impl.go b/internal/querynode/impl.go index ec2c198d93..45cc9ad1a7 100644 --- a/internal/querynode/impl.go +++ b/internal/querynode/impl.go @@ -27,6 +27,8 @@ import ( "github.com/golang/protobuf/proto" "github.com/samber/lo" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" "golang.org/x/sync/errgroup" @@ -41,7 +43,6 @@ import ( "github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/timerecord" - "github.com/milvus-io/milvus/internal/util/trace" "github.com/milvus-io/milvus/internal/util/typeutil" ) @@ -177,7 +178,7 @@ func (node *QueryNode) getStatisticsWithDmlChannel(ctx context.Context, req *que node.wg.Add(1) defer node.wg.Done() - traceID, _, _ := trace.InfoFromContext(ctx) + traceID := trace.SpanFromContext(ctx).SpanContext().TraceID() log.Ctx(ctx).Debug("received GetStatisticRequest", zap.Bool("fromShardLeader", req.GetFromShardLeader()), zap.String("vChannel", dmlChannel), @@ -742,6 +743,10 @@ func (node *QueryNode) Search(ctx context.Context, req *querypb.SearchRequest) ( }, nil } + ctx, sp := otel.Tracer(typeutil.QueryNodeRole).Start(ctx, "QueryNode-Search") + defer sp.End() + log := log.Ctx(ctx) + failRet := &internalpb.SearchResults{ Status: &commonpb.Status{ ErrorCode: commonpb.ErrorCode_Success, @@ -750,7 +755,7 @@ func (node *QueryNode) Search(ctx context.Context, req *querypb.SearchRequest) ( tr := timerecord.NewTimeRecorder("Search") if !req.GetFromShardLeader() { - log.Ctx(ctx).Debug("Received SearchRequest", + log.Debug("Received SearchRequest", zap.Strings("vChannels", req.GetDmlChannels()), zap.Int64s("segmentIDs", req.GetSegmentIDs()), zap.Uint64("guaranteeTimestamp", req.GetReq().GetGuaranteeTimestamp()), @@ -962,6 +967,9 @@ func (node *QueryNode) queryWithDmlChannel(ctx context.Context, req *querypb.Que }, } + ctx, sp := otel.Tracer(typeutil.QueryNodeRole).Start(ctx, "QueryNode-QueryWithDMLChannel") + defer sp.End() + defer func() { if failRet.Status.ErrorCode != commonpb.ErrorCode_Success { metrics.QueryNodeSQCount.WithLabelValues(fmt.Sprint(paramtable.GetNodeID()), metrics.SearchLabel, metrics.FailLabel).Inc() @@ -974,7 +982,6 @@ func (node *QueryNode) queryWithDmlChannel(ctx context.Context, req *querypb.Que node.wg.Add(1) defer node.wg.Done() - traceID, _, _ := trace.InfoFromContext(ctx) log.Ctx(ctx).Debug("queryWithDmlChannel receives query request", zap.Bool("fromShardLeader", req.GetFromShardLeader()), zap.String("vChannel", dmlChannel), @@ -1019,8 +1026,8 @@ func (node *QueryNode) queryWithDmlChannel(ctx context.Context, req *querypb.Que return failRet, nil } - tr.CtxElapse(ctx, fmt.Sprintf("do query done, traceID = %s, fromSharedLeader = %t, vChannel = %s, segmentIDs = %v", - traceID, req.GetFromShardLeader(), dmlChannel, req.GetSegmentIDs())) + tr.CtxElapse(ctx, fmt.Sprintf("do query done, fromSharedLeader = %t, vChannel = %s, segmentIDs = %v", + req.GetFromShardLeader(), dmlChannel, req.GetSegmentIDs())) failRet.Status.ErrorCode = commonpb.ErrorCode_Success metrics.QueryNodeSQLatencyInQueue.WithLabelValues(fmt.Sprint(paramtable.GetNodeID()), @@ -1079,8 +1086,8 @@ func (node *QueryNode) queryWithDmlChannel(ctx context.Context, req *querypb.Que return failRet, nil } - tr.CtxElapse(ctx, fmt.Sprintf("start reduce query result, traceID = %s, fromSharedLeader = %t, vChannel = %s, segmentIDs = %v", - traceID, req.GetFromShardLeader(), dmlChannel, req.GetSegmentIDs())) + tr.CtxElapse(ctx, fmt.Sprintf("start reduce query result, fromSharedLeader = %t, vChannel = %s, segmentIDs = %v", + req.GetFromShardLeader(), dmlChannel, req.GetSegmentIDs())) results = append(results, streamingResult) ret, err2 := mergeInternalRetrieveResultsAndFillIfEmpty(ctx, results, req.Req.GetLimit(), req.GetReq().GetOutputFieldsId(), qs.collection.Schema()) @@ -1089,8 +1096,8 @@ func (node *QueryNode) queryWithDmlChannel(ctx context.Context, req *querypb.Que return failRet, nil } - tr.CtxElapse(ctx, fmt.Sprintf("do query done, traceID = %s, fromSharedLeader = %t, vChannel = %s, segmentIDs = %v", - traceID, req.GetFromShardLeader(), dmlChannel, req.GetSegmentIDs())) + tr.CtxElapse(ctx, fmt.Sprintf("do query done, fromSharedLeader = %t, vChannel = %s, segmentIDs = %v", + req.GetFromShardLeader(), dmlChannel, req.GetSegmentIDs())) failRet.Status.ErrorCode = commonpb.ErrorCode_Success latency := tr.ElapseSpan() @@ -1119,6 +1126,9 @@ func (node *QueryNode) Query(ctx context.Context, req *querypb.QueryRequest) (*i }, nil } + ctx, sp := otel.Tracer(typeutil.QueryNodeRole).Start(ctx, "QueryNode-Query") + defer sp.End() + failRet := &internalpb.RetrieveResults{ Status: &commonpb.Status{ ErrorCode: commonpb.ErrorCode_Success, diff --git a/internal/querynode/mock_test.go b/internal/querynode/mock_test.go index 8864f1205e..690d7261d4 100644 --- a/internal/querynode/mock_test.go +++ b/internal/querynode/mock_test.go @@ -1196,6 +1196,7 @@ func genSimpleDeleteID(dataType schemapb.DataType, numRows int) *schemapb.IDs { func genMsgStreamBaseMsg() msgstream.BaseMsg { return msgstream.BaseMsg{ + Ctx: context.Background(), BeginTimestamp: 0, EndTimestamp: 0, HashValues: []uint32{0}, diff --git a/internal/querynode/search.go b/internal/querynode/search.go index 80c32b32fc..320094063b 100644 --- a/internal/querynode/search.go +++ b/internal/querynode/search.go @@ -22,6 +22,8 @@ import ( "fmt" "sync" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" "go.uber.org/zap" "github.com/milvus-io/milvus-proto/go-api/commonpb" @@ -29,6 +31,7 @@ import ( "github.com/milvus-io/milvus/internal/metrics" "github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/timerecord" + "github.com/milvus-io/milvus/internal/util/typeutil" ) // searchOnSegments performs search on listed segments @@ -55,6 +58,11 @@ func searchSegments(ctx context.Context, replica ReplicaInterface, segType segme wg.Add(1) go func(segID UniqueID, i int) { defer wg.Done() + ctx, span := otel.Tracer(typeutil.QueryNodeRole).Start(ctx, "Search-Segment") + span.SetAttributes(attribute.String("segmentType", searchLabel)) + span.SetAttributes(attribute.Int64("segmentID", segID)) + defer span.End() + seg, err := replica.getSegmentByID(segID, segType) if err != nil { if errors.Is(err, ErrSegmentNotFound) { diff --git a/internal/querynode/segment.go b/internal/querynode/segment.go index eeecd24d8a..393e459a52 100644 --- a/internal/querynode/segment.go +++ b/internal/querynode/segment.go @@ -341,7 +341,8 @@ func (s *Segment) search(ctx context.Context, searchReq *searchRequest) (*Search tr := timerecord.NewTimeRecorder("cgoSearch") status := C.Search(s.segmentPtr, searchReq.plan.cSearchPlan, searchReq.cPlaceholderGroup, C.uint64_t(searchReq.timestamp), &searchResult.cSearchResult) - metrics.QueryNodeSQSegmentLatencyInCore.WithLabelValues(fmt.Sprint(paramtable.GetNodeID()), metrics.SearchLabel).Observe(float64(tr.ElapseSpan().Milliseconds())) + metrics.QueryNodeSQSegmentLatencyInCore.WithLabelValues(fmt.Sprint(paramtable.GetNodeID()), metrics.SearchLabel). + Observe(float64(tr.CtxElapse(ctx, "finish cgoSearch").Milliseconds())) if err := HandleCStatus(&status, "Search failed"); err != nil { return nil, err } diff --git a/internal/util/trace/interceptor_suite.go b/internal/tracer/interceptor_suite.go similarity index 54% rename from internal/util/trace/interceptor_suite.go rename to internal/tracer/interceptor_suite.go index 8e7847760e..2d94bfc582 100644 --- a/internal/util/trace/interceptor_suite.go +++ b/internal/tracer/interceptor_suite.go @@ -14,26 +14,23 @@ // See the License for the specific language governing permissions and // limitations under the License. -package trace +package tracer import ( - "context" - - grpc_opentracing "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" - "github.com/opentracing/opentracing-go" - "google.golang.org/grpc" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" + "go.opentelemetry.io/otel" ) -// InterceptorSuite contains client option and server option -type InterceptorSuite struct { - ClientOpts []grpc.DialOption - ServerOpts []grpc.ServerOption -} - var ( - filterFunc = func(ctx context.Context, fullMethodName string) bool { - if fullMethodName == `/milvus.proto.rootcoord.RootCoord/UpdateChannelTimeTick` || - fullMethodName == `/milvus.proto.rootcoord.RootCoord/AllocTimestamp` { + filterFunc = func(info *otelgrpc.InterceptorInfo) bool { + var fullMethod string + if info.UnaryServerInfo != nil { + fullMethod = info.UnaryServerInfo.FullMethod + } else if info.StreamServerInfo != nil { + fullMethod = info.StreamServerInfo.FullMethod + } + if fullMethod == `/milvus.proto.rootcoord.RootCoord/UpdateChannelTimeTick` || + fullMethod == `/milvus.proto.rootcoord.RootCoord/AllocTimestamp` { return false } return true @@ -41,11 +38,10 @@ var ( ) // GetInterceptorOpts returns the Option of gRPC open-tracing -func GetInterceptorOpts() []grpc_opentracing.Option { - tracer := opentracing.GlobalTracer() - opts := []grpc_opentracing.Option{ - grpc_opentracing.WithTracer(tracer), - grpc_opentracing.WithFilterFunc(filterFunc), +func GetInterceptorOpts() []otelgrpc.Option { + opts := []otelgrpc.Option{ + otelgrpc.WithTracerProvider(otel.GetTracerProvider()), + otelgrpc.WithInterceptorFilter(filterFunc), } return opts } diff --git a/internal/util/trace/stack_trace.go b/internal/tracer/stack_trace.go similarity index 98% rename from internal/util/trace/stack_trace.go rename to internal/tracer/stack_trace.go index 17201b7671..ca7a39e384 100644 --- a/internal/util/trace/stack_trace.go +++ b/internal/tracer/stack_trace.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package trace +package tracer import ( "fmt" diff --git a/internal/util/trace/stack_trace_test.go b/internal/tracer/stack_trace_test.go similarity index 98% rename from internal/util/trace/stack_trace_test.go rename to internal/tracer/stack_trace_test.go index 64c0992273..ca5421b897 100644 --- a/internal/util/trace/stack_trace_test.go +++ b/internal/tracer/stack_trace_test.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package trace +package tracer import ( "fmt" diff --git a/internal/tracer/tracer.go b/internal/tracer/tracer.go new file mode 100644 index 0000000000..3ade25583d --- /dev/null +++ b/internal/tracer/tracer.go @@ -0,0 +1,67 @@ +// Licensed to the LF AI & Data foundation under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tracer + +import ( + "errors" + + "github.com/milvus-io/milvus/internal/log" + "github.com/milvus-io/milvus/internal/util/paramtable" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/exporters/jaeger" + stdout "go.opentelemetry.io/otel/exporters/stdout/stdouttrace" + "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" + "go.uber.org/zap" +) + +func Init() { + params := paramtable.Get() + + var exp sdk.SpanExporter + var err error + switch params.TraceCfg.Exporter.GetValue() { + case "jaeger": + exp, err = jaeger.New(jaeger.WithCollectorEndpoint( + jaeger.WithEndpoint(params.TraceCfg.JaegerURL.GetValue()))) + case "stdout": + exp, err = stdout.New() + default: + err = errors.New("Empty Trace") + } + if err != nil { + log.Warn("Init tracer faield", zap.Error(err)) + return + } + tp := sdk.NewTracerProvider( + sdk.WithBatcher(exp), + sdk.WithResource(resource.NewWithAttributes( + semconv.SchemaURL, + semconv.ServiceNameKey.String(paramtable.GetRole()), + attribute.Int64("NodeID", paramtable.GetNodeID()), + )), + sdk.WithSampler(sdk.ParentBased( + sdk.TraceIDRatioBased(params.TraceCfg.SampleFraction.GetAsFloat()), + )), + ) + otel.SetTracerProvider(tp) + otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{})) + log.Info("Init tracer finished", zap.String("Exporter", params.TraceCfg.Exporter.GetValue())) +} diff --git a/internal/util/flowgraph/input_node.go b/internal/util/flowgraph/input_node.go index 5e9e6b5b77..1ef11e6114 100644 --- a/internal/util/flowgraph/input_node.go +++ b/internal/util/flowgraph/input_node.go @@ -17,19 +17,19 @@ package flowgraph import ( + "context" "fmt" "sync" "github.com/milvus-io/milvus/internal/util/tsoutil" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/trace" "github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/metrics" "github.com/milvus-io/milvus/internal/mq/msgstream" - "github.com/milvus-io/milvus/internal/util/trace" - "github.com/opentracing/opentracing-go" - oplog "github.com/opentracing/opentracing-go/log" "go.uber.org/zap" ) @@ -124,10 +124,14 @@ func (inNode *InputNode) Operate(in []Msg) []Msg { Set(float64(sub)) } - var spans []opentracing.Span + var spans []trace.Span for _, msg := range msgPack.Msgs { - sp, ctx := trace.StartSpanFromContext(msg.TraceCtx()) - sp.LogFields(oplog.String("input_node name", inNode.Name())) + ctx := msg.TraceCtx() + if ctx == nil { + ctx = context.Background() + } + ctx, sp := otel.Tracer(inNode.role).Start(ctx, "Operate") + sp.AddEvent("input_node name" + inNode.Name()) spans = append(spans, sp) msg.SetTraceCtx(ctx) } @@ -141,10 +145,9 @@ func (inNode *InputNode) Operate(in []Msg) []Msg { } for _, span := range spans { - span.Finish() + span.End() } - // TODO batch operate msg return []Msg{msgStreamMsg} } diff --git a/internal/util/grpcclient/client.go b/internal/util/grpcclient/client.go index a6c705570d..bb8b06d5bf 100644 --- a/internal/util/grpcclient/client.go +++ b/internal/util/grpcclient/client.go @@ -23,19 +23,19 @@ import ( "sync" "time" + "go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc" "go.uber.org/zap" "google.golang.org/grpc" "google.golang.org/grpc/backoff" "google.golang.org/grpc/credentials" "google.golang.org/grpc/keepalive" - grpcopentracing "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" "github.com/milvus-io/milvus/internal/log" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/util" "github.com/milvus-io/milvus/internal/util/crypto" "github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/generic" - "github.com/milvus-io/milvus/internal/util/trace" ) // GrpcClient abstracts client of grpc @@ -150,7 +150,7 @@ func (c *ClientBase[T]) connect(ctx context.Context) error { return err } - opts := trace.GetInterceptorOpts() + opts := tracer.GetInterceptorOpts() dialContext, cancel := context.WithTimeout(ctx, c.DialTimeout) // refer to https://github.com/grpc/grpc-proto/blob/master/grpc/service_config/service_config.proto @@ -179,8 +179,8 @@ func (c *ClientBase[T]) connect(ctx context.Context) error { grpc.MaxCallRecvMsgSize(c.ClientMaxRecvSize), grpc.MaxCallSendMsgSize(c.ClientMaxSendSize), ), - grpc.WithUnaryInterceptor(grpcopentracing.UnaryClientInterceptor(opts...)), - grpc.WithStreamInterceptor(grpcopentracing.StreamClientInterceptor(opts...)), + grpc.WithUnaryInterceptor(otelgrpc.UnaryClientInterceptor(opts...)), + grpc.WithStreamInterceptor(otelgrpc.StreamClientInterceptor(opts...)), grpc.WithDefaultServiceConfig(retryPolicy), grpc.WithKeepaliveParams(keepalive.ClientParameters{ Time: c.KeepAliveTime, @@ -209,8 +209,8 @@ func (c *ClientBase[T]) connect(ctx context.Context) error { grpc.MaxCallRecvMsgSize(c.ClientMaxRecvSize), grpc.MaxCallSendMsgSize(c.ClientMaxSendSize), ), - grpc.WithUnaryInterceptor(grpcopentracing.UnaryClientInterceptor(opts...)), - grpc.WithStreamInterceptor(grpcopentracing.StreamClientInterceptor(opts...)), + grpc.WithUnaryInterceptor(otelgrpc.UnaryClientInterceptor(opts...)), + grpc.WithStreamInterceptor(otelgrpc.StreamClientInterceptor(opts...)), grpc.WithDefaultServiceConfig(retryPolicy), grpc.WithKeepaliveParams(keepalive.ClientParameters{ Time: c.KeepAliveTime, @@ -274,7 +274,7 @@ func (c *ClientBase[T]) Call(ctx context.Context, caller func(client T) (any, er ret, err := c.callOnce(ctx, caller) if err != nil { - traceErr := fmt.Errorf("err: %w\n, %s", err, trace.StackTrace()) + traceErr := fmt.Errorf("err: %w\n, %s", err, tracer.StackTrace()) log.Warn("ClientBase Call grpc first call get error", zap.String("role", c.GetRole()), zap.Error(traceErr)) return generic.Zero[T](), traceErr } @@ -292,7 +292,7 @@ func (c *ClientBase[T]) ReCall(ctx context.Context, caller func(client T) (any, return ret, nil } - traceErr := fmt.Errorf("err: %w\n, %s", err, trace.StackTrace()) + traceErr := fmt.Errorf("err: %w\n, %s", err, tracer.StackTrace()) log.Warn("ClientBase ReCall grpc first call get error ", zap.String("role", c.GetRole()), zap.Error(traceErr)) if !funcutil.CheckCtxValid(ctx) { @@ -301,7 +301,7 @@ func (c *ClientBase[T]) ReCall(ctx context.Context, caller func(client T) (any, ret, err = c.callOnce(ctx, caller) if err != nil { - traceErr = fmt.Errorf("err: %w\n, %s", err, trace.StackTrace()) + traceErr = fmt.Errorf("err: %w\n, %s", err, tracer.StackTrace()) log.Warn("ClientBase ReCall grpc second call get error", zap.String("role", c.GetRole()), zap.Error(traceErr)) return generic.Zero[T](), traceErr } diff --git a/internal/util/logutil/grpc_interceptor.go b/internal/util/logutil/grpc_interceptor.go index fd48fa9dad..ad1e55cbc1 100644 --- a/internal/util/logutil/grpc_interceptor.go +++ b/internal/util/logutil/grpc_interceptor.go @@ -5,7 +5,7 @@ import ( grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" "github.com/milvus-io/milvus/internal/log" - "github.com/milvus-io/milvus/internal/util/trace" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap/zapcore" "google.golang.org/grpc" "google.golang.org/grpc/metadata" @@ -33,7 +33,7 @@ func StreamTraceLoggerInterceptor(srv interface{}, ss grpc.ServerStream, info *g func withLevelAndTrace(ctx context.Context) context.Context { newctx := ctx - var traceID string + var traceID trace.TraceID if md, ok := metadata.FromIncomingContext(ctx); ok { levels := md.Get(logLevelRPCMetaKey) // get log level @@ -63,16 +63,15 @@ func withLevelAndTrace(ctx context.Context) context.Context { // client request id requestID := md.Get(clientRequestIDKey) if len(requestID) >= 1 { - traceID = requestID[0] // inject traceid in order to pass client request id - newctx = metadata.AppendToOutgoingContext(newctx, clientRequestIDKey, traceID) + newctx = metadata.AppendToOutgoingContext(newctx, clientRequestIDKey, requestID[0]) } } - if traceID == "" { - traceID, _, _ = trace.InfoFromContext(newctx) + if !traceID.IsValid() { + traceID = trace.SpanContextFromContext(newctx).TraceID() } - if traceID != "" { - newctx = log.WithTraceID(newctx, traceID) + if traceID.IsValid() { + newctx = log.WithTraceID(newctx, traceID.String()) } return newctx } diff --git a/internal/util/mock/grpcclient.go b/internal/util/mock/grpcclient.go index 11240023e2..aa90f63de3 100644 --- a/internal/util/mock/grpcclient.go +++ b/internal/util/mock/grpcclient.go @@ -25,10 +25,10 @@ import ( "google.golang.org/grpc" "github.com/milvus-io/milvus/internal/log" + "github.com/milvus-io/milvus/internal/tracer" "github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/generic" "github.com/milvus-io/milvus/internal/util/retry" - "github.com/milvus-io/milvus/internal/util/trace" ) type GRPCClientBase[T any] struct { @@ -117,7 +117,7 @@ func (c *GRPCClientBase[T]) Call(ctx context.Context, caller func(client T) (any ret, err := c.callOnce(ctx, caller) if err != nil { - traceErr := fmt.Errorf("err: %s\n, %s", err.Error(), trace.StackTrace()) + traceErr := fmt.Errorf("err: %s\n, %s", err.Error(), tracer.StackTrace()) log.Error("GRPCClientBase[T] Call grpc first call get error ", zap.Error(traceErr)) return nil, traceErr } @@ -131,7 +131,7 @@ func (c *GRPCClientBase[T]) ReCall(ctx context.Context, caller func(client T) (a return ret, nil } - traceErr := fmt.Errorf("err: %s\n, %s", err.Error(), trace.StackTrace()) + traceErr := fmt.Errorf("err: %s\n, %s", err.Error(), tracer.StackTrace()) log.Warn("GRPCClientBase[T] client grpc first call get error ", zap.Error(traceErr)) if !funcutil.CheckCtxValid(ctx) { @@ -140,7 +140,7 @@ func (c *GRPCClientBase[T]) ReCall(ctx context.Context, caller func(client T) (a ret, err = c.callOnce(ctx, caller) if err != nil { - traceErr = fmt.Errorf("err: %s\n, %s", err.Error(), trace.StackTrace()) + traceErr = fmt.Errorf("err: %s\n, %s", err.Error(), tracer.StackTrace()) log.Error("GRPCClientBase[T] client grpc second call get error ", zap.Error(traceErr)) return nil, traceErr } diff --git a/internal/util/paramtable/component_param.go b/internal/util/paramtable/component_param.go index d7fdb89ce8..2cacc86d88 100644 --- a/internal/util/paramtable/component_param.go +++ b/internal/util/paramtable/component_param.go @@ -54,6 +54,7 @@ type ComponentParam struct { CommonCfg commonConfig QuotaConfig quotaConfig AutoIndexConfig autoIndexConfig + TraceCfg traceConfig RootCoordCfg rootCoordConfig ProxyCfg proxyConfig @@ -98,6 +99,7 @@ func (p *ComponentParam) Init() { p.CommonCfg.init(&p.BaseTable) p.QuotaConfig.init(&p.BaseTable) p.AutoIndexConfig.init(&p.BaseTable) + p.TraceCfg.init(&p.BaseTable) p.RootCoordCfg.init(&p.BaseTable) p.ProxyCfg.init(&p.BaseTable) @@ -539,6 +541,33 @@ func (p *commonConfig) init(base *BaseTable) { } +type traceConfig struct { + Exporter ParamItem `refreshable:"false"` + SampleFraction ParamItem `refreshable:"false"` + JaegerURL ParamItem `refreshable:"false"` +} + +func (t *traceConfig) init(base *BaseTable) { + t.Exporter = ParamItem{ + Key: "trace.exporter", + Version: "2.3.0", + } + t.Exporter.Init(base.mgr) + + t.SampleFraction = ParamItem{ + Key: "trace.sampleFraction", + Version: "2.3.0", + DefaultValue: "1", + } + t.SampleFraction.Init(base.mgr) + + t.JaegerURL = ParamItem{ + Key: "trace.jaeger.url", + Version: "2.3.0", + } + t.JaegerURL.Init(base.mgr) +} + // ///////////////////////////////////////////////////////////////////////////// // --- rootcoord --- type rootCoordConfig struct { diff --git a/internal/util/timerecord/time_recorder.go b/internal/util/timerecord/time_recorder.go index 2a023d8548..1221497172 100644 --- a/internal/util/timerecord/time_recorder.go +++ b/internal/util/timerecord/time_recorder.go @@ -17,7 +17,7 @@ import ( "time" "github.com/milvus-io/milvus/internal/log" - "github.com/milvus-io/milvus/internal/util/trace" + "go.opentelemetry.io/otel/trace" "go.uber.org/zap" ) @@ -39,7 +39,7 @@ func NewTimeRecorder(header string) *TimeRecorder { // NewTimeRecorderWithCtx creates a new TimeRecorder with context's traceID, func NewTimeRecorderWithTrace(ctx context.Context, header string) *TimeRecorder { - traceID, _, _ := trace.InfoFromContext(ctx) + traceID := trace.SpanFromContext(ctx).SpanContext().TraceID() return &TimeRecorder{ header: fmt.Sprintf("%s(%s)", header, traceID), start: time.Now(), @@ -90,6 +90,8 @@ func (tr *TimeRecorder) CtxElapse(ctx context.Context, msg string) time.Duration } func (tr *TimeRecorder) printTimeRecord(ctx context.Context, msg string, span time.Duration) { + ts := trace.SpanFromContext(ctx) + ts.AddEvent(fmt.Sprintf("%s, cost %s", msg, span.String())) log.Ctx(ctx).WithOptions(zap.AddCallerSkip(2)). Debug(fmt.Sprintf("tr/%s", tr.header), zap.String("msg", msg), diff --git a/internal/util/trace/util.go b/internal/util/trace/util.go deleted file mode 100644 index 88d1d4cd57..0000000000 --- a/internal/util/trace/util.go +++ /dev/null @@ -1,220 +0,0 @@ -// Copyright (C) 2019-2020 Zilliz. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software distributed under the License -// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -// or implied. See the License for the specific language governing permissions and limitations under the License. - -package trace - -import ( - "context" - "errors" - "io" - "runtime" - "strings" - "sync" - - slog "github.com/milvus-io/milvus/internal/log" - "github.com/opentracing/opentracing-go" - "github.com/opentracing/opentracing-go/log" - "github.com/uber/jaeger-client-go" - "github.com/uber/jaeger-client-go/config" - "go.uber.org/zap" -) - -var tracingCloserMtx sync.Mutex -var tracingCloser io.Closer - -// InitTracing init global trace from env. If not specified, use default config. -func InitTracing(serviceName string) io.Closer { - tracingCloserMtx.Lock() - defer tracingCloserMtx.Unlock() - - if tracingCloser != nil { - return tracingCloser - } - - cfg := &config.Configuration{ - ServiceName: serviceName, - Sampler: &config.SamplerConfig{ - Type: "const", - Param: 0, - }, - } - if true { - cfg = initFromEnv(serviceName) - } - tracer, closer, err := cfg.NewTracer() - tracingCloser = closer - if err != nil { - log.Error(err) - tracingCloser = nil - } - opentracing.SetGlobalTracer(tracer) - - return tracingCloser -} - -func initFromEnv(serviceName string) *config.Configuration { - cfg, err := config.FromEnv() - if err != nil { - log.Error(err) - return nil - } - cfg.ServiceName = serviceName - return cfg -} - -// StartSpanFromContext starts an opentracing span. The default operation name is -// upper two call stacks of the function -func StartSpanFromContext(ctx context.Context, opts ...opentracing.StartSpanOption) (opentracing.Span, context.Context) { - return StartSpanFromContextWithSkip(ctx, 3, opts...) -} - -// StartSpanFromContextWithSkip starts an opentracing span with call skip. The operation -// name is upper @skip call stacks of the function -func StartSpanFromContextWithSkip(ctx context.Context, skip int, opts ...opentracing.StartSpanOption) (opentracing.Span, context.Context) { - if ctx == nil { - return NoopSpan(), nil - } - - var pcs [1]uintptr - n := runtime.Callers(skip, pcs[:]) - if n < 1 { - span, ctx := opentracing.StartSpanFromContext(ctx, "unknown", opts...) - span.LogFields(log.Error(errors.New("runtime.Callers failed"))) - return span, ctx - } - frames := runtime.CallersFrames(pcs[:]) - frame, _ := frames.Next() - name := frame.Function - if lastSlash := strings.LastIndexByte(name, '/'); lastSlash > 0 { - name = name[lastSlash+1:] - } - - if parent := opentracing.SpanFromContext(ctx); parent != nil { - opts = append(opts, opentracing.ChildOf(parent.Context())) - } - span := opentracing.StartSpan(name, opts...) - - file, line := frame.File, frame.Line - span.LogFields(log.String("filename", file), log.Int("line", line)) - - return span, opentracing.ContextWithSpan(ctx, span) -} - -// StartSpanFromContextWithOperationName starts an opentracing span with specific operation name. -// And will log print the current call line number and file name. -func StartSpanFromContextWithOperationName(ctx context.Context, operationName string, opts ...opentracing.StartSpanOption) (opentracing.Span, context.Context) { - return StartSpanFromContextWithOperationNameWithSkip(ctx, operationName, 3, opts...) -} - -// StartSpanFromContextWithOperationNameWithSkip starts an opentracing span with specific operation name. -// And will log print the current call line number and file name. -func StartSpanFromContextWithOperationNameWithSkip(ctx context.Context, operationName string, skip int, opts ...opentracing.StartSpanOption) (opentracing.Span, context.Context) { - if ctx == nil { - return NoopSpan(), nil - } - - var pcs [1]uintptr - n := runtime.Callers(skip, pcs[:]) - if n < 1 { - span, ctx := opentracing.StartSpanFromContext(ctx, operationName, opts...) - span.LogFields(log.Error(errors.New("runtime.Callers failed"))) - return span, ctx - } - frames := runtime.CallersFrames(pcs[:]) - frame, _ := frames.Next() - file, line := frame.File, frame.Line - - if parentSpan := opentracing.SpanFromContext(ctx); parentSpan != nil { - opts = append(opts, opentracing.ChildOf(parentSpan.Context())) - } - span := opentracing.StartSpan(operationName, opts...) - ctx = opentracing.ContextWithSpan(ctx, span) - - span.LogFields(log.String("filename", file), log.Int("line", line)) - - return span, ctx -} - -// LogError is a method to log error with span. -func LogError(span opentracing.Span, err error) { - if err == nil { - return - } - - // Get caller frame. - var pcs [1]uintptr - n := runtime.Callers(2, pcs[:]) - if n < 1 { - span.LogFields(log.Error(err)) - span.LogFields(log.Error(errors.New("runtime.Callers failed"))) - slog.Warn("trace log error failed", zap.Error(err)) - } - - frames := runtime.CallersFrames(pcs[:]) - frame, _ := frames.Next() - file, line := frame.File, frame.Line - span.LogFields(log.String("filename", file), log.Int("line", line), log.Error(err)) -} - -// InfoFromSpan is a method return span details. -func InfoFromSpan(span opentracing.Span) (traceID string, sampled, found bool) { - if span != nil { - if spanContext, ok := span.Context().(jaeger.SpanContext); ok { - traceID = spanContext.TraceID().String() - sampled = spanContext.IsSampled() - return traceID, sampled, true - } - } - return "", false, false -} - -// InfoFromContext is a method return details of span associated with context. -func InfoFromContext(ctx context.Context) (traceID string, sampled, found bool) { - if ctx != nil { - if span := opentracing.SpanFromContext(ctx); span != nil { - return InfoFromSpan(span) - } - } - return "", false, false -} - -// InjectContextToMsgProperties is a method inject span to pulsr message. -func InjectContextToMsgProperties(sc opentracing.SpanContext, properties map[string]string) { - tracer := opentracing.GlobalTracer() - tracer.Inject(sc, opentracing.TextMap, PropertiesReaderWriter{properties}) -} - -// PropertiesReaderWriter is for saving trace in pulsar msg properties. -// Implement Set and ForeachKey methods. -type PropertiesReaderWriter struct { - PpMap map[string]string -} - -// Set sets key, value to PpMap. -func (ppRW PropertiesReaderWriter) Set(key, val string) { - key = strings.ToLower(key) - ppRW.PpMap[key] = val -} - -// ForeachKey iterates each key value of PpMap. -func (ppRW PropertiesReaderWriter) ForeachKey(handler func(key, val string) error) error { - for k, val := range ppRW.PpMap { - if err := handler(k, val); err != nil { - return err - } - } - return nil -} - -// NoopSpan is a minimal span to reduce overhead. -func NoopSpan() opentracing.Span { - return opentracing.NoopTracer{}.StartSpan("Default-span") -} diff --git a/internal/util/trace/util_test.go b/internal/util/trace/util_test.go deleted file mode 100644 index a54411b4a3..0000000000 --- a/internal/util/trace/util_test.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright (C) 2019-2020 Zilliz. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software distributed under the License -// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -// or implied. See the License for the specific language governing permissions and limitations under the License. - -package trace - -import ( - "context" - "errors" - "fmt" - "os" - "testing" - - "github.com/opentracing/opentracing-go" - oplog "github.com/opentracing/opentracing-go/log" - "github.com/stretchr/testify/assert" -) - -type simpleStruct struct { - name string - value string -} - -func TestMain(m *testing.M) { - closer := InitTracing("test") - defer closer.Close() - os.Exit(m.Run()) -} - -func TestInit(t *testing.T) { - cfg := initFromEnv("test") - assert.NotNil(t, cfg) -} - -func TestTracing(t *testing.T) { - // context normally can be propagated through func params - ctx := context.Background() - - //start span - //default use function name for operation name - sp, ctx := StartSpanFromContext(ctx) - id, sampled, found := InfoFromContext(ctx) - fmt.Printf("traceID = %s, sampled = %t, found = %t", id, sampled, found) - sp.SetTag("tag1", "tag1") - // use self-defined operation name for span - // sp, ctx := StartSpanFromContextWithOperationName(ctx, "self-defined name") - defer sp.Finish() - - ss := &simpleStruct{ - name: "name", - value: "value", - } - sp.LogFields(oplog.String("key", "value"), oplog.Object("key", ss)) - - err := caller(ctx) - - if err != nil { - LogError(sp, err) //LogError do something error log in trace and returns origin error. - } - -} - -func caller(ctx context.Context) error { - for i := 0; i < 2; i++ { - // if span starts in a loop, defer is not allowed. - // manually call span.Finish() if error occurs or one loop ends - sp, _ := StartSpanFromContextWithOperationName(ctx, fmt.Sprintf("test:%d", i)) - sp.SetTag(fmt.Sprintf("tags:%d", i), fmt.Sprintf("tags:%d", i)) - - var err error - if i == 1 { - err = errors.New("test") - } - - if err != nil { - LogError(sp, err) - sp.Finish() - return nil - } - - sp.Finish() - } - return nil -} - -func TestInject(t *testing.T) { - // context normally can be propagated through func params - ctx := context.Background() - - //start span - //default use function name for operation name - sp, ctx := StartSpanFromContext(ctx) - id, sampled, found := InfoFromContext(ctx) - fmt.Printf("traceID = %s, sampled = %t, found = %t", id, sampled, found) - pp := PropertiesReaderWriter{PpMap: map[string]string{}} - InjectContextToMsgProperties(sp.Context(), pp.PpMap) - tracer := opentracing.GlobalTracer() - sc, _ := tracer.Extract(opentracing.TextMap, pp) - assert.NotNil(t, sc) - -} - -func TestTraceError(t *testing.T) { - // context normally can be propagated through func params - sp, ctx := StartSpanFromContext(nil) - assert.Nil(t, ctx) - assert.NotNil(t, sp) - - sp, ctx = StartSpanFromContextWithOperationName(nil, "test") - assert.Nil(t, ctx) - assert.NotNil(t, sp) - - //Will Cause span log error - StartSpanFromContextWithOperationNameWithSkip(context.Background(), "test", 10000) - - //Will Cause span log error - StartSpanFromContextWithSkip(context.Background(), 10000) - - id, sampled, found := InfoFromSpan(nil) - assert.Equal(t, id, "") - assert.Equal(t, sampled, false) - assert.Equal(t, found, false) - - id, sampled, found = InfoFromContext(nil) - assert.Equal(t, id, "") - assert.Equal(t, sampled, false) - assert.Equal(t, found, false) -} diff --git a/scripts/run_go_unittest.sh b/scripts/run_go_unittest.sh index dd4295cec6..79a7f68adb 100755 --- a/scripts/run_go_unittest.sh +++ b/scripts/run_go_unittest.sh @@ -111,7 +111,6 @@ go test -race -cover ${APPLE_SILICON_FLAG} "${MILVUS_DIR}/util/funcutil/..." -fa go test -race -cover ${APPLE_SILICON_FLAG} "${MILVUS_DIR}/util/paramtable/..." -failfast go test -race -cover ${APPLE_SILICON_FLAG} "${MILVUS_DIR}/util/retry/..." -failfast go test -race -cover ${APPLE_SILICON_FLAG} "${MILVUS_DIR}/util/sessionutil/..." -failfast -go test -race -cover ${APPLE_SILICON_FLAG} "${MILVUS_DIR}/util/trace/..." -failfast go test -race -cover ${APPLE_SILICON_FLAG} "${MILVUS_DIR}/util/typeutil/..." -failfast go test -race -cover ${APPLE_SILICON_FLAG} "${MILVUS_DIR}/util/importutil/..." -failfast }