From 3268f2aa522cdbfa9e3b78e7e9ada2fc5a4cb191 Mon Sep 17 00:00:00 2001 From: Luca Terracciano Date: Thu, 26 Aug 2021 15:06:46 +0200 Subject: [PATCH] Feat: dispatcher (#7) * fix: minor fixes * doc: add comments to queue package * feat: add load balancer * feat: add datastore for metric collection * feat: partial features * feat: expose metrics * feat: deployment webhook automation * feat: http forwarding working * fix: fix load balancer bottleneck * feat: add metric persistence to a timescale-db * feat: webhook automation (#6) * feat: deployment webhook automation * fix: minor fixes * refactor: move kube api utilites to apiutils package * fix; minor adjustments Co-authored-by: DragonBanana <10493858@Polimi.it> Co-authored-by: SwagMaster <38248447+DragonBanana@users.noreply.github.com> Co-authored-by: Luca Terracciano --- .gitignore | 3 + Makefile | 6 +- config/deploy/example-cs.yaml | 2 + config/deploy/timescale-db.yaml | 41 +++ config/metric-db/002_init.sql | 24 ++ config/metric-db/Dockerfile | 3 + figlet.yaml | 22 ++ go.mod | 24 +- go.sum | 247 +++++++++-------- pkg/apiutils/getter.go | 127 +++++++++ .../pkg/controller/community-controller.go | 5 + .../pkg/controller/sync.go | 21 +- .../pkg/controller/utils.go | 80 ------ pkg/dispatcher/Dockerfile | 7 + pkg/dispatcher/Makefile | 48 ++++ pkg/dispatcher/README.md | 1 + pkg/dispatcher/deploy/deploy.yaml | 37 +++ pkg/dispatcher/main.go | 92 +++++++ pkg/dispatcher/pkg/balancer/load-balancer.go | 207 +++++++++++++++ .../pkg/balancer/load-balancer_test.go | 108 ++++++++ .../pkg/balancer/pool/serverpool.go | 96 +++++++ .../pkg/balancer/pool/serverpool_test.go | 73 ++++++ .../pkg/balancer/queue/request-queue.go | 51 ++++ .../pkg/balancer/queue/request-queue_test.go | 166 ++++++++++++ pkg/dispatcher/pkg/balancer/urltransformer.go | 90 +++++++ .../pkg/balancer/urltransformer_test.go | 135 ++++++++++ .../pkg/controller/loadbalancer-controller.go | 248 ++++++++++++++++++ pkg/dispatcher/pkg/controller/sync.go | 157 +++++++++++ pkg/dispatcher/pkg/monitoring/data-store.go | 84 ++++++ .../pkg/monitoring/data-store_test.go | 98 +++++++ .../pkg/monitoring/metrics/metrics.go | 248 ++++++++++++++++++ .../pkg/monitoring/metrics/metrics_test.go | 224 ++++++++++++++++ pkg/dispatcher/pkg/persistor/options.go | 58 ++++ pkg/dispatcher/pkg/persistor/persistor.go | 80 ++++++ .../deploy/admission-registration.yaml | 8 +- .../function-deployment-webhook | Bin 20443709 -> 0 bytes pkg/function-deployment-webhook/main.go | 5 +- .../pkg/controller/server.go | 7 +- pkg/metrics-exposer/exposer.go | 172 ++++++++++++ pkg/queue/handler.go | 16 ++ pkg/queue/queue.go | 6 +- pkg/system-controller/main.go | 5 +- .../pkg/controller/handler.go | 3 +- pkg/system-controller/pkg/controller/sync.go | 3 +- .../pkg/controller/sync_test.go | 3 +- .../pkg/controller/system-controller.go | 2 +- .../pkg/slpaclient/client.go | 1 - 47 files changed, 2920 insertions(+), 224 deletions(-) create mode 100644 config/deploy/timescale-db.yaml create mode 100644 config/metric-db/002_init.sql create mode 100644 config/metric-db/Dockerfile create mode 100644 figlet.yaml create mode 100644 pkg/apiutils/getter.go create mode 100644 pkg/dispatcher/Dockerfile create mode 100644 pkg/dispatcher/Makefile create mode 100644 pkg/dispatcher/README.md create mode 100644 pkg/dispatcher/deploy/deploy.yaml create mode 100644 pkg/dispatcher/main.go create mode 100644 pkg/dispatcher/pkg/balancer/load-balancer.go create mode 100644 pkg/dispatcher/pkg/balancer/load-balancer_test.go create mode 100644 pkg/dispatcher/pkg/balancer/pool/serverpool.go create mode 100644 pkg/dispatcher/pkg/balancer/pool/serverpool_test.go create mode 100644 pkg/dispatcher/pkg/balancer/queue/request-queue.go create mode 100644 pkg/dispatcher/pkg/balancer/queue/request-queue_test.go create mode 100644 pkg/dispatcher/pkg/balancer/urltransformer.go create mode 100644 pkg/dispatcher/pkg/balancer/urltransformer_test.go create mode 100644 pkg/dispatcher/pkg/controller/loadbalancer-controller.go create mode 100644 pkg/dispatcher/pkg/controller/sync.go create mode 100644 pkg/dispatcher/pkg/monitoring/data-store.go create mode 100644 pkg/dispatcher/pkg/monitoring/data-store_test.go create mode 100644 pkg/dispatcher/pkg/monitoring/metrics/metrics.go create mode 100644 pkg/dispatcher/pkg/monitoring/metrics/metrics_test.go create mode 100644 pkg/dispatcher/pkg/persistor/options.go create mode 100644 pkg/dispatcher/pkg/persistor/persistor.go delete mode 100755 pkg/function-deployment-webhook/function-deployment-webhook create mode 100644 pkg/metrics-exposer/exposer.go create mode 100644 pkg/queue/handler.go diff --git a/.gitignore b/.gitignore index ceceac9..80a3a09 100644 --- a/.gitignore +++ b/.gitignore @@ -19,8 +19,11 @@ vendor/ pkg/*/community-controller pkg/*/system-controller pkg/*/edge-scheduler +pkg/*/function-deployment-webhook .idea/ pkg/function-deployment-webhook/deploy/server-key.pem pkg/function-deployment-webhook/deploy/server-cert.pem +pkg/dispatcher/dispatcher +pkg/dispatcher/pkg/controller/loadbalancer-controller.go pkg/function-deployment-webhook/deploy/admission-registration-subst.yaml diff --git a/Makefile b/Makefile index 01e4371..dcf9ff5 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ MAKEFLAGS += --no-print-directory -COMPONENTS = community-controller system-controller edge-scheduler function-deployment-webhook +COMPONENTS = community-controller system-controller edge-scheduler function-deployment-webhook dispatcher ifeq (,$(shell go env GOBIN)) GOBIN=$(shell go env GOPATH)/bin @@ -41,6 +41,10 @@ e2e: install $(call action, e2e) @kubectl delete -f ./config/cluster-conf/e2e-namespace.yaml +metric-db: + @cd ./config/metric-db + @docker build -t systemautoscaler/database . + @docker push -t systemautoscaler/database # Generate manifests e.g. CRD, RBAC etc. manifests: controller-gen $(CONTROLLER_GEN) $(CRD_OPTIONS) rbac:roleName=edgeautoscaler-role webhook paths="./..." output:crd:artifacts:config=config/crd/bases crd:crdVersions={v1} diff --git a/config/deploy/example-cs.yaml b/config/deploy/example-cs.yaml index 485b5ca..dd1ddcc 100644 --- a/config/deploy/example-cs.yaml +++ b/config/deploy/example-cs.yaml @@ -9,3 +9,5 @@ spec: probability-threshold: 20 iterations: 20 slpa-service: slpa.default.svc.cluster.local:4567 +status: + generated-communities: [] diff --git a/config/deploy/timescale-db.yaml b/config/deploy/timescale-db.yaml new file mode 100644 index 0000000..208a733 --- /dev/null +++ b/config/deploy/timescale-db.yaml @@ -0,0 +1,41 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: metrics-database + namespace: kube-system +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: metrics-database + replicas: 1 + template: + metadata: + labels: + app: metrics-database + spec: + containers: + - name: metrics-database + image: systemautoscaler/database:dev + imagePullPolicy: Always + ports: + - containerPort: 5432 + env: + - name: POSTGRES_USER + value: "user" + - name: POSTGRES_PASSWORD + value: "password" +--- +apiVersion: v1 +kind: Service +metadata: + name: metrics-database + namespace: kube-system + labels: + app: metrics-database +spec: + ports: + - port: 5432 + selector: + app: metrics-database diff --git a/config/metric-db/002_init.sql b/config/metric-db/002_init.sql new file mode 100644 index 0000000..ab1a756 --- /dev/null +++ b/config/metric-db/002_init.sql @@ -0,0 +1,24 @@ +CREATE TABLE IF NOT EXISTS metric +( + timestamp TIMESTAMP, + source VARCHAR(50), + destination VARCHAR(50), + function VARCHAR(50), + namespace VARCHAR(50), + community VARCHAR(50), + latency INTEGER, + gpu BOOLEAN, + PRIMARY KEY (timestamp, source, destination, function, namespace, community) + ); + +SELECT create_hypertable('metric', 'timestamp', chunk_time_interval => INTERVAL '30 seconds'); +SELECT add_dimension('metric', 'community', number_partitions => 4); +SELECT add_dimension('metric', 'namespace', number_partitions => 4); + +-- ALTER TABLE candlestick SET ( +-- timescaledb.compress, +-- timescaledb.compress_segmentby = 'symbol' +-- ); +-- +-- SELECT add_compression_policy('candlestick', INTERVAL '12 month'); +-- SELECT remove_compression_policy('candlestick'); diff --git a/config/metric-db/Dockerfile b/config/metric-db/Dockerfile new file mode 100644 index 0000000..787f3c0 --- /dev/null +++ b/config/metric-db/Dockerfile @@ -0,0 +1,3 @@ +FROM timescale/timescaledb:2.0.0-pg12 + +ADD 002_init.sql docker-entrypoint-initdb.d/ diff --git a/figlet.yaml b/figlet.yaml new file mode 100644 index 0000000..6b6109c --- /dev/null +++ b/figlet.yaml @@ -0,0 +1,22 @@ +apiVersion: openfaas.com/v1 +kind: Function +metadata: + creationTimestamp: "2021-07-19T21:22:34Z" + generation: 1 + name: figlet + namespace: openfaas-fn + resourceVersion: "1689214" + selfLink: /apis/openfaas.com/v1/namespaces/openfaas-fn/functions/figlet + uid: 21b5f4f5-3315-40d6-a900-25b11bca95bb +spec: + image: ghcr.io/openfaas/figlet:latest + labels: + com.openfaas.scale.factor: "20" + com.openfaas.scale.max: "100" + com.openfaas.scale.min: "1" + com.openfaas.scale.zero: "false" + edgeautoscaler.polimi.it/scheduler: edge-autoscaler + name: figlet + readOnlyRootFilesystem: false + requests: + memory: 1M diff --git a/go.mod b/go.mod index 0366f27..db2a175 100644 --- a/go.mod +++ b/go.mod @@ -4,19 +4,23 @@ go 1.16 require ( github.com/JohnCGriffin/yogofn v0.0.0-20170613212352-43d7b79df9f1 + github.com/asecurityteam/rolling v2.0.4+incompatible github.com/emirpasic/gods v1.12.0 + github.com/jackc/pgx/v4 v4.13.0 + github.com/kubernetes-sigs/custom-metrics-apiserver v0.0.0-20210723154917-1e5c782a6217 + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd github.com/onsi/ginkgo v1.16.4 github.com/onsi/gomega v1.13.0 - github.com/openfaas/faas-netes v0.0.0-20210708204016-8433edf90f12 + github.com/openfaas/faas-netes v0.0.0-20210722152123-f0519195a78b github.com/stretchr/testify v1.7.0 - golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 // indirect - golang.org/x/tools v0.1.2 // indirect - k8s.io/api v0.21.2 - k8s.io/apimachinery v0.21.2 - k8s.io/client-go v0.21.2 - k8s.io/code-generator v0.21.2 - k8s.io/klog/v2 v2.8.0 + k8s.io/api v0.21.3 + k8s.io/apimachinery v0.21.3 + k8s.io/client-go v0.21.3 + k8s.io/code-generator v0.21.3 + k8s.io/klog/v2 v2.9.0 k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d - k8s.io/utils v0.0.0-20210527160623-6fdb442a123b - sigs.k8s.io/controller-runtime v0.9.2 + k8s.io/metrics v0.21.3 + k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9 + sigs.k8s.io/controller-runtime v0.9.3 + ) diff --git a/go.sum b/go.sum index adbe7d3..69be8cb 100644 --- a/go.sum +++ b/go.sum @@ -9,28 +9,18 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= @@ -49,10 +39,11 @@ github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbt github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/JohnCGriffin/yogofn v0.0.0-20170613212352-43d7b79df9f1 h1:+SftkBQBf548OMFt+kl82ke+mLDYCtM4FpodgWtJufk= github.com/JohnCGriffin/yogofn v0.0.0-20170613212352-43d7b79df9f1/go.mod h1:JpumcwO/TPSgPmNVMW8jIGy46QJJijsS1PunvplPsPw= -github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= @@ -79,6 +70,8 @@ github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQh github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asecurityteam/rolling v2.0.4+incompatible h1:WOSeokINZT0IDzYGc5BVcjLlR9vPol08RvI2GAsmB0s= +github.com/asecurityteam/rolling v2.0.4+incompatible/go.mod h1:2D4ba5ZfYCWrIMleUgTvc8pmLExEuvu3PDwl+vnG58Q= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= @@ -88,6 +81,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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -104,7 +98,8 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -114,6 +109,7 @@ github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= @@ -137,14 +133,14 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= 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.15.0+incompatible h1:8KpYO/Xl/ZudZs5RNOEhWMBY4hmzlZhhRd9cu+jrZP4= +github.com/emicklei/go-restful v2.15.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful-swagger12 v0.0.0-20201014110547-68ccff494617/go.mod h1:qr0VowGBT4CS4Q8vFF8BSeKz34PuqKGxs/L0IAQA9DQ= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -178,23 +174,29 @@ github.com/go-logr/zapr v0.4.0 h1:uc1uML3hRYL9/ZZPdgHS/n8Nzo+eaYL/Efxkkamf7OM= github.com/go-logr/zapr v0.4.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= +github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9nFPQ5AYEg= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -214,15 +216,12 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= @@ -241,9 +240,7 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= @@ -252,14 +249,11 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 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= @@ -330,9 +324,59 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= +github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= +github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= +github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgconn v1.10.0 h1:4EYhlDVEMsJ30nNj0mmgwIUXoq7e9sMJrVC2ED6QlCU= +github.com/jackc/pgconn v1.10.0/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5Wi/+Zz7xoE5ALHsRQlOctkOiHc= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.1.1 h1:7PQ/4gLoqnl87ZxL7xjO0DR5gYuviDCZxQJsUlFW1eI= +github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= +github.com/jackc/pgtype v1.8.1 h1:9k0IXtdJXHJbyAWQgbWr1lU+MEhPXZz6RIXxfR5oxXs= +github.com/jackc/pgtype v1.8.1/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= +github.com/jackc/pgx/v4 v4.13.0 h1:JCjhT5vmhMAf/YwBHLvrBn4OGdIQBiFG6ym8Zmdx570= +github.com/jackc/pgx/v4 v4.13.0/go.mod h1:9P4X524sErlaxj0XSGZk7s+LD0eOyu1ZDUrrpznYDF0= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.3 h1:JnPg/5Q9xVJGfjsO5CPUOjnJps1JaRUm8I9FXVCFK94= +github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -350,16 +394,25 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kubernetes-sigs/custom-metrics-apiserver v0.0.0-20210723154917-1e5c782a6217 h1:nLHwWYY6MBZq60REVFpqRHKtYtK0q25I8zzd/WJgAG8= +github.com/kubernetes-sigs/custom-metrics-apiserver v0.0.0-20210723154917-1e5c782a6217/go.mod h1:4eS2sjtRy1fldVX5aEBwKaszFVk794w5whLNhZ/ov48= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.2 h1:AqzbZs4ZoCBp+GtejcpCpcxM3zlSMx29dXbUSeVtJb8= +github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= @@ -367,14 +420,20 @@ github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= @@ -397,6 +456,7 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -443,8 +503,8 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/openfaas/faas-netes v0.0.0-20210708204016-8433edf90f12 h1:rlbWltaskxxefX8/0K/jfX6pzZmYhEMjT9G9FO66RsI= -github.com/openfaas/faas-netes v0.0.0-20210708204016-8433edf90f12/go.mod h1:edmAUC2udskHr0AgV21dVMifz/ngXwN9pRuhPZeJtMU= +github.com/openfaas/faas-netes v0.0.0-20210722152123-f0519195a78b h1:Frhc3/SQ8VLBS8DRs0GEH7MSXEHHOuxZkWils7t6+xY= +github.com/openfaas/faas-netes v0.0.0-20210722152123-f0519195a78b/go.mod h1:Fvs8comsPKfqBbzIWac5+oiMhjNPF+G7RI12v/MLklU= github.com/openfaas/faas-provider v0.17.3/go.mod h1:fq1JL0mX4rNvVVvRLaLRJ3H6o667sHuyP5p/7SZEe98= github.com/openfaas/faas-provider v0.18.5/go.mod h1:fq1JL0mX4rNvVVvRLaLRJ3H6o667sHuyP5p/7SZEe98= github.com/openfaas/faas/gateway v0.0.0-20210311210633-a6dbb4cd0285/go.mod h1:ZZUyq1Ghd3zvhKvSWfXelAsvbUxWP1TqWtvapP4701Q= @@ -483,7 +543,6 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -501,7 +560,6 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0 h1:iMAkS2TDoNWnKM+Kopnx/8tnEStIfpYA0ur0xQzzhMQ= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -519,12 +577,20 @@ github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40T github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= @@ -566,11 +632,9 @@ github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqri github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -582,19 +646,21 @@ go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 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= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0 h1:MTjgFu6ZLKvY6Pvaqk97GlxNBuMpV4Hy/3P6tRGlI2U= @@ -603,17 +669,23 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -644,9 +716,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449 h1:xUIPaMhvROX9dhPvRCenIJtU78+lbEenGbgqB5hfHCQ= golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -665,7 +736,6 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -677,37 +747,28 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= 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= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc= -golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/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= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -721,6 +782,7 @@ golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -730,6 +792,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -743,20 +806,15 @@ golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -765,13 +823,11 @@ golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40 h1:JWgyZ1qgdTaF3N3oxC+MdTV7qvEEgHo3otj+HB5CM7Q= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 h1:SrN+KX8Art/Sf4HNj6Zcz06G7VEz+7w9tdXTPOZ7+l4= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/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-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE= @@ -783,6 +839,7 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -805,6 +862,7 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190424220101-1e8e1cfdf96b/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= @@ -813,6 +871,7 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -835,24 +894,15 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.2 h1:kRBLX7v7Af8W7Gdbbc908OJcdgtK8bOz9Uaj8/F1ACA= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 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= @@ -870,13 +920,7 @@ google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 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= @@ -884,7 +928,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -905,18 +948,8 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -928,14 +961,9 @@ google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ij google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -959,6 +987,7 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= 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.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= @@ -990,22 +1019,26 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= -k8s.io/api v0.21.2 h1:vz7DqmRsXTCSa6pNxXwQ1IYeAZgdIsua+DZU+o+SX3Y= k8s.io/api v0.21.2/go.mod h1:Lv6UGJZ1rlMI1qusN8ruAp9PUBFyBwpEHAdG24vIsiU= +k8s.io/api v0.21.3 h1:cblWILbLO8ar+Fj6xdDGr603HRsf8Wu9E9rngJeprZQ= +k8s.io/api v0.21.3/go.mod h1:hUgeYHUbBp23Ue4qdX9tR8/ANi/g3ehylAqDn9NWVOg= k8s.io/apiextensions-apiserver v0.21.2 h1:+exKMRep4pDrphEafRvpEi79wTnCFMqKf8LBtlA3yrE= k8s.io/apiextensions-apiserver v0.21.2/go.mod h1:+Axoz5/l3AYpGLlhJDfcVQzCerVYq3K3CvDMvw6X1RA= k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= -k8s.io/apimachinery v0.21.2 h1:vezUc/BHqWlQDnZ+XkrpXSmnANSLbpnlpwo0Lhk0gpc= k8s.io/apimachinery v0.21.2/go.mod h1:CdTY8fU/BlvAbJ2z/8kBwimGki5Zp8/fbVuLY8gJumM= +k8s.io/apimachinery v0.21.3 h1:3Ju4nvjCngxxMYby0BimUk+pQHPOQp3eCGChk5kfVII= +k8s.io/apimachinery v0.21.3/go.mod h1:H/IM+5vH9kZRNJ4l3x/fXP/5bOPJaVP/guptnZPeCFI= +k8s.io/apiserver v0.21.2 h1:vfGLD8biFXHzbcIEXyW3652lDwkV8tZEFJAaS2iuJlw= k8s.io/apiserver v0.21.2/go.mod h1:lN4yBoGyiNT7SC1dmNk0ue6a5Wi6O3SWOIw91TsucQw= k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= -k8s.io/client-go v0.21.2 h1:Q1j4L/iMN4pTw6Y4DWppBoUxgKO8LbffEMVEV00MUp0= k8s.io/client-go v0.21.2/go.mod h1:HdJ9iknWpbl3vMGtib6T2PyI/VYxiZfq936WNVHBRrA= +k8s.io/client-go v0.21.3 h1:J9nxZTOmvkInRDCzcSNQmPJbDYN/PjlxXT9Mos3HcLg= +k8s.io/client-go v0.21.3/go.mod h1:+VPhCgTsaFmGILxR/7E1N0S+ryO010QBeNCv5JwRGYU= k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= -k8s.io/code-generator v0.21.2 h1:EyHysEtLHTsNMoace0b3Yec9feD0qkV+5RZRoeSh+sc= k8s.io/code-generator v0.21.2/go.mod h1:8mXJDCB7HcRo1xiEQstcguZkbxZaqeUOrO9SsicWs3U= +k8s.io/code-generator v0.21.3 h1:K2Onrjuve/31D4Y5DpR9ngWM2BiiKUxrGaCxSEJS/Y8= +k8s.io/code-generator v0.21.3/go.mod h1:K3y0Bv9Cz2cOW2vXUrNZlFbflhuPvuadW6JdnN6gGKo= k8s.io/component-base v0.21.2 h1:EsnmFFoJ86cEywC0DoIkAUiEV6fjgauNugiw1lmIjs4= k8s.io/component-base v0.21.2/go.mod h1:9lvmIThzdlrJj5Hp8Z/TOgIkdfsNARQ1pT+3PByuiuc= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= @@ -1019,27 +1052,33 @@ k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.8.0 h1:Q3gmuM9hKEjefWFFYF0Mat+YyFJvsUyYuwyNNJ5C9Ts= k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM= +k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d h1:lUK8GPtuJy8ClWZhuvKoaLdKGPLq9H1PxWp7VPBZBkU= k8s.io/kube-openapi v0.0.0-20210527164424-3c818078ee3d/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/metrics v0.21.2/go.mod h1:wzlOINZMCtWq8dR9gHlyaOemmYlOpAoldEIXE82gAhI= +k8s.io/metrics v0.21.3 h1:BXLcDFR/2XUNOcFDyNI6//9pK+WIDCbQ0+uEkIjcHEc= +k8s.io/metrics v0.21.3/go.mod h1:mN3Klf203Lw1hOsfg1MG7DR/kKUhwiyu8GSFCXZdz+o= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210527160623-6fdb442a123b h1:MSqsVQ3pZvPGTqCjptfimO2WjG7A9un2zcpiHkA6M/s= k8s.io/utils v0.0.0-20210527160623-6fdb442a123b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9 h1:imL9YgXQ9p7xmPzHFm/vVd/cF78jad+n4wK1ABwYtMM= +k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.19/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/controller-runtime v0.9.2 h1:MnCAsopQno6+hI9SgJHKddzXpmv2wtouZz6931Eax+Q= -sigs.k8s.io/controller-runtime v0.9.2/go.mod h1:TxzMCHyEUpaeuOiZx/bIdc2T81vfs/aKdvJt9wuu0zk= +sigs.k8s.io/controller-runtime v0.9.3 h1:n075bHQ1wb8hpX7C27pNrqsb0fj8mcfCQfNX+oKTbYE= +sigs.k8s.io/controller-runtime v0.9.3/go.mod h1:TxzMCHyEUpaeuOiZx/bIdc2T81vfs/aKdvJt9wuu0zk= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.0 h1:C4r9BgJ98vrKnnVCjwCSXcWjWe0NKcUQkmzDXZXGwH8= sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= diff --git a/pkg/apiutils/getter.go b/pkg/apiutils/getter.go new file mode 100644 index 0000000..6162a9c --- /dev/null +++ b/pkg/apiutils/getter.go @@ -0,0 +1,127 @@ +package apiutils + +import ( + "fmt" + + ealabels "github.com/lterrac/edge-autoscaler/pkg/labels" + openfaasv1 "github.com/openfaas/faas-netes/pkg/apis/openfaas/v1" + openfaaslisters "github.com/openfaas/faas-netes/pkg/client/listers/openfaas/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/labels" + corelisters "k8s.io/client-go/listers/core/v1" +) + +type ResourceGetter struct { + pods func(namespace string) corelisters.PodNamespaceLister + functions func(namespace string) openfaaslisters.FunctionNamespaceLister + nodes corelisters.NodeLister +} + +func NewResourceGetter( + pods func(namespace string) corelisters.PodNamespaceLister, + functions func(namespace string) openfaaslisters.FunctionNamespaceLister, + nodes corelisters.NodeLister, +) *ResourceGetter { + return &ResourceGetter{ + pods: pods, + functions: functions, + nodes: nodes, + } +} + +// GetPodsOfFunction returns a list of pods which is related to a given function +func (r *ResourceGetter) GetPodsOfFunction(function *openfaasv1.Function) ([]*corev1.Pod, error) { + selector := labels.SelectorFromSet( + map[string]string{ + "controller": function.Name, + "faas_function": function.Spec.Name, + }) + return r.pods(function.Namespace).List(selector) +} + +// GetFunctionOfPod returns the function related to a given pod +func (r *ResourceGetter) GetFunctionOfPod(pod *corev1.Pod) (*openfaasv1.Function, error) { + return r.functions(pod.Namespace).Get(pod.ObjectMeta.Labels["controller"]) +} + +// GetPodsOfFunctionInNode returns a list of pods which is related to a given function and are running in a given node +func (r *ResourceGetter) GetPodsOfFunctionInNode(function *openfaasv1.Function, nodeName string) ([]*corev1.Pod, error) { + pods, err := r.GetPodsOfFunction(function) + + if err != nil { + return nil, fmt.Errorf("failed to retrieve pods: %s", err) + } + + var podsInNode []*corev1.Pod + for _, pod := range pods { + if pod.Spec.NodeName == nodeName { + podsInNode = append(podsInNode, pod) + } + } + + if len(podsInNode) == 0 { + return nil, fmt.Errorf("no pods found in node %s", nodeName) + } + + return podsInNode, nil +} + +func (r *ResourceGetter) GetNodeDelays(community, communityNamespace string) ([][]int64, error) { + + // Retrieve the nodes + nodeSelector := labels.SelectorFromSet( + map[string]string{ + ealabels.CommunityLabel.WithNamespace(communityNamespace).String(): community, + }) + nodes, err := r.nodes.List(nodeSelector) + if err != nil { + return nil, fmt.Errorf("failed to retrieve nodes using selector %s with error: %s", nodeSelector, err) + } + + delays := make([][]int64, len(nodes)) + for i := range delays { + delays[i] = make([]int64, len(nodes)) + } + return delays, nil + +} + +func (r *ResourceGetter) GetWorkload(community, communityNamespace string) ([][]int64, error) { + + // Retrieve the nodes + nodeSelector := labels.SelectorFromSet( + map[string]string{ + ealabels.CommunityLabel.WithNamespace(communityNamespace).String(): community, + }) + nodes, err := r.nodes.List(nodeSelector) + if err != nil { + return nil, fmt.Errorf("failed to retrieve nodes using selector %s with error: %s", nodeSelector, err) + } + + // Retrieve the functions + functions, err := r.functions(communityNamespace).List(labels.Everything()) + if err != nil { + return nil, fmt.Errorf("failed to retrieve functions with error: %s", err) + } + + workloads := make([][]int64, len(nodes)) + for i := range workloads { + workloads[i] = make([]int64, len(functions)) + } + return workloads, nil + +} + +func (r *ResourceGetter) GetMaxDelays(communityNamespace string) ([]int64, error) { + + // Retrieve the functions + functions, err := r.functions(communityNamespace).List(labels.Everything()) + if err != nil { + return nil, fmt.Errorf("failed to retrieve functions with error: %s", err) + } + + delays := make([]int64, len(functions)) + + return delays, nil + +} diff --git a/pkg/community-controller/pkg/controller/community-controller.go b/pkg/community-controller/pkg/controller/community-controller.go index b4788f8..41d7cc0 100644 --- a/pkg/community-controller/pkg/controller/community-controller.go +++ b/pkg/community-controller/pkg/controller/community-controller.go @@ -4,6 +4,7 @@ import ( "fmt" "time" + "github.com/lterrac/edge-autoscaler/pkg/apiutils" eaclientset "github.com/lterrac/edge-autoscaler/pkg/generated/clientset/versioned" eascheme "github.com/lterrac/edge-autoscaler/pkg/generated/clientset/versioned/scheme" "github.com/lterrac/edge-autoscaler/pkg/informers" @@ -49,6 +50,8 @@ type CommunityController struct { communityName string communityNamespace string + resGetter *apiutils.ResourceGetter + // recorder is an event recorder for recording Event resources to the // Kubernetes API. recorder record.EventRecorder @@ -94,6 +97,8 @@ func NewController( communityNamespace: communityNamespace, } + controller.resGetter = apiutils.NewResourceGetter(controller.listers.Pods, controller.listers.Functions, controller.listers.NodeLister) + klog.Info("Setting up event handlers") informers.CommunitySchedule.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: controller.handleCommunityScheduleAdd, diff --git a/pkg/community-controller/pkg/controller/sync.go b/pkg/community-controller/pkg/controller/sync.go index 1d34b71..9881278 100644 --- a/pkg/community-controller/pkg/controller/sync.go +++ b/pkg/community-controller/pkg/controller/sync.go @@ -3,6 +3,7 @@ package controller import ( "context" "fmt" + ealabels "github.com/lterrac/edge-autoscaler/pkg/labels" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -12,7 +13,6 @@ import ( "k8s.io/klog/v2" ) - // TODO: the key is not used func (c *CommunityController) runScheduler(key string) error { @@ -34,17 +34,17 @@ func (c *CommunityController) runScheduler(key string) error { return fmt.Errorf("failed to retrieve functions with error: %s", err) } - delays, err := c.getNodeDelays() + delays, err := c.resGetter.GetNodeDelays(c.communityName, c.communityNamespace) if err != nil { return fmt.Errorf("failed to retrieve node delays with error: %s", err) } - workloads, err := c.getWorkload() + workloads, err := c.resGetter.GetWorkload(c.communityName, c.communityNamespace) if err != nil { return fmt.Errorf("failed to retrieve node workloads with error: %s", err) } - maxDelays, err := c.getMaxDelays() + maxDelays, err := c.resGetter.GetMaxDelays(c.communityNamespace) if err != nil { return fmt.Errorf("failed to retrieve max delays with error: %s", err) } @@ -134,7 +134,7 @@ func (c *CommunityController) syncCommunitySchedule(key string) error { return fmt.Errorf("failed to find function %s/%s in community schedule allocations", function.Namespace, function.Name) } - pods, err := c.GetPodsOfFunction(function) + pods, err := c.resGetter.GetPodsOfFunction(function) if err != nil { klog.Errorf("failed to retrieve pods of function %s/%s, with error %s", function.Namespace, function.Name, err) return fmt.Errorf("failed to retrieve pods of function %s/%s, with error %s", function.Namespace, function.Name, err) @@ -143,8 +143,7 @@ func (c *CommunityController) syncCommunitySchedule(key string) error { for _, pod := range pods { // If the pod has been scheduled but on a node which is not present in the community schedule allocation if len(pod.Spec.NodeName) != 0 { - if community, ok := pod.ObjectMeta.Labels[ealabels.CommunityLabel.WithNamespace(c.communityNamespace).String()]; - ok && community == c.communityName{ + if community, ok := pod.ObjectMeta.Labels[ealabels.CommunityLabel.WithNamespace(c.communityNamespace).String()]; ok && community == c.communityName { if _, ok := cs.Spec.Allocations[fkey][pod.Spec.NodeName]; !ok { klog.Info(cs.Spec.Allocations) klog.Info(pod.Spec.NodeName) @@ -187,7 +186,7 @@ func (c *CommunityController) schedulePod(key string) error { return nil } - function, err := c.GetFunctionOfPod(pod) + function, err := c.resGetter.GetFunctionOfPod(pod) if err != nil { klog.Errorf("failed to retrieve function of pod %s/%s, with error %s", namespace, name, err) return err @@ -199,7 +198,7 @@ func (c *CommunityController) schedulePod(key string) error { return err } - otherPods, err := c.GetPodsOfFunction(function) + otherPods, err := c.resGetter.GetPodsOfFunction(function) if err != nil { klog.Errorf("failed to retrieve pods of function %s/%s, with error %s", function.Namespace, function.Name, err) return err @@ -210,8 +209,8 @@ func (c *CommunityController) schedulePod(key string) error { busyNodes[otherPod.Spec.NodeName] = true } - if _, ok := cs.Spec.Allocations[function.Namespace + "/" + function.Name]; ok { - for nodeName, v := range cs.Spec.Allocations[function.Namespace + "/" + function.Name] { + if _, ok := cs.Spec.Allocations[function.Namespace+"/"+function.Name]; ok { + for nodeName, v := range cs.Spec.Allocations[function.Namespace+"/"+function.Name] { if v { if _, ok = busyNodes[nodeName]; !ok { err = c.bind(pod, nodeName) diff --git a/pkg/community-controller/pkg/controller/utils.go b/pkg/community-controller/pkg/controller/utils.go index 4836851..5515b4a 100644 --- a/pkg/community-controller/pkg/controller/utils.go +++ b/pkg/community-controller/pkg/controller/utils.go @@ -1,30 +1,10 @@ package controller import ( - "fmt" eav1alpha1 "github.com/lterrac/edge-autoscaler/pkg/apis/edgeautoscaler/v1alpha1" - ealabels "github.com/lterrac/edge-autoscaler/pkg/labels" - openfaasv1 "github.com/openfaas/faas-netes/pkg/apis/openfaas/v1" - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" ) -// GetPodsOfFunction returns a list of pods which is related to a given function -func (c *CommunityController) GetPodsOfFunction(function *openfaasv1.Function) ([]*corev1.Pod, error) { - selector := labels.SelectorFromSet( - map[string]string{ - "controller": function.Name, - "faas_function": function.Spec.Name, - }) - return c.listers.PodLister.Pods(function.Namespace).List(selector) -} - -// GetFunctionOfPod returns the function related to a given pod -func (c *CommunityController) GetFunctionOfPod(pod *corev1.Pod) (*openfaasv1.Function, error) { - return c.listers.FunctionLister.Functions(pod.Namespace).Get(pod.ObjectMeta.Labels["controller"]) -} - // NewCommunitySchedule returns a new empty community schedule with a given namespace and name func NewCommunitySchedule(namespace, name string) *eav1alpha1.CommunitySchedule { return &eav1alpha1.CommunitySchedule{ @@ -41,63 +21,3 @@ func NewCommunitySchedule(namespace, name string) *eav1alpha1.CommunitySchedule }, } } - -func (c *CommunityController) getNodeDelays() ([][]int64, error) { - - // Retrieve the nodes - nodeSelector := labels.SelectorFromSet( - map[string]string{ - ealabels.CommunityLabel.WithNamespace(c.communityNamespace).String(): c.communityName, - }) - nodes, err := c.listers.NodeLister.List(nodeSelector) - if err != nil { - return nil, fmt.Errorf("failed to retrieve nodes using selector %s with error: %s", nodeSelector, err) - } - - delays := make([][]int64, len(nodes)) - for i := range delays { - delays[i] = make([]int64, len(nodes)) - } - return delays, nil - -} - -func (c *CommunityController) getWorkload() ([][]int64, error) { - - // Retrieve the nodes - nodeSelector := labels.SelectorFromSet( - map[string]string{ - ealabels.CommunityLabel.WithNamespace(c.communityNamespace).String(): c.communityName, - }) - nodes, err := c.listers.NodeLister.List(nodeSelector) - if err != nil { - return nil, fmt.Errorf("failed to retrieve nodes using selector %s with error: %s", nodeSelector, err) - } - - // Retrieve the functions - functions, err := c.listers.FunctionLister.Functions(c.communityNamespace).List(labels.Everything()) - if err != nil { - return nil, fmt.Errorf("failed to retrieve functions with error: %s", err) - } - - workloads := make([][]int64, len(nodes)) - for i := range workloads { - workloads[i] = make([]int64, len(functions)) - } - return workloads, nil - -} - -func (c *CommunityController) getMaxDelays() ([]int64, error) { - - // Retrieve the functions - functions, err := c.listers.FunctionLister.Functions(c.communityNamespace).List(labels.Everything()) - if err != nil { - return nil, fmt.Errorf("failed to retrieve functions with error: %s", err) - } - - delays := make([]int64, len(functions)) - - return delays, nil - -} diff --git a/pkg/dispatcher/Dockerfile b/pkg/dispatcher/Dockerfile new file mode 100644 index 0000000..2462caa --- /dev/null +++ b/pkg/dispatcher/Dockerfile @@ -0,0 +1,7 @@ +FROM alpine:3.14.0 + +LABEL name="Dispatcher" + +COPY dispatcher /usr/local/bin/ + +CMD ["dispatcher"] diff --git a/pkg/dispatcher/Makefile b/pkg/dispatcher/Makefile new file mode 100644 index 0000000..b54109f --- /dev/null +++ b/pkg/dispatcher/Makefile @@ -0,0 +1,48 @@ +BUILD_SETTINGS = CGO_ENABLED=0 GOOS=linux GOARCH=amd64 +IMAGE = dispatcher +IMAGE_VERSION = $(shell git tag --points-at HEAD | sed '/$(IMAGE)\/.*/!s/.*//' | sed 's/\//:/') +REPO = systemautoscaler + + +.PHONY: all build coverage clean e2e fmt release test vet + +all: build test coverage clean + +build: fmt vet test + $(BUILD_SETTINGS) go build -trimpath -o "$(IMAGE)" ./main.go + +fmt: + @go fmt ./... + +test: + @go test -race $(shell go list ./... | grep -v e2e) --coverprofile=coverage.out + +e2e: + @go test -race $(shell go list ./... | grep e2e) + +coverage: test + @go tool cover -func=coverage.out + +release: + @if [ -n "$(IMAGE_VERSION)" ]; then \ + echo "Building $(IMAGE_VERSION)" ;\ + docker build -t $(REPO)/$(IMAGE_VERSION) . ;\ + docker push $(REPO)/$(IMAGE_VERSION) ;\ + else \ + echo "$(IMAGE) unchanged: no version tag on HEAD commit" ;\ + fi + +vet: + @go vet ./... + +clean: + @rm -rf ./$(IMAGE) + @go clean -cache + @rm -rf *.out + +dev: + echo "Building dev release"; \ + $(BUILD_SETTINGS) go build -trimpath -o "$(IMAGE)" ./main.go; \ + docker build -t $(REPO)/$(IMAGE):dev . ;\ + docker push $(REPO)/$(IMAGE):dev ; \ + echo "Dev release built and pushed"; \ diff --git a/pkg/dispatcher/README.md b/pkg/dispatcher/README.md new file mode 100644 index 0000000..8e5a1c8 --- /dev/null +++ b/pkg/dispatcher/README.md @@ -0,0 +1 @@ +# Dispatcher diff --git a/pkg/dispatcher/deploy/deploy.yaml b/pkg/dispatcher/deploy/deploy.yaml new file mode 100644 index 0000000..a59ddfb --- /dev/null +++ b/pkg/dispatcher/deploy/deploy.yaml @@ -0,0 +1,37 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: dispatcher + namespace: openfaas-fn +spec: + strategy: + type: Recreate + selector: + matchLabels: + app: dispatcher + replicas: 1 + template: + metadata: + labels: + app: dispatcher + spec: + automountServiceAccountToken: true + serviceAccountName: community-controller + nodeSelector: + kubernetes.io/hostname: kind-worker + containers: + - name: system-controller + image: systemautoscaler/dispatcher:dev + imagePullPolicy: Always + command: + - "dispatcher" + - "--node=kind-worker" + ports: + - containerPort: 8080 + resources: + limits: + cpu: 200m + memory: 200Mi + requests: + cpu: 100m + memory: 100Mi diff --git a/pkg/dispatcher/main.go b/pkg/dispatcher/main.go new file mode 100644 index 0000000..783ebe1 --- /dev/null +++ b/pkg/dispatcher/main.go @@ -0,0 +1,92 @@ +package main + +import ( + "flag" + "time" + + lbcontroller "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/controller" + eaclientset "github.com/lterrac/edge-autoscaler/pkg/generated/clientset/versioned" + eainformers "github.com/lterrac/edge-autoscaler/pkg/generated/informers/externalversions" + informerswrapper "github.com/lterrac/edge-autoscaler/pkg/informers" + openfaasclientsent "github.com/openfaas/faas-netes/pkg/client/clientset/versioned" + openfaasinformers "github.com/openfaas/faas-netes/pkg/client/informers/externalversions" + + "github.com/lterrac/edge-autoscaler/pkg/signals" + "k8s.io/client-go/informers" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/tools/clientcmd" + "k8s.io/klog/v2" +) + +var ( + masterURL string + kubeconfig string + node string +) + +func main() { + klog.InitFlags(nil) + flag.Parse() + + // set up signals so we handle the first shutdown signal gracefully + stopCh := signals.SetupSignalHandler() + + cfg, err := clientcmd.BuildConfigFromFlags(masterURL, kubeconfig) + if err != nil { + klog.Fatalf("Error building kubeconfig: %s", err.Error()) + } + + eaclient, err := eaclientset.NewForConfig(cfg) + if err != nil { + klog.Fatalf("Error building example clientset: %s", err.Error()) + } + + kubernetesClient, err := kubernetes.NewForConfig(cfg) + if err != nil { + klog.Fatalf("Error building example clientset: %s", err.Error()) + } + + openfaasClient, err := openfaasclientsent.NewForConfig(cfg) + if err != nil { + klog.Fatalf("Error building example clientset: %s", err.Error()) + } + + eaInformerFactory := eainformers.NewSharedInformerFactory(eaclient, time.Second*30) + coreInformerFactory := informers.NewSharedInformerFactory(kubernetesClient, time.Second*30) + openfaasInformerFactory := openfaasinformers.NewSharedInformerFactory(openfaasClient, time.Minute*30) + + informers := informerswrapper.Informers{ + Pod: coreInformerFactory.Core().V1().Pods(), + Node: coreInformerFactory.Core().V1().Nodes(), + Service: coreInformerFactory.Core().V1().Services(), + Deployment: coreInformerFactory.Apps().V1().Deployments(), + CommunitySchedule: eaInformerFactory.Edgeautoscaler().V1alpha1().CommunitySchedules(), + CommunityConfiguration: eaInformerFactory.Edgeautoscaler().V1alpha1().CommunityConfigurations(), + Function: openfaasInformerFactory.Openfaas().V1().Functions(), + } + + lbController := lbcontroller.NewController( + kubernetesClient, + eaclient, + informers, + node, + ) + + coreInformerFactory.Start(stopCh) + eaInformerFactory.Start(stopCh) + openfaasInformerFactory.Start(stopCh) + + if err = lbController.Run(2, stopCh); err != nil { + klog.Fatalf("Error running system controller: %s", err.Error()) + } + defer lbController.Shutdown() + + <-stopCh + klog.Info("Shutting down workers") +} + +func init() { + flag.StringVar(&kubeconfig, "kubeconfig", "", "Path to a kubeconfig. Only required if out-of-cluster.") + flag.StringVar(&masterURL, "master", "", "The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.") + flag.StringVar(&node, "node", "", "The node on which the dispatcher is running") +} diff --git a/pkg/dispatcher/pkg/balancer/load-balancer.go b/pkg/dispatcher/pkg/balancer/load-balancer.go new file mode 100644 index 0000000..c192d35 --- /dev/null +++ b/pkg/dispatcher/pkg/balancer/load-balancer.go @@ -0,0 +1,207 @@ +package balancer + +import ( + "context" + "fmt" + "io" + "log" + "net" + "net/http" + "net/url" + "time" + + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/balancer/pool" + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/balancer/queue" + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/monitoring/metrics" + "k8s.io/apimachinery/pkg/api/resource" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/klog/v2" +) + +type requestCount int + +// recoveryFunc handles the request forwarding failure +type recoveryFunc func(req *queue.HTTPRequest) + +const ( + // Attempts represents how many times the balancer has tried to forward a request to a backend and did not succeded because it was unreachable + Attempts requestCount = iota + // Retry represents how many times the balancer has tried to add a backend to the server pool and did not succeded because it was unreachable + Retry + + // ServerNotFoundError is the standard error when trying to manipulate a non existing server + ServerNotFoundError string = "server %s does not exists" +) + +// NodeInfo wraps the info needed by the persistor to save metrics +type NodeInfo struct { + // Node is the name of the node on which the balancer is running + Node string + // Function is the name of the function to be balanced + Function string + // Namespace is the namespace of the function + Namespace string + // Community is the community on which the function is running + Community string +} + +// LoadBalancer is the wrapper of the server pool and performs the routing to any of its backends +type LoadBalancer struct { + serverPool *pool.ServerPool + metricChan chan<- metrics.RawResponseTime + NodeInfo + // metricChan chan<- monitoringmetrics.RawMetricData +} + +// NewLoadBalancer returns a new LoadBalancer +func NewLoadBalancer(node NodeInfo, metricChan chan<- metrics.RawResponseTime) *LoadBalancer { + // func NewLoadBalancer(monitoringChan chan<- monitoringmetrics.RawMetricData) *LoadBalancer { + lb := &LoadBalancer{ + NodeInfo: node, + serverPool: pool.NewServerPool(), + metricChan: metricChan, + } + + return lb +} + +// Balance forwards to any of the active backends the incoming request +func (lb *LoadBalancer) Balance(w http.ResponseWriter, r *http.Request) { + peer, err := lb.serverPool.NextBackend() + + if err != nil { + http.Error(w, "Service not available", http.StatusServiceUnavailable) + } + + transformer := UpstreamRequestBuilder{ + Request: r, + Backend: peer, + } + + upstreamReq := transformer.Build() + + if upstreamReq.Body != nil { + defer upstreamReq.Body.Close() + } + + log.Printf("forwardRequest: %s %s\n", upstreamReq.Host, upstreamReq.URL.String()) + + ctx, cancel := context.WithTimeout(r.Context(), time.Second*90) + defer cancel() + + start := time.Now() + res, resErr := peer.Client.Do(upstreamReq.WithContext(ctx)) + + if resErr != nil { + badStatus := http.StatusBadGateway + w.WriteHeader(badStatus) + return + } + delta := time.Since(start) + + lb.metricChan <- metrics.RawResponseTime{ + Timestamp: start, + Source: lb.Node, + Function: lb.Function, + Destination: peer.Node, + Namespace: lb.Namespace, + Community: lb.Community, + Gpu: peer.HasGpu, + Latency: int(delta.Milliseconds()), + } + + if res.Body != nil { + defer res.Body.Close() + } + + copyHeaders(w.Header(), &res.Header) + + // Write status code + w.WriteHeader(res.StatusCode) + + if res.Body != nil { + // Copy the body over + io.CopyBuffer(w, res.Body, nil) + } + + klog.Info("request served") + + return + +} + +// AddServer adds a new backend to the server pool +func (lb *LoadBalancer) AddServer(serverURL *url.URL, node string, hasGpu bool, workload *resource.Quantity, recovery recoveryFunc) { + klog.Infof("Adding server: %v", serverURL.String()) + + // TODO: this does not work + // proxy.ErrorHandler = func(writer http.ResponseWriter, request *http.Request, e error) { + // utilruntime.HandleError(fmt.Errorf("error while serving request to backend %v: %v", request.URL.Host, e)) + // // enqueue the request again if it cannot be served by a backend + // recovery(&queue.HTTPRequest{ + // ResponseWriter: writer, + // Request: request, + // }) + // } + + b := pool.Backend{ + URL: serverURL, + Node: node, + HasGpu: hasGpu, + Client: &http.Client{ + Transport: &http.Transport{ + DialContext: (&net.Dialer{ + Timeout: 90 * time.Second, + }).DialContext, + // TODO: Some of those value should be tuned + IdleConnTimeout: 90 * time.Second, + ExpectContinueTimeout: 5 * time.Second, + MaxIdleConnsPerHost: 1000, + MaxIdleConns: 1000, + MaxConnsPerHost: 1000, + }, + Timeout: time.Second * 90, + }, + } + + lb.serverPool.SetBackend(b, workload) +} + +// DeleteServer removes a backend from the pool +func (lb *LoadBalancer) DeleteServer(serverURL *url.URL) error { + b, exists := lb.serverPool.GetBackend(serverURL) + + if !exists { + return fmt.Errorf(ServerNotFoundError, serverURL.Host) + } + + lb.serverPool.RemoveBackend(b) + return nil +} + +// ServerExists checks if a backend exists in the pool +func (lb *LoadBalancer) ServerExists(serverURL *url.URL) (exists bool) { + _, exists = lb.serverPool.GetBackend(serverURL) + return exists +} + +// UpdateWorkload set the new server weight +func (lb *LoadBalancer) UpdateWorkload(serverURL *url.URL, workload *resource.Quantity) error { + b, exists := lb.serverPool.GetBackend(serverURL) + + if !exists { + return fmt.Errorf(ServerNotFoundError, serverURL.Host) + } + + lb.serverPool.SetBackend(b, workload) + return nil +} + +func (lb *LoadBalancer) ServerPoolDiff(servers []*url.URL) []*url.URL { + return lb.serverPool.BackendDiff(servers) +} + +// Shutdown is called when the controller has finished its work +func (lb *LoadBalancer) Shutdown() { + utilruntime.HandleCrash() +} diff --git a/pkg/dispatcher/pkg/balancer/load-balancer_test.go b/pkg/dispatcher/pkg/balancer/load-balancer_test.go new file mode 100644 index 0000000..af8ee19 --- /dev/null +++ b/pkg/dispatcher/pkg/balancer/load-balancer_test.go @@ -0,0 +1,108 @@ +package balancer + +import ( + "fmt" + "net/http" + "net/url" + "testing" + + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/balancer/queue" + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/monitoring/metrics" + "github.com/stretchr/testify/require" + "k8s.io/apimachinery/pkg/api/resource" +) + +type FakeResponseWriter struct { + header http.Header + body []byte +} + +func (f *FakeResponseWriter) Header() http.Header { + return f.header +} +func (f *FakeResponseWriter) Write(b []byte) (int, error) { + f.body = b + return len(b), nil +} +func (f *FakeResponseWriter) WriteHeader(statusCode int) { + f.header.Set("code", fmt.Sprint(statusCode)) +} + +// always return 200 +func healthyHandler(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) +} + +func fakePoll(c <-chan metrics.RawResponseTime) { + for { + select { + case <-c: + default: + } + } +} + +func noRecovery(req *queue.HTTPRequest) {} + +func TestReverseProxy(t *testing.T) { + testacases := []struct { + description string + backends []*url.URL + createBackends func(url *url.URL) *http.Server + }{ + { + description: "Test balancer redirection", + backends: []*url.URL{ + { + Host: "127.0.0.1:8081", + Scheme: "http", + }, + }, + createBackends: func(url *url.URL) *http.Server { + // create http server + server := &http.Server{ + Addr: url.Host, + Handler: http.HandlerFunc(healthyHandler), + } + + return server + }, + }, + } + + for _, tt := range testacases { + t.Run(tt.description, func(t *testing.T) { + servers := []*http.Server{} + for _, url := range tt.backends { + server := tt.createBackends(url) + servers = append(servers, server) + go server.ListenAndServe() + } + + monitoringChan := make(chan metrics.RawResponseTime) + go fakePoll(monitoringChan) + + lb := NewLoadBalancer(NodeInfo{}, monitoringChan) + // lb := NewLoadBalancer(monitoringChan) + + for _, backend := range tt.backends { + lb.AddServer(backend, "", false, resource.NewMilliQuantity(2, resource.BinarySI), noRecovery) + } + + req := &http.Request{ + URL: &url.URL{ + Host: "127.0.0.1:8081", + Scheme: "http", + }, + } + response := &FakeResponseWriter{ + header: http.Header{}, + body: make([]byte, 0), + } + + lb.Balance(response, req) + + require.Equal(t, fmt.Sprint(http.StatusOK), response.header.Get("code")) + }) + } +} diff --git a/pkg/dispatcher/pkg/balancer/pool/serverpool.go b/pkg/dispatcher/pkg/balancer/pool/serverpool.go new file mode 100644 index 0000000..cd62d3c --- /dev/null +++ b/pkg/dispatcher/pkg/balancer/pool/serverpool.go @@ -0,0 +1,96 @@ +package pool + +import ( + "net/http" + "net/url" + + "github.com/modern-go/concurrent" + "k8s.io/apimachinery/pkg/api/resource" +) + +//TODO: maybe resource.Quantity will not be used by default + +// Backend is the default backend wrapper +type Backend struct { + // URL is the pod URL + URL *url.URL + // Node is the node name on which the pod is running + Node string + // HasGpu is used to determine if the pod has a GPU attached + HasGpu bool + // Client is the http client to use to connect to the pod + Client *http.Client +} + +// ServerPool contains the backends list +type ServerPool struct { + backends concurrent.Map +} + +// NewServerPool returns a new ServerPool +func NewServerPool() *ServerPool { + return &ServerPool{ + backends: concurrent.Map{}, + } +} + +// SetBackend set a backend in the map and its workload weight +func (s *ServerPool) SetBackend(b Backend, workload *resource.Quantity) { + s.backends.Store(b, workload) +} + +// RemoveBackend removes a backend from the pool +func (s *ServerPool) RemoveBackend(b Backend) { + s.backends.Delete(b) +} + +// GetBackend returns a backend given its URL. It returns the backend and bool +// if the server exists +func (s *ServerPool) GetBackend(url *url.URL) (backend Backend, found bool) { + found = false + s.backends.Range(func(key, value interface{}) bool { + if key.(Backend).URL.String() == url.String() { + backend = key.(Backend) + found = true + return false + } + return true + }) + + if !found { + return Backend{}, false + } + + return +} + +// NextBackend returns the backend that should serve the new request +func (s *ServerPool) NextBackend() (backend Backend, err error) { + s.backends.Range(func(key, value interface{}) bool { + backend = key.(Backend) + return false + }) + + return backend, nil +} + +func (s *ServerPool) BackendDiff(backends []*url.URL) (diff []*url.URL) { + blueprint := make(map[*url.URL]bool) + + s.backends.Range(func(key, value interface{}) bool { + blueprint[key.(Backend).URL] = true + return true + }) + + for _, desired := range backends { + if _, exists := blueprint[desired]; exists { + delete(blueprint, desired) + } + } + + for oldBackend := range blueprint { + diff = append(diff, oldBackend) + } + return + +} diff --git a/pkg/dispatcher/pkg/balancer/pool/serverpool_test.go b/pkg/dispatcher/pkg/balancer/pool/serverpool_test.go new file mode 100644 index 0000000..8c513cc --- /dev/null +++ b/pkg/dispatcher/pkg/balancer/pool/serverpool_test.go @@ -0,0 +1,73 @@ +package pool + +import ( + "net/url" + "testing" + + "github.com/stretchr/testify/require" + "k8s.io/apimachinery/pkg/api/resource" +) + +var backends = []Backend{ + { + URL: &url.URL{ + Host: "localhost:8080", + }, + }, + { + URL: &url.URL{ + Host: "localhost:8081", + }, + }, + { + URL: &url.URL{ + Host: "localhost:8082", + }, + }, +} + +func TestPool(t *testing.T) { + testcases := []struct { + description string + input []Backend + verifyFunc func(t *testing.T, p *ServerPool) + }{ + { + description: "test GetBackend", + input: backends, + + verifyFunc: func(t *testing.T, p *ServerPool) { + for _, desired := range backends { + actual, found := p.GetBackend(desired.URL) + require.True(t, found) + require.Equal(t, desired, actual) + } + }, + }, + { + description: "test RemoveBackend", + input: backends, + + verifyFunc: func(t *testing.T, p *ServerPool) { + for _, b := range backends { + p.RemoveBackend(b) + actual, found := p.GetBackend(b.URL) + require.False(t, found) + require.Equal(t, Backend{}, actual) + } + }, + }, + } + + for _, tt := range testcases { + t.Run(tt.description, func(t *testing.T) { + pool := NewServerPool() + + for _, backend := range tt.input { + pool.SetBackend(backend, resource.NewMilliQuantity(2, resource.BinarySI)) + } + + tt.verifyFunc(t, pool) + }) + } +} diff --git a/pkg/dispatcher/pkg/balancer/queue/request-queue.go b/pkg/dispatcher/pkg/balancer/queue/request-queue.go new file mode 100644 index 0000000..71ce4a3 --- /dev/null +++ b/pkg/dispatcher/pkg/balancer/queue/request-queue.go @@ -0,0 +1,51 @@ +package queue + +import ( + "container/list" + "net/http" + "sync" +) + +// HTTPRequest is used to wrap incoming request and send them on the queue +type HTTPRequest struct { + ResponseWriter http.ResponseWriter + Request *http.Request + ResponseChan chan<- struct{} +} + +//TODO: maybe we should create an interface to change the current queue implementation with workqueue.NamedRateLimitingQueue + +// RequestQueue stores the incoming HTTPRequest and makes them available with a FIFO policy +type RequestQueue struct { + queue *list.List + lock sync.Mutex +} + +// NewRequestQueue returns a new RequestQueue +func NewRequestQueue() *RequestQueue { + return &RequestQueue{ + queue: list.New(), + lock: sync.Mutex{}, + } +} + +// Enqueue adds a request to the queue +func (q *RequestQueue) Enqueue(element *HTTPRequest) { + q.lock.Lock() + defer q.lock.Unlock() + q.queue.PushFront(element) +} + +// Dequeue removes the oldest element from the queue +func (q *RequestQueue) Dequeue() *HTTPRequest { + q.lock.Lock() + defer q.lock.Unlock() + e := q.queue.Back() + + if e == nil { + return nil + } + + q.queue.Remove(e) + return e.Value.(*HTTPRequest) +} diff --git a/pkg/dispatcher/pkg/balancer/queue/request-queue_test.go b/pkg/dispatcher/pkg/balancer/queue/request-queue_test.go new file mode 100644 index 0000000..d99b484 --- /dev/null +++ b/pkg/dispatcher/pkg/balancer/queue/request-queue_test.go @@ -0,0 +1,166 @@ +package queue + +import ( + "net/http" + "net/url" + "testing" + + "github.com/stretchr/testify/require" + "k8s.io/klog/v2" +) + +var httpRequestList = []*HTTPRequest{ + { + Request: &http.Request{ + URL: &url.URL{ + Host: "foo", + }, + }, + }, + { + Request: &http.Request{ + URL: &url.URL{ + Host: "bar", + }, + }, + }, + { + Request: &http.Request{ + URL: &url.URL{ + Host: "foobar", + }, + }, + }, +} + +func TestEnqueue(t *testing.T) { + testcases := []struct { + description string + input []*HTTPRequest + itemsInQueue []*HTTPRequest + itemsDequeued []*HTTPRequest + dequeueOperations func(queue *RequestQueue) []*HTTPRequest + }{ + { + description: "test enqueue", + input: httpRequestList, + itemsInQueue: httpRequestList, + itemsDequeued: []*HTTPRequest{}, + dequeueOperations: func(queue *RequestQueue) []*HTTPRequest { + return []*HTTPRequest{} + }, + }, + { + description: "test dequeue", + input: httpRequestList, + itemsInQueue: httpRequestList[1:], + itemsDequeued: []*HTTPRequest{httpRequestList[0]}, + dequeueOperations: func(queue *RequestQueue) []*HTTPRequest { + return []*HTTPRequest{queue.Dequeue()} + }, + }, + { + description: "test empty queue", + input: httpRequestList, + itemsInQueue: []*HTTPRequest{}, + itemsDequeued: httpRequestList, + dequeueOperations: func(queue *RequestQueue) (result []*HTTPRequest) { + for range httpRequestList { + result = append(result, queue.Dequeue()) + } + return + }, + }, + } + + for _, tt := range testcases { + t.Run(tt.description, func(t *testing.T) { + q := NewRequestQueue() + + for _, e := range tt.input { + klog.Errorf("%v", e.Request.URL) + q.Enqueue(e) + } + + actualDequeue := tt.dequeueOperations(q) + + require.Equal(t, tt.itemsDequeued, actualDequeue) + + for _, desiredInQueueElemnt := range tt.itemsInQueue { + e := *q.Dequeue() + klog.Errorf("%v, desired: %v", e.Request.URL, desiredInQueueElemnt.Request.URL) + require.Equal(t, desiredInQueueElemnt.Request.URL, e.Request.URL) + } + + require.Nil(t, q.Dequeue()) + }) + } +} + +// var httpRequestList = []HTTPRequest{ +// { +// Request: &http.Request{ +// URL: &url.URL{ +// Host: "foo", +// }, +// }, +// }, +// { +// Request: &http.Request{ +// URL: &url.URL{ +// Host: "bar", +// }, +// }, +// }, +// { +// Request: &http.Request{ +// URL: &url.URL{ +// Host: "foobar", +// }, +// }, +// }, +// } + +// func TestEnqueue(t *testing.T) { +// testcases := []struct { +// description string +// input []HTTPRequest +// itemsInQueue []HTTPRequest +// itemsDequeued []HTTPRequest +// dequeueOperations func(queue *RequestQueue) []HTTPRequest +// }{ +// { +// description: "test enqueue", +// input: httpRequestList, +// itemsInQueue: httpRequestList, +// itemsDequeued: []HTTPRequest{}, +// dequeueOperations: func(queue *RequestQueue) []HTTPRequest { +// return []HTTPRequest{} +// }, +// }, +// } + +// for _, tt := range testcases { +// t.Run(tt.description, func(t *testing.T) { +// q := NewRequestQueue() + +// for _, e := range tt.input { +// klog.Errorf("%v, pointer %v", e.Request.URL, &e) +// q.Enqueue(&e) +// } + +// actualDequeue := tt.dequeueOperations(q) + +// for _, desiredDequeuedElement := range tt.itemsDequeued { +// require.Equal(t, desiredDequeuedElement, actualDequeue) +// } + +// for _, desiredInQueueElemnt := range tt.itemsInQueue { +// e := q.Dequeue() +// klog.Errorf("%v, desired: %v, pointer: %v", e.Request.URL, desiredInQueueElemnt.Request.URL, e) +// // require.Equal(t, desiredInQueueElemnt.Request.URL, e.Request.URL) +// } +// log.Fatal("") +// }) +// } +// } diff --git a/pkg/dispatcher/pkg/balancer/urltransformer.go b/pkg/dispatcher/pkg/balancer/urltransformer.go new file mode 100644 index 0000000..5327f3e --- /dev/null +++ b/pkg/dispatcher/pkg/balancer/urltransformer.go @@ -0,0 +1,90 @@ +package balancer + +import ( + "fmt" + "net/http" + "strings" + + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/balancer/pool" + "k8s.io/klog/v2" +) + +// UpstreamRequestBuilder transforms the incoming requests URL in the one +type UpstreamRequestBuilder struct { + // Request is the original http request + Request *http.Request + // BaseURL is the URL used by the client to connect to call a function outside the cluster. + Backend pool.Backend +} + +func (u UpstreamRequestBuilder) baseURL() string { + return fmt.Sprintf("%v://%v", u.Backend.URL.Scheme, u.Backend.URL.Host) +} + +func (u UpstreamRequestBuilder) buildRequestURL() string { + parts := strings.Split(u.Request.URL.Path, "/") + + var prefixIndex int + found := false + for prefixIndex = range parts { + if parts[prefixIndex] == "function" { + found = true + break + } + } + + if !found { + return u.Request.URL.Path + } + + gatewayPrefix := fmt.Sprintf("/%s/%s/%s", parts[prefixIndex], parts[prefixIndex+1], parts[prefixIndex+2]) + + return strings.ReplaceAll(u.Request.URL.Path, gatewayPrefix, "") +} + +func (u UpstreamRequestBuilder) Build() *http.Request { + url := u.baseURL() + u.buildRequestURL() + + if len(u.Request.URL.RawQuery) > 0 { + url = fmt.Sprintf("%s?%s", url, u.Request.URL.RawQuery) + } + + klog.Infof("forwarding requesto to %v", url) + + upstreamReq, err := http.NewRequest(u.Request.Method, url, nil) + upstreamReq.URL.Scheme = u.Backend.URL.Scheme + + if err != nil { + klog.Errorf("Error creating upstream request: %v", err) + return nil + } + + copyHeaders(upstreamReq.Header, &u.Request.Header) + + if len(u.Request.Host) > 0 && upstreamReq.Header.Get("X-Forwarded-Host") == "" { + upstreamReq.Header["X-Forwarded-Host"] = []string{u.Request.Host} + } + + if upstreamReq.Header.Get("X-Forwarded-For") == "" { + upstreamReq.Header["X-Forwarded-For"] = []string{u.Request.RemoteAddr} + } + + if u.Request.Body != nil { + upstreamReq.Body = u.Request.Body + } + + return upstreamReq +} + +func copyHeaders(destination http.Header, source *http.Header) { + for k, v := range *source { + vClone := make([]string, len(v)) + copy(vClone, v) + (destination)[k] = vClone + } +} +func deleteHeaders(target *http.Header, exclude *[]string) { + for _, h := range *exclude { + target.Del(h) + } +} diff --git a/pkg/dispatcher/pkg/balancer/urltransformer_test.go b/pkg/dispatcher/pkg/balancer/urltransformer_test.go new file mode 100644 index 0000000..d91c617 --- /dev/null +++ b/pkg/dispatcher/pkg/balancer/urltransformer_test.go @@ -0,0 +1,135 @@ +package balancer + +import ( + "net/http" + "net/url" + "testing" + + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/balancer/pool" + "github.com/stretchr/testify/require" +) + +func TestBuilUpstreamRequest(t *testing.T) { + testcases := []struct { + description string + request *http.Request + backend pool.Backend + expected *http.Request + }{ + { + description: "change host", + request: &http.Request{ + Proto: "HTTP/1.1", + Method: http.MethodGet, + URL: &url.URL{ + Scheme: "http", + Host: "example.com", + }, + Host: "example.com", + }, + backend: pool.Backend{ + URL: &url.URL{ + Scheme: "http", + Host: "proxy.org", + }, + }, + expected: &http.Request{ + Proto: "HTTP/1.1", + Method: http.MethodGet, + URL: &url.URL{ + Scheme: "http", + Host: "proxy.org", + }, + Host: "proxy.org", + Header: map[string][]string{ + "X-Forwarded-For": {""}, + "X-Forwarded-Host": {"example.com"}, + }, + }, + }, + { + description: "delete function prefix", + request: &http.Request{ + Proto: "HTTP/1.1", + Method: http.MethodGet, + URL: &url.URL{ + Scheme: "http", + Host: "example.com", + Path: "/function/foo/bar/", + }, + Host: "example.com", + }, + backend: pool.Backend{ + URL: &url.URL{ + Scheme: "http", + Host: "proxy.org", + }, + }, + expected: &http.Request{ + Proto: "HTTP/1.1", + Method: http.MethodGet, + URL: &url.URL{ + Scheme: "http", + Host: "proxy.org", + Path: "/", + }, + Host: "proxy.org", + Header: map[string][]string{ + "X-Forwarded-For": {""}, + "X-Forwarded-Host": {"example.com"}, + }, + }, + }, + { + description: "maintain function path", + request: &http.Request{ + Proto: "HTTP/1.1", + Method: http.MethodGet, + URL: &url.URL{ + Scheme: "http", + Host: "example.com", + Path: "/function/foo/bar/a", + }, + Host: "example.com", + }, + backend: pool.Backend{ + URL: &url.URL{ + Scheme: "http", + Host: "proxy.org", + }, + }, + expected: &http.Request{ + Proto: "HTTP/1.1", + Method: http.MethodGet, + URL: &url.URL{ + Scheme: "http", + Host: "proxy.org", + Path: "/a", + }, + Host: "proxy.org", + Header: map[string][]string{ + "X-Forwarded-For": {""}, + "X-Forwarded-Host": {"example.com"}, + }, + }, + }, + } + + for _, tt := range testcases { + t.Run(tt.description, func(t *testing.T) { + u := &UpstreamRequestBuilder{ + Request: tt.request, + Backend: tt.backend, + } + + actual := u.Build() + + require.Equal(t, tt.expected.Method, actual.Method) + require.Equal(t, tt.expected.Proto, actual.Proto) + require.Equal(t, tt.expected.Header, actual.Header) + require.Equal(t, tt.expected.Body, actual.Body) + require.Equal(t, tt.expected.Host, actual.Host) + require.Equal(t, tt.expected.URL, actual.URL) + }) + } +} diff --git a/pkg/dispatcher/pkg/controller/loadbalancer-controller.go b/pkg/dispatcher/pkg/controller/loadbalancer-controller.go new file mode 100644 index 0000000..5684a12 --- /dev/null +++ b/pkg/dispatcher/pkg/controller/loadbalancer-controller.go @@ -0,0 +1,248 @@ +package controller + +import ( + "fmt" + "net/http" + "net/http/httputil" + "net/url" + "strings" + "time" + + "github.com/lterrac/edge-autoscaler/pkg/apiutils" + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/balancer" + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/monitoring/metrics" + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/persistor" + eaclientset "github.com/lterrac/edge-autoscaler/pkg/generated/clientset/versioned" + eascheme "github.com/lterrac/edge-autoscaler/pkg/generated/clientset/versioned/scheme" + "github.com/lterrac/edge-autoscaler/pkg/informers" + workqueue "github.com/lterrac/edge-autoscaler/pkg/queue" + corev1 "k8s.io/api/core/v1" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/record" + "k8s.io/klog/v2" +) + +const ( + controllerAgentName string = "loadbalancer-controller" + + // SuccessSynced is used as part of the Event 'reason' when a podScale is synced + SuccessSynced string = "Synced" + + // MessageResourceSynced is the message used for an Event fired when a configmap + // is synced successfully + MessageResourceSynced string = "Community Settings synced successfully" +) + +// LoadBalancerController works at node level to forward an incoming request for a function +// to the right backend, implementing load balancing policies. +type LoadBalancerController struct { + // saClientSet is a clientset for our own API group + edgeAutoscalerClientSet eaclientset.Interface + + // kubernetesCLientset is the client-go of kubernetes + kubernetesClientset kubernetes.Interface + + // balancers keeps track of the load balancers associated to a function + // function name is the key + balancers map[string]*balancer.LoadBalancer + + listers informers.Listers + + nodeSynced cache.InformerSynced + communityConfigurationsSynced cache.InformerSynced + communitySchedulesSynced cache.InformerSynced + functionSynced cache.InformerSynced + deploymentsSynced cache.InformerSynced + + // recorder is an event recorder for recording Event resources to the + // Kubernetes API. + recorder record.EventRecorder + + // workqueue contains all the communityconfigurations to sync + workqueue workqueue.Queue + + serverListener http.Server + + resGetter *apiutils.ResourceGetter + + // monitoringChan chan<- monitoringmetrics.RawMetricData + + // backendChan chan<- monitoring.BackendList + + // functionChan chan<- monitoring.FunctionList + + metricChan chan<- metrics.RawResponseTime + + // node is the node name on which the controller is running + node string + + // ds *monitoring.DataStore + + persistor *persistor.MetricsPersistor +} + +// NewController returns a new SystemController +func NewController( + kubernetesClientset *kubernetes.Clientset, + eaClientSet eaclientset.Interface, + informers informers.Informers, + node string, +) *LoadBalancerController { + + // Create event broadcaster + // Add system-controller types to the default Kubernetes Scheme so Events can be + // logged for system-controller types. + utilruntime.Must(eascheme.AddToScheme(scheme.Scheme)) + klog.V(4).Info("Creating event broadcaster") + eventBroadcaster := record.NewBroadcaster() + eventBroadcaster.StartStructuredLogging(0) + recorder := eventBroadcaster.NewRecorder(scheme.Scheme, corev1.EventSource{Component: controllerAgentName}) + + // functionChan := make(chan monitoring.FunctionList) + // backendChan := make(chan monitoring.BackendList) + // monitoringChan := make(chan monitoringmetrics.RawMetricData) + metricChan := make(chan metrics.RawResponseTime) + + // Instantiate the Controller + controller := &LoadBalancerController{ + edgeAutoscalerClientSet: eaClientSet, + kubernetesClientset: kubernetesClientset, + recorder: recorder, + listers: informers.GetListers(), + nodeSynced: informers.Node.Informer().HasSynced, + communityConfigurationsSynced: informers.CommunityConfiguration.Informer().HasSynced, + communitySchedulesSynced: informers.CommunitySchedule.Informer().HasSynced, + deploymentsSynced: informers.Deployment.Informer().HasSynced, + functionSynced: informers.Function.Informer().HasSynced, + workqueue: workqueue.NewQueue("CommunityScheduleQueue"), + // monitoringChan: monitoringChan, + // backendChan: backendChan, + // functionChan: functionChan, + metricChan: metricChan, + balancers: make(map[string]*balancer.LoadBalancer), + node: node, + } + + // controller.ds = monitoring.NewDataStore( + // backendChan, + // monitoringChan, + // functionChan, + // monitoringmetrics.WindowParameters{ + // WindowSize: 1 * time.Second, + // WindowGranularity: 1 * time.Millisecond, + // }) + + controller.resGetter = apiutils.NewResourceGetter(controller.listers.Pods, controller.listers.Functions, controller.listers.NodeLister) + controller.persistor = persistor.NewMetricsPersistor(persistor.NewDBOptions(), metricChan) + + klog.Info("Setting up event handlers") + + //TODO: should we use event handlers or simply periodically poll the new resource? + // Set up an event handler for when CommunitySchedule resources change + informers.CommunitySchedule.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: controller.workqueue.Add, + UpdateFunc: controller.workqueue.Update, + DeleteFunc: controller.workqueue.Deletion, + }) + + return controller +} + +// Run will set up the event handlers for types we are interested in, as well +// as syncing informer caches and starting workers. It will block until stopCh +// is closed, at which point it will shutdown the workqueue and wait for +// workers to finish processing their current work items. +func (c *LoadBalancerController) Run(threadiness int, stopCh <-chan struct{}) error { + + // Start the informer factories to begin populating the informer caches + klog.Info("Starting load balancer controller") + + // Wait for the caches to be synced before starting workers + klog.Info("Waiting for informer caches to sync") + + if ok := cache.WaitForCacheSync( + stopCh, + c.communityConfigurationsSynced, + c.communitySchedulesSynced, + c.deploymentsSynced, + c.nodeSynced, + c.functionSynced, + ); !ok { + return fmt.Errorf("failed to wait for caches to sync") + } + + klog.Info("Starting system controller workers") + + //TODO: set port with env var + //Listen for incoming request + go c.listenAndServe(8080) + + for i := 0; i < threadiness; i++ { + go wait.Until(c.runStandardWorker, time.Second, stopCh) + } + + err := c.persistor.SetupDBConnection() + + if err != nil { + return fmt.Errorf("failed to connect persistor to database: %v", err) + } + + go c.persistor.PollMetrics() + return nil +} + +func (c *LoadBalancerController) listenAndServe(port int) { + // create http server + c.serverListener = http.Server{ + Addr: fmt.Sprintf(":%d", port), + Handler: http.HandlerFunc(c.enqueueRequest), + } + + klog.Infof("server listener started at :%d\n", port) + + err := c.serverListener.ListenAndServe() + + utilruntime.HandleError(fmt.Errorf("closing server listener: %s", err)) +} + +// handles standard partitioning (e.g. first partitioning and cache sync) +func (c *LoadBalancerController) runStandardWorker() { + for c.workqueue.ProcessNextItem(c.syncCommunitySchedule) { + } +} + +func (c *LoadBalancerController) enqueueRequest(w http.ResponseWriter, r *http.Request) { + // TODO: a better way would be to check for openfaas-gateway + if strings.Contains(r.RequestURI, "/function/") { + // TODO: get correct function name from request + if balancer, exist := c.balancers[NamespaceNameFunction(r.URL)]; exist { + balancer.Balance(w, r) + } + klog.Info("processed request, closing chan") + return + } + + // forward any other request + httputil.NewSingleHostReverseProxy(r.URL).ServeHTTP(w, r) +} + +// Shutdown is called when the controller has finished its work +func (c *LoadBalancerController) Shutdown() { + utilruntime.HandleCrash() +} + +// format: http://../function// +func NamespaceNameFunction(url *url.URL) string { + fragments := strings.Split(url.Path, "/") + var index = 0 + for index = range fragments { + if fragments[index] == "function" { + break + } + } + return fragments[index+1] + "/" + fragments[index+2] +} diff --git a/pkg/dispatcher/pkg/controller/sync.go b/pkg/dispatcher/pkg/controller/sync.go new file mode 100644 index 0000000..64adf4d --- /dev/null +++ b/pkg/dispatcher/pkg/controller/sync.go @@ -0,0 +1,157 @@ +package controller + +import ( + "fmt" + "net/url" + + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/balancer" + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/balancer/queue" + ealabels "github.com/lterrac/edge-autoscaler/pkg/labels" + + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/client-go/tools/cache" + "k8s.io/klog/v2" +) + +func (c *LoadBalancerController) syncCommunitySchedule(key string) error { + // Convert the namespace/name string into a distinct namespace and name + namespace, name, err := cache.SplitMetaNamespaceKey(key) + + if err != nil { + utilruntime.HandleError(fmt.Errorf("invalid resource key: %s", key)) + return nil + } + + node, err := c.listers.NodeLister.Get(c.node) + + if err != nil { + utilruntime.HandleError(fmt.Errorf("couldn't find node %s: %v", c.node, err)) + return nil + } + + nodeLabels := node.GetLabels() + + var community string + var exists bool + + if community, exists = nodeLabels[ealabels.CommunityLabel.WithNamespace(namespace).String()]; !exists || community != name { + return nil + } + + // Get the CommunitySchedules resource with this namespace/name + cs, err := c.listers.CommunityScheduleLister.CommunitySchedules(namespace).Get(name) + + if err != nil { + // The CommunitySchedules may no longer exist, so we stop processing. + if errors.IsNotFound(err) { + utilruntime.HandleError(fmt.Errorf("CommunitySchedules '%s' in work queue no longer exists", key)) + return nil + } + return err + } + + // retrieve routing rules + sourceRules := cs.Spec.RoutingRules + + for source, functionRules := range sourceRules { + if source != node.Name { + continue + } + + functions := []string{} + + for functionNamespaceName, destinationRules := range functionRules { + + functions = append(functions, functionNamespaceName) + funcNamespace, funcName, err := cache.SplitMetaNamespaceKey(functionNamespaceName) + + if err != nil { + utilruntime.HandleError(fmt.Errorf("invalid resource key: %s", functionNamespaceName)) + continue + } + + function, err := c.listers.FunctionLister.Functions(funcNamespace).Get(funcName) + + if err != nil { + utilruntime.HandleError(fmt.Errorf("couldn't find function %s: %v", funcName, err)) + continue + } + + var lb *balancer.LoadBalancer + var exist bool + + // create a new load balancer if it does not exist + // TODO: check key + if lb, exist = c.balancers[functionNamespaceName]; !exist { + // lb = balancer.NewLoadBalancer(c.monitoringChan) + + lb = balancer.NewLoadBalancer( + balancer.NodeInfo{ + Node: source, + Function: funcName, + Namespace: funcNamespace, + Community: community, + }, + c.metricChan, + ) + c.balancers[functionNamespaceName] = lb + } + + actualBackends := []*url.URL{} + + for destination, workload := range destinationRules { + pods, err := c.resGetter.GetPodsOfFunctionInNode(function, destination) + + if err != nil { + utilruntime.HandleError(fmt.Errorf("error parsing function url: %s", err)) + continue + } + + for _, pod := range pods { + // TODO: handle nodes with GPU and CPU + // TODO: find better way to retrieve function port + klog.Info(fmt.Sprintf("adding balancer for http://%s:%d", pod.Status.PodIP, pod.Spec.Containers[0].Ports[0].ContainerPort)) + destinationURL, err := url.Parse(fmt.Sprintf("http://%s:%d", pod.Status.PodIP, pod.Spec.Containers[0].Ports[0].ContainerPort)) + destinationURL.Scheme = "http" + + if err != nil { + utilruntime.HandleError(fmt.Errorf("error parsing function url: %s", err)) + continue + } + + // sync load balancer backends with the new rules + if !lb.ServerExists(destinationURL) { + //TODO: remove recovery func + // TODO: add mechanism to detect gpu instead of a hardcoded false bool + lb.AddServer(destinationURL, destination, false, &workload, func(req *queue.HTTPRequest) {}) + } else { + lb.UpdateWorkload(destinationURL, &workload) + } + + actualBackends = append(actualBackends, destinationURL) + } + } + + // clean old backends + deleteSet := lb.ServerPoolDiff(actualBackends) + + for _, b := range deleteSet { + lb.DeleteServer(b) + } + + // c.backendChan <- monitoring.BackendList{ + // FunctionURL: functionNamespaceName, + // Backends: actualBackends, + // } + } + + // c.functionChan <- monitoring.FunctionList{ + // Functions: functions, + // } + } + + c.recorder.Event(cs, corev1.EventTypeNormal, SuccessSynced, MessageResourceSynced) + return nil +} diff --git a/pkg/dispatcher/pkg/monitoring/data-store.go b/pkg/dispatcher/pkg/monitoring/data-store.go new file mode 100644 index 0000000..97042b3 --- /dev/null +++ b/pkg/dispatcher/pkg/monitoring/data-store.go @@ -0,0 +1,84 @@ +package monitoring + +import ( + "net/url" + + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/monitoring/metrics" + "github.com/modern-go/concurrent" +) + +// BackendList is used to update the backends associated to a function +type BackendList struct { + // FunctionURL is the URL of the function invo + FunctionURL string + // Backends are the backends that serves a function + Backends []*url.URL +} + +// FunctionList is used to keep in sync the function actually serverd by a node +type FunctionList struct { + // FunctionURL is the URL of the function invo + Functions []string +} + +// DataStore is the main data structure holding all the metrics +type DataStore struct { + backendChan <-chan BackendList + functionChan <-chan FunctionList + metricChan <-chan metrics.RawMetricData + metrics *concurrent.Map + windowParameters metrics.WindowParameters +} + +// NewDataStore returns a new DataStore +func NewDataStore(backendChan <-chan BackendList, metricChan <-chan metrics.RawMetricData, functionChan <-chan FunctionList, params metrics.WindowParameters) *DataStore { + metricMap := &concurrent.Map{} + // TODO: customize window params with env var or flags? + return &DataStore{ + backendChan: backendChan, + metricChan: metricChan, + functionChan: functionChan, + metrics: metricMap, + windowParameters: params, + } +} + +// Poll will poll the metrics from the channel and update the metrics +func (ds *DataStore) Poll() { + go func() { + for { + select { + case raw := <-ds.metricChan: + ds.handleRawData(raw) + case backends := <-ds.backendChan: + ds.updateBackends(backends.FunctionURL, backends.Backends) + default: + } + } + }() +} + +func (ds *DataStore) handleRawData(metric metrics.RawMetricData) { + + var ms *metrics.FunctionMetrics + var value interface{} + + value, _ = ds.metrics.LoadOrStore(metric.FunctionURL, metrics.NewFunctionMetrics(ds.windowParameters)) + ms = value.(*metrics.FunctionMetrics) + + // ensure that the current backend exists + ms.SetBackend(metric.Backend) + + backend, _ := ms.GetBackend(metric.Backend) + backend.AddValue(metric.Value) +} + +//TODO: Everything is good if we assume that a balancer serves all possible functions. Otherwise we should implement a cleaning mechanism to remove old functions from the data store + +func (ds *DataStore) updateBackends(function string, backends []*url.URL) { + functionBackends, found := ds.metrics.Load(function) + if !found { + return + } + functionBackends.(*metrics.FunctionMetrics).SyncBackends(backends) +} diff --git a/pkg/dispatcher/pkg/monitoring/data-store_test.go b/pkg/dispatcher/pkg/monitoring/data-store_test.go new file mode 100644 index 0000000..7f414dc --- /dev/null +++ b/pkg/dispatcher/pkg/monitoring/data-store_test.go @@ -0,0 +1,98 @@ +package monitoring + +// import ( +// "net/url" +// "testing" +// "time" + +// "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/monitoring/metrics" +// "github.com/stretchr/testify/require" +// ) + +// func TestHandleRawData(t *testing.T) { +// testcases := []struct { +// description string +// sendData func(c chan<- metrics.RawMetricData, m []metrics.RawMetricData) +// input []metrics.RawMetricData +// expected float64 +// }{ +// { +// description: "one backend per function", +// input: []metrics.RawMetricData{ +// { +// Backend: &url.URL{Host: "foo"}, +// FunctionURL: "function-1", +// Value: 1.0, +// }, +// { +// Backend: &url.URL{Host: "foo"}, +// FunctionURL: "function-1", +// Value: 6.0, +// }, +// { +// Backend: &url.URL{Host: "foo"}, +// FunctionURL: "function-1", +// Value: 8.0, +// }, +// }, +// sendData: func(c chan<- metrics.RawMetricData, metrics []metrics.RawMetricData) { +// for _, m := range metrics { +// c <- m +// } +// }, +// expected: 5.0, +// }, +// { +// description: "two backend per function", +// input: []metrics.RawMetricData{ +// { +// Backend: &url.URL{Host: "foo"}, +// FunctionURL: "function-1", +// Value: 1.0, +// }, +// { +// Backend: &url.URL{Host: "bar"}, +// FunctionURL: "function-1", +// Value: 6.0, +// }, +// { +// Backend: &url.URL{Host: "foo"}, +// FunctionURL: "function-1", +// Value: 8.0, +// }, +// }, +// sendData: func(c chan<- metrics.RawMetricData, metrics []metrics.RawMetricData) { +// for _, m := range metrics { +// time.Sleep(50 * time.Millisecond) +// c <- m +// } +// }, +// expected: 5.0, +// }, +// } + +// for _, tt := range testcases { +// t.Run(tt.description, func(t *testing.T) { +// backendChan := make(chan BackendList) +// monitoringChan := make(chan metrics.RawMetricData) +// functionChan := make(chan FunctionList) +// ds := NewDataStore( +// backendChan, +// monitoringChan, +// functionChan, +// metrics.WindowParameters{ +// WindowSize: 1 * time.Second, +// WindowGranularity: 1 * time.Millisecond, +// }) + +// ds.Poll() + +// tt.sendData(monitoringChan, tt.input) + +// actual, _ := ds.metrics.Load("function-1") +// // we are interested in checking if data have been correctly added +// // so there's no need to check for all the other metrics +// require.Equal(t, tt.expected, actual.(*metrics.FunctionMetrics).ResponseTime()) +// }) +// } +// } diff --git a/pkg/dispatcher/pkg/monitoring/metrics/metrics.go b/pkg/dispatcher/pkg/monitoring/metrics/metrics.go new file mode 100644 index 0000000..cdb9ab4 --- /dev/null +++ b/pkg/dispatcher/pkg/monitoring/metrics/metrics.go @@ -0,0 +1,248 @@ +package metrics + +import ( + "math" + "net/url" + "sync" + "time" + + "github.com/asecurityteam/rolling" +) + +// RawResponseTime is the response time for a single http request +type RawResponseTime struct { + Timestamp time.Time + Source string + Destination string + Function string + Namespace string + Community string + Gpu bool + Latency int +} + +// ExposedMetrics is a struct that wraps the exposed metrics +type ExposedMetrics struct { + ResponseTime float64 `json:"response-time"` + RequestCount float64 `json:"request-count"` + Throughput float64 `json:"throughput"` +} + +// RawMetricData represents the single data point collected by each load balancer +type RawMetricData struct { + // Backend is the pod which has processed the request + Backend *url.URL + // Value is the response time of the request + Value float64 + // FunctionURL is the URL of the function invo + FunctionURL string +} + +// WindowParameters wraps the parameters used to define the time window on which +// metrics are calculated. +type WindowParameters struct { + WindowSize time.Duration + WindowGranularity time.Duration +} + +// BackendMetrics is the wrapper for the metrics related to a specific backend +type BackendMetrics struct { + window *rolling.TimePolicy + WindowParameters +} + +// NewBackendMetrics returns a new backend metrics +func NewBackendMetrics(params WindowParameters) *BackendMetrics { + bm := &BackendMetrics{ + WindowParameters: params, + } + bm.window = bm.newMetricWindow() + return bm +} + +func (b *BackendMetrics) newMetricWindow() *rolling.TimePolicy { + return rolling.NewTimePolicy(rolling.NewWindow(int(b.WindowSize.Nanoseconds()/b.WindowGranularity.Nanoseconds())), time.Millisecond) +} + +// AddValue adds a new value to the backend metrics +func (b *BackendMetrics) AddValue(v float64) { + b.window.Append(v) +} + +// ResponseTime return the pod average response time +func (b BackendMetrics) ResponseTime() (responseTime float64) { + responseTime = b.window.Reduce(rolling.Avg) + // TODO: should we keep 0 or NaN? + if math.IsNaN(responseTime) { + responseTime = 0 + } + return +} + +// RequestCount return the current number of request sent to the pod +func (b BackendMetrics) RequestCount() (requestCount float64) { + requestCount = b.window.Reduce(rolling.Count) + if math.IsNaN(requestCount) { + requestCount = 0 + } + return +} + +// Throughput returns the pod throughput in request per second +func (b BackendMetrics) Throughput() (throughput float64) { + throughput = b.window.Reduce(rolling.Count) / b.WindowSize.Seconds() + if math.IsNaN(throughput) { + throughput = 0 + } + return +} + +// metrics returns the exposed metrics +func (b BackendMetrics) metrics() *ExposedMetrics { + return &ExposedMetrics{ + ResponseTime: b.ResponseTime(), + RequestCount: b.RequestCount(), + Throughput: b.Throughput(), + } +} + +// FunctionMetrics are the metrics computed per function using all its backends +type FunctionMetrics struct { + metrics map[*url.URL]*BackendMetrics + lock sync.RWMutex + WindowParameters +} + +// NewFunctionMetrics returns a new function metrics +func NewFunctionMetrics(params WindowParameters) *FunctionMetrics { + return &FunctionMetrics{ + metrics: make(map[*url.URL]*BackendMetrics), + lock: sync.RWMutex{}, + WindowParameters: params, + } +} + +// GetBackend retrieves a specific backend metrics +func (f *FunctionMetrics) GetBackend(b *url.URL) (metrics *BackendMetrics, found bool) { + f.lock.RLock() + defer f.lock.RUnlock() + metrics, found = f.metrics[b] + return +} + +// SyncBackends keeps the backend pool up to date. It adds the new one +// and removes the ones not needed anymore +func (f *FunctionMetrics) SyncBackends(backends []*url.URL) { + deleteSet := make(map[*url.URL]bool) + + // populate the set with the current pool + for actualBackend := range f.metrics { + deleteSet[actualBackend] = true + } + + // remove and initialize the backends that still serves the functions + for _, desiredBackend := range backends { + f.SetBackend(desiredBackend) + delete(deleteSet, desiredBackend) + } + + // remove old backends + for oldBackend := range deleteSet { + f.RemoveBackend(oldBackend) + } +} + +// SetBackend adds a backend that server a function if it does not already exists +func (f *FunctionMetrics) SetBackend(b *url.URL) { + f.lock.Lock() + defer f.lock.Unlock() + if _, exists := f.metrics[b]; !exists { + f.metrics[b] = NewBackendMetrics(f.WindowParameters) + } +} + +// RemoveBackend removes a backend from the function pool +func (f *FunctionMetrics) RemoveBackend(b *url.URL) { + f.lock.Lock() + defer f.lock.Unlock() + delete(f.metrics, b) +} + +// ResponseTime return the function average response time +func (f *FunctionMetrics) ResponseTime() (responseTime float64) { + f.lock.RLock() + defer f.lock.RUnlock() + var requestCount float64 = 0 + for _, b := range f.metrics { + rq := b.RequestCount() + rt := b.ResponseTime() + + if rt != 0 { + responseTime += rt * rq + requestCount += rq + } + } + + responseTime = responseTime / requestCount + + if math.IsNaN(responseTime) { + responseTime = 0 + } + + return + +} + +// RequestCount return the current number of request sent to the function +func (f *FunctionMetrics) RequestCount() (requestCount float64) { + f.lock.RLock() + defer f.lock.RUnlock() + for _, b := range f.metrics { + requestCount += b.RequestCount() + } + + if math.IsNaN(requestCount) { + requestCount = 0 + } + return +} + +// Throughput returns the function throughput in request per second +func (f *FunctionMetrics) Throughput() (throughput float64) { + f.lock.RLock() + defer f.lock.RUnlock() + for _, b := range f.metrics { + throughput += b.Throughput() + } + + if math.IsNaN(throughput) { + throughput = 0 + } + + return + +} + +// Metrics returns the exposed metrics +func (f *FunctionMetrics) Metrics() ExposedMetrics { + f.lock.RLock() + defer f.lock.RUnlock() + return ExposedMetrics{ + ResponseTime: f.ResponseTime(), + RequestCount: f.RequestCount(), + Throughput: f.Throughput(), + } +} + +// // BackendsMetrics returns the list of backend metrics +// func (f *FunctionMetrics) BackendsMetrics() []*ExposedMetrics { +// f.lock.RLock() +// defer f.lock.RUnlock() +// var metricsList []*ExposedMetrics +// for name, backend := range f.metrics { +// metrics := backend.metrics() +// metrics.Name = name +// metricsList = append(metricsList, metrics) +// } +// return metricsList +// } diff --git a/pkg/dispatcher/pkg/monitoring/metrics/metrics_test.go b/pkg/dispatcher/pkg/monitoring/metrics/metrics_test.go new file mode 100644 index 0000000..52d1932 --- /dev/null +++ b/pkg/dispatcher/pkg/monitoring/metrics/metrics_test.go @@ -0,0 +1,224 @@ +package metrics + +import ( + "net/url" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func TestBackendMetrics(t *testing.T) { + testcases := []struct { + description string + input []float64 + testFunction func(b *BackendMetrics) float64 + desired float64 + }{ + { + description: "test response time", + input: []float64{1.0, 2.0, 3.0}, + testFunction: func(b *BackendMetrics) float64 { + return b.ResponseTime() + }, + desired: 2.0, + }, + { + description: "test empty response time", + input: []float64{}, + testFunction: func(b *BackendMetrics) float64 { + return b.ResponseTime() + }, + desired: 0.0, + }, + { + description: "test request count", + input: []float64{1.0, 2.0, 3.0}, + testFunction: func(b *BackendMetrics) float64 { + return b.RequestCount() + }, + desired: 3.0, + }, + { + description: "test empty request count", + input: []float64{}, + testFunction: func(b *BackendMetrics) float64 { + return b.RequestCount() + }, + desired: 0.0, + }, + { + description: "test throughput", + input: []float64{1.0, 2.0, 3.0}, + testFunction: func(b *BackendMetrics) float64 { + return b.Throughput() + }, + desired: 3.0, + }, + { + description: "test empty throughput", + input: []float64{}, + testFunction: func(b *BackendMetrics) float64 { + return b.Throughput() + }, + desired: 0.0, + }, + } + + for _, tt := range testcases { + t.Run(tt.description, func(t *testing.T) { + b := NewBackendMetrics(WindowParameters{ + WindowSize: 1 * time.Second, + WindowGranularity: 1 * time.Millisecond, + }) + + for _, data := range tt.input { + time.Sleep(15 * time.Millisecond) + b.window.Append(data) + } + + actual := tt.testFunction(b) + require.Equal(t, tt.desired, actual) + }) + } +} + +func TestFunctionMetrics(t *testing.T) { + testcases := []struct { + description string + input map[*url.URL][]float64 + testFunction func(f *FunctionMetrics) float64 + desired float64 + }{ + { + description: "test response time", + input: map[*url.URL][]float64{ + {Host: "foo"}: {1.0, 2.0, 3.0}, + {Host: "bar"}: {3.0, 4.0, 5.0}, + {Host: "foobar"}: {5.0, 6.0, 7.0}, + }, + testFunction: func(f *FunctionMetrics) float64 { + return f.ResponseTime() + }, + desired: 4.0, + }, + { + description: "test one empty response time", + input: map[*url.URL][]float64{ + {Host: "foo"}: {1.0, 2.0, 3.0}, + {Host: "bar"}: {2.0}, + {Host: "foobar"}: {}, + }, + testFunction: func(f *FunctionMetrics) float64 { + return f.ResponseTime() + }, + desired: 2.0, + }, + { + description: "test all empty response time", + input: map[*url.URL][]float64{ + {Host: "foo"}: {}, + {Host: "bar"}: {}, + {Host: "foobar"}: {}, + }, + testFunction: func(f *FunctionMetrics) float64 { + return f.ResponseTime() + }, + desired: 0.0, + }, + { + description: "test request count", + input: map[*url.URL][]float64{ + {Host: "foo"}: {1.0, 2.0, 3.0}, + {Host: "bar"}: {3.0, 4.0, 5.0}, + {Host: "foobar"}: {5.0, 6.0, 7.0}, + }, + testFunction: func(f *FunctionMetrics) float64 { + return f.RequestCount() + }, + desired: 9.0, + }, + { + description: "test one empty request count", + input: map[*url.URL][]float64{ + {Host: "foo"}: {1.0, 2.0, 3.0}, + {Host: "bar"}: {3.0, 4.0, 5.0}, + {Host: "foobar"}: {}, + }, + testFunction: func(f *FunctionMetrics) float64 { + return f.RequestCount() + }, + desired: 6.0, + }, + { + description: "test all empty request count", + input: map[*url.URL][]float64{ + {Host: "foo"}: {}, + {Host: "bar"}: {}, + {Host: "foobar"}: {}, + }, + testFunction: func(f *FunctionMetrics) float64 { + return f.RequestCount() + }, + desired: 0.0, + }, + { + description: "test throughput", + input: map[*url.URL][]float64{ + {Host: "foo"}: {1.0, 2.0, 3.0}, + {Host: "bar"}: {3.0, 4.0, 5.0}, + {Host: "foobar"}: {5.0, 6.0, 7.0}, + }, + testFunction: func(f *FunctionMetrics) float64 { + return f.Throughput() + }, + desired: 9.0, + }, + { + description: "test one empty throughput", + input: map[*url.URL][]float64{ + {Host: "foo"}: {1.0, 2.0, 3.0}, + {Host: "bar"}: {3.0, 4.0, 5.0}, + {Host: "foobar"}: {}, + }, + testFunction: func(f *FunctionMetrics) float64 { + return f.Throughput() + }, + desired: 6.0, + }, + { + description: "test all empty throughput", + input: map[*url.URL][]float64{ + {Host: "foo"}: {}, + {Host: "bar"}: {}, + {Host: "foobar"}: {}, + }, + testFunction: func(f *FunctionMetrics) float64 { + return f.Throughput() + }, + desired: 0.0, + }, + } + + for _, tt := range testcases { + t.Run(tt.description, func(t *testing.T) { + f := NewFunctionMetrics(WindowParameters{ + WindowSize: 1 * time.Second, + WindowGranularity: 1 * time.Millisecond, + }) + + for b, data := range tt.input { + f.SetBackend(b) + backend, _ := f.GetBackend(b) + + for _, point := range data { + backend.window.Append(point) + time.Sleep(1 * time.Millisecond) + } + } + + actual := tt.testFunction(f) + require.Equal(t, tt.desired, actual) + }) + } +} diff --git a/pkg/dispatcher/pkg/persistor/options.go b/pkg/dispatcher/pkg/persistor/options.go new file mode 100644 index 0000000..73aff5e --- /dev/null +++ b/pkg/dispatcher/pkg/persistor/options.go @@ -0,0 +1,58 @@ +package persistor + +import ( + "flag" + "fmt" +) + +// Host is the host of the database +var Host string + +// Port is the port of the database +var Port string + +// User is the user of the database +var User string + +// Pass is the password of the database +var Pass string + +// DB is the database to use +var DB string + +// Options is the options for the database +type Options struct { + Host string + Port string + User string + Pass string + DB string +} + +// NewDBOptions creates the new database options +func NewDBOptions() Options { + return Options{ + Host: Host, + Port: Port, + User: User, + Pass: Pass, + DB: DB, + } +} + +func (o Options) ConnString() string { + return fmt.Sprintf("%v:%v?user=%v&password=%v", o.Host, o.Port, o.User, o.Pass) +} + +// Address compose the address of the database +func (o Options) Address() string { + return o.Host + ":" + o.Port +} + +func init() { + flag.StringVar(&Host, "host", "postgresql://metrics-database.kube-system.svc.cluster.local", "DB host.") + flag.StringVar(&Port, "port", "5432", "DB port.") + flag.StringVar(&User, "user", "user", "DB user.") + flag.StringVar(&Pass, "password", "password", "DB password.") + flag.StringVar(&DB, "db", "book_management", "The DB name to use.") +} diff --git a/pkg/dispatcher/pkg/persistor/persistor.go b/pkg/dispatcher/pkg/persistor/persistor.go new file mode 100644 index 0000000..ef816fd --- /dev/null +++ b/pkg/dispatcher/pkg/persistor/persistor.go @@ -0,0 +1,80 @@ +package persistor + +import ( + "context" + "fmt" + + "github.com/jackc/pgx/v4/pgxpool" + "github.com/lterrac/edge-autoscaler/pkg/dispatcher/pkg/monitoring/metrics" +) + +const ( + // InsertMetricQuery is the prepare statement for inserting metrics. + InsertMetricQuery = "INSERT INTO metric (timestamp, source, destination, function, namespace, community, gpu, latency) VALUES ($1, $2, $3, $4, $5, $6, $7, $8);" +) + +// MetricsPersistor receives metrics from the load balancer and persists them to a backend. +// The initial implementation is a simple client that connects to a TimescaleDB backend. +type MetricsPersistor struct { + pool *pgxpool.Pool + metrichChan <-chan metrics.RawResponseTime + opts Options +} + +// NewMetricsPersistor creates a new MetricsPersistor. +func NewMetricsPersistor(opts Options, rawMetricChan <-chan metrics.RawResponseTime) *MetricsPersistor { + return &MetricsPersistor{ + opts: opts, + metrichChan: rawMetricChan, + } +} + +// SetupDBConnection creates a new connection to the database using the provided options. +func (p *MetricsPersistor) SetupDBConnection() error { + var config *pgxpool.Config + var err error + + config, err = pgxpool.ParseConfig(p.opts.ConnString()) + + if err != nil { + return err + } + + p.pool, err = pgxpool.ConnectConfig(context.Background(), config) + + if err != nil { + return err + } + + return nil +} + +// Stop closes the connection to the database. +func (p *MetricsPersistor) Stop() { + p.pool.Close() +} + +// Save insert a new metric into the database. +func (p *MetricsPersistor) save(m metrics.RawResponseTime) error { + _, err := p.pool.Exec(context.Background(), InsertMetricQuery, m.Timestamp, m.Source, m.Destination, m.Function, m.Namespace, m.Community, m.Gpu, m.Latency) + if err != nil { + return fmt.Errorf("failed to insert metric %v, error: %s", m, err) + } + return nil +} + +// PollMetrics receives metrics from the load balancer and persists them to a backend until the chan is closed. +func (p *MetricsPersistor) PollMetrics() { + for { + m, ok := <-p.metrichChan + if !ok { + p.Stop() + return + } + err := p.save(m) + if err != nil { + fmt.Print(fmt.Errorf("failed to save metric %v, error: %s", m, err)) + return + } + } +} diff --git a/pkg/function-deployment-webhook/deploy/admission-registration.yaml b/pkg/function-deployment-webhook/deploy/admission-registration.yaml index 04c793d..5dead58 100644 --- a/pkg/function-deployment-webhook/deploy/admission-registration.yaml +++ b/pkg/function-deployment-webhook/deploy/admission-registration.yaml @@ -5,11 +5,11 @@ metadata: webhooks: - name: "kube-system.function-deployment-custom-scheduler.svc" rules: - - apiGroups: ["*"] + - apiGroups: ["*"] apiVersions: ["*"] - operations: ["CREATE", "UPDATE"] - resources: ["deployments"] - scope: "Namespaced" + operations: ["CREATE", "UPDATE"] + resources: ["deployments"] + scope: "Namespaced" clientConfig: service: namespace: kube-system diff --git a/pkg/function-deployment-webhook/function-deployment-webhook b/pkg/function-deployment-webhook/function-deployment-webhook deleted file mode 100755 index b2379dcc40ebfcc961ecdc0f7cff73bb29cd38c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20443709 zcmeFad3;pW*#|xe8Hlpn5m~~b40Y7tnkZ@_j1Cy|j!tTI4-zB05!kw_c`~@+?gb5-}n9fKEFT8 z=R@wfXL-)Eo#%PZa?ji~CUjwLPL9j|m+Lyu#ka=SFO;l+Rj@8y#T9UsxVqtQe^(b* zSCr@Bzg;h2rR?VdtDXIHc{D(_;s3>keqU?^Bw;_V*V!)n$-4YUaBfN2e*#uQKTkSh zmb}|fyFa!Q7#>~j@~qPBtY_UF6Xo50I@^&(SNttqKYpyH$a+?VH8%UsIzpFQ^j-FT z&Gphw=YHqke5*!X-@F@KCw*u2R0X?TD&v2cAW{6E!r2qhkSuymI(WN&xBhxF-dwJq z;GOMr?fevfHNOX5cY<9aPjAMX%QXd!yJY3@)jRb!l6yOWJN{+8x~8Ixd3OIxroAJz zmrVPOJZF!VN9vC^mC}jXcsSd8m+AK2WxD<5V=^0fGhbcvvfA(4rrYn^rrT##m%f~N z@vQc)S9N>WtGa#NijmIhE^o%0%SG~X@IS@Fl%8t6&8}~WH3g+xR(r42-fQW-_c40} z>L%IndS|r{oO2w}aRttKmk*ccpYllk@upHbQGf?^*~Y)>XrHvNI{H1S@Kl9eqU(G0 zBlVZ!aklqff1%@CA3s|?tp z+YcD3+vh#k(}pZhXI*BzhX2mIV-}nxug7fvRO+8zok_p5E-RdZ3};^G;}Urdo%f}* zCx4y)oOPN13I03tuD9A>Z?(U!wXd^zMqL(kLt|(AwR?UjuWQflF3+!KXKI|YF56E) zhBI&V#B1es^)rLy`QwvPmWkCf>hiq;|Ea_F__zIt?O(2ECC9%!N1Dlp@!xLiEb_iJ zRQmTe61vOP5C7|tW7}PuufIipri54<`v0q8(*Enqd+7}8uViNA{O9FA9QY3h{=(JZ<>p6Q)$on0(`uGfp3U%cWOL zoihFA+pnvsxbceWiRGu>IQ8`D*UhZCZ1R*T7hik!j2~Tc;Vq-b-Z=d9iYsrdytekN z;WH*&9jd7K;ncF9R9xb^-i-D*zO}8b%^WeoGrhzNe^_8fCi^^Q41bIvE;S2rj~OlV zdCf?kkBLGvQs&E7#{nrb%9`Od15W4=wjb;f&8rRDLmuJ^UStJvvj)=dkSnYmW}KhsB1f=_5))`J&Mt=q0xwq zM^SNO@p?0SIPZ>uX5IVcSBnac!Z~Mj{)AMS@m!zt z;?<+(9GWoMXm|)Y#y* zQGXDHp{V;@Jj~KJjCrR3Uo-NC*|gg|YHgXPAcy>^-&r$s)N=M5iuUX;E&Ar;5iC78 z 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

KM7Qkl(DDuC`d^8Ku(?sDW*1;*7V_qPh-6 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