From bbebed05f2868268bc22c8b02acf23ec6f218b11 Mon Sep 17 00:00:00 2001 From: esara Date: Sat, 9 Dec 2023 10:21:00 -0500 Subject: [PATCH] add server address and port attributes to redis otel trace instrumentation --- extra/rediscensus/go.mod | 9 ++++-- extra/rediscensus/go.sum | 6 ++-- extra/rediscmd/go.mod | 11 +++++-- extra/rediscmd/go.sum | 8 ++--- extra/redisotel/config.go | 13 ++------ extra/redisotel/go.mod | 12 ++++---- extra/redisotel/go.sum | 34 ++++++++++----------- extra/redisotel/redisotel_test.go | 10 +++---- extra/redisotel/tracing.go | 49 ++++++++++++++++++++++++------- extra/redisprometheus/go.mod | 2 +- extra/redisprometheus/go.sum | 4 +-- 11 files changed, 93 insertions(+), 65 deletions(-) diff --git a/extra/rediscensus/go.mod b/extra/rediscensus/go.mod index adf5a9f6e4..102fdcde9e 100644 --- a/extra/rediscensus/go.mod +++ b/extra/rediscensus/go.mod @@ -1,14 +1,19 @@ module github.com/redis/go-redis/extra/rediscensus/v9 -go 1.15 +go 1.19 replace github.com/redis/go-redis/v9 => ../.. replace github.com/redis/go-redis/extra/rediscmd/v9 => ../rediscmd require ( - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/redis/go-redis/extra/rediscmd/v9 v9.4.0 github.com/redis/go-redis/v9 v9.4.0 go.opencensus.io v0.24.0 ) + +require ( + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect +) diff --git a/extra/rediscensus/go.sum b/extra/rediscensus/go.sum index 697db5f85a..cf8f907216 100644 --- a/extra/rediscensus/go.sum +++ b/extra/rediscensus/go.sum @@ -1,9 +1,7 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao= -github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w= -github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= -github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= diff --git a/extra/rediscmd/go.mod b/extra/rediscmd/go.mod index f27efd0be1..128f1c1a63 100644 --- a/extra/rediscmd/go.mod +++ b/extra/rediscmd/go.mod @@ -1,11 +1,16 @@ module github.com/redis/go-redis/extra/rediscmd/v9 -go 1.15 +go 1.19 replace github.com/redis/go-redis/v9 => ../.. require ( - github.com/bsm/ginkgo/v2 v2.7.0 - github.com/bsm/gomega v1.26.0 + github.com/bsm/ginkgo/v2 v2.12.0 + github.com/bsm/gomega v1.27.10 github.com/redis/go-redis/v9 v9.4.0 ) + +require ( + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect +) diff --git a/extra/rediscmd/go.sum b/extra/rediscmd/go.sum index 33f9e16b42..21b4f64ee2 100644 --- a/extra/rediscmd/go.sum +++ b/extra/rediscmd/go.sum @@ -1,7 +1,7 @@ -github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao= -github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w= -github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= -github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= +github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= diff --git a/extra/redisotel/config.go b/extra/redisotel/config.go index c24f896729..00f09d7626 100644 --- a/extra/redisotel/config.go +++ b/extra/redisotel/config.go @@ -4,7 +4,7 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/metric" - semconv "go.opentelemetry.io/otel/semconv/v1.12.0" + semconv "go.opentelemetry.io/otel/semconv/v1.24.0" "go.opentelemetry.io/otel/trace" ) @@ -51,8 +51,7 @@ func (fn option) metrics() {} func newConfig(opts ...baseOption) *config { conf := &config{ - dbSystem: "redis", - attrs: []attribute.KeyValue{}, + attrs: []attribute.KeyValue{}, tp: otel.GetTracerProvider(), mp: otel.GetMeterProvider(), @@ -63,17 +62,11 @@ func newConfig(opts ...baseOption) *config { opt.apply(conf) } - conf.attrs = append(conf.attrs, semconv.DBSystemKey.String(conf.dbSystem)) + conf.attrs = append(conf.attrs, semconv.DBSystemRedis) return conf } -func WithDBSystem(dbSystem string) Option { - return option(func(conf *config) { - conf.dbSystem = dbSystem - }) -} - // WithAttributes specifies additional attributes to be added to the span. func WithAttributes(attrs ...attribute.KeyValue) Option { return option(func(conf *config) { diff --git a/extra/redisotel/go.mod b/extra/redisotel/go.mod index 987953b516..1836908246 100644 --- a/extra/redisotel/go.mod +++ b/extra/redisotel/go.mod @@ -9,16 +9,16 @@ replace github.com/redis/go-redis/extra/rediscmd/v9 => ../rediscmd require ( github.com/redis/go-redis/extra/rediscmd/v9 v9.4.0 github.com/redis/go-redis/v9 v9.4.0 - go.opentelemetry.io/otel v1.16.0 - go.opentelemetry.io/otel/metric v1.16.0 - go.opentelemetry.io/otel/sdk v1.16.0 - go.opentelemetry.io/otel/trace v1.16.0 + go.opentelemetry.io/otel v1.22.0 + go.opentelemetry.io/otel/metric v1.22.0 + go.opentelemetry.io/otel/sdk v1.22.0 + go.opentelemetry.io/otel/trace v1.22.0 ) require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect - github.com/go-logr/logr v1.2.4 // indirect + github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect - golang.org/x/sys v0.8.0 // indirect + golang.org/x/sys v0.16.0 // indirect ) diff --git a/extra/redisotel/go.sum b/extra/redisotel/go.sum index 22049451c8..9eb9bcd4ef 100644 --- a/extra/redisotel/go.sum +++ b/extra/redisotel/go.sum @@ -1,28 +1,26 @@ -github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao= -github.com/bsm/ginkgo/v2 v2.7.0/go.mod h1:AiKlXPm7ItEHNc/2+OkrNG4E0ITzojb9/xWzvQ9XZ9w= -github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= -github.com/bsm/gomega v1.26.0/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= +github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s= -go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4= -go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo= -go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4= -go.opentelemetry.io/otel/sdk v1.16.0 h1:Z1Ok1YsijYL0CSJpHt4cS3wDDh7p572grzNrBMiMWgE= -go.opentelemetry.io/otel/sdk v1.16.0/go.mod h1:tMsIuKXuuIWPBAOrH+eHtvhTL+SntFtXF9QD68aP6p4= -go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= -go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= +go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= +go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= +go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= +go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= +go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= +go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= +go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/extra/redisotel/redisotel_test.go b/extra/redisotel/redisotel_test.go index fd75361e8f..b1ad5ca43a 100644 --- a/extra/redisotel/redisotel_test.go +++ b/extra/redisotel/redisotel_test.go @@ -13,21 +13,21 @@ import ( "github.com/redis/go-redis/v9" ) -type providerFunc func(name string, opts ...trace.TracerOption) trace.Tracer +type providerFunc func(name string, opts ...trace.TracerOption) trace.TracerProvider -func (fn providerFunc) Tracer(name string, opts ...trace.TracerOption) trace.Tracer { +func (fn providerFunc) TracerProvider(name string, opts ...trace.TracerOption) trace.TracerProvider { return fn(name, opts...) } func TestNewWithTracerProvider(t *testing.T) { invoked := false - tp := providerFunc(func(name string, opts ...trace.TracerOption) trace.Tracer { + tp := providerFunc(func(name string, opts ...trace.TracerOption) trace.TracerProvider { invoked = true - return otel.GetTracerProvider().Tracer(name, opts...) + return otel.GetTracerProvider() }) - _ = newTracingHook("", WithTracerProvider(tp)) + _ = newTracingHook("redis-hook", WithTracerProvider(tp.TracerProvider("redis-test"))) if !invoked { t.Fatalf("did not call custom TraceProvider") diff --git a/extra/redisotel/tracing.go b/extra/redisotel/tracing.go index 0bbf692adf..2c6c1b0b5a 100644 --- a/extra/redisotel/tracing.go +++ b/extra/redisotel/tracing.go @@ -5,11 +5,12 @@ import ( "fmt" "net" "runtime" + "strconv" "strings" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/codes" - semconv "go.opentelemetry.io/otel/semconv/v1.10.0" + semconv "go.opentelemetry.io/otel/semconv/v1.24.0" "go.opentelemetry.io/otel/trace" "github.com/redis/go-redis/extra/rediscmd/v9" @@ -25,6 +26,7 @@ func InstrumentTracing(rdb redis.UniversalClient, opts ...TracingOption) error { case *redis.Client: opt := rdb.Options() connString := formatDBConnString(opt.Network, opt.Addr) + opts = addServerAttributes(opts, opt.Addr) rdb.AddHook(newTracingHook(connString, opts...)) return nil case *redis.ClusterClient: @@ -32,6 +34,7 @@ func InstrumentTracing(rdb redis.UniversalClient, opts ...TracingOption) error { rdb.OnNewNode(func(rdb *redis.Client) { opt := rdb.Options() + opts = addServerAttributes(opts, opt.Addr) connString := formatDBConnString(opt.Network, opt.Addr) rdb.AddHook(newTracingHook(connString, opts...)) }) @@ -41,6 +44,7 @@ func InstrumentTracing(rdb redis.UniversalClient, opts ...TracingOption) error { rdb.OnNewNode(func(rdb *redis.Client) { opt := rdb.Options() + opts = addServerAttributes(opts, opt.Addr) connString := formatDBConnString(opt.Network, opt.Addr) rdb.AddHook(newTracingHook(connString, opts...)) }) @@ -72,7 +76,7 @@ func newTracingHook(connString string, opts ...TracingOption) *tracingHook { ) } if connString != "" { - conf.attrs = append(conf.attrs, semconv.DBConnectionStringKey.String(connString)) + conf.attrs = append(conf.attrs, semconv.DBConnectionString(connString)) } return &tracingHook{ @@ -113,14 +117,14 @@ func (th *tracingHook) ProcessHook(hook redis.ProcessHook) redis.ProcessHook { attrs := make([]attribute.KeyValue, 0, 8) attrs = append(attrs, - semconv.CodeFunctionKey.String(fn), - semconv.CodeFilepathKey.String(file), - semconv.CodeLineNumberKey.Int(line), + semconv.CodeFunction(fn), + semconv.CodeFilepath(file), + semconv.CodeLineNumber(line), ) if th.conf.dbStmtEnabled { cmdString := rediscmd.CmdString(cmd) - attrs = append(attrs, semconv.DBStatementKey.String(cmdString)) + attrs = append(attrs, semconv.DBStatement(cmdString)) } opts := th.spanOpts @@ -149,15 +153,15 @@ func (th *tracingHook) ProcessPipelineHook( attrs := make([]attribute.KeyValue, 0, 8) attrs = append(attrs, - semconv.CodeFunctionKey.String(fn), - semconv.CodeFilepathKey.String(file), - semconv.CodeLineNumberKey.Int(line), + semconv.CodeFunction(fn), + semconv.CodeFilepath(file), + semconv.CodeLineNumber(line), attribute.Int("db.redis.num_cmd", len(cmds)), ) summary, cmdsString := rediscmd.CmdsString(cmds) if th.conf.dbStmtEnabled { - attrs = append(attrs, semconv.DBStatementKey.String(cmdsString)) + attrs = append(attrs, semconv.DBStatement(cmdsString)) } opts := th.spanOpts @@ -213,3 +217,28 @@ func funcFileLine(pkg string) (string, string, int) { return fn, file, line } + +// Database span attributes semantic conventions recommended server address and port +// https://opentelemetry.io/docs/specs/semconv/database/database-spans/#connection-level-attributes +func addServerAttributes(opts []TracingOption, addr string) []TracingOption { + host, portString, err := net.SplitHostPort(addr) + if err != nil { + return opts + } + + opts = append(opts, WithAttributes( + semconv.ServerAddress(host), + )) + + // Parse the port string to an integer + port, err := strconv.Atoi(portString) + if err != nil { + return opts + } + + opts = append(opts, WithAttributes( + semconv.ServerPort(port), + )) + + return opts +} diff --git a/extra/redisprometheus/go.mod b/extra/redisprometheus/go.mod index 141c94e1c2..e5fe665608 100644 --- a/extra/redisprometheus/go.mod +++ b/extra/redisprometheus/go.mod @@ -1,6 +1,6 @@ module github.com/redis/go-redis/extra/redisprometheus/v9 -go 1.17 +go 1.19 replace github.com/redis/go-redis/v9 => ../.. diff --git a/extra/redisprometheus/go.sum b/extra/redisprometheus/go.sum index 7cabce2982..445082a681 100644 --- a/extra/redisprometheus/go.sum +++ b/extra/redisprometheus/go.sum @@ -1,7 +1,7 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao= -github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= +github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs= +github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=