diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f68879b5b..8a50a13418 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ NOTE: As semantic versioning states all 0.y.z releases can contain breaking chan We use *breaking :warning:* to mark changes that are not backward compatible (relates only to v0.y.z releases.) ## Unreleased +- [#5607](https://github.com/thanos-io/thanos/pull/5607) Query: Support custom lookback delta from request in query api. - [#5453](https://github.com/thanos-io/thanos/pull/5453) Compact: Skip erroneous empty non `*AggrChunk` chunks during 1h downsampling of 5m resolution blocks. ### Fixed diff --git a/cmd/thanos/query.go b/cmd/thanos/query.go index ad0bad9e87..1820381064 100644 --- a/cmd/thanos/query.go +++ b/cmd/thanos/query.go @@ -8,8 +8,6 @@ import ( "fmt" "math" "net/http" - "path/filepath" - "strconv" "strings" "time" @@ -586,8 +584,14 @@ func runQuery( grpcProbe, prober.NewInstrumentation(comp, logger, extprom.WrapRegistererWithPrefix("thanos_", reg)), ) - engineCreator := engineFactory(promql.NewEngine, engineOpts, dynamicLookbackDelta, activeQueryDir, - maxConcurrentQueries, logger) + + // An active query tracker will be added only if the user specifies a non-default path. + // Otherwise, the nil active query tracker from existing engine options will be used. + if activeQueryDir != "" { + engineOpts.ActiveQueryTracker = promql.NewActiveQueryTracker(activeQueryDir, maxConcurrentQueries, logger) + } + engine := promql.NewEngine(engineOpts) + lookbackDeltaCreator := LookbackDeltaFactory(engineOpts, dynamicLookbackDelta) // Start query API + UI HTTP server. { @@ -617,7 +621,8 @@ func runQuery( api := apiv1.NewQueryAPI( logger, endpoints.GetEndpointStatus, - engineCreator, + engine, + lookbackDeltaCreator, queryableCreator, // NOTE: Will share the same replica label as the query for now. rules.NewGRPCClientWithDedup(rulesProxy, queryReplicaLabels), @@ -692,7 +697,7 @@ func runQuery( info.WithQueryAPIInfoFunc(), ) - grpcAPI := apiv1.NewGRPCAPI(time.Now, queryReplicaLabels, queryableCreator, engineCreator, instantDefaultMaxSourceResolution) + grpcAPI := apiv1.NewGRPCAPI(time.Now, queryReplicaLabels, queryableCreator, engine, lookbackDeltaCreator, instantDefaultMaxSourceResolution) s := grpcserver.New(logger, reg, tracer, grpcLogOpts, tagOpts, comp, grpcProbe, grpcserver.WithServer(apiv1.RegisterQueryServer(grpcAPI)), grpcserver.WithServer(store.RegisterStoreServer(proxy)), @@ -737,31 +742,21 @@ func removeDuplicateEndpointSpecs(logger log.Logger, duplicatedStores prometheus return deduplicated } -// engineFactory creates from 1 to 3 promql.Engines depending on +// LookbackDeltaFactory creates from 1 to 3 lookback deltas depending on // dynamicLookbackDelta and eo.LookbackDelta and returns a function -// that returns appropriate engine for given maxSourceResolutionMillis. -// -// TODO: it seems like a good idea to tweak Prometheus itself -// instead of creating several Engines here. -func engineFactory( - newEngine func(promql.EngineOpts) *promql.Engine, +// that returns appropriate lookback delta for given maxSourceResolutionMillis. +func LookbackDeltaFactory( eo promql.EngineOpts, dynamicLookbackDelta bool, - activeQueryDir string, - maxConcurrentQueries int, - logger log.Logger, -) func(int64) *promql.Engine { +) func(int64) time.Duration { resolutions := []int64{downsample.ResLevel0} if dynamicLookbackDelta { resolutions = []int64{downsample.ResLevel0, downsample.ResLevel1, downsample.ResLevel2} } var ( - engines = make([]*promql.Engine, len(resolutions)) - ld = eo.LookbackDelta.Milliseconds() + lds = make([]time.Duration, len(resolutions)) + ld = eo.LookbackDelta.Milliseconds() ) - wrapReg := func(engineNum int) prometheus.Registerer { - return extprom.WrapRegistererWith(map[string]string{"engine": strconv.Itoa(engineNum)}, eo.Reg) - } lookbackDelta := eo.LookbackDelta for i, r := range resolutions { @@ -769,50 +764,18 @@ func engineFactory( lookbackDelta = time.Duration(r) * time.Millisecond } - newEngineOpts := promql.EngineOpts{ - Logger: eo.Logger, - Reg: wrapReg(i), - MaxSamples: eo.MaxSamples, - Timeout: eo.Timeout, - LookbackDelta: lookbackDelta, - NoStepSubqueryIntervalFn: eo.NoStepSubqueryIntervalFn, - EnableAtModifier: eo.EnableAtModifier, - EnableNegativeOffset: eo.EnableNegativeOffset, - } - // An active query tracker will be added only if the user specifies a non-default path. - // Otherwise, the nil active query tracker from existing engine options will be used. - if activeQueryDir != "" { - resActiveQueryDir := filepath.Join(activeQueryDir, getActiveQueryDirBasedOnResolution(r)) - newEngineOpts.ActiveQueryTracker = promql.NewActiveQueryTracker(resActiveQueryDir, maxConcurrentQueries, logger) - } else { - newEngineOpts.ActiveQueryTracker = eo.ActiveQueryTracker - } - - engines[i] = newEngine(newEngineOpts) + lds[i] = lookbackDelta } - return func(maxSourceResolutionMillis int64) *promql.Engine { + return func(maxSourceResolutionMillis int64) time.Duration { for i := len(resolutions) - 1; i >= 1; i-- { left := resolutions[i-1] if resolutions[i-1] < ld { left = ld } if left < maxSourceResolutionMillis { - return engines[i] + return lds[i] } } - return engines[0] - } -} - -func getActiveQueryDirBasedOnResolution(resolution int64) string { - if resolution == downsample.ResLevel0 { - return "raw" - } - if resolution == downsample.ResLevel1 { - return "5m" - } - if resolution == downsample.ResLevel2 { - return "1h" + return lds[0] } - return "" } diff --git a/cmd/thanos/query_test.go b/cmd/thanos/query_test.go index 6402bc98a3..e4643c267c 100644 --- a/cmd/thanos/query_test.go +++ b/cmd/thanos/query_test.go @@ -7,31 +7,15 @@ import ( "testing" "time" - "github.com/go-kit/log" "github.com/prometheus/prometheus/promql" "github.com/thanos-io/thanos/pkg/testutil" ) -func TestEngineFactory(t *testing.T) { - var ( - engineRaw = promql.NewEngine(promql.EngineOpts{}) - engine5m = promql.NewEngine(promql.EngineOpts{LookbackDelta: 5 * time.Minute}) - engine1h = promql.NewEngine(promql.EngineOpts{LookbackDelta: 1 * time.Hour}) - ) - mockNewEngine := func(opts promql.EngineOpts) *promql.Engine { - switch opts.LookbackDelta { - case 1 * time.Hour: - return engine1h - case 5 * time.Minute: - return engine5m - default: - return engineRaw - } - } +func TestLookbackDeltaFactory(t *testing.T) { type testCase struct { stepMillis int64 - expect *promql.Engine + expect time.Duration } var ( minute = time.Minute.Milliseconds() @@ -46,9 +30,9 @@ func TestEngineFactory(t *testing.T) { lookbackDelta: 0, dynamicLookbackDelta: false, tcs: []testCase{ - {0, engineRaw}, - {5 * minute, engineRaw}, - {1 * hour, engineRaw}, + {0, time.Duration(0)}, + {5 * minute, time.Duration(0)}, + {1 * hour, time.Duration(0)}, }, }, { @@ -56,57 +40,56 @@ func TestEngineFactory(t *testing.T) { lookbackDelta: 3 * time.Minute, dynamicLookbackDelta: true, tcs: []testCase{ - {2 * minute, engineRaw}, - {3 * minute, engineRaw}, - {4 * minute, engine5m}, - {5 * minute, engine5m}, - {6 * minute, engine1h}, - {1 * hour, engine1h}, - {2 * hour, engine1h}, + {2 * minute, time.Duration(3) * time.Minute}, + {3 * minute, time.Duration(3) * time.Minute}, + {4 * minute, time.Duration(5) * time.Minute}, + {5 * minute, time.Duration(5) * time.Minute}, + {6 * minute, time.Duration(1) * time.Hour}, + {1 * hour, time.Duration(1) * time.Hour}, + {2 * hour, time.Duration(1) * time.Hour}, }, }, { lookbackDelta: 5 * time.Minute, dynamicLookbackDelta: true, tcs: []testCase{ - {0, engine5m}, - {5 * minute, engine5m}, - {6 * minute, engine1h}, - {59 * minute, engine1h}, - {1 * hour, engine1h}, - {2 * hour, engine1h}, + {0, time.Duration(5) * time.Minute}, + {5 * minute, time.Duration(5) * time.Minute}, + {6 * minute, time.Duration(1) * time.Hour}, + {59 * minute, time.Duration(1) * time.Hour}, + {1 * hour, time.Duration(1) * time.Hour}, + {2 * hour, time.Duration(1) * time.Hour}, }, }, { lookbackDelta: 30 * time.Minute, dynamicLookbackDelta: true, tcs: []testCase{ - {0, engineRaw}, - {5 * minute, engineRaw}, - {30 * minute, engineRaw}, - {31 * minute, engine1h}, - {59 * minute, engine1h}, - {1 * hour, engine1h}, - {2 * hour, engine1h}, + {0, time.Duration(30) * time.Minute}, + {5 * minute, time.Duration(30) * time.Minute}, + {30 * minute, time.Duration(30) * time.Minute}, + {31 * minute, time.Duration(1) * time.Hour}, + {59 * minute, time.Duration(1) * time.Hour}, + {1 * hour, time.Duration(1) * time.Hour}, + {2 * hour, time.Duration(1) * time.Hour}, }, }, { lookbackDelta: 1 * time.Hour, dynamicLookbackDelta: true, tcs: []testCase{ - {0, engine1h}, - {5 * minute, engine1h}, - {1 * hour, engine1h}, - {2 * hour, engine1h}, + {0, time.Duration(1) * time.Hour}, + {5 * minute, time.Duration(1) * time.Hour}, + {1 * hour, time.Duration(1) * time.Hour}, + {2 * hour, time.Duration(1) * time.Hour}, }, }, } ) for _, td := range tData { - e := engineFactory(mockNewEngine, promql.EngineOpts{LookbackDelta: td.lookbackDelta}, td.dynamicLookbackDelta, - "", 1, log.NewNopLogger()) + lookbackCreate := LookbackDeltaFactory(promql.EngineOpts{LookbackDelta: td.lookbackDelta}, td.dynamicLookbackDelta) for _, tc := range td.tcs { - got := e(tc.stepMillis) + got := lookbackCreate(tc.stepMillis) testutil.Equals(t, tc.expect, got) } } diff --git a/go.mod b/go.mod index 1062dd4097..749f0fac95 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,7 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware/providers/kit/v2 v2.0.0-20201002093600-73cf2ae9d891 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.2.0.20201207153454-9f6bf00c00a7 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 - github.com/hashicorp/consul/api v1.13.1 + github.com/hashicorp/consul/api v1.14.0 github.com/hashicorp/go-cleanhttp v0.5.2 github.com/hashicorp/go-sockaddr v1.0.2 github.com/hashicorp/golang-lru v0.5.4 @@ -62,12 +62,12 @@ require ( github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 github.com/prometheus/alertmanager v0.24.0 - github.com/prometheus/client_golang v1.12.2 + github.com/prometheus/client_golang v1.13.0 github.com/prometheus/client_model v0.2.0 github.com/prometheus/common v0.37.0 github.com/prometheus/exporter-toolkit v0.7.1 // Prometheus maps version 2.x.y to tags v0.x.y. - github.com/prometheus/prometheus v0.37.0 + github.com/prometheus/prometheus v0.38.0 github.com/sony/gobreaker v0.4.1 github.com/stretchr/testify v1.8.0 github.com/thanos-io/objstore v0.0.0-20220715165016-ce338803bc1e @@ -81,19 +81,19 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.4 go.etcd.io/etcd/client/v3 v3.5.4 go.opentelemetry.io/contrib/propagators/ot v1.4.0 - go.opentelemetry.io/otel v1.7.0 - go.opentelemetry.io/otel/bridge/opentracing v1.5.0 - go.opentelemetry.io/otel/sdk v1.7.0 - go.opentelemetry.io/otel/trace v1.7.0 + go.opentelemetry.io/otel v1.9.0 + go.opentelemetry.io/otel/bridge/opentracing v1.8.0 + go.opentelemetry.io/otel/sdk v1.9.0 + go.opentelemetry.io/otel/trace v1.9.0 go.uber.org/atomic v1.9.0 go.uber.org/automaxprocs v1.5.1 go.uber.org/goleak v1.1.12 - golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d - golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e - golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa + golang.org/x/net v0.0.0-20220809184613-07c6da5e1ced + golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 golang.org/x/text v0.3.7 - golang.org/x/time v0.0.0-20220609170525-579cf78fd858 - google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 + golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 + google.golang.org/genproto v0.0.0-20220808204814-fd01256a5276 google.golang.org/grpc v1.48.0 google.golang.org/grpc/examples v0.0.0-20211119005141-f45e61797429 gopkg.in/alecthomas/kingpin.v2 v2.2.6 @@ -110,8 +110,8 @@ require ( github.com/Azure/azure-pipeline-go v0.2.3 // indirect github.com/Azure/azure-storage-blob-go v0.14.0 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.27 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.20 // indirect + github.com/Azure/go-autorest/autorest v0.11.28 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.21 // indirect github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 // indirect github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect @@ -125,7 +125,7 @@ require ( github.com/aliyun/aliyun-oss-go-sdk v2.2.2+incompatible // indirect github.com/armon/go-radix v1.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d // indirect - github.com/aws/aws-sdk-go v1.44.45 // indirect + github.com/aws/aws-sdk-go v1.44.72 // indirect github.com/aws/aws-sdk-go-v2 v1.16.0 // indirect github.com/aws/aws-sdk-go-v2/config v1.15.1 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.11.0 // indirect @@ -172,7 +172,7 @@ require ( github.com/google/btree v1.0.1 // indirect github.com/google/go-cmp v0.5.8 // indirect github.com/google/go-querystring v1.1.0 // indirect - github.com/google/pprof v0.0.0-20220608213341-c488b8fa1db3 // indirect + github.com/google/pprof v0.0.0-20220729232143-a41b82acbcb1 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.1.0 // indirect github.com/googleapis/gax-go/v2 v2.4.0 // indirect @@ -183,7 +183,7 @@ require ( github.com/hashicorp/go-msgpack v0.5.5 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-rootcerts v1.0.2 // indirect - github.com/hashicorp/serf v0.9.6 // indirect + github.com/hashicorp/serf v0.9.7 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901 // indirect github.com/josharian/intern v1.0.0 // indirect @@ -200,13 +200,13 @@ require ( github.com/minio/md5-simd v1.1.2 // indirect github.com/minio/sha256-simd v1.0.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mozillazg/go-httpheader v0.2.1 // indirect github.com/ncw/swift v1.0.53 // indirect github.com/prometheus/common/sigv4 v0.1.0 // indirect - github.com/prometheus/procfs v0.7.3 // indirect + github.com/prometheus/procfs v0.8.0 // indirect github.com/rivo/uniseg v0.2.0 // indirect github.com/rs/xid v1.4.0 // indirect github.com/santhosh-tekuri/jsonschema v1.2.4 // indirect @@ -225,19 +225,19 @@ require ( go.elastic.co/fastjson v1.1.0 // indirect go.mongodb.org/mongo-driver v1.10.0 // indirect go.opencensus.io v0.23.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0 // indirect - go.opentelemetry.io/otel/metric v0.30.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.34.0 // indirect + go.opentelemetry.io/otel/metric v0.31.0 // indirect go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.21.0 // indirect golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26 // indirect - golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect - golang.org/x/tools v0.1.11 // indirect + golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 // indirect + golang.org/x/sys v0.0.0-20220808155132-1c4a2a72c664 // indirect + golang.org/x/tools v0.1.12 // indirect golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f // indirect - google.golang.org/api v0.86.0 // indirect + google.golang.org/api v0.91.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.28.0 // indirect - gopkg.in/ini.v1 v1.66.4 // indirect + google.golang.org/protobuf v1.28.1 // indirect + gopkg.in/ini.v1 v1.66.6 // indirect howett.net/plist v0.0.0-20181124034731-591f970eefbb // indirect ) diff --git a/go.sum b/go.sum index 70a4587c01..dbf5495810 100644 --- a/go.sum +++ b/go.sum @@ -71,12 +71,14 @@ github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= -github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= +github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= -github.com/Azure/go-autorest/autorest/adal v0.9.20 h1:gJ3E98kMpFB1MFqQCvA1yFab8vthOeD4VlFRQULxahg= github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.21 h1:jjQnVFXPfekaqb8vIsv2G1lxshoW+oGv4MDlhRtnYZk= +github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 h1:P6bYXFoao05z5uhOQzbC3Qd8JqF3jUoocoTeIxkp2cA= github.com/Azure/go-autorest/autorest/azure/auth v0.5.11/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= github.com/Azure/go-autorest/autorest/azure/cli v0.4.5 h1:0W/yGmFdTIT77fvdlGZ0LMISoLHFJ7Tx4U0yeB+uFs4= @@ -147,6 +149,7 @@ 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-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= @@ -164,8 +167,8 @@ github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2z github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.43.11/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.44.20/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= -github.com/aws/aws-sdk-go v1.44.45 h1:E2i73X4QdVS0XrfX/aVPt/M0Su2IuJ7AFvAMtF0id1Q= -github.com/aws/aws-sdk-go v1.44.45/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.72 h1:i7J5XT7pjBjtl1OrdIhiQHzsG89wkZCcM1HhyK++3DI= +github.com/aws/aws-sdk-go v1.44.72/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2 v1.16.0 h1:cBAYjiiexRAg9v2z9vb6IdxAa7ef4KCtjW7w7e3GxGo= @@ -271,8 +274,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/digitalocean/godo v1.80.0/go.mod h1:BPCqvwbjbGqxuUnIKB4EvS/AX7IDnNmt5fwvIkWo+ew= -github.com/digitalocean/godo v1.81.0 h1:sjb3fOfPfSlUQUK22E87BcI8Zx2qtnF7VUCCO4UK3C8= -github.com/digitalocean/godo v1.81.0/go.mod h1:BPCqvwbjbGqxuUnIKB4EvS/AX7IDnNmt5fwvIkWo+ew= +github.com/digitalocean/godo v1.82.0 h1:lqAit46H1CqJGjh7LDbsamng/UMBME5rvmfH3Vb5Yy8= +github.com/digitalocean/godo v1.82.0/go.mod h1:BPCqvwbjbGqxuUnIKB4EvS/AX7IDnNmt5fwvIkWo+ew= github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= @@ -283,7 +286,6 @@ github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfc github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= @@ -312,8 +314,9 @@ github.com/elastic/go-windows v1.0.1 h1:AlYZOldA+UJ0/2nBuqWdo90GFCgG9xuyw9SYzGUt github.com/elastic/go-windows v1.0.1/go.mod h1:FoVvqWSun28vaDQPbj2Elfc0JahhPB7WQEGa3c814Ss= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.16.0+incompatible h1:rgqiKNjTnFQA6kkhFe16D8epTksy9HQ1MyrbDXSdYhM= +github.com/emicklei/go-restful v2.16.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/go-control-plane v0.10.3 h1:xdCVXxEe0Y3FQith+0cj2irwZudqGYvecuLB1HtdexY= @@ -420,8 +423,9 @@ github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-zookeeper/zk v1.0.2 h1:4mx0EYENAdX/B/rbunjlt5+4RTA/a9SMHBRuSKdGxPM= github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg= +github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= @@ -564,8 +568,8 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= github.com/google/pprof v0.0.0-20220520215854-d04f2422c8a1/go.mod h1:gSuNB+gJaOiQKLEZ+q+PK9Mq3SOzhRcw2GsGS/FhYDk= -github.com/google/pprof v0.0.0-20220608213341-c488b8fa1db3 h1:mpL/HvfIgIejhVwAfxBQkwEjlhP5o0O9RAeTAjpwzxc= -github.com/google/pprof v0.0.0-20220608213341-c488b8fa1db3/go.mod h1:gSuNB+gJaOiQKLEZ+q+PK9Mq3SOzhRcw2GsGS/FhYDk= +github.com/google/pprof v0.0.0-20220729232143-a41b82acbcb1 h1:8pyqKJvrJqUYaKS851Ule26pwWvey6IDMiczaBLDKLQ= +github.com/google/pprof v0.0.0-20220729232143-a41b82acbcb1/go.mod h1:gSuNB+gJaOiQKLEZ+q+PK9Mq3SOzhRcw2GsGS/FhYDk= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -601,8 +605,9 @@ github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grafana/regexp v0.0.0-20220304095617-2e8d9baf4ac2 h1:uirlL/j72L93RhV4+mkWhjv0cov2I0MIgPOG9rMDr1k= github.com/grafana/regexp v0.0.0-20220304095617-2e8d9baf4ac2/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= @@ -621,14 +626,14 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.2/go.mod h1:chrfS3YoLAlKTRE5cFWvCbt8uGAjshktT4PveTUpsFQ= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.1/go.mod h1:G+WkljZi4mflcqVxYSgvt8MNctRQHjEH8ubKtt1Ka3w= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= -github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= -github.com/hashicorp/consul/api v1.13.1 h1:r5cPdVFUy+pFF7nt+0ArLD9hm+E39OewJkvNdjKXcL4= -github.com/hashicorp/consul/api v1.13.1/go.mod h1:+1VcOos0TVdQFqXxphG4zmGcwQB4KVGkp1maPqnkDpE= +github.com/hashicorp/consul/api v1.14.0 h1:Y64GIJ8hYTu+tuGekwO4G4ardXoiCivX9wv1iP/kihk= +github.com/hashicorp/consul/api v1.14.0/go.mod h1:bcaw5CSZ7NE9qfOfKCI1xb7ZKjzu/MyvQkCLTfqLqxQ= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= @@ -646,10 +651,12 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.12.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2 h1:K4ev2ib4LdQETX5cSZBG0DVLk1jwGqSPXBjdah3veNs= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.2.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= @@ -670,8 +677,9 @@ github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0S github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -688,15 +696,16 @@ github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.3.1 h1:MXgUXLqva1QvpVEDQW1IQLG0wivQAtmFlHRQ+1vWZfM= github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/nomad/api v0.0.0-20220629141207-c2428e1673ec h1:jAF71e0KoaY2LJlRsRxxGz6MNQOG5gTBIc+rklxfNO0= -github.com/hashicorp/nomad/api v0.0.0-20220629141207-c2428e1673ec/go.mod h1:jP79oXjopTyH6E8LF0CEMq67STgrlmBRIyijA0tuR5o= +github.com/hashicorp/nomad/api v0.0.0-20220809212729-939d643fec2c h1:lV5A4cLQr1Bh1xGSSQ2R0fDRK4GZnfXxYia4Q7aaTXc= +github.com/hashicorp/nomad/api v0.0.0-20220809212729-939d643fec2c/go.mod h1:wPbfT+Daj0i4M73rK2TGvIHo9FUWMJ/hrhn8Xb4Puvc= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.6 h1:uuEX1kLR6aoda1TBttmJQKDLZE1Ob7KN0NPdE7EtCDc= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7 h1:hkdgbqizGQHuU5IPqYM1JdSMV8nKfpuOnZYXssk9muY= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hetznercloud/hcloud-go v1.33.2/go.mod h1:XX/TQub3ge0yWR2yHWmnDVIrB+MQbda1pHxkUmDlUME= -github.com/hetznercloud/hcloud-go v1.35.0 h1:sduXOrWM0/sJXwBty7EQd7+RXEJh5+CsAGQmHshChFg= -github.com/hetznercloud/hcloud-go v1.35.0/go.mod h1:mepQwR6va27S3UQthaEPGS86jtzSY9xWL1e9dyxXpgA= +github.com/hetznercloud/hcloud-go v1.35.2 h1:eEDtmDiI2plZ2UQmj4YpiYse5XbtpXOUBpAdIOLxzgE= +github.com/hetznercloud/hcloud-go v1.35.2/go.mod h1:mepQwR6va27S3UQthaEPGS86jtzSY9xWL1e9dyxXpgA= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= @@ -712,8 +721,8 @@ github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANyt github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/ionos-cloud/sdk-go/v6 v6.0.5851/go.mod h1:UE3V/2DjnqD5doOqtjYqzJRMpI1RiwrvuuSEPX1pdnk= -github.com/ionos-cloud/sdk-go/v6 v6.1.0 h1:0EZz5H+t6W23zHt6dgHYkKavr72/30O9nA97E3FZaS4= -github.com/ionos-cloud/sdk-go/v6 v6.1.0/go.mod h1:Ox3W0iiEz0GHnfY9e5LmAxwklsxguuNFEUSu0gVRTME= +github.com/ionos-cloud/sdk-go/v6 v6.1.2 h1:es5R5sVmjHFrYNBbJfAeHF+16GheaJMyc63xWxIAec4= +github.com/ionos-cloud/sdk-go/v6 v6.1.2/go.mod h1:Ox3W0iiEz0GHnfY9e5LmAxwklsxguuNFEUSu0gVRTME= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= @@ -860,8 +869,9 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -993,8 +1003,9 @@ github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.13.0 h1:b71QUfeo5M8gq2+evJdTPfZhYMAU0uKPkyPJ7TPsloU= +github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -1029,11 +1040,12 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/prometheus/prometheus v0.36.2/go.mod h1:GBcYMr17Nr2/iDIrWmiy9wC5GKl0NOQ5R9XynB1HAG8= -github.com/prometheus/prometheus v0.37.0 h1:LgnE+97wnUK/qcmk5oHIqieJEKwhZtaSidyKpUyeats= -github.com/prometheus/prometheus v0.37.0/go.mod h1:egARUgz+K93zwqsVIAneFlLZefyGOON44WyAp4Xqbbk= +github.com/prometheus/prometheus v0.38.0 h1:YSiJ5gDZmXnOntPRyHn1wb/6I1Frasj9dw57XowIqeA= +github.com/prometheus/prometheus v0.38.0/go.mod h1:2zHO5FtRhM+iu995gwKIb99EXxjeZEuXpKUTIRq4YI0= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -1119,7 +1131,7 @@ 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.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= 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/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= @@ -1170,6 +1182,7 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9 h1:k/gmLsJDWwWqbLCur2yWnJzwQEKRcAHXo6seXGuSwWw= github.com/yuin/gopher-lua v0.0.0-20210529063254-f4c35e4016d9/go.mod h1:E1AXubJBdNmFERAOucpDIxNzeGfLzg0mYh+UfMWdChA= go.elastic.co/apm v1.11.0 h1:uJyt6nCW9880sZhfl1tB//Jy/5TadNoAd8edRUtgb3w= @@ -1208,31 +1221,41 @@ 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 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0 h1:mac9BKRqwaX6zxHPDe3pvmWpwuuIM0vuXv2juCnQevE= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0/go.mod h1:5eCOqeGphOyz6TsY3ZDNjE33SM/TFAK3RGuCL2naTgY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.34.0 h1:9NkMW03wwEzPtP/KciZ4Ozu/Uz5ZA7kfqXJIObnrjGU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.34.0/go.mod h1:548ZsYzmT4PL4zWKRd8q/N4z0Wxzn/ZxUE+lkEpwWQA= go.opentelemetry.io/contrib/propagators/ot v1.4.0 h1:sHp8P5+xmMORvsgKjIPPX4U97JUgSqY4xPWa6ncF1PA= go.opentelemetry.io/contrib/propagators/ot v1.4.0/go.mod h1:FivzsGJqC7ND++UUOifWfkiuEOFXtVQ3fh2ZkqIJ9X4= go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk= -go.opentelemetry.io/otel v1.5.0/go.mod h1:Jm/m+rNp/z0eqJc74H7LPwQ3G87qkU/AnnAydAjSAHk= -go.opentelemetry.io/otel v1.7.0 h1:Z2lA3Tdch0iDcrhJXDIlC94XE+bxok1F9B+4Lz/lGsM= go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= -go.opentelemetry.io/otel/bridge/opentracing v1.5.0 h1:fOaCCGOLhDRea4Hv+P+Z8d4JtPEf3SSuNJFT4diV5v8= -go.opentelemetry.io/otel/bridge/opentracing v1.5.0/go.mod h1:Pci42D1Wz/eZzWeKwGPgqu89bQeak3DdIeZhzGNFu8s= +go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM= +go.opentelemetry.io/otel v1.9.0 h1:8WZNQFIB2a71LnANS9JeyidJKKGOOremcUtb/OtHISw= +go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo= +go.opentelemetry.io/otel/bridge/opentracing v1.8.0 h1:WXOiANwDsF8/7+Ah5oP3DwCiHZS+mNRnH8fYFes1xVE= +go.opentelemetry.io/otel/bridge/opentracing v1.8.0/go.mod h1:CCMYw2G6Qzp/74vhE7fDXDVZSmUaV9HyH4kDCy5d9c8= go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0/go.mod h1:M1hVZHNxcbkAlcvrOMlpQ4YOO3Awf+4N2dxkZL3xm04= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.9.0/go.mod h1:78XhIg8Ht9vR4tbLNUhXsiOnE2HOuSeKAiAcoVQEpOY= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0/go.mod h1:ceUgdyfNv4h4gLxHR0WNfDiiVmZFodZhZSbOLhpxqXE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.9.0/go.mod h1:0EsCXjZAiiZGnLdEUXM9YjCKuuLZMYyglh2QDXcYKVA= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0/go.mod h1:E+/KKhwOSw8yoPxSSuUHG6vKppkvhN+S1Jc7Nib3k3o= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.9.0/go.mod h1:K5G92gbtCrYJ0mn6zj9Pst7YFsDFuvSYEhYKRMcufnM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.7.0/go.mod h1:aFXT9Ng2seM9eizF+LfKiyPBGy8xIZKwhusC1gIu3hA= -go.opentelemetry.io/otel/metric v0.30.0 h1:Hs8eQZ8aQgs0U49diZoaS6Uaxw3+bBE3lcMUKBFIk3c= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.9.0/go.mod h1:smUdtylgc0YQiUr2PuifS4hBXhAS5xtR6WQhxP1wiNA= go.opentelemetry.io/otel/metric v0.30.0/go.mod h1:/ShZ7+TS4dHzDFmfi1kSXMhMVubNoP0oIaBp70J6UXU= -go.opentelemetry.io/otel/sdk v1.7.0 h1:4OmStpcKVOfvDOgCt7UriAPtKolwIhxpnSNI/yK+1B0= +go.opentelemetry.io/otel/metric v0.31.0 h1:6SiklT+gfWAwWUR0meEMxQBtihpiEs4c+vL9spDTqUs= +go.opentelemetry.io/otel/metric v0.31.0/go.mod h1:ohmwj9KTSIeBnDBm/ZwH2PSZxZzoOaG2xZeekTRzL5A= go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= +go.opentelemetry.io/otel/sdk v1.9.0 h1:LNXp1vrr83fNXTHgU8eO89mhzxb/bbWAsHG6fNf3qWo= +go.opentelemetry.io/otel/sdk v1.9.0/go.mod h1:AEZc8nt5bd2F7BC24J5R0mrjYnpEgYHyTcM/vrSple4= go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE= -go.opentelemetry.io/otel/trace v1.5.0/go.mod h1:sq55kfhjXYr1zVSyexg0w1mpa03AYXR5eyTkB9NPPdE= -go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o= go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= +go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4= +go.opentelemetry.io/otel/trace v1.9.0 h1:oZaCNJUjWcg60VXWee8lJKlqhPbXAPB51URuR47pQYc= +go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.16.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.18.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= @@ -1283,9 +1306,9 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d h1:sK3txAijHtOK88l68nt020reeT1ZdKLIYetKl95FzVY= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/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= @@ -1388,6 +1411,7 @@ golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/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-20211216030914-fe4d6282115f/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/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1395,8 +1419,10 @@ golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220809184613-07c6da5e1ced h1:3dYNDff0VT5xj+mbj2XucFst9WKk6PdGOrb9n+SbIvw= +golang.org/x/net v0.0.0-20220809184613-07c6da5e1ced/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= 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= @@ -1419,8 +1445,9 @@ golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26 h1:uBgVQYJLi/m8M0wzp+aGwBWt90gMRoOVf+aWTW10QHI= -golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7 h1:dtndE8FcEta75/4kHF3AbpuWzV6f1LjnLrM4pe2SZrw= +golang.org/x/oauth2 v0.0.0-20220808172628-8227340efae7/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= 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= @@ -1433,8 +1460,9 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ 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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/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-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1542,9 +1570,10 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= -golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220808155132-1c4a2a72c664 h1:v1W7bwXHsnLLloWYTVEdvGvA7BHMeBYsPcF0GLDxIRs= +golang.org/x/sys v0.0.0-20220808155132-1c4a2a72c664/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= @@ -1567,8 +1596,8 @@ golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= -golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 h1:ftMN5LMiBFjbzleLqtoBZk7KdJwhuybIU+FckUHgoyQ= +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1644,8 +1673,8 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11 h1:loJ25fNOEhSXfHrpoGj91eCUThwdNX6u24rO1xnNteY= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +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= @@ -1699,8 +1728,8 @@ google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69 google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.86.0 h1:ZAnyOHQFIuWso1BodVfSaRyffD74T9ERGFa3k1fNk/U= -google.golang.org/api v0.86.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.91.0 h1:731+JzuwaJoZXRQGmPoBiV+SrsAfUaIkdMCWTcQNPyA= +google.golang.org/api v0.91.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1799,8 +1828,9 @@ google.golang.org/genproto v0.0.0-20220524023933-508584e28198/go.mod h1:RAyBrSAP google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 h1:W70HjnmXFJm+8RNjOpIDYW2nKsSi/af0VvIZUtYkwuU= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220728213248-dd149ef739b9/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220808204814-fd01256a5276 h1:7PEE9xCtufpGJzrqweakEEnTh7YFELmnKm/ee+5jmfQ= +google.golang.org/genproto v0.0.0-20220808204814-fd01256a5276/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1819,8 +1849,9 @@ 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/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= @@ -1836,8 +1867,9 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= +gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/telebot.v3 v3.0.0/go.mod h1:7rExV8/0mDDNu9epSrDm/8j22KLaActH1Tbee6YjzWg= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -1872,14 +1904,14 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 howett.net/plist v0.0.0-20181124034731-591f970eefbb h1:jhnBjNi9UFpfpl8YZhA9CrOqpnJdvzuiHsl/dnxl11M= howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= k8s.io/api v0.24.0/go.mod h1:5Jl90IUrJHUJYEMANRURMiVvJ0g7Ax7r3R1bqO8zx8I= -k8s.io/api v0.24.2 h1:g518dPU/L7VRLxWfcadQn2OnsiGWVOadTLpdnqgY2OI= -k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg= +k8s.io/api v0.24.3 h1:tt55QEmKd6L2k5DP6G/ZzdMQKvG5ro4H4teClqm0sTY= +k8s.io/api v0.24.3/go.mod h1:elGR/XSZrS7z7cSZPzVWaycpJuGIw57j9b95/1PdJNI= k8s.io/apimachinery v0.24.0/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= -k8s.io/apimachinery v0.24.2 h1:5QlH9SL2C8KMcrNJPor+LbXVTaZRReml7svPEh4OKDM= -k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apimachinery v0.24.3 h1:hrFiNSA2cBZqllakVYyH/VyEh4B581bQRmqATJSeQTg= +k8s.io/apimachinery v0.24.3/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= k8s.io/client-go v0.24.0/go.mod h1:VFPQET+cAFpYxh6Bq6f4xyMY80G6jKKktU6G0m00VDw= -k8s.io/client-go v0.24.2 h1:CoXFSf8if+bLEbinDqN9ePIDGzcLtqhfd6jpfnwGOFA= -k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30= +k8s.io/client-go v0.24.3 h1:Nl1840+6p4JqkFWEW2LnMKU667BUxw03REfLAVhuKQY= +k8s.io/client-go v0.24.3/go.mod h1:AAovolf5Z9bY1wIg2FZ8LPQlEdKHjLI7ZD4rw920BJw= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 h1:Gii5eqf+GmIEwGNKQYQClCayuJCe2/4fZUvF7VG99sU= k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= diff --git a/internal/cortex/querier/astmapper/astmapper_test.go b/internal/cortex/querier/astmapper/astmapper_test.go index fe41bf3f87..57b871589d 100644 --- a/internal/cortex/querier/astmapper/astmapper_test.go +++ b/internal/cortex/querier/astmapper/astmapper_test.go @@ -52,14 +52,14 @@ func TestCloneNode(t *testing.T) { mustLabelMatcher(labels.MatchEqual, string(model.MetricNameLabel), "some_metric"), }, PosRange: parser.PositionRange{ - Start: 18, - End: 29, + Start: 19, + End: 30, }, }, Grouping: []string{"foo"}, PosRange: parser.PositionRange{ Start: 0, - End: 30, + End: 31, }, }, }, diff --git a/internal/cortex/querier/astmapper/shard_summer_test.go b/internal/cortex/querier/astmapper/shard_summer_test.go index 46a9f01ac9..41845b8f4d 100644 --- a/internal/cortex/querier/astmapper/shard_summer_test.go +++ b/internal/cortex/querier/astmapper/shard_summer_test.go @@ -146,7 +146,7 @@ func TestShardSummerWithEncoding(t *testing.T) { { shards: 3, input: `sum(rate(bar1{baz="blip"}[1m]))`, - expected: `sum without(__cortex_shard__) (__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum by(__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"0_of_3\\\",baz=\\\"blip\\\"}[1m]))\",\"sum by(__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"1_of_3\\\",baz=\\\"blip\\\"}[1m]))\",\"sum by(__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"2_of_3\\\",baz=\\\"blip\\\"}[1m]))\"]}"})`, + expected: `sum without(__cortex_shard__) (__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum by (__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"0_of_3\\\",baz=\\\"blip\\\"}[1m]))\",\"sum by (__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"1_of_3\\\",baz=\\\"blip\\\"}[1m]))\",\"sum by (__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"2_of_3\\\",baz=\\\"blip\\\"}[1m]))\"]}"})`, }, } { t.Run(fmt.Sprintf("[%d]", i), func(t *testing.T) { diff --git a/internal/cortex/querier/queryrange/querysharding_test.go b/internal/cortex/querier/queryrange/querysharding_test.go index 7a7e69f64e..671194f7f2 100644 --- a/internal/cortex/querier/queryrange/querysharding_test.go +++ b/internal/cortex/querier/queryrange/querysharding_test.go @@ -350,18 +350,18 @@ func TestQueryshardingCorrectness(t *testing.T) { }, { desc: "entire query with shard summer", - query: `sum by (foo,bar) (min_over_time(bar1{baz="blip"}[1m]))`, - mapped: `sum by(foo, bar) (__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum by(foo, bar, __cortex_shard__) (min_over_time(bar1{__cortex_shard__=\\\"0_of_2\\\",baz=\\\"blip\\\"}[1m]))\",\"sum by(foo, bar, __cortex_shard__) (min_over_time(bar1{__cortex_shard__=\\\"1_of_2\\\",baz=\\\"blip\\\"}[1m]))\"]}"})`, + query: `sum by (foo, bar) (min_over_time(bar1{baz="blip"}[1m]))`, + mapped: `sum by (foo, bar) (__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum by (foo, bar, __cortex_shard__) (min_over_time(bar1{__cortex_shard__=\\\"0_of_2\\\",baz=\\\"blip\\\"}[1m]))\",\"sum by (foo, bar, __cortex_shard__) (min_over_time(bar1{__cortex_shard__=\\\"1_of_2\\\",baz=\\\"blip\\\"}[1m]))\"]}"})`, }, { desc: "shard one leg encode the other", query: "sum(rate(bar1[1m])) or rate(bar1[1m])", - mapped: `sum without(__cortex_shard__) (__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum by(__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"0_of_2\\\"}[1m]))\",\"sum by(__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"1_of_2\\\"}[1m]))\"]}"}) or __embedded_queries__{__cortex_queries__="{\"Concat\":[\"rate(bar1[1m])\"]}"}`, + mapped: `sum without (__cortex_shard__) (__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum by (__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"0_of_2\\\"}[1m]))\",\"sum by (__cortex_shard__) (rate(bar1{__cortex_shard__=\\\"1_of_2\\\"}[1m]))\"]}"}) or __embedded_queries__{__cortex_queries__="{\"Concat\":[\"rate(bar1[1m])\"]}"}`, }, { desc: "should skip encoding leaf scalar/strings", query: `histogram_quantile(0.5, sum(rate(cortex_cache_value_size_bytes_bucket[5m])) by (le))`, - mapped: `histogram_quantile(0.5, sum by(le) (__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum by(le, __cortex_shard__) (rate(cortex_cache_value_size_bytes_bucket{__cortex_shard__=\\\"0_of_2\\\"}[5m]))\",\"sum by(le, __cortex_shard__) (rate(cortex_cache_value_size_bytes_bucket{__cortex_shard__=\\\"1_of_2\\\"}[5m]))\"]}"}))`, + mapped: `histogram_quantile(0.5, sum by (le) (__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum by (le, __cortex_shard__) (rate(cortex_cache_value_size_bytes_bucket{__cortex_shard__=\\\"0_of_2\\\"}[5m]))\",\"sum by (le, __cortex_shard__) (rate(cortex_cache_value_size_bytes_bucket{__cortex_shard__=\\\"1_of_2\\\"}[5m]))\"]}"}))`, }, { desc: "ensure sharding sub aggregations are skipped to avoid non-associative series merging across shards", @@ -372,7 +372,7 @@ func TestQueryshardingCorrectness(t *testing.T) { ) by (drive,instance) ) by (instance) )`, - mapped: `__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum(count by(instance) (count by(drive, instance) (bar1)))\"]}"}`, + mapped: `__embedded_queries__{__cortex_queries__="{\"Concat\":[\"sum(count by (instance) (count by (drive, instance) (bar1)))\"]}"}`, }, } { t.Run(tc.desc, func(t *testing.T) { diff --git a/pkg/api/query/grpc.go b/pkg/api/query/grpc.go index 459b94b6f7..4b2dde66ae 100644 --- a/pkg/api/query/grpc.go +++ b/pkg/api/query/grpc.go @@ -19,17 +19,19 @@ type GRPCAPI struct { now func() time.Time replicaLabels []string queryableCreate query.QueryableCreator - queryEngine func(int64) *promql.Engine + queryEngine *promql.Engine + lookbackDeltaCreate func(int64) time.Duration defaultMaxResolutionSeconds time.Duration } -func NewGRPCAPI(now func() time.Time, replicaLabels []string, creator query.QueryableCreator, queryEngine func(int64) *promql.Engine, defaultMaxResolutionSeconds time.Duration) *GRPCAPI { +func NewGRPCAPI(now func() time.Time, replicaLabels []string, creator query.QueryableCreator, queryEngine *promql.Engine, lookbackDeltaCreate func(int64) time.Duration, defaultMaxResolutionSeconds time.Duration) *GRPCAPI { return &GRPCAPI{ now: now, replicaLabels: replicaLabels, queryableCreate: creator, queryEngine: queryEngine, defaultMaxResolutionSeconds: defaultMaxResolutionSeconds, + lookbackDeltaCreate: lookbackDeltaCreate, } } @@ -60,6 +62,11 @@ func (g *GRPCAPI) Query(request *querypb.QueryRequest, server querypb.Query_Quer maxResolution = g.defaultMaxResolutionSeconds.Milliseconds() / 1000 } + lookbackDelta := g.lookbackDeltaCreate(maxResolution * 1000) + if request.LookbackDeltaSeconds > 0 { + lookbackDelta = time.Duration(request.LookbackDeltaSeconds) * time.Second + } + storeMatchers, err := querypb.StoreMatchersToLabelMatchers(request.StoreMatchers) if err != nil { return err @@ -69,7 +76,7 @@ func (g *GRPCAPI) Query(request *querypb.QueryRequest, server querypb.Query_Quer if len(request.ReplicaLabels) != 0 { replicaLabels = request.ReplicaLabels } - qe := g.queryEngine(request.MaxResolutionSeconds) + queryable := g.queryableCreate( request.EnableDedup, replicaLabels, @@ -80,7 +87,7 @@ func (g *GRPCAPI) Query(request *querypb.QueryRequest, server querypb.Query_Quer false, request.ShardInfo, ) - qry, err := qe.NewInstantQuery(queryable, &promql.QueryOpts{}, request.Query, ts) + qry, err := g.queryEngine.NewInstantQuery(queryable, &promql.QueryOpts{LookbackDelta: lookbackDelta}, request.Query, ts) if err != nil { return err } @@ -129,6 +136,11 @@ func (g *GRPCAPI) QueryRange(request *querypb.QueryRangeRequest, srv querypb.Que maxResolution = g.defaultMaxResolutionSeconds.Milliseconds() / 1000 } + lookbackDelta := g.lookbackDeltaCreate(maxResolution * 1000) + if request.LookbackDeltaSeconds > 0 { + lookbackDelta = time.Duration(request.LookbackDeltaSeconds) * time.Second + } + storeMatchers, err := querypb.StoreMatchersToLabelMatchers(request.StoreMatchers) if err != nil { return err @@ -138,7 +150,7 @@ func (g *GRPCAPI) QueryRange(request *querypb.QueryRangeRequest, srv querypb.Que if len(request.ReplicaLabels) != 0 { replicaLabels = request.ReplicaLabels } - qe := g.queryEngine(request.MaxResolutionSeconds) + queryable := g.queryableCreate( request.EnableDedup, replicaLabels, @@ -154,7 +166,7 @@ func (g *GRPCAPI) QueryRange(request *querypb.QueryRangeRequest, srv querypb.Que endTime := time.Unix(request.EndTimeSeconds, 0) interval := time.Duration(request.IntervalSeconds) * time.Second - qry, err := qe.NewRangeQuery(queryable, &promql.QueryOpts{}, request.Query, startTime, endTime, interval) + qry, err := g.queryEngine.NewRangeQuery(queryable, &promql.QueryOpts{LookbackDelta: lookbackDelta}, request.Query, startTime, endTime, interval) if err != nil { return err } diff --git a/pkg/api/query/querypb/query.pb.go b/pkg/api/query/querypb/query.pb.go index 2412cbeb24..b729ba8eb8 100644 --- a/pkg/api/query/querypb/query.pb.go +++ b/pkg/api/query/querypb/query.pb.go @@ -42,6 +42,7 @@ type QueryRequest struct { EnableQueryPushdown bool `protobuf:"varint,9,opt,name=enableQueryPushdown,proto3" json:"enableQueryPushdown,omitempty"` SkipChunks bool `protobuf:"varint,10,opt,name=skipChunks,proto3" json:"skipChunks,omitempty"` ShardInfo *storepb.ShardInfo `protobuf:"bytes,11,opt,name=shard_info,json=shardInfo,proto3" json:"shard_info,omitempty"` + LookbackDeltaSeconds int64 `protobuf:"varint,12,opt,name=lookback_delta_seconds,json=lookbackDeltaSeconds,proto3" json:"lookback_delta_seconds,omitempty"` } func (m *QueryRequest) Reset() { *m = QueryRequest{} } @@ -213,6 +214,7 @@ type QueryRangeRequest struct { EnableQueryPushdown bool `protobuf:"varint,11,opt,name=enableQueryPushdown,proto3" json:"enableQueryPushdown,omitempty"` SkipChunks bool `protobuf:"varint,12,opt,name=skipChunks,proto3" json:"skipChunks,omitempty"` ShardInfo *storepb.ShardInfo `protobuf:"bytes,13,opt,name=shard_info,json=shardInfo,proto3" json:"shard_info,omitempty"` + LookbackDeltaSeconds int64 `protobuf:"varint,14,opt,name=lookback_delta_seconds,json=lookbackDeltaSeconds,proto3" json:"lookback_delta_seconds,omitempty"` } func (m *QueryRangeRequest) Reset() { *m = QueryRangeRequest{} } @@ -344,49 +346,51 @@ func init() { func init() { proto.RegisterFile("api/query/querypb/query.proto", fileDescriptor_4b2aba43925d729f) } var fileDescriptor_4b2aba43925d729f = []byte{ - // 666 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x4d, 0x6f, 0xd3, 0x4a, - 0x14, 0xb5, 0x5f, 0x9a, 0x34, 0xb9, 0x6e, 0xfa, 0x31, 0x2f, 0x7d, 0xcf, 0x0d, 0x60, 0x4c, 0xa4, - 0x0a, 0x23, 0xa1, 0xa4, 0x0a, 0x15, 0x3b, 0x24, 0x28, 0x20, 0x15, 0xa9, 0x48, 0xad, 0xdb, 0x15, - 0x9b, 0x68, 0x92, 0x4c, 0x13, 0xab, 0xce, 0x8c, 0x3b, 0x33, 0xee, 0x87, 0xd8, 0xb3, 0xe6, 0x67, - 0x75, 0x59, 0x76, 0xac, 0x10, 0xb4, 0x5b, 0x7e, 0x04, 0xf2, 0xf8, 0x03, 0xbb, 0x8a, 0x4a, 0x0b, - 0x12, 0x1b, 0x67, 0xe6, 0x9c, 0x73, 0xed, 0x3b, 0x57, 0xe7, 0x64, 0xe0, 0x1e, 0x0e, 0xbc, 0xce, - 0x61, 0x48, 0xf8, 0x69, 0xfc, 0x0c, 0xfa, 0xf1, 0x6f, 0x3b, 0xe0, 0x4c, 0x32, 0x54, 0x91, 0x63, - 0x4c, 0x99, 0x68, 0x36, 0x46, 0x6c, 0xc4, 0x14, 0xd4, 0x89, 0x56, 0x31, 0xdb, 0x5c, 0x11, 0x92, - 0x71, 0xd2, 0x51, 0xcf, 0xa0, 0xdf, 0x91, 0xa7, 0x01, 0x11, 0x09, 0xf5, 0x7f, 0x91, 0xe2, 0xc1, - 0x20, 0x21, 0xec, 0x22, 0x11, 0x70, 0x36, 0x29, 0x96, 0xb6, 0xbe, 0x97, 0x60, 0x6e, 0x27, 0xea, - 0xc1, 0x25, 0x87, 0x21, 0x11, 0x12, 0x35, 0xa0, 0xac, 0x7a, 0x32, 0x75, 0x5b, 0x77, 0x6a, 0x6e, - 0xbc, 0x41, 0x0f, 0x60, 0x4e, 0x7a, 0x13, 0xd2, 0x13, 0x64, 0xc0, 0xe8, 0x50, 0x98, 0xff, 0xd8, - 0xba, 0x53, 0x72, 0x8d, 0x08, 0xdb, 0x8d, 0x21, 0xf4, 0x10, 0x16, 0xa2, 0x2d, 0x0b, 0x65, 0xa6, - 0x2a, 0x29, 0xd5, 0x7c, 0x02, 0xa7, 0xc2, 0x75, 0xf8, 0x6f, 0x82, 0x4f, 0x7a, 0x9c, 0x08, 0xe6, - 0x87, 0xd2, 0x63, 0x34, 0xd3, 0xcf, 0x28, 0x7d, 0x63, 0x82, 0x4f, 0xdc, 0x8c, 0x4c, 0xab, 0x56, - 0x61, 0x9e, 0x93, 0xc0, 0xf7, 0x06, 0xb8, 0xe7, 0xe3, 0x3e, 0xf1, 0x85, 0x59, 0xb6, 0x4b, 0x4e, - 0xcd, 0xad, 0x27, 0xe8, 0x96, 0x02, 0xd1, 0x0b, 0xa8, 0xab, 0xd3, 0xbe, 0xc5, 0x72, 0x30, 0x26, - 0x5c, 0x98, 0x15, 0xbb, 0xe4, 0x18, 0xdd, 0xe5, 0x76, 0x3c, 0xdb, 0xf6, 0x6e, 0x9e, 0xdc, 0x98, - 0x39, 0xfb, 0x72, 0x5f, 0x73, 0x8b, 0x15, 0xc8, 0x06, 0x83, 0x50, 0xdc, 0xf7, 0xc9, 0x2b, 0x32, - 0x0c, 0x03, 0x73, 0xd6, 0xd6, 0x9d, 0xaa, 0x9b, 0x87, 0xd0, 0x3a, 0x2c, 0xc7, 0xdb, 0x6d, 0xcc, - 0xa5, 0x87, 0x7d, 0x97, 0x88, 0x80, 0x51, 0x41, 0xcc, 0xaa, 0xd2, 0x4e, 0x27, 0xd1, 0x1a, 0xfc, - 0x1b, 0x13, 0x6a, 0xde, 0xdb, 0xa1, 0x18, 0x0f, 0xd9, 0x31, 0x35, 0x6b, 0xaa, 0x66, 0x1a, 0x85, - 0x2c, 0x00, 0x71, 0xe0, 0x05, 0x2f, 0xc7, 0x21, 0x3d, 0x10, 0x26, 0x28, 0x61, 0x0e, 0x41, 0x6b, - 0x00, 0x62, 0x8c, 0xf9, 0xb0, 0xe7, 0xd1, 0x7d, 0x66, 0x1a, 0xb6, 0xee, 0x18, 0xdd, 0xa5, 0xec, - 0xa4, 0x11, 0xf3, 0x86, 0xee, 0x33, 0xb7, 0x26, 0xd2, 0x65, 0x6b, 0x07, 0xea, 0x85, 0x09, 0xa0, - 0xe7, 0x50, 0x57, 0xe3, 0xcc, 0xe6, 0xa5, 0xab, 0x79, 0x35, 0xd2, 0xb7, 0x6c, 0xe5, 0xc8, 0x74, - 0x5c, 0x85, 0x82, 0xd6, 0x11, 0xd4, 0x13, 0x03, 0x25, 0xe7, 0xbc, 0x0b, 0xd5, 0x63, 0xcc, 0xa9, - 0x47, 0x47, 0x22, 0x36, 0xd1, 0xa6, 0xe6, 0x66, 0x08, 0x7a, 0x06, 0x10, 0xf9, 0x41, 0x10, 0xee, - 0x91, 0xd8, 0x47, 0x46, 0xf7, 0x4e, 0x64, 0xc6, 0x09, 0x91, 0x63, 0x12, 0x8a, 0xde, 0x80, 0x05, - 0xa7, 0xed, 0x3d, 0x65, 0xac, 0x48, 0xb2, 0xa9, 0xb9, 0xb9, 0x82, 0x8d, 0x2a, 0x54, 0x38, 0x11, - 0xa1, 0x2f, 0x5b, 0x9f, 0x66, 0x60, 0x29, 0xfe, 0x30, 0xa6, 0x23, 0x72, 0xbd, 0x7d, 0x1f, 0x03, - 0x12, 0x12, 0x73, 0xd9, 0x9b, 0x62, 0xe2, 0x45, 0xc5, 0xec, 0xe5, 0x9c, 0xec, 0xc0, 0x22, 0xa1, - 0xc3, 0xa2, 0x36, 0xb1, 0x32, 0xa1, 0xc3, 0xbc, 0xf2, 0x11, 0x2c, 0x7a, 0x54, 0x12, 0x7e, 0x84, - 0xfd, 0x2b, 0x26, 0x5e, 0x48, 0xf1, 0x6b, 0xe2, 0x51, 0xbe, 0x65, 0x3c, 0x2a, 0xb7, 0x8a, 0xc7, - 0xec, 0x8d, 0xe2, 0x51, 0xfd, 0xd3, 0x78, 0xd4, 0x6e, 0x11, 0x0f, 0xf8, 0x8d, 0x78, 0x18, 0x37, - 0x8d, 0xc7, 0xdc, 0x2f, 0xe2, 0x51, 0xbf, 0x41, 0x3c, 0xde, 0x03, 0xca, 0x5b, 0xea, 0xaf, 0x1a, - 0xba, 0xfb, 0x41, 0x87, 0xb2, 0xfa, 0x3a, 0x7a, 0x9a, 0x2e, 0xb2, 0x18, 0xe6, 0xff, 0xa2, 0x9b, - 0xcb, 0x57, 0xd0, 0xb8, 0xcd, 0x35, 0x1d, 0xbd, 0x06, 0xf8, 0xd9, 0x3e, 0x5a, 0x29, 0xca, 0x72, - 0x29, 0x69, 0x36, 0xa7, 0x51, 0xe9, 0x6b, 0x36, 0x56, 0xcf, 0xbe, 0x59, 0xda, 0xd9, 0x85, 0xa5, - 0x9f, 0x5f, 0x58, 0xfa, 0xd7, 0x0b, 0x4b, 0xff, 0x78, 0x69, 0x69, 0xe7, 0x97, 0x96, 0xf6, 0xf9, - 0xd2, 0xd2, 0xde, 0xcd, 0x26, 0x57, 0x57, 0xbf, 0xa2, 0x6e, 0x90, 0x27, 0x3f, 0x02, 0x00, 0x00, - 0xff, 0xff, 0x8b, 0xf0, 0xf5, 0x98, 0xd6, 0x06, 0x00, 0x00, + // 692 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcd, 0x6e, 0xd3, 0x40, + 0x18, 0x8c, 0x49, 0x93, 0x26, 0x5f, 0x92, 0xfe, 0x2c, 0x29, 0xb8, 0x01, 0x8c, 0x89, 0x54, 0x11, + 0x24, 0x94, 0x54, 0xa1, 0xe2, 0x86, 0x04, 0xa5, 0x48, 0x45, 0x2a, 0x52, 0xeb, 0xf6, 0xc4, 0x25, + 0xda, 0xc4, 0xdb, 0xc4, 0x8a, 0xb3, 0xeb, 0xee, 0xae, 0xfb, 0x23, 0xee, 0x70, 0xe5, 0x19, 0x78, + 0x9a, 0x1e, 0x7b, 0xe4, 0x84, 0xa0, 0x7d, 0x11, 0xe4, 0xf5, 0x0f, 0x76, 0x15, 0x95, 0x96, 0x4a, + 0x5c, 0x5c, 0xef, 0xcc, 0x7c, 0xdd, 0xf5, 0x64, 0x46, 0x0b, 0x8f, 0xb0, 0xe7, 0x74, 0x0e, 0x7c, + 0xc2, 0x4f, 0xc2, 0xa7, 0xd7, 0x0f, 0xff, 0xb6, 0x3d, 0xce, 0x24, 0x43, 0x45, 0x39, 0xc2, 0x94, + 0x89, 0x46, 0x7d, 0xc8, 0x86, 0x4c, 0x41, 0x9d, 0xe0, 0x2d, 0x64, 0x1b, 0xcb, 0x42, 0x32, 0x4e, + 0x3a, 0xea, 0xe9, 0xf5, 0x3b, 0xf2, 0xc4, 0x23, 0x22, 0xa2, 0xee, 0x67, 0x29, 0xee, 0x0d, 0x22, + 0xc2, 0xcc, 0x12, 0x1e, 0x67, 0x93, 0xec, 0x68, 0xf3, 0xdb, 0x0c, 0x54, 0x77, 0x82, 0x33, 0x58, + 0xe4, 0xc0, 0x27, 0x42, 0xa2, 0x3a, 0x14, 0xd4, 0x99, 0x74, 0xcd, 0xd4, 0x5a, 0x65, 0x2b, 0x5c, + 0xa0, 0x27, 0x50, 0x95, 0xce, 0x84, 0xf4, 0x04, 0x19, 0x30, 0x6a, 0x0b, 0xfd, 0x8e, 0xa9, 0xb5, + 0xf2, 0x56, 0x25, 0xc0, 0x76, 0x43, 0x08, 0x3d, 0x85, 0xf9, 0x60, 0xc9, 0x7c, 0x99, 0xa8, 0xf2, + 0x4a, 0x35, 0x17, 0xc1, 0xb1, 0x70, 0x0d, 0xee, 0x4d, 0xf0, 0x71, 0x8f, 0x13, 0xc1, 0x5c, 0x5f, + 0x3a, 0x8c, 0x26, 0xfa, 0x19, 0xa5, 0xaf, 0x4f, 0xf0, 0xb1, 0x95, 0x90, 0xf1, 0xd4, 0x0a, 0xcc, + 0x71, 0xe2, 0xb9, 0xce, 0x00, 0xf7, 0x5c, 0xdc, 0x27, 0xae, 0xd0, 0x0b, 0x66, 0xbe, 0x55, 0xb6, + 0x6a, 0x11, 0xba, 0xa5, 0x40, 0xf4, 0x06, 0x6a, 0xea, 0x6b, 0x3f, 0x60, 0x39, 0x18, 0x11, 0x2e, + 0xf4, 0xa2, 0x99, 0x6f, 0x55, 0xba, 0x4b, 0xed, 0xd0, 0xdb, 0xf6, 0x6e, 0x9a, 0x5c, 0x9f, 0x39, + 0xfd, 0xf1, 0x38, 0x67, 0x65, 0x27, 0x90, 0x09, 0x15, 0x42, 0x71, 0xdf, 0x25, 0x1b, 0xc4, 0xf6, + 0x3d, 0x7d, 0xd6, 0xd4, 0x5a, 0x25, 0x2b, 0x0d, 0xa1, 0x35, 0x58, 0x0a, 0x97, 0xdb, 0x98, 0x4b, + 0x07, 0xbb, 0x16, 0x11, 0x1e, 0xa3, 0x82, 0xe8, 0x25, 0xa5, 0x9d, 0x4e, 0xa2, 0x55, 0xb8, 0x1b, + 0x12, 0xca, 0xef, 0x6d, 0x5f, 0x8c, 0x6c, 0x76, 0x44, 0xf5, 0xb2, 0x9a, 0x99, 0x46, 0x21, 0x03, + 0x40, 0x8c, 0x1d, 0xef, 0xed, 0xc8, 0xa7, 0x63, 0xa1, 0x83, 0x12, 0xa6, 0x10, 0xb4, 0x0a, 0x20, + 0x46, 0x98, 0xdb, 0x3d, 0x87, 0xee, 0x33, 0xbd, 0x62, 0x6a, 0xad, 0x4a, 0x77, 0x31, 0xf9, 0xd2, + 0x80, 0x79, 0x4f, 0xf7, 0x99, 0x55, 0x16, 0xf1, 0x6b, 0xe0, 0xbd, 0xcb, 0xd8, 0xb8, 0x8f, 0x07, + 0xe3, 0x9e, 0x4d, 0x5c, 0x89, 0x13, 0xef, 0xab, 0xa1, 0xf7, 0x31, 0xbb, 0x11, 0x90, 0x91, 0xf7, + 0xcd, 0x1d, 0xa8, 0x65, 0x7c, 0x43, 0xaf, 0xa1, 0xa6, 0x7e, 0x84, 0xc4, 0x65, 0x4d, 0xb9, 0x5c, + 0x8f, 0xf7, 0xde, 0x4a, 0x91, 0xb1, 0xc9, 0x99, 0x81, 0xe6, 0x21, 0xd4, 0xa2, 0xd8, 0x45, 0xee, + 0x3c, 0x84, 0xd2, 0x11, 0xe6, 0xd4, 0xa1, 0x43, 0x11, 0x46, 0x6f, 0x33, 0x67, 0x25, 0x08, 0x7a, + 0x05, 0x10, 0xa4, 0x48, 0x10, 0xee, 0x90, 0x30, 0x7d, 0x95, 0xee, 0x83, 0x20, 0xc2, 0x13, 0x22, + 0x47, 0xc4, 0x17, 0xbd, 0x01, 0xf3, 0x4e, 0xda, 0x7b, 0x2a, 0x8e, 0x81, 0x64, 0x33, 0x67, 0xa5, + 0x06, 0xd6, 0x4b, 0x50, 0xe4, 0x44, 0xf8, 0xae, 0x6c, 0x7e, 0x29, 0xc0, 0x62, 0xb8, 0x31, 0xa6, + 0x43, 0x72, 0x75, 0xe8, 0x9f, 0x03, 0x12, 0x12, 0x73, 0xd9, 0x9b, 0x12, 0xfd, 0x05, 0xc5, 0xec, + 0xa5, 0xf2, 0xdf, 0x82, 0x05, 0x42, 0xed, 0xac, 0x36, 0x2a, 0x00, 0xa1, 0x76, 0x5a, 0xf9, 0x0c, + 0x16, 0x1c, 0x2a, 0x09, 0x3f, 0xc4, 0xee, 0xa5, 0xe8, 0xcf, 0xc7, 0xf8, 0x15, 0xa5, 0x2a, 0xdc, + 0xb0, 0x54, 0xc5, 0x1b, 0x95, 0x6a, 0xf6, 0x5a, 0xa5, 0x2a, 0xdd, 0xb6, 0x54, 0xe5, 0x1b, 0x94, + 0x0a, 0xfe, 0xa1, 0x54, 0x95, 0xeb, 0x96, 0xaa, 0xfa, 0x97, 0x52, 0xd5, 0x6e, 0x55, 0xaa, 0xb9, + 0x2b, 0x4a, 0xf5, 0x09, 0x50, 0x3a, 0x88, 0xff, 0xb5, 0x06, 0xdd, 0xcf, 0x1a, 0x14, 0xd4, 0xee, + 0xe8, 0x65, 0xfc, 0x92, 0x94, 0x37, 0x7d, 0x1d, 0x34, 0x96, 0x2e, 0xa1, 0xe1, 0x31, 0x57, 0x35, + 0xf4, 0x0e, 0xe0, 0xcf, 0xf1, 0xd1, 0x72, 0x56, 0x96, 0xea, 0x56, 0xa3, 0x31, 0x8d, 0x8a, 0xff, + 0xcd, 0xfa, 0xca, 0xe9, 0x2f, 0x23, 0x77, 0x7a, 0x6e, 0x68, 0x67, 0xe7, 0x86, 0xf6, 0xf3, 0xdc, + 0xd0, 0xbe, 0x5e, 0x18, 0xb9, 0xb3, 0x0b, 0x23, 0xf7, 0xfd, 0xc2, 0xc8, 0x7d, 0x9c, 0x8d, 0xae, + 0xc9, 0x7e, 0x51, 0xdd, 0x56, 0x2f, 0x7e, 0x07, 0x00, 0x00, 0xff, 0xff, 0xfa, 0x8f, 0xd7, 0xf7, + 0x42, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -579,6 +583,11 @@ func (m *QueryRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.LookbackDeltaSeconds != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.LookbackDeltaSeconds)) + i-- + dAtA[i] = 0x60 + } if m.ShardInfo != nil { { size, err := m.ShardInfo.MarshalToSizedBuffer(dAtA[:i]) @@ -803,6 +812,11 @@ func (m *QueryRangeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.LookbackDeltaSeconds != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.LookbackDeltaSeconds)) + i-- + dAtA[i] = 0x70 + } if m.ShardInfo != nil { { size, err := m.ShardInfo.MarshalToSizedBuffer(dAtA[:i]) @@ -1038,6 +1052,9 @@ func (m *QueryRequest) Size() (n int) { l = m.ShardInfo.Size() n += 1 + l + sovQuery(uint64(l)) } + if m.LookbackDeltaSeconds != 0 { + n += 1 + sovQuery(uint64(m.LookbackDeltaSeconds)) + } return n } @@ -1143,6 +1160,9 @@ func (m *QueryRangeRequest) Size() (n int) { l = m.ShardInfo.Size() n += 1 + l + sovQuery(uint64(l)) } + if m.LookbackDeltaSeconds != 0 { + n += 1 + sovQuery(uint64(m.LookbackDeltaSeconds)) + } return n } @@ -1487,6 +1507,25 @@ func (m *QueryRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LookbackDeltaSeconds", wireType) + } + m.LookbackDeltaSeconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LookbackDeltaSeconds |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) @@ -2047,6 +2086,25 @@ func (m *QueryRangeRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LookbackDeltaSeconds", wireType) + } + m.LookbackDeltaSeconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.LookbackDeltaSeconds |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) diff --git a/pkg/api/query/querypb/query.proto b/pkg/api/query/querypb/query.proto index 6c3c589be6..ef5c5d0a92 100644 --- a/pkg/api/query/querypb/query.proto +++ b/pkg/api/query/querypb/query.proto @@ -28,7 +28,7 @@ message QueryRequest { int64 time_seconds = 2; int64 timeout_seconds = 3; int64 max_resolution_seconds = 4; - + repeated string replica_labels = 5; repeated StoreMatchers storeMatchers = 6 [(gogoproto.nullable) = false]; @@ -39,6 +39,8 @@ message QueryRequest { bool skipChunks = 10; ShardInfo shard_info = 11; + + int64 lookback_delta_seconds = 12; } message StoreMatchers { @@ -75,6 +77,7 @@ message QueryRangeRequest { bool skipChunks = 12; ShardInfo shard_info = 13; + int64 lookback_delta_seconds = 14; } message QueryRangeResponse { diff --git a/pkg/api/query/v1.go b/pkg/api/query/v1.go index 5a34dd91e7..ad9bbb9c94 100644 --- a/pkg/api/query/v1.go +++ b/pkg/api/query/v1.go @@ -72,6 +72,7 @@ const ( Step = "step" Stats = "stats" ShardInfoParam = "shard_info" + LookbackDeltaParam = "lookback_delta" ) // QueryAPI is an API used by Thanos Querier. @@ -81,11 +82,12 @@ type QueryAPI struct { gate gate.Gate queryableCreate query.QueryableCreator // queryEngine returns appropriate promql.Engine for a query with a given step. - queryEngine func(int64) *promql.Engine - ruleGroups rules.UnaryClient - targets targets.UnaryClient - metadatas metadata.UnaryClient - exemplars exemplars.UnaryClient + queryEngine *promql.Engine + lookbackDeltaCreate func(int64) time.Duration + ruleGroups rules.UnaryClient + targets targets.UnaryClient + metadatas metadata.UnaryClient + exemplars exemplars.UnaryClient enableAutodownsampling bool enableQueryPartialResponse bool @@ -110,7 +112,8 @@ type QueryAPI struct { func NewQueryAPI( logger log.Logger, endpointStatus func() []query.EndpointStatus, - qe func(int64) *promql.Engine, + qe *promql.Engine, + lookbackDeltaCreate func(int64) time.Duration, c query.QueryableCreator, ruleGroups rules.UnaryClient, targets targets.UnaryClient, @@ -133,16 +136,16 @@ func NewQueryAPI( reg *prometheus.Registry, ) *QueryAPI { return &QueryAPI{ - baseAPI: api.NewBaseAPI(logger, disableCORS, flagsMap), - logger: logger, - queryEngine: qe, - queryableCreate: c, - gate: gate, - ruleGroups: ruleGroups, - targets: targets, - metadatas: metadatas, - exemplars: exemplars, - + baseAPI: api.NewBaseAPI(logger, disableCORS, flagsMap), + logger: logger, + queryEngine: qe, + queryableCreate: c, + gate: gate, + ruleGroups: ruleGroups, + targets: targets, + metadatas: metadatas, + exemplars: exemplars, + lookbackDeltaCreate: lookbackDeltaCreate, enableAutodownsampling: enableAutodownsampling, enableQueryPartialResponse: enableQueryPartialResponse, enableRulePartialResponse: enableRulePartialResponse, @@ -249,6 +252,20 @@ func (qapi *QueryAPI) parseStoreDebugMatchersParam(r *http.Request) (storeMatche return storeMatchers, nil } +func (qapi *QueryAPI) parseLookbackDeltaParam(r *http.Request) (time.Duration, *api.ApiError) { + // Overwrite the cli flag when provided as a query parameter. + if val := r.FormValue(LookbackDeltaParam); val != "" { + var err error + lookbackDelta, err := parseDuration(val) + if err != nil { + return 0, &api.ApiError{Typ: api.ErrorBadData, Err: errors.Wrapf(err, "'%s' parameter", LookbackDeltaParam)} + } + return lookbackDelta, nil + } + // If duration 0 is returned, lookback delta is taken from engine config. + return time.Duration(0), nil +} + func (qapi *QueryAPI) parseDownsamplingParamMillis(r *http.Request, defaultVal time.Duration) (maxResolutionMillis int64, _ *api.ApiError) { maxSourceResolution := 0 * time.Second @@ -364,13 +381,21 @@ func (qapi *QueryAPI) query(r *http.Request) (interface{}, []error, *api.ApiErro return nil, nil, apiErr, func() {} } - qe := qapi.queryEngine(maxSourceResolution) + lookbackDelta := qapi.lookbackDeltaCreate(maxSourceResolution) + // Get custom lookback delta from request. + lookbackDeltaFromReq, apiErr := qapi.parseLookbackDeltaParam(r) + if apiErr != nil { + return nil, nil, apiErr, func() {} + } + if lookbackDeltaFromReq > 0 { + lookbackDelta = lookbackDeltaFromReq + } // We are starting promQL tracing span here, because we have no control over promQL code. span, ctx := tracing.StartSpan(ctx, "promql_instant_query") defer span.Finish() - qry, err := qe.NewInstantQuery(qapi.queryableCreate(enableDedup, replicaLabels, storeDebugMatchers, maxSourceResolution, enablePartialResponse, qapi.enableQueryPushdown, false, shardInfo), &promql.QueryOpts{}, r.FormValue("query"), ts) + qry, err := qapi.queryEngine.NewInstantQuery(qapi.queryableCreate(enableDedup, replicaLabels, storeDebugMatchers, maxSourceResolution, enablePartialResponse, qapi.enableQueryPushdown, false, shardInfo), &promql.QueryOpts{LookbackDelta: lookbackDelta}, r.FormValue("query"), ts) if err != nil { return nil, nil, &api.ApiError{Typ: api.ErrorBadData, Err: err}, func() {} } @@ -482,7 +507,15 @@ func (qapi *QueryAPI) queryRange(r *http.Request) (interface{}, []error, *api.Ap return nil, nil, apiErr, func() {} } - qe := qapi.queryEngine(maxSourceResolution) + lookbackDelta := qapi.lookbackDeltaCreate(maxSourceResolution) + // Get custom lookback delta from request. + lookbackDeltaFromReq, apiErr := qapi.parseLookbackDeltaParam(r) + if apiErr != nil { + return nil, nil, apiErr, func() {} + } + if lookbackDeltaFromReq > 0 { + lookbackDelta = lookbackDeltaFromReq + } // Record the query range requested. qapi.queryRangeHist.Observe(end.Sub(start).Seconds()) @@ -491,9 +524,9 @@ func (qapi *QueryAPI) queryRange(r *http.Request) (interface{}, []error, *api.Ap span, ctx := tracing.StartSpan(ctx, "promql_range_query") defer span.Finish() - qry, err := qe.NewRangeQuery( + qry, err := qapi.queryEngine.NewRangeQuery( qapi.queryableCreate(enableDedup, replicaLabels, storeDebugMatchers, maxSourceResolution, enablePartialResponse, qapi.enableQueryPushdown, false, shardInfo), - &promql.QueryOpts{}, + &promql.QueryOpts{LookbackDelta: lookbackDelta}, r.FormValue("query"), start, end, diff --git a/pkg/api/query/v1_test.go b/pkg/api/query/v1_test.go index 8e300de278..b9c2e98c5f 100644 --- a/pkg/api/query/v1_test.go +++ b/pkg/api/query/v1_test.go @@ -191,10 +191,9 @@ func TestQueryEndpoints(t *testing.T) { baseAPI: &baseAPI.BaseAPI{ Now: func() time.Time { return now }, }, - queryableCreate: query.NewQueryableCreator(nil, nil, store.NewTSDBStore(nil, db, component.Query, nil), 2, timeout), - queryEngine: func(int64) *promql.Engine { - return qe - }, + queryableCreate: query.NewQueryableCreator(nil, nil, store.NewTSDBStore(nil, db, component.Query, nil), 2, timeout), + queryEngine: qe, + lookbackDeltaCreate: func(m int64) time.Duration { return time.Duration(0) }, gate: gate.New(nil, 4), defaultRangeQueryStep: time.Second, queryRangeHist: promauto.With(prometheus.NewRegistry()).NewHistogram(prometheus.HistogramOpts{ @@ -732,11 +731,10 @@ func TestMetadataEndpoints(t *testing.T) { baseAPI: &baseAPI.BaseAPI{ Now: func() time.Time { return now }, }, - queryableCreate: query.NewQueryableCreator(nil, nil, store.NewTSDBStore(nil, db, component.Query, nil), 2, timeout), - queryEngine: func(int64) *promql.Engine { - return qe - }, - gate: gate.New(nil, 4), + queryableCreate: query.NewQueryableCreator(nil, nil, store.NewTSDBStore(nil, db, component.Query, nil), 2, timeout), + queryEngine: qe, + lookbackDeltaCreate: func(m int64) time.Duration { return time.Duration(0) }, + gate: gate.New(nil, 4), queryRangeHist: promauto.With(prometheus.NewRegistry()).NewHistogram(prometheus.HistogramOpts{ Name: "query_range_hist", }), @@ -745,10 +743,9 @@ func TestMetadataEndpoints(t *testing.T) { baseAPI: &baseAPI.BaseAPI{ Now: func() time.Time { return now }, }, - queryableCreate: query.NewQueryableCreator(nil, nil, store.NewTSDBStore(nil, db, component.Query, nil), 2, timeout), - queryEngine: func(int64) *promql.Engine { - return qe - }, + queryableCreate: query.NewQueryableCreator(nil, nil, store.NewTSDBStore(nil, db, component.Query, nil), 2, timeout), + queryEngine: qe, + lookbackDeltaCreate: func(m int64) time.Duration { return time.Duration(0) }, gate: gate.New(nil, 4), defaultMetadataTimeRange: apiLookbackDelta, queryRangeHist: promauto.With(prometheus.NewRegistry()).NewHistogram(prometheus.HistogramOpts{ diff --git a/pkg/query/querier_test.go b/pkg/query/querier_test.go index 11cebc2aa3..fe6ba688d2 100644 --- a/pkg/query/querier_test.go +++ b/pkg/query/querier_test.go @@ -299,11 +299,11 @@ func (s series) Iterator() chunkenc.Iterator { // To test with real data: // Collect the expected results from Prometheus or Thanos through "/api/v1/query_range" and save to a file. // Collect raw data to be used for local storage: -// scripts/insecure_grpcurl_series.sh querierGrpcIP:port '[{"name":"type","value":"current"},{"name":"_id","value":"xxx"}]' 1597823000000 1597824600000 > localStorage.json -// Remove all white space from the file and put each series in a new line. -// When collecting the raw data mint should be Prometheus query time minus the default look back delta(default is 5min or 300000ms) -// For example if the Prometheus query mint is 1597823700000 the grpccurl query mint should be 1597823400000. -// This is because when promql displays data for a given range it looks back 5min before the requested time window. +// scripts/insecure_grpcurl_series.sh querierGrpcIP:port '[{"name":"type","value":"current"},{"name":"_id","value":"xxx"}]' 1597823000000 1597824600000 > localStorage.json +// Remove all white space from the file and put each series in a new line. +// When collecting the raw data mint should be Prometheus query time minus the default look back delta(default is 5min or 300000ms) +// For example if the Prometheus query mint is 1597823700000 the grpccurl query mint should be 1597823400000. +// This is because when promql displays data for a given range it looks back 5min before the requested time window. func TestQuerier_Select_AfterPromQL(t *testing.T) { logger := log.NewLogfmtLogger(os.Stderr) diff --git a/pkg/receive/handler_test.go b/pkg/receive/handler_test.go index 0b4ded5b3d..67dae8c9b1 100644 --- a/pkg/receive/handler_test.go +++ b/pkg/receive/handler_test.go @@ -30,6 +30,7 @@ import ( "github.com/prometheus/common/model" "github.com/prometheus/prometheus/model/exemplar" "github.com/prometheus/prometheus/model/labels" + prometheusMetadata "github.com/prometheus/prometheus/model/metadata" "github.com/prometheus/prometheus/model/relabel" "github.com/prometheus/prometheus/storage" "github.com/prometheus/prometheus/tsdb" @@ -297,6 +298,10 @@ func newFakeAppender(appendErr, commitErr, rollbackErr func() error) *fakeAppend } } +func (f *fakeAppender) UpdateMetadata(storage.SeriesRef, labels.Labels, prometheusMetadata.Metadata) (storage.SeriesRef, error) { + return 0, nil +} + func (f *fakeAppender) Get(l labels.Labels) []prompb.Sample { f.Lock() defer f.Unlock() diff --git a/pkg/rules/manager_test.go b/pkg/rules/manager_test.go index f6e35c2f7b..9acde97b55 100644 --- a/pkg/rules/manager_test.go +++ b/pkg/rules/manager_test.go @@ -19,6 +19,7 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/prometheus/model/exemplar" "github.com/prometheus/prometheus/model/labels" + "github.com/prometheus/prometheus/model/metadata" "github.com/prometheus/prometheus/promql" "github.com/prometheus/prometheus/rules" "github.com/prometheus/prometheus/storage" @@ -45,6 +46,9 @@ func (n nopAppender) AppendExemplar(storage.SeriesRef, labels.Labels, exemplar.E func (n nopAppender) Commit() error { return nil } func (n nopAppender) Rollback() error { return nil } func (n nopAppender) Appender(_ context.Context) (storage.Appender, error) { return n, nil } +func (n nopAppender) UpdateMetadata(storage.SeriesRef, labels.Labels, metadata.Metadata) (storage.SeriesRef, error) { + return 0, nil +} type nopQueryable struct{}