From 6545e483ae198ac906ce58a91be2ac73b787ff6c Mon Sep 17 00:00:00 2001 From: Maxim Vladimirskiy Date: Wed, 30 Jun 2021 15:07:42 +0300 Subject: [PATCH] Regenerate gRPC stubs with the latest protobuf --- .gitignore | 3 +- benchmark_test.go | 4 +- cluster/cluster.go | 2 +- cluster/cluster_test.go | 4 +- cmd/gubernator-cli/main.go | 2 +- cmd/gubernator-cluster/main.go | 4 +- cmd/gubernator/main.go | 2 +- functional_test.go | 4 +- go.mod | 11 +- go.sum | 265 +++++++++++++++++++- gubernator.go | 2 + gubernator.pb.go | 305 +++++++---------------- gubernator.pb.gw.go | 9 + gubernator_grpc.pb.go | 143 +++++++++++ interval_test.go | 2 +- peer_client_test.go | 4 +- peers.pb.go | 220 ++++------------ peers.pb.gw.go | 250 +++++++++++++++++++ peers_grpc.pb.go | 141 +++++++++++ proto/gubernator.proto | 2 +- proto/peers.proto | 2 +- python/gubernator/gubernator_pb2.py | 110 ++++---- python/gubernator/gubernator_pb2_grpc.py | 132 ++++++---- python/gubernator/peers_pb2.py | 281 +++++++++++++++++++++ python/gubernator/peers_pb2_grpc.py | 104 ++++++++ scripts/proto.sh | 64 +++-- store_test.go | 2 +- tls_test.go | 2 +- 28 files changed, 1539 insertions(+), 537 deletions(-) create mode 100644 gubernator_grpc.pb.go create mode 100644 peers.pb.gw.go create mode 100644 peers_grpc.pb.go create mode 100644 python/gubernator/peers_pb2.py create mode 100644 python/gubernator/peers_pb2_grpc.py diff --git a/.gitignore b/.gitignore index 885e70c0..88f825f3 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ __pycache__ *.pyc gubernator.egg-info/ .DS_Store -*.iml \ No newline at end of file +*.iml +googleapis/ diff --git a/benchmark_test.go b/benchmark_test.go index 6eb9c5d5..26a9f81e 100644 --- a/benchmark_test.go +++ b/benchmark_test.go @@ -20,8 +20,8 @@ import ( "context" "testing" - guber "github.com/mailgun/gubernator" - "github.com/mailgun/gubernator/cluster" + guber "github.com/mailgun/gubernator/v2" + "github.com/mailgun/gubernator/v2/cluster" "github.com/mailgun/holster/v4/syncutil" ) diff --git a/cluster/cluster.go b/cluster/cluster.go index 4ad46dce..913ff7e3 100644 --- a/cluster/cluster.go +++ b/cluster/cluster.go @@ -21,7 +21,7 @@ import ( "fmt" "math/rand" - "github.com/mailgun/gubernator" + "github.com/mailgun/gubernator/v2" "github.com/mailgun/holster/v4/clock" "github.com/pkg/errors" "github.com/sirupsen/logrus" diff --git a/cluster/cluster_test.go b/cluster/cluster_test.go index c904781c..6797b2a9 100644 --- a/cluster/cluster_test.go +++ b/cluster/cluster_test.go @@ -19,8 +19,8 @@ package cluster_test import ( "testing" - "github.com/mailgun/gubernator" - "github.com/mailgun/gubernator/cluster" + "github.com/mailgun/gubernator/v2" + "github.com/mailgun/gubernator/v2/cluster" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) diff --git a/cmd/gubernator-cli/main.go b/cmd/gubernator-cli/main.go index 6300b776..89070999 100644 --- a/cmd/gubernator-cli/main.go +++ b/cmd/gubernator-cli/main.go @@ -25,7 +25,7 @@ import ( "os" "github.com/davecgh/go-spew/spew" - guber "github.com/mailgun/gubernator" + guber "github.com/mailgun/gubernator/v2" "github.com/mailgun/holster/v4/clock" "github.com/mailgun/holster/v4/setter" "github.com/mailgun/holster/v4/syncutil" diff --git a/cmd/gubernator-cluster/main.go b/cmd/gubernator-cluster/main.go index cc02c30e..b0277ab2 100644 --- a/cmd/gubernator-cluster/main.go +++ b/cmd/gubernator-cluster/main.go @@ -21,8 +21,8 @@ import ( "os" "os/signal" - "github.com/mailgun/gubernator" - "github.com/mailgun/gubernator/cluster" + "github.com/mailgun/gubernator/v2" + "github.com/mailgun/gubernator/v2/cluster" "github.com/sirupsen/logrus" ) diff --git a/cmd/gubernator/main.go b/cmd/gubernator/main.go index 45b2b2c4..faf95c27 100644 --- a/cmd/gubernator/main.go +++ b/cmd/gubernator/main.go @@ -24,7 +24,7 @@ import ( "runtime" "syscall" - "github.com/mailgun/gubernator" + "github.com/mailgun/gubernator/v2" "github.com/mailgun/holster/v4/clock" "github.com/sirupsen/logrus" "k8s.io/klog" diff --git a/functional_test.go b/functional_test.go index e2d7aad5..eed755e4 100644 --- a/functional_test.go +++ b/functional_test.go @@ -25,8 +25,8 @@ import ( "strings" "testing" - guber "github.com/mailgun/gubernator" - "github.com/mailgun/gubernator/cluster" + guber "github.com/mailgun/gubernator/v2" + "github.com/mailgun/gubernator/v2/cluster" "github.com/mailgun/holster/v4/clock" "github.com/mailgun/holster/v4/testutil" "github.com/prometheus/common/expfmt" diff --git a/go.mod b/go.mod index 9d36f1d9..dd04e26c 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,11 @@ -module github.com/mailgun/gubernator +module github.com/mailgun/gubernator/v2 go 1.14 require ( github.com/davecgh/go-spew v1.1.1 - github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect github.com/golang/protobuf v1.5.2 - github.com/google/btree v1.0.0 // indirect + github.com/google/go-cmp v0.5.6 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/memberlist v0.2.4 github.com/mailgun/holster/v4 v4.0.0 @@ -18,9 +17,11 @@ require ( github.com/stretchr/testify v1.7.0 go.etcd.io/etcd/client/v3 v3.5.0 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 - golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect - google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c + golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 // indirect + google.golang.org/api v0.30.0 + google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced google.golang.org/grpc v1.38.0 + google.golang.org/protobuf v1.27.1 // indirect k8s.io/api v0.0.0-20190620084959-7cf5895f2711 k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719 k8s.io/client-go v0.0.0-20190620085101-78d2af792bab diff --git a/go.sum b/go.sum index f35eb01a..486676bb 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,40 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +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 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= +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/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-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= 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/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/ahmetb/go-linq v3.0.0+incompatible h1:qQkjjOXKrKOTy83X8OpRmnKflXKQIL/mC/gMVVDMhOA= @@ -25,6 +58,9 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -49,6 +85,9 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= @@ -63,13 +102,23 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 h1:ZgQEtGgCBiWRM39fZuwSd1LwSqqSW0hOdXCYYDX0R3I= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +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 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= @@ -89,15 +138,31 @@ 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 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.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.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= @@ -128,8 +193,9 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= @@ -137,6 +203,7 @@ github.com/hashicorp/memberlist v0.2.4 h1:OOhYzSvFnkFQXm1ysE8RjXTHsqSRDyP4emusC9 github.com/hashicorp/memberlist v0.2.4/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= @@ -145,6 +212,8 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -221,6 +290,7 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= @@ -241,7 +311,9 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +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= go.etcd.io/etcd/api/v3 v3.5.0 h1:GsV3S+OfZEOCNXdtNkBSR7kgLobAa/SO6tCxRa0GAYw= @@ -250,6 +322,12 @@ go.etcd.io/etcd/client/pkg/v3 v3.5.0 h1:2aQv6F436YnN7I4VbI8PPYrBhu+SmrTaADcf8Mi/ go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v3 v3.5.0 h1:62Eh0XOro+rDwkrypAGDfgmNh5Joq+z+W9HZdlXMzek= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.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 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= @@ -260,16 +338,41 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/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-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-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 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= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +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.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -283,11 +386,27 @@ golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +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-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-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-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-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= @@ -296,13 +415,19 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b 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-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= +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/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1 h1:x622Z2o4hgCr/4CiKWc51jHVKaWdtVpBNmEI8wI9Qns= +golang.org/x/oauth2 v0.0.0-20210615190721-d04028783cf1/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 h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= @@ -318,17 +443,36 @@ golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190312061237-fead79001313/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= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/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-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +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-20200124204421-9fbb57f87de9/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-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -339,45 +483,138 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc 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/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/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= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/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-20190907020128-2ca718005c18/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-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +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-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-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +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 h1:yfrXXP61wVuLb0vBcG6qaOoIoqYEzOQS8jum51jkv2w= +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.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +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-20200513103714-09dca8ec2884/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-20210602131652-f16073e35f0c h1:wtujag7C+4D6KMoulW9YauvK2lgdvCMS260jsqqBXr0= +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-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced h1:c5geK1iMU3cDKtFrCVQIcjR3W+JOZMuhIyICMCTbtus= +google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.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/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.38.0 h1:/9BgsAsa5nWe26HqOlvlgJnqBuktYOLCgjCPqsa56W0= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= @@ -389,14 +626,18 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o= gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= @@ -415,7 +656,12 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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.0.0-20190620084959-7cf5895f2711 h1:BblVYz/wE5WtBsD/Gvu54KyBUTJMflolzc5I2DTvh50= k8s.io/api v0.0.0-20190620084959-7cf5895f2711/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719 h1:uV4S5IB5g4Nvi+TBVNf3e9L4wrirlwYJ6w88jUQxTUw= @@ -427,6 +673,9 @@ k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= k8s.io/utils v0.0.0-20190221042446-c2654d5206da h1:ElyM7RPonbKnQqOcw7dG2IK5uvQQn3b/WPHqD5mBvP4= k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= +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/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/gubernator.go b/gubernator.go index 1990725a..ebe8b77f 100644 --- a/gubernator.go +++ b/gubernator.go @@ -38,6 +38,8 @@ const ( ) type V1Instance struct { + UnimplementedV1Server + UnimplementedPeersV1Server health HealthCheckResp global *globalManager mutliRegion *mutliRegionManager diff --git a/gubernator.pb.go b/gubernator.pb.go index 91092c96..ad2339e2 100644 --- a/gubernator.pb.go +++ b/gubernator.pb.go @@ -1,18 +1,12 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: gubernator.proto -package gubernator - -import ( - context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - _ "google.golang.org/genproto/googleapis/api/annotations" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - math "math" -) +package gubernator // import "github.com/mailgun/gubernator" + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "google.golang.org/genproto/googleapis/api/annotations" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -23,7 +17,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type Algorithm int32 @@ -38,7 +32,6 @@ var Algorithm_name = map[int32]string{ 0: "TOKEN_BUCKET", 1: "LEAKY_BUCKET", } - var Algorithm_value = map[string]int32{ "TOKEN_BUCKET": 0, "LEAKY_BUCKET": 1, @@ -47,9 +40,8 @@ var Algorithm_value = map[string]int32{ func (x Algorithm) String() string { return proto.EnumName(Algorithm_name, int32(x)) } - func (Algorithm) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_079522a6f9470154, []int{0} + return fileDescriptor_gubernator_ffabe60c3958330e, []int{0} } // A set of int32 flags used to control the behavior of a rate limit in gubernator @@ -110,7 +102,9 @@ const ( // algorithm chosen. For instance, if used with `TOKEN_BUCKET` it will immediately expire the // cache value. For `LEAKY_BUCKET` it sets the `Remaining` to `Limit`. Behavior_RESET_REMAINING Behavior = 8 - // Pushes rate limits to other regions + // Enables rate limits to be pushed to other regions. Currently this is only implemented when using + // 'member-list' peer discovery. Also requires GUBER_DATA_CENTER to be set to different values on at + // least 2 instances of Gubernator. Behavior_MULTI_REGION Behavior = 16 ) @@ -122,7 +116,6 @@ var Behavior_name = map[int32]string{ 8: "RESET_REMAINING", 16: "MULTI_REGION", } - var Behavior_value = map[string]int32{ "BATCHING": 0, "NO_BATCHING": 1, @@ -135,9 +128,8 @@ var Behavior_value = map[string]int32{ func (x Behavior) String() string { return proto.EnumName(Behavior_name, int32(x)) } - func (Behavior) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_079522a6f9470154, []int{1} + return fileDescriptor_gubernator_ffabe60c3958330e, []int{1} } type Status int32 @@ -151,7 +143,6 @@ var Status_name = map[int32]string{ 0: "UNDER_LIMIT", 1: "OVER_LIMIT", } - var Status_value = map[string]int32{ "UNDER_LIMIT": 0, "OVER_LIMIT": 1, @@ -160,9 +151,8 @@ var Status_value = map[string]int32{ func (x Status) String() string { return proto.EnumName(Status_name, int32(x)) } - func (Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_079522a6f9470154, []int{2} + return fileDescriptor_gubernator_ffabe60c3958330e, []int{2} } // Must specify at least one Request @@ -177,17 +167,16 @@ func (m *GetRateLimitsReq) Reset() { *m = GetRateLimitsReq{} } func (m *GetRateLimitsReq) String() string { return proto.CompactTextString(m) } func (*GetRateLimitsReq) ProtoMessage() {} func (*GetRateLimitsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_079522a6f9470154, []int{0} + return fileDescriptor_gubernator_ffabe60c3958330e, []int{0} } - func (m *GetRateLimitsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetRateLimitsReq.Unmarshal(m, b) } func (m *GetRateLimitsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetRateLimitsReq.Marshal(b, m, deterministic) } -func (m *GetRateLimitsReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetRateLimitsReq.Merge(m, src) +func (dst *GetRateLimitsReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetRateLimitsReq.Merge(dst, src) } func (m *GetRateLimitsReq) XXX_Size() int { return xxx_messageInfo_GetRateLimitsReq.Size(m) @@ -217,17 +206,16 @@ func (m *GetRateLimitsResp) Reset() { *m = GetRateLimitsResp{} } func (m *GetRateLimitsResp) String() string { return proto.CompactTextString(m) } func (*GetRateLimitsResp) ProtoMessage() {} func (*GetRateLimitsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_079522a6f9470154, []int{1} + return fileDescriptor_gubernator_ffabe60c3958330e, []int{1} } - func (m *GetRateLimitsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetRateLimitsResp.Unmarshal(m, b) } func (m *GetRateLimitsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetRateLimitsResp.Marshal(b, m, deterministic) } -func (m *GetRateLimitsResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetRateLimitsResp.Merge(m, src) +func (dst *GetRateLimitsResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetRateLimitsResp.Merge(dst, src) } func (m *GetRateLimitsResp) XXX_Size() int { return xxx_messageInfo_GetRateLimitsResp.Size(m) @@ -274,17 +262,16 @@ func (m *RateLimitReq) Reset() { *m = RateLimitReq{} } func (m *RateLimitReq) String() string { return proto.CompactTextString(m) } func (*RateLimitReq) ProtoMessage() {} func (*RateLimitReq) Descriptor() ([]byte, []int) { - return fileDescriptor_079522a6f9470154, []int{2} + return fileDescriptor_gubernator_ffabe60c3958330e, []int{2} } - func (m *RateLimitReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RateLimitReq.Unmarshal(m, b) } func (m *RateLimitReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_RateLimitReq.Marshal(b, m, deterministic) } -func (m *RateLimitReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimitReq.Merge(m, src) +func (dst *RateLimitReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimitReq.Merge(dst, src) } func (m *RateLimitReq) XXX_Size() int { return xxx_messageInfo_RateLimitReq.Size(m) @@ -366,17 +353,16 @@ func (m *RateLimitResp) Reset() { *m = RateLimitResp{} } func (m *RateLimitResp) String() string { return proto.CompactTextString(m) } func (*RateLimitResp) ProtoMessage() {} func (*RateLimitResp) Descriptor() ([]byte, []int) { - return fileDescriptor_079522a6f9470154, []int{3} + return fileDescriptor_gubernator_ffabe60c3958330e, []int{3} } - func (m *RateLimitResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_RateLimitResp.Unmarshal(m, b) } func (m *RateLimitResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_RateLimitResp.Marshal(b, m, deterministic) } -func (m *RateLimitResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_RateLimitResp.Merge(m, src) +func (dst *RateLimitResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_RateLimitResp.Merge(dst, src) } func (m *RateLimitResp) XXX_Size() int { return xxx_messageInfo_RateLimitResp.Size(m) @@ -439,17 +425,16 @@ func (m *HealthCheckReq) Reset() { *m = HealthCheckReq{} } func (m *HealthCheckReq) String() string { return proto.CompactTextString(m) } func (*HealthCheckReq) ProtoMessage() {} func (*HealthCheckReq) Descriptor() ([]byte, []int) { - return fileDescriptor_079522a6f9470154, []int{4} + return fileDescriptor_gubernator_ffabe60c3958330e, []int{4} } - func (m *HealthCheckReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_HealthCheckReq.Unmarshal(m, b) } func (m *HealthCheckReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_HealthCheckReq.Marshal(b, m, deterministic) } -func (m *HealthCheckReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_HealthCheckReq.Merge(m, src) +func (dst *HealthCheckReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_HealthCheckReq.Merge(dst, src) } func (m *HealthCheckReq) XXX_Size() int { return xxx_messageInfo_HealthCheckReq.Size(m) @@ -476,17 +461,16 @@ func (m *HealthCheckResp) Reset() { *m = HealthCheckResp{} } func (m *HealthCheckResp) String() string { return proto.CompactTextString(m) } func (*HealthCheckResp) ProtoMessage() {} func (*HealthCheckResp) Descriptor() ([]byte, []int) { - return fileDescriptor_079522a6f9470154, []int{5} + return fileDescriptor_gubernator_ffabe60c3958330e, []int{5} } - func (m *HealthCheckResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_HealthCheckResp.Unmarshal(m, b) } func (m *HealthCheckResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_HealthCheckResp.Marshal(b, m, deterministic) } -func (m *HealthCheckResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_HealthCheckResp.Merge(m, src) +func (dst *HealthCheckResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_HealthCheckResp.Merge(dst, src) } func (m *HealthCheckResp) XXX_Size() int { return xxx_messageInfo_HealthCheckResp.Size(m) @@ -519,9 +503,6 @@ func (m *HealthCheckResp) GetPeerCount() int32 { } func init() { - proto.RegisterEnum("pb.gubernator.Algorithm", Algorithm_name, Algorithm_value) - proto.RegisterEnum("pb.gubernator.Behavior", Behavior_name, Behavior_value) - proto.RegisterEnum("pb.gubernator.Status", Status_name, Status_value) proto.RegisterType((*GetRateLimitsReq)(nil), "pb.gubernator.GetRateLimitsReq") proto.RegisterType((*GetRateLimitsResp)(nil), "pb.gubernator.GetRateLimitsResp") proto.RegisterType((*RateLimitReq)(nil), "pb.gubernator.RateLimitReq") @@ -529,177 +510,59 @@ func init() { proto.RegisterMapType((map[string]string)(nil), "pb.gubernator.RateLimitResp.MetadataEntry") proto.RegisterType((*HealthCheckReq)(nil), "pb.gubernator.HealthCheckReq") proto.RegisterType((*HealthCheckResp)(nil), "pb.gubernator.HealthCheckResp") + proto.RegisterEnum("pb.gubernator.Algorithm", Algorithm_name, Algorithm_value) + proto.RegisterEnum("pb.gubernator.Behavior", Behavior_name, Behavior_value) + proto.RegisterEnum("pb.gubernator.Status", Status_name, Status_value) } -func init() { proto.RegisterFile("gubernator.proto", fileDescriptor_079522a6f9470154) } - -var fileDescriptor_079522a6f9470154 = []byte{ - // 712 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xdd, 0x6e, 0xda, 0x48, - 0x14, 0x8e, 0x21, 0x21, 0xf8, 0x24, 0x80, 0x33, 0xbb, 0x49, 0xbc, 0x2c, 0xd9, 0x45, 0xbe, 0x62, - 0x91, 0x16, 0x14, 0x22, 0xed, 0xae, 0xb2, 0x57, 0x40, 0x5c, 0x62, 0x01, 0xb6, 0x34, 0x81, 0x48, - 0xed, 0x8d, 0x35, 0x24, 0x23, 0xb0, 0x82, 0x7f, 0xf0, 0x8c, 0x53, 0xe5, 0xae, 0xea, 0x2b, 0xf4, - 0x35, 0xfa, 0x36, 0xbd, 0xee, 0x5d, 0x1f, 0xa1, 0x0f, 0x50, 0x8d, 0x01, 0x83, 0x91, 0x9a, 0xbb, - 0x39, 0xdf, 0xf9, 0xce, 0x77, 0x3c, 0xdf, 0x07, 0x03, 0xca, 0x34, 0x9a, 0xd0, 0xd0, 0x23, 0xdc, - 0x0f, 0x1b, 0x41, 0xe8, 0x73, 0x1f, 0x15, 0x82, 0x49, 0x63, 0x03, 0x96, 0x2b, 0x53, 0xdf, 0x9f, - 0xce, 0x69, 0x93, 0x04, 0x4e, 0x93, 0x78, 0x9e, 0xcf, 0x09, 0x77, 0x7c, 0x8f, 0x2d, 0xc9, 0x5a, - 0x1f, 0x94, 0x1e, 0xe5, 0x98, 0x70, 0x3a, 0x70, 0x5c, 0x87, 0x33, 0x4c, 0x17, 0xe8, 0x5f, 0xc8, - 0x87, 0x74, 0x11, 0x51, 0xc6, 0x99, 0x2a, 0x55, 0xb3, 0xb5, 0xa3, 0xd6, 0xef, 0x8d, 0x94, 0x66, - 0x23, 0xe1, 0x63, 0xba, 0xc0, 0x09, 0x59, 0xb3, 0xe0, 0x64, 0x47, 0x8c, 0x05, 0xe8, 0x1a, 0xe4, - 0x90, 0xb2, 0xc0, 0xf7, 0x18, 0x5d, 0xcb, 0x55, 0x7e, 0x2e, 0xc7, 0x02, 0xbc, 0xa1, 0x6b, 0xdf, - 0x25, 0x38, 0xde, 0xde, 0x85, 0x10, 0xec, 0x7b, 0xc4, 0xa5, 0xaa, 0x54, 0x95, 0x6a, 0x32, 0x8e, - 0xcf, 0xe8, 0x02, 0x20, 0xf2, 0x9c, 0x45, 0x44, 0xed, 0x27, 0xfa, 0xa2, 0x66, 0xe2, 0x8e, 0xbc, - 0x44, 0xfa, 0xf4, 0x45, 0x8c, 0xcc, 0x1c, 0xce, 0xd4, 0x6c, 0x55, 0xaa, 0x65, 0x71, 0x7c, 0x46, - 0xbf, 0xc2, 0xc1, 0x5c, 0x48, 0xaa, 0xfb, 0x31, 0xb8, 0x2c, 0x50, 0x19, 0xf2, 0x8f, 0x51, 0x18, - 0xdb, 0xa3, 0x1e, 0xc4, 0x8d, 0xa4, 0x46, 0xff, 0x80, 0x4c, 0xe6, 0x53, 0x3f, 0x74, 0xf8, 0xcc, - 0x55, 0x73, 0x55, 0xa9, 0x56, 0x6c, 0xa9, 0x3b, 0xb7, 0x68, 0xaf, 0xfb, 0x78, 0x43, 0x45, 0x57, - 0x90, 0x9f, 0xd0, 0x19, 0x79, 0x76, 0xfc, 0x50, 0x3d, 0x8c, 0xc7, 0xce, 0x77, 0xc6, 0x3a, 0xab, - 0x36, 0x4e, 0x88, 0xda, 0xe7, 0x0c, 0x14, 0x52, 0x9e, 0xa0, 0xbf, 0x21, 0xc7, 0x38, 0xe1, 0x11, - 0x8b, 0x6f, 0x5e, 0x6c, 0x9d, 0xee, 0x88, 0xdc, 0xc5, 0x4d, 0xbc, 0x22, 0x6d, 0xee, 0x97, 0xd9, - 0xbe, 0x5f, 0x45, 0x24, 0xe1, 0x12, 0xc7, 0x73, 0xbc, 0xe9, 0xca, 0x8e, 0x0d, 0x20, 0x6c, 0x0c, - 0x29, 0xa3, 0xdc, 0xe6, 0x8e, 0x4b, 0x57, 0xc6, 0xc8, 0x31, 0x32, 0x72, 0x5c, 0x2a, 0x24, 0x69, - 0x18, 0xfa, 0x61, 0xec, 0x8c, 0x8c, 0x97, 0x05, 0x7a, 0x03, 0x79, 0x97, 0x72, 0xf2, 0x48, 0x38, - 0x51, 0x73, 0x71, 0xb6, 0xf5, 0xd7, 0xb2, 0x6d, 0x0c, 0x57, 0x64, 0xdd, 0xe3, 0xe1, 0x0b, 0x4e, - 0x66, 0xcb, 0xff, 0x43, 0x21, 0xd5, 0x42, 0x0a, 0x64, 0x45, 0x9a, 0xcb, 0x9c, 0xc5, 0x51, 0x7c, - 0xc0, 0x33, 0x99, 0x47, 0x74, 0x95, 0xf0, 0xb2, 0xb8, 0xce, 0xfc, 0x27, 0x69, 0x0a, 0x14, 0x6f, - 0x29, 0x99, 0xf3, 0x59, 0x77, 0x46, 0x1f, 0x9e, 0x30, 0x5d, 0x68, 0x13, 0x28, 0xa5, 0x10, 0x16, - 0xa0, 0xb3, 0x94, 0x83, 0x72, 0x62, 0x95, 0x0a, 0x87, 0x2e, 0x65, 0x8c, 0x4c, 0xd7, 0xc2, 0xeb, - 0x52, 0x18, 0x12, 0x50, 0x1a, 0xda, 0x0f, 0x7e, 0xe4, 0xf1, 0xd8, 0xaf, 0x03, 0x2c, 0x0b, 0xa4, - 0x2b, 0x80, 0x7a, 0x13, 0xe4, 0x24, 0x71, 0xa4, 0xc0, 0xf1, 0xc8, 0xea, 0xeb, 0xa6, 0xdd, 0x19, - 0x77, 0xfb, 0xfa, 0x48, 0xd9, 0x13, 0xc8, 0x40, 0x6f, 0xf7, 0xdf, 0xae, 0x11, 0xa9, 0xfe, 0x1e, - 0xf2, 0xeb, 0xac, 0xd1, 0x31, 0xe4, 0x3b, 0xed, 0x51, 0xf7, 0xd6, 0x30, 0x7b, 0xca, 0x1e, 0x2a, - 0xc1, 0x91, 0x69, 0xd9, 0x09, 0x20, 0x21, 0x80, 0x5c, 0x6f, 0x60, 0x75, 0xda, 0x03, 0x25, 0x83, - 0x7e, 0x83, 0xd3, 0x9b, 0x31, 0x6e, 0x8f, 0x0c, 0xcb, 0xb4, 0x8d, 0x3b, 0xbb, 0x87, 0xf5, 0x9e, - 0x85, 0x8d, 0xb6, 0xa9, 0xec, 0xa3, 0x5f, 0xa0, 0x84, 0xf5, 0x3b, 0x7d, 0x64, 0x63, 0x7d, 0xd8, - 0x36, 0x4c, 0x31, 0x9b, 0x17, 0x8b, 0x87, 0xe3, 0xc1, 0xc8, 0xb0, 0xb1, 0xde, 0x33, 0x2c, 0x53, - 0x51, 0xea, 0x7f, 0x41, 0x6e, 0xf9, 0xfb, 0x10, 0x8b, 0xc6, 0xe6, 0x8d, 0x8e, 0xed, 0x81, 0x31, - 0x34, 0xc4, 0x57, 0x16, 0x01, 0xac, 0xfb, 0xa4, 0x96, 0x5a, 0x5f, 0x25, 0xc8, 0xdc, 0x5f, 0xa2, - 0x00, 0x0a, 0xa9, 0x3f, 0x32, 0xfa, 0x73, 0x27, 0xd5, 0xdd, 0x37, 0xa3, 0x5c, 0x7d, 0x9d, 0xc0, - 0x02, 0xad, 0xf2, 0xf1, 0xcb, 0xb7, 0x4f, 0x99, 0x33, 0xed, 0xa4, 0xf9, 0x7c, 0xd9, 0x4c, 0xb5, - 0xaf, 0xa5, 0x3a, 0xa2, 0x70, 0xb4, 0x95, 0x18, 0xba, 0xd8, 0x91, 0x4b, 0xe7, 0x5b, 0xfe, 0xe3, - 0xb5, 0x36, 0x0b, 0xb4, 0xf3, 0x78, 0xd7, 0x09, 0x2a, 0x89, 0x5d, 0x5b, 0xcd, 0x4e, 0xe9, 0x1d, - 0x6c, 0xc6, 0x3e, 0x48, 0xd2, 0x24, 0x17, 0x3f, 0x83, 0x57, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, - 0x67, 0x9a, 0x70, 0x17, 0x47, 0x05, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// V1Client is the client API for V1 service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type V1Client interface { - // Given a list of rate limit requests, return the rate limits of each. - GetRateLimits(ctx context.Context, in *GetRateLimitsReq, opts ...grpc.CallOption) (*GetRateLimitsResp, error) - // This method is for round trip benchmarking and can be used by - // the client to determine connectivity to the server - HealthCheck(ctx context.Context, in *HealthCheckReq, opts ...grpc.CallOption) (*HealthCheckResp, error) -} - -type v1Client struct { - cc *grpc.ClientConn -} - -func NewV1Client(cc *grpc.ClientConn) V1Client { - return &v1Client{cc} -} - -func (c *v1Client) GetRateLimits(ctx context.Context, in *GetRateLimitsReq, opts ...grpc.CallOption) (*GetRateLimitsResp, error) { - out := new(GetRateLimitsResp) - err := c.cc.Invoke(ctx, "/pb.gubernator.V1/GetRateLimits", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *v1Client) HealthCheck(ctx context.Context, in *HealthCheckReq, opts ...grpc.CallOption) (*HealthCheckResp, error) { - out := new(HealthCheckResp) - err := c.cc.Invoke(ctx, "/pb.gubernator.V1/HealthCheck", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// V1Server is the server API for V1 service. -type V1Server interface { - // Given a list of rate limit requests, return the rate limits of each. - GetRateLimits(context.Context, *GetRateLimitsReq) (*GetRateLimitsResp, error) - // This method is for round trip benchmarking and can be used by - // the client to determine connectivity to the server - HealthCheck(context.Context, *HealthCheckReq) (*HealthCheckResp, error) -} - -// UnimplementedV1Server can be embedded to have forward compatible implementations. -type UnimplementedV1Server struct { -} - -func (*UnimplementedV1Server) GetRateLimits(ctx context.Context, req *GetRateLimitsReq) (*GetRateLimitsResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetRateLimits not implemented") -} -func (*UnimplementedV1Server) HealthCheck(ctx context.Context, req *HealthCheckReq) (*HealthCheckResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method HealthCheck not implemented") -} - -func RegisterV1Server(s *grpc.Server, srv V1Server) { - s.RegisterService(&_V1_serviceDesc, srv) -} - -func _V1_GetRateLimits_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetRateLimitsReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(V1Server).GetRateLimits(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pb.gubernator.V1/GetRateLimits", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(V1Server).GetRateLimits(ctx, req.(*GetRateLimitsReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _V1_HealthCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(HealthCheckReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(V1Server).HealthCheck(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pb.gubernator.V1/HealthCheck", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(V1Server).HealthCheck(ctx, req.(*HealthCheckReq)) - } - return interceptor(ctx, in, info, handler) -} - -var _V1_serviceDesc = grpc.ServiceDesc{ - ServiceName: "pb.gubernator.V1", - HandlerType: (*V1Server)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetRateLimits", - Handler: _V1_GetRateLimits_Handler, - }, - { - MethodName: "HealthCheck", - Handler: _V1_HealthCheck_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "gubernator.proto", +func init() { proto.RegisterFile("gubernator.proto", fileDescriptor_gubernator_ffabe60c3958330e) } + +var fileDescriptor_gubernator_ffabe60c3958330e = []byte{ + // 727 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x54, 0xcd, 0x6e, 0xea, 0x46, + 0x14, 0x8e, 0x21, 0x21, 0xf8, 0x24, 0x80, 0x33, 0x6d, 0x12, 0x97, 0x92, 0x16, 0x79, 0x45, 0x91, + 0x0a, 0x0a, 0x91, 0xda, 0x2a, 0x5d, 0x01, 0x71, 0x89, 0x05, 0xd8, 0xd2, 0x04, 0x22, 0xb5, 0x1b, + 0x6b, 0x48, 0x46, 0xc6, 0x0a, 0xfe, 0xc1, 0x33, 0x4e, 0x95, 0x5d, 0xd5, 0x57, 0xe8, 0x6b, 0xf4, + 0x6d, 0xee, 0xfa, 0xee, 0xee, 0x23, 0xdc, 0x07, 0xb8, 0x1a, 0x03, 0x06, 0x23, 0xdd, 0xec, 0xe6, + 0x7c, 0xe7, 0x3b, 0xdf, 0xf1, 0x7c, 0x1f, 0x0c, 0x28, 0x4e, 0x3c, 0xa3, 0x91, 0x4f, 0x78, 0x10, + 0xb5, 0xc2, 0x28, 0xe0, 0x01, 0x2a, 0x85, 0xb3, 0xd6, 0x16, 0xac, 0xd6, 0x9c, 0x20, 0x70, 0x16, + 0xb4, 0x4d, 0x42, 0xb7, 0x4d, 0x7c, 0x3f, 0xe0, 0x84, 0xbb, 0x81, 0xcf, 0x56, 0x64, 0x6d, 0x08, + 0xca, 0x80, 0x72, 0x4c, 0x38, 0x1d, 0xb9, 0x9e, 0xcb, 0x19, 0xa6, 0x4b, 0xf4, 0x2b, 0x14, 0x23, + 0xba, 0x8c, 0x29, 0xe3, 0x4c, 0x95, 0xea, 0xf9, 0xc6, 0x49, 0xe7, 0xfb, 0x56, 0x46, 0xb3, 0x95, + 0xf2, 0x31, 0x5d, 0xe2, 0x94, 0xac, 0x59, 0x70, 0xb6, 0x27, 0xc6, 0x42, 0x74, 0x0b, 0x72, 0x44, + 0x59, 0x18, 0xf8, 0x8c, 0x6e, 0xe4, 0x6a, 0x5f, 0x97, 0x63, 0x21, 0xde, 0xd2, 0xb5, 0xcf, 0x12, + 0x9c, 0xee, 0xee, 0x42, 0x08, 0x0e, 0x7d, 0xe2, 0x51, 0x55, 0xaa, 0x4b, 0x0d, 0x19, 0x27, 0x67, + 0x74, 0x05, 0x10, 0xfb, 0xee, 0x32, 0xa6, 0xf6, 0x0b, 0x7d, 0x53, 0x73, 0x49, 0x47, 0x5e, 0x21, + 0x43, 0xfa, 0x26, 0x46, 0xe6, 0x2e, 0x67, 0x6a, 0xbe, 0x2e, 0x35, 0xf2, 0x38, 0x39, 0xa3, 0x6f, + 0xe1, 0x68, 0x21, 0x24, 0xd5, 0xc3, 0x04, 0x5c, 0x15, 0xa8, 0x0a, 0xc5, 0xe7, 0x38, 0x4a, 0xec, + 0x51, 0x8f, 0x92, 0x46, 0x5a, 0xa3, 0x5f, 0x40, 0x26, 0x0b, 0x27, 0x88, 0x5c, 0x3e, 0xf7, 0xd4, + 0x42, 0x5d, 0x6a, 0x94, 0x3b, 0xea, 0xde, 0x2d, 0xba, 0x9b, 0x3e, 0xde, 0x52, 0xd1, 0x0d, 0x14, + 0x67, 0x74, 0x4e, 0x5e, 0xdd, 0x20, 0x52, 0x8f, 0x93, 0xb1, 0xcb, 0xbd, 0xb1, 0xde, 0xba, 0x8d, + 0x53, 0xa2, 0xf6, 0x7f, 0x0e, 0x4a, 0x19, 0x4f, 0xd0, 0xcf, 0x50, 0x60, 0x9c, 0xf0, 0x98, 0x25, + 0x37, 0x2f, 0x77, 0xce, 0xf7, 0x44, 0x1e, 0x92, 0x26, 0x5e, 0x93, 0xb6, 0xf7, 0xcb, 0xed, 0xde, + 0xaf, 0x26, 0x92, 0xf0, 0x88, 0xeb, 0xbb, 0xbe, 0xb3, 0xb6, 0x63, 0x0b, 0x08, 0x1b, 0x23, 0xca, + 0x28, 0xb7, 0xb9, 0xeb, 0xd1, 0xb5, 0x31, 0x72, 0x82, 0x4c, 0x5c, 0x8f, 0x0a, 0x49, 0x1a, 0x45, + 0x41, 0x94, 0x38, 0x23, 0xe3, 0x55, 0x81, 0xfe, 0x80, 0xa2, 0x47, 0x39, 0x79, 0x26, 0x9c, 0xa8, + 0x85, 0x24, 0xdb, 0xe6, 0x7b, 0xd9, 0xb6, 0xc6, 0x6b, 0xb2, 0xee, 0xf3, 0xe8, 0x0d, 0xa7, 0xb3, + 0xd5, 0xdf, 0xa1, 0x94, 0x69, 0x21, 0x05, 0xf2, 0x22, 0xcd, 0x55, 0xce, 0xe2, 0x28, 0x3e, 0xe0, + 0x95, 0x2c, 0x62, 0xba, 0x4e, 0x78, 0x55, 0xdc, 0xe6, 0x7e, 0x93, 0x34, 0x05, 0xca, 0xf7, 0x94, + 0x2c, 0xf8, 0xbc, 0x3f, 0xa7, 0x4f, 0x2f, 0x98, 0x2e, 0xb5, 0x19, 0x54, 0x32, 0x08, 0x0b, 0xd1, + 0x45, 0xc6, 0x41, 0x39, 0xb5, 0x4a, 0x85, 0x63, 0x8f, 0x32, 0x46, 0x9c, 0x8d, 0xf0, 0xa6, 0x14, + 0x86, 0x84, 0x94, 0x46, 0xf6, 0x53, 0x10, 0xfb, 0x3c, 0xf1, 0xeb, 0x08, 0xcb, 0x02, 0xe9, 0x0b, + 0xa0, 0xd9, 0x06, 0x39, 0x4d, 0x1c, 0x29, 0x70, 0x3a, 0xb1, 0x86, 0xba, 0x69, 0xf7, 0xa6, 0xfd, + 0xa1, 0x3e, 0x51, 0x0e, 0x04, 0x32, 0xd2, 0xbb, 0xc3, 0x3f, 0x37, 0x88, 0xd4, 0xfc, 0x1b, 0x8a, + 0x9b, 0xac, 0xd1, 0x29, 0x14, 0x7b, 0xdd, 0x49, 0xff, 0xde, 0x30, 0x07, 0xca, 0x01, 0xaa, 0xc0, + 0x89, 0x69, 0xd9, 0x29, 0x20, 0x21, 0x80, 0xc2, 0x60, 0x64, 0xf5, 0xba, 0x23, 0x25, 0x87, 0xbe, + 0x83, 0xf3, 0xbb, 0x29, 0xee, 0x4e, 0x0c, 0xcb, 0xb4, 0x8d, 0x07, 0x7b, 0x80, 0xf5, 0x81, 0x85, + 0x8d, 0xae, 0xa9, 0x1c, 0xa2, 0x6f, 0xa0, 0x82, 0xf5, 0x07, 0x7d, 0x62, 0x63, 0x7d, 0xdc, 0x35, + 0x4c, 0x31, 0x5b, 0x14, 0x8b, 0xc7, 0xd3, 0xd1, 0xc4, 0xb0, 0xb1, 0x3e, 0x30, 0x2c, 0x53, 0x51, + 0x9a, 0x3f, 0x41, 0x61, 0xf5, 0xfb, 0x10, 0x8b, 0xa6, 0xe6, 0x9d, 0x8e, 0xed, 0x91, 0x31, 0x36, + 0xc4, 0x57, 0x96, 0x01, 0xac, 0xc7, 0xb4, 0x96, 0x3a, 0x1f, 0x25, 0xc8, 0x3d, 0x5e, 0xa3, 0x10, + 0x4a, 0x99, 0x3f, 0x32, 0xfa, 0x71, 0x2f, 0xd5, 0xfd, 0x37, 0xa3, 0x5a, 0x7f, 0x9f, 0xc0, 0x42, + 0xad, 0xf6, 0xef, 0x87, 0x4f, 0xff, 0xe5, 0x2e, 0xb4, 0xb3, 0xf6, 0xeb, 0x75, 0x3b, 0xd3, 0xbe, + 0x95, 0x9a, 0x88, 0xc2, 0xc9, 0x4e, 0x62, 0xe8, 0x6a, 0x4f, 0x2e, 0x9b, 0x6f, 0xf5, 0x87, 0xf7, + 0xda, 0x2c, 0xd4, 0x2e, 0x93, 0x5d, 0x67, 0xa8, 0x22, 0x76, 0xed, 0x34, 0x7b, 0xda, 0x5f, 0x57, + 0x8e, 0xcb, 0xe7, 0xf1, 0xac, 0xf5, 0x14, 0x78, 0x6d, 0x8f, 0xb8, 0x0b, 0x27, 0xf6, 0xdb, 0x5b, + 0xa5, 0x7f, 0x24, 0x69, 0x56, 0x48, 0x5e, 0xc6, 0x9b, 0x2f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x64, + 0xc7, 0x06, 0xfd, 0x5a, 0x05, 0x00, 0x00, } diff --git a/gubernator.pb.gw.go b/gubernator.pb.gw.go index 1969cd57..86db8a4b 100644 --- a/gubernator.pb.gw.go +++ b/gubernator.pb.gw.go @@ -20,6 +20,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" ) @@ -30,6 +31,7 @@ var _ status.Status var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage +var _ = metadata.Join func request_V1_GetRateLimits_0(ctx context.Context, marshaler runtime.Marshaler, client V1Client, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq GetRateLimitsReq @@ -86,11 +88,14 @@ func local_request_V1_HealthCheck_0(ctx context.Context, marshaler runtime.Marsh // RegisterV1HandlerServer registers the http handlers for service V1 to "mux". // UnaryRPC :call V1Server directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterV1HandlerFromEndpoint instead. func RegisterV1HandlerServer(ctx context.Context, mux *runtime.ServeMux, server V1Server) error { mux.Handle("POST", pattern_V1_GetRateLimits_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -98,6 +103,7 @@ func RegisterV1HandlerServer(ctx context.Context, mux *runtime.ServeMux, server return } resp, md, err := local_request_V1_GetRateLimits_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) @@ -111,6 +117,8 @@ func RegisterV1HandlerServer(ctx context.Context, mux *runtime.ServeMux, server mux.Handle("GET", pattern_V1_HealthCheck_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) if err != nil { @@ -118,6 +126,7 @@ func RegisterV1HandlerServer(ctx context.Context, mux *runtime.ServeMux, server return } resp, md, err := local_request_V1_HealthCheck_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) diff --git a/gubernator_grpc.pb.go b/gubernator_grpc.pb.go new file mode 100644 index 00000000..3b86ca42 --- /dev/null +++ b/gubernator_grpc.pb.go @@ -0,0 +1,143 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package gubernator + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// V1Client is the client API for V1 service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type V1Client interface { + // Given a list of rate limit requests, return the rate limits of each. + GetRateLimits(ctx context.Context, in *GetRateLimitsReq, opts ...grpc.CallOption) (*GetRateLimitsResp, error) + // This method is for round trip benchmarking and can be used by + // the client to determine connectivity to the server + HealthCheck(ctx context.Context, in *HealthCheckReq, opts ...grpc.CallOption) (*HealthCheckResp, error) +} + +type v1Client struct { + cc grpc.ClientConnInterface +} + +func NewV1Client(cc grpc.ClientConnInterface) V1Client { + return &v1Client{cc} +} + +func (c *v1Client) GetRateLimits(ctx context.Context, in *GetRateLimitsReq, opts ...grpc.CallOption) (*GetRateLimitsResp, error) { + out := new(GetRateLimitsResp) + err := c.cc.Invoke(ctx, "/pb.gubernator.V1/GetRateLimits", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *v1Client) HealthCheck(ctx context.Context, in *HealthCheckReq, opts ...grpc.CallOption) (*HealthCheckResp, error) { + out := new(HealthCheckResp) + err := c.cc.Invoke(ctx, "/pb.gubernator.V1/HealthCheck", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// V1Server is the server API for V1 service. +// All implementations must embed UnimplementedV1Server +// for forward compatibility +type V1Server interface { + // Given a list of rate limit requests, return the rate limits of each. + GetRateLimits(context.Context, *GetRateLimitsReq) (*GetRateLimitsResp, error) + // This method is for round trip benchmarking and can be used by + // the client to determine connectivity to the server + HealthCheck(context.Context, *HealthCheckReq) (*HealthCheckResp, error) + mustEmbedUnimplementedV1Server() +} + +// UnimplementedV1Server must be embedded to have forward compatible implementations. +type UnimplementedV1Server struct { +} + +func (UnimplementedV1Server) GetRateLimits(context.Context, *GetRateLimitsReq) (*GetRateLimitsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetRateLimits not implemented") +} +func (UnimplementedV1Server) HealthCheck(context.Context, *HealthCheckReq) (*HealthCheckResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method HealthCheck not implemented") +} +func (UnimplementedV1Server) mustEmbedUnimplementedV1Server() {} + +// UnsafeV1Server may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to V1Server will +// result in compilation errors. +type UnsafeV1Server interface { + mustEmbedUnimplementedV1Server() +} + +func RegisterV1Server(s grpc.ServiceRegistrar, srv V1Server) { + s.RegisterService(&V1_ServiceDesc, srv) +} + +func _V1_GetRateLimits_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetRateLimitsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(V1Server).GetRateLimits(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.gubernator.V1/GetRateLimits", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(V1Server).GetRateLimits(ctx, req.(*GetRateLimitsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _V1_HealthCheck_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(HealthCheckReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(V1Server).HealthCheck(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.gubernator.V1/HealthCheck", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(V1Server).HealthCheck(ctx, req.(*HealthCheckReq)) + } + return interceptor(ctx, in, info, handler) +} + +// V1_ServiceDesc is the grpc.ServiceDesc for V1 service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var V1_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "pb.gubernator.V1", + HandlerType: (*V1Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetRateLimits", + Handler: _V1_GetRateLimits_Handler, + }, + { + MethodName: "HealthCheck", + Handler: _V1_HealthCheck_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "gubernator.proto", +} diff --git a/interval_test.go b/interval_test.go index ffbebff7..dc9b0ec5 100644 --- a/interval_test.go +++ b/interval_test.go @@ -19,7 +19,7 @@ package gubernator_test import ( "testing" - "github.com/mailgun/gubernator" + "github.com/mailgun/gubernator/v2" "github.com/mailgun/holster/v4/clock" "github.com/stretchr/testify/assert" ) diff --git a/peer_client_test.go b/peer_client_test.go index 59cb9107..275f103d 100644 --- a/peer_client_test.go +++ b/peer_client_test.go @@ -6,8 +6,8 @@ import ( "sync" "testing" - "github.com/mailgun/gubernator" - "github.com/mailgun/gubernator/cluster" + "github.com/mailgun/gubernator/v2" + "github.com/mailgun/gubernator/v2/cluster" "github.com/mailgun/holster/v4/clock" "github.com/stretchr/testify/assert" ) diff --git a/peers.pb.go b/peers.pb.go index 464e8609..f4755ed6 100644 --- a/peers.pb.go +++ b/peers.pb.go @@ -1,17 +1,11 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: peers.proto -package gubernator +package gubernator // import "github.com/mailgun/gubernator" -import ( - context "context" - fmt "fmt" - proto "github.com/golang/protobuf/proto" - grpc "google.golang.org/grpc" - codes "google.golang.org/grpc/codes" - status "google.golang.org/grpc/status" - math "math" -) +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -22,7 +16,7 @@ var _ = math.Inf // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package type GetPeerRateLimitsReq struct { // Must specify at least one RateLimit. The peer that recives this request MUST be authoritative for @@ -37,17 +31,16 @@ func (m *GetPeerRateLimitsReq) Reset() { *m = GetPeerRateLimitsReq{} } func (m *GetPeerRateLimitsReq) String() string { return proto.CompactTextString(m) } func (*GetPeerRateLimitsReq) ProtoMessage() {} func (*GetPeerRateLimitsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_9b029f9e0d26cab5, []int{0} + return fileDescriptor_peers_58a22a2c4e221b3d, []int{0} } - func (m *GetPeerRateLimitsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPeerRateLimitsReq.Unmarshal(m, b) } func (m *GetPeerRateLimitsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetPeerRateLimitsReq.Marshal(b, m, deterministic) } -func (m *GetPeerRateLimitsReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetPeerRateLimitsReq.Merge(m, src) +func (dst *GetPeerRateLimitsReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPeerRateLimitsReq.Merge(dst, src) } func (m *GetPeerRateLimitsReq) XXX_Size() int { return xxx_messageInfo_GetPeerRateLimitsReq.Size(m) @@ -77,17 +70,16 @@ func (m *GetPeerRateLimitsResp) Reset() { *m = GetPeerRateLimitsResp{} } func (m *GetPeerRateLimitsResp) String() string { return proto.CompactTextString(m) } func (*GetPeerRateLimitsResp) ProtoMessage() {} func (*GetPeerRateLimitsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_9b029f9e0d26cab5, []int{1} + return fileDescriptor_peers_58a22a2c4e221b3d, []int{1} } - func (m *GetPeerRateLimitsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_GetPeerRateLimitsResp.Unmarshal(m, b) } func (m *GetPeerRateLimitsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_GetPeerRateLimitsResp.Marshal(b, m, deterministic) } -func (m *GetPeerRateLimitsResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetPeerRateLimitsResp.Merge(m, src) +func (dst *GetPeerRateLimitsResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetPeerRateLimitsResp.Merge(dst, src) } func (m *GetPeerRateLimitsResp) XXX_Size() int { return xxx_messageInfo_GetPeerRateLimitsResp.Size(m) @@ -117,17 +109,16 @@ func (m *UpdatePeerGlobalsReq) Reset() { *m = UpdatePeerGlobalsReq{} } func (m *UpdatePeerGlobalsReq) String() string { return proto.CompactTextString(m) } func (*UpdatePeerGlobalsReq) ProtoMessage() {} func (*UpdatePeerGlobalsReq) Descriptor() ([]byte, []int) { - return fileDescriptor_9b029f9e0d26cab5, []int{2} + return fileDescriptor_peers_58a22a2c4e221b3d, []int{2} } - func (m *UpdatePeerGlobalsReq) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdatePeerGlobalsReq.Unmarshal(m, b) } func (m *UpdatePeerGlobalsReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UpdatePeerGlobalsReq.Marshal(b, m, deterministic) } -func (m *UpdatePeerGlobalsReq) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdatePeerGlobalsReq.Merge(m, src) +func (dst *UpdatePeerGlobalsReq) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdatePeerGlobalsReq.Merge(dst, src) } func (m *UpdatePeerGlobalsReq) XXX_Size() int { return xxx_messageInfo_UpdatePeerGlobalsReq.Size(m) @@ -158,17 +149,16 @@ func (m *UpdatePeerGlobal) Reset() { *m = UpdatePeerGlobal{} } func (m *UpdatePeerGlobal) String() string { return proto.CompactTextString(m) } func (*UpdatePeerGlobal) ProtoMessage() {} func (*UpdatePeerGlobal) Descriptor() ([]byte, []int) { - return fileDescriptor_9b029f9e0d26cab5, []int{3} + return fileDescriptor_peers_58a22a2c4e221b3d, []int{3} } - func (m *UpdatePeerGlobal) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdatePeerGlobal.Unmarshal(m, b) } func (m *UpdatePeerGlobal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UpdatePeerGlobal.Marshal(b, m, deterministic) } -func (m *UpdatePeerGlobal) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdatePeerGlobal.Merge(m, src) +func (dst *UpdatePeerGlobal) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdatePeerGlobal.Merge(dst, src) } func (m *UpdatePeerGlobal) XXX_Size() int { return xxx_messageInfo_UpdatePeerGlobal.Size(m) @@ -210,17 +200,16 @@ func (m *UpdatePeerGlobalsResp) Reset() { *m = UpdatePeerGlobalsResp{} } func (m *UpdatePeerGlobalsResp) String() string { return proto.CompactTextString(m) } func (*UpdatePeerGlobalsResp) ProtoMessage() {} func (*UpdatePeerGlobalsResp) Descriptor() ([]byte, []int) { - return fileDescriptor_9b029f9e0d26cab5, []int{4} + return fileDescriptor_peers_58a22a2c4e221b3d, []int{4} } - func (m *UpdatePeerGlobalsResp) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_UpdatePeerGlobalsResp.Unmarshal(m, b) } func (m *UpdatePeerGlobalsResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_UpdatePeerGlobalsResp.Marshal(b, m, deterministic) } -func (m *UpdatePeerGlobalsResp) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdatePeerGlobalsResp.Merge(m, src) +func (dst *UpdatePeerGlobalsResp) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdatePeerGlobalsResp.Merge(dst, src) } func (m *UpdatePeerGlobalsResp) XXX_Size() int { return xxx_messageInfo_UpdatePeerGlobalsResp.Size(m) @@ -239,148 +228,29 @@ func init() { proto.RegisterType((*UpdatePeerGlobalsResp)(nil), "pb.gubernator.UpdatePeerGlobalsResp") } -func init() { proto.RegisterFile("peers.proto", fileDescriptor_9b029f9e0d26cab5) } - -var fileDescriptor_9b029f9e0d26cab5 = []byte{ - // 317 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xc1, 0x4a, 0xc3, 0x40, - 0x10, 0x40, 0xbb, 0x16, 0x5a, 0x3b, 0x45, 0xad, 0x4b, 0x8b, 0xa1, 0x0a, 0x86, 0xd5, 0x43, 0x4e, - 0x01, 0xa3, 0x28, 0x1e, 0x3c, 0xe8, 0xa5, 0x17, 0x41, 0x5d, 0xb0, 0x07, 0x2f, 0xba, 0xc1, 0x21, - 0x06, 0x53, 0xb3, 0xd9, 0xdd, 0x1c, 0xbc, 0xf9, 0x0d, 0xfe, 0x97, 0xff, 0x24, 0x49, 0xd3, 0x04, - 0x93, 0x48, 0x6f, 0x9b, 0x9d, 0x37, 0x6f, 0x66, 0x32, 0x0b, 0x43, 0x89, 0xa8, 0xb4, 0x2b, 0x55, - 0x6c, 0x62, 0xba, 0x25, 0x7d, 0x37, 0x48, 0x7d, 0x54, 0x1f, 0xc2, 0xc4, 0x6a, 0x3a, 0xaa, 0xce, - 0x4b, 0x80, 0xdd, 0xc1, 0x78, 0x86, 0xe6, 0x1e, 0x51, 0x71, 0x61, 0xf0, 0x36, 0x5c, 0x84, 0x46, - 0x73, 0x4c, 0xe8, 0x05, 0x6c, 0x2a, 0x4c, 0x52, 0xd4, 0x46, 0x5b, 0xc4, 0xee, 0x3a, 0x43, 0x6f, - 0xdf, 0xfd, 0xe3, 0x72, 0x4b, 0x9e, 0x63, 0xc2, 0x4b, 0x98, 0xcd, 0x61, 0xd2, 0x22, 0xd4, 0x92, - 0x5e, 0xc1, 0x50, 0x09, 0x83, 0xcf, 0x51, 0x7e, 0x55, 0x48, 0x0f, 0xfe, 0x97, 0x6a, 0xc9, 0x41, - 0x95, 0x0a, 0xf6, 0x00, 0xe3, 0x47, 0xf9, 0x2a, 0x0c, 0x66, 0xea, 0x59, 0x14, 0xfb, 0x22, 0xca, - 0x1b, 0xbd, 0x84, 0x7e, 0xb0, 0xfc, 0x2a, 0x94, 0x87, 0x35, 0x65, 0x3d, 0x8b, 0xaf, 0x78, 0xf6, - 0x4d, 0x60, 0x54, 0x8f, 0xd2, 0x11, 0x74, 0xdf, 0xf1, 0xd3, 0x22, 0x36, 0x71, 0x06, 0x3c, 0x3b, - 0xd2, 0x33, 0xe8, 0x69, 0x23, 0x4c, 0xaa, 0xad, 0x0d, 0x9b, 0xac, 0xed, 0xb9, 0x60, 0xe9, 0x39, - 0x0c, 0x44, 0x14, 0xc4, 0x2a, 0x34, 0x6f, 0x0b, 0xab, 0x6b, 0x13, 0x67, 0xdb, 0xb3, 0x6a, 0x89, - 0xd7, 0xab, 0x38, 0xaf, 0x50, 0xb6, 0x07, 0x93, 0x96, 0x39, 0xb5, 0xf4, 0x7e, 0x08, 0xf4, 0xb3, - 0x3b, 0x3d, 0x3f, 0xa1, 0x2f, 0xb0, 0xdb, 0xf8, 0xc9, 0xf4, 0xa8, 0xa6, 0x6f, 0xdb, 0xeb, 0xf4, - 0x78, 0x3d, 0xa4, 0x25, 0xeb, 0x64, 0x15, 0x1a, 0x6d, 0x34, 0x2a, 0xb4, 0x2d, 0xa4, 0x51, 0xa1, - 0x75, 0x1a, 0xd6, 0xb9, 0xd9, 0x79, 0x82, 0x8a, 0xfa, 0x22, 0xc4, 0xef, 0xe5, 0x2f, 0xf2, 0xf4, - 0x37, 0x00, 0x00, 0xff, 0xff, 0xa3, 0x74, 0x68, 0xc5, 0xc1, 0x02, 0x00, 0x00, -} - -// Reference imports to suppress errors if they are not otherwise used. -var _ context.Context -var _ grpc.ClientConn - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 - -// PeersV1Client is the client API for PeersV1 service. -// -// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. -type PeersV1Client interface { - // Used by peers to relay batches of requests to an authoritative peer - GetPeerRateLimits(ctx context.Context, in *GetPeerRateLimitsReq, opts ...grpc.CallOption) (*GetPeerRateLimitsResp, error) - // Used by peers send global rate limit updates to other peers - UpdatePeerGlobals(ctx context.Context, in *UpdatePeerGlobalsReq, opts ...grpc.CallOption) (*UpdatePeerGlobalsResp, error) -} - -type peersV1Client struct { - cc *grpc.ClientConn -} - -func NewPeersV1Client(cc *grpc.ClientConn) PeersV1Client { - return &peersV1Client{cc} -} - -func (c *peersV1Client) GetPeerRateLimits(ctx context.Context, in *GetPeerRateLimitsReq, opts ...grpc.CallOption) (*GetPeerRateLimitsResp, error) { - out := new(GetPeerRateLimitsResp) - err := c.cc.Invoke(ctx, "/pb.gubernator.PeersV1/GetPeerRateLimits", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *peersV1Client) UpdatePeerGlobals(ctx context.Context, in *UpdatePeerGlobalsReq, opts ...grpc.CallOption) (*UpdatePeerGlobalsResp, error) { - out := new(UpdatePeerGlobalsResp) - err := c.cc.Invoke(ctx, "/pb.gubernator.PeersV1/UpdatePeerGlobals", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// PeersV1Server is the server API for PeersV1 service. -type PeersV1Server interface { - // Used by peers to relay batches of requests to an authoritative peer - GetPeerRateLimits(context.Context, *GetPeerRateLimitsReq) (*GetPeerRateLimitsResp, error) - // Used by peers send global rate limit updates to other peers - UpdatePeerGlobals(context.Context, *UpdatePeerGlobalsReq) (*UpdatePeerGlobalsResp, error) -} - -// UnimplementedPeersV1Server can be embedded to have forward compatible implementations. -type UnimplementedPeersV1Server struct { -} - -func (*UnimplementedPeersV1Server) GetPeerRateLimits(ctx context.Context, req *GetPeerRateLimitsReq) (*GetPeerRateLimitsResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetPeerRateLimits not implemented") -} -func (*UnimplementedPeersV1Server) UpdatePeerGlobals(ctx context.Context, req *UpdatePeerGlobalsReq) (*UpdatePeerGlobalsResp, error) { - return nil, status.Errorf(codes.Unimplemented, "method UpdatePeerGlobals not implemented") -} - -func RegisterPeersV1Server(s *grpc.Server, srv PeersV1Server) { - s.RegisterService(&_PeersV1_serviceDesc, srv) -} - -func _PeersV1_GetPeerRateLimits_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(GetPeerRateLimitsReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeersV1Server).GetPeerRateLimits(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pb.gubernator.PeersV1/GetPeerRateLimits", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeersV1Server).GetPeerRateLimits(ctx, req.(*GetPeerRateLimitsReq)) - } - return interceptor(ctx, in, info, handler) -} - -func _PeersV1_UpdatePeerGlobals_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(UpdatePeerGlobalsReq) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(PeersV1Server).UpdatePeerGlobals(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/pb.gubernator.PeersV1/UpdatePeerGlobals", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(PeersV1Server).UpdatePeerGlobals(ctx, req.(*UpdatePeerGlobalsReq)) - } - return interceptor(ctx, in, info, handler) -} - -var _PeersV1_serviceDesc = grpc.ServiceDesc{ - ServiceName: "pb.gubernator.PeersV1", - HandlerType: (*PeersV1Server)(nil), - Methods: []grpc.MethodDesc{ - { - MethodName: "GetPeerRateLimits", - Handler: _PeersV1_GetPeerRateLimits_Handler, - }, - { - MethodName: "UpdatePeerGlobals", - Handler: _PeersV1_UpdatePeerGlobals_Handler, - }, - }, - Streams: []grpc.StreamDesc{}, - Metadata: "peers.proto", +func init() { proto.RegisterFile("peers.proto", fileDescriptor_peers_58a22a2c4e221b3d) } + +var fileDescriptor_peers_58a22a2c4e221b3d = []byte{ + // 334 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x92, 0xbf, 0x4e, 0xf3, 0x30, + 0x10, 0xc0, 0xeb, 0xaf, 0x52, 0xfb, 0xf5, 0x2a, 0x50, 0xb1, 0x5a, 0x11, 0x15, 0x10, 0x91, 0x61, + 0xe8, 0x94, 0x8a, 0x82, 0x40, 0x0c, 0x0c, 0xb0, 0x74, 0x41, 0x02, 0x2c, 0xd1, 0x81, 0x05, 0x1c, + 0x38, 0xa5, 0x11, 0x49, 0xe3, 0xda, 0x97, 0x81, 0x8d, 0x67, 0xe0, 0xbd, 0x78, 0x27, 0x94, 0xfe, + 0x15, 0x49, 0x50, 0x37, 0xc7, 0xf7, 0xbb, 0xdf, 0xdd, 0xe5, 0x0c, 0x4d, 0x8d, 0x68, 0xac, 0xa7, + 0x4d, 0x42, 0x09, 0xdf, 0xd2, 0xbe, 0x17, 0xa4, 0x3e, 0x9a, 0x89, 0xa2, 0xc4, 0x74, 0x5b, 0xeb, + 0xf3, 0x1c, 0x10, 0x77, 0xd0, 0x1e, 0x22, 0xdd, 0x23, 0x1a, 0xa9, 0x08, 0x6f, 0xc3, 0x38, 0x24, + 0x2b, 0x71, 0xca, 0x2f, 0xe0, 0xbf, 0xc1, 0x69, 0x8a, 0x96, 0xac, 0xc3, 0xdc, 0x6a, 0xaf, 0x39, + 0xd8, 0xf3, 0x7e, 0xb9, 0xbc, 0x15, 0x2f, 0x71, 0x2a, 0x57, 0xb0, 0x18, 0x41, 0xa7, 0x44, 0x68, + 0x35, 0xbf, 0x82, 0xa6, 0x51, 0x84, 0xcf, 0xd1, 0xec, 0x6a, 0x21, 0xdd, 0xff, 0x5b, 0x6a, 0xb5, + 0x04, 0xb3, 0x52, 0x88, 0x07, 0x68, 0x3f, 0xea, 0x37, 0x45, 0x98, 0xa9, 0x87, 0x51, 0xe2, 0xab, + 0x68, 0xd6, 0xe8, 0x25, 0xd4, 0x83, 0xf9, 0xd7, 0x42, 0x79, 0x98, 0x53, 0xe6, 0xb3, 0xe4, 0x92, + 0x17, 0x5f, 0x0c, 0x5a, 0xf9, 0x28, 0x6f, 0x41, 0xf5, 0x1d, 0x3f, 0x1c, 0xe6, 0xb2, 0x5e, 0x43, + 0x66, 0x47, 0x7e, 0x06, 0x35, 0x4b, 0x8a, 0x52, 0xeb, 0xfc, 0x73, 0xd9, 0xc6, 0x9e, 0x17, 0x2c, + 0x3f, 0x87, 0x86, 0x8a, 0x82, 0xc4, 0x84, 0x34, 0x8e, 0x9d, 0xaa, 0xcb, 0x7a, 0xdb, 0x03, 0x27, + 0x97, 0x78, 0xbd, 0x8c, 0xcb, 0x35, 0x2a, 0x76, 0xa1, 0x53, 0x32, 0xa7, 0xd5, 0x83, 0x6f, 0x06, + 0xf5, 0xec, 0xce, 0x8e, 0x4e, 0xf8, 0x0b, 0xec, 0x14, 0x7e, 0x32, 0x3f, 0xca, 0xe9, 0xcb, 0xf6, + 0xda, 0x3d, 0xde, 0x0c, 0x59, 0x2d, 0x2a, 0x59, 0x85, 0x42, 0x1b, 0x85, 0x0a, 0x65, 0x0b, 0x29, + 0x54, 0x28, 0x9d, 0x46, 0x54, 0x6e, 0xc4, 0xd3, 0x41, 0x10, 0xd2, 0x38, 0xf5, 0xbd, 0xd7, 0x24, + 0xee, 0xc7, 0x2a, 0x8c, 0x82, 0x74, 0xd2, 0x5f, 0x27, 0x7e, 0x32, 0xe6, 0xd7, 0x66, 0x8f, 0xf4, + 0xf4, 0x27, 0x00, 0x00, 0xff, 0xff, 0xb6, 0x14, 0xbf, 0x71, 0xd4, 0x02, 0x00, 0x00, } diff --git a/peers.pb.gw.go b/peers.pb.gw.go new file mode 100644 index 00000000..d65e797d --- /dev/null +++ b/peers.pb.gw.go @@ -0,0 +1,250 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: peers.proto + +/* +Package gubernator is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package gubernator + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_PeersV1_GetPeerRateLimits_0(ctx context.Context, marshaler runtime.Marshaler, client PeersV1Client, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetPeerRateLimitsReq + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetPeerRateLimits(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_PeersV1_GetPeerRateLimits_0(ctx context.Context, marshaler runtime.Marshaler, server PeersV1Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetPeerRateLimitsReq + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetPeerRateLimits(ctx, &protoReq) + return msg, metadata, err + +} + +func request_PeersV1_UpdatePeerGlobals_0(ctx context.Context, marshaler runtime.Marshaler, client PeersV1Client, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdatePeerGlobalsReq + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UpdatePeerGlobals(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_PeersV1_UpdatePeerGlobals_0(ctx context.Context, marshaler runtime.Marshaler, server PeersV1Server, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdatePeerGlobalsReq + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UpdatePeerGlobals(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterPeersV1HandlerServer registers the http handlers for service PeersV1 to "mux". +// UnaryRPC :call PeersV1Server directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterPeersV1HandlerFromEndpoint instead. +func RegisterPeersV1HandlerServer(ctx context.Context, mux *runtime.ServeMux, server PeersV1Server) error { + + mux.Handle("POST", pattern_PeersV1_GetPeerRateLimits_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_PeersV1_GetPeerRateLimits_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_PeersV1_GetPeerRateLimits_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_PeersV1_UpdatePeerGlobals_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_PeersV1_UpdatePeerGlobals_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_PeersV1_UpdatePeerGlobals_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterPeersV1HandlerFromEndpoint is same as RegisterPeersV1Handler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterPeersV1HandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterPeersV1Handler(ctx, mux, conn) +} + +// RegisterPeersV1Handler registers the http handlers for service PeersV1 to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterPeersV1Handler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterPeersV1HandlerClient(ctx, mux, NewPeersV1Client(conn)) +} + +// RegisterPeersV1HandlerClient registers the http handlers for service PeersV1 +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "PeersV1Client". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "PeersV1Client" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "PeersV1Client" to call the correct interceptors. +func RegisterPeersV1HandlerClient(ctx context.Context, mux *runtime.ServeMux, client PeersV1Client) error { + + mux.Handle("POST", pattern_PeersV1_GetPeerRateLimits_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_PeersV1_GetPeerRateLimits_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_PeersV1_GetPeerRateLimits_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_PeersV1_UpdatePeerGlobals_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_PeersV1_UpdatePeerGlobals_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_PeersV1_UpdatePeerGlobals_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_PeersV1_GetPeerRateLimits_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"pb.gubernator.PeersV1", "GetPeerRateLimits"}, "", runtime.AssumeColonVerbOpt(true))) + + pattern_PeersV1_UpdatePeerGlobals_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"pb.gubernator.PeersV1", "UpdatePeerGlobals"}, "", runtime.AssumeColonVerbOpt(true))) +) + +var ( + forward_PeersV1_GetPeerRateLimits_0 = runtime.ForwardResponseMessage + + forward_PeersV1_UpdatePeerGlobals_0 = runtime.ForwardResponseMessage +) diff --git a/peers_grpc.pb.go b/peers_grpc.pb.go new file mode 100644 index 00000000..586224c7 --- /dev/null +++ b/peers_grpc.pb.go @@ -0,0 +1,141 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package gubernator + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// PeersV1Client is the client API for PeersV1 service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type PeersV1Client interface { + // Used by peers to relay batches of requests to an authoritative peer + GetPeerRateLimits(ctx context.Context, in *GetPeerRateLimitsReq, opts ...grpc.CallOption) (*GetPeerRateLimitsResp, error) + // Used by peers send global rate limit updates to other peers + UpdatePeerGlobals(ctx context.Context, in *UpdatePeerGlobalsReq, opts ...grpc.CallOption) (*UpdatePeerGlobalsResp, error) +} + +type peersV1Client struct { + cc grpc.ClientConnInterface +} + +func NewPeersV1Client(cc grpc.ClientConnInterface) PeersV1Client { + return &peersV1Client{cc} +} + +func (c *peersV1Client) GetPeerRateLimits(ctx context.Context, in *GetPeerRateLimitsReq, opts ...grpc.CallOption) (*GetPeerRateLimitsResp, error) { + out := new(GetPeerRateLimitsResp) + err := c.cc.Invoke(ctx, "/pb.gubernator.PeersV1/GetPeerRateLimits", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *peersV1Client) UpdatePeerGlobals(ctx context.Context, in *UpdatePeerGlobalsReq, opts ...grpc.CallOption) (*UpdatePeerGlobalsResp, error) { + out := new(UpdatePeerGlobalsResp) + err := c.cc.Invoke(ctx, "/pb.gubernator.PeersV1/UpdatePeerGlobals", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// PeersV1Server is the server API for PeersV1 service. +// All implementations must embed UnimplementedPeersV1Server +// for forward compatibility +type PeersV1Server interface { + // Used by peers to relay batches of requests to an authoritative peer + GetPeerRateLimits(context.Context, *GetPeerRateLimitsReq) (*GetPeerRateLimitsResp, error) + // Used by peers send global rate limit updates to other peers + UpdatePeerGlobals(context.Context, *UpdatePeerGlobalsReq) (*UpdatePeerGlobalsResp, error) + mustEmbedUnimplementedPeersV1Server() +} + +// UnimplementedPeersV1Server must be embedded to have forward compatible implementations. +type UnimplementedPeersV1Server struct { +} + +func (UnimplementedPeersV1Server) GetPeerRateLimits(context.Context, *GetPeerRateLimitsReq) (*GetPeerRateLimitsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPeerRateLimits not implemented") +} +func (UnimplementedPeersV1Server) UpdatePeerGlobals(context.Context, *UpdatePeerGlobalsReq) (*UpdatePeerGlobalsResp, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdatePeerGlobals not implemented") +} +func (UnimplementedPeersV1Server) mustEmbedUnimplementedPeersV1Server() {} + +// UnsafePeersV1Server may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to PeersV1Server will +// result in compilation errors. +type UnsafePeersV1Server interface { + mustEmbedUnimplementedPeersV1Server() +} + +func RegisterPeersV1Server(s grpc.ServiceRegistrar, srv PeersV1Server) { + s.RegisterService(&PeersV1_ServiceDesc, srv) +} + +func _PeersV1_GetPeerRateLimits_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPeerRateLimitsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PeersV1Server).GetPeerRateLimits(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.gubernator.PeersV1/GetPeerRateLimits", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PeersV1Server).GetPeerRateLimits(ctx, req.(*GetPeerRateLimitsReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _PeersV1_UpdatePeerGlobals_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdatePeerGlobalsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PeersV1Server).UpdatePeerGlobals(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pb.gubernator.PeersV1/UpdatePeerGlobals", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PeersV1Server).UpdatePeerGlobals(ctx, req.(*UpdatePeerGlobalsReq)) + } + return interceptor(ctx, in, info, handler) +} + +// PeersV1_ServiceDesc is the grpc.ServiceDesc for PeersV1 service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var PeersV1_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "pb.gubernator.PeersV1", + HandlerType: (*PeersV1Server)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetPeerRateLimits", + Handler: _PeersV1_GetPeerRateLimits_Handler, + }, + { + MethodName: "UpdatePeerGlobals", + Handler: _PeersV1_UpdatePeerGlobals_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "peers.proto", +} diff --git a/proto/gubernator.proto b/proto/gubernator.proto index 4563b4d5..608544de 100644 --- a/proto/gubernator.proto +++ b/proto/gubernator.proto @@ -16,7 +16,7 @@ limitations under the License. syntax = "proto3"; -option go_package = "gubernator"; +option go_package = "github.com/mailgun/gubernator"; option cc_generic_services = true; diff --git a/proto/peers.proto b/proto/peers.proto index 28e54a14..08b5b638 100644 --- a/proto/peers.proto +++ b/proto/peers.proto @@ -16,7 +16,7 @@ limitations under the License. syntax = "proto3"; -option go_package = "gubernator"; +option go_package = "github.com/mailgun/gubernator"; option cc_generic_services = true; diff --git a/python/gubernator/gubernator_pb2.py b/python/gubernator/gubernator_pb2.py index 1f98befd..2b12ddd7 100644 --- a/python/gubernator/gubernator_pb2.py +++ b/python/gubernator/gubernator_pb2.py @@ -2,8 +2,6 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: gubernator.proto -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message @@ -21,8 +19,9 @@ name='gubernator.proto', package='pb.gubernator', syntax='proto3', - serialized_options=_b('Z\ngubernator\200\001\001'), - serialized_pb=_b('\n\x10gubernator.proto\x12\rpb.gubernator\x1a\x1cgoogle/api/annotations.proto\"A\n\x10GetRateLimitsReq\x12-\n\x08requests\x18\x01 \x03(\x0b\x32\x1b.pb.gubernator.RateLimitReq\"D\n\x11GetRateLimitsResp\x12/\n\tresponses\x18\x01 \x03(\x0b\x32\x1c.pb.gubernator.RateLimitResp\"\xb7\x01\n\x0cRateLimitReq\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nunique_key\x18\x02 \x01(\t\x12\x0c\n\x04hits\x18\x03 \x01(\x03\x12\r\n\x05limit\x18\x04 \x01(\x03\x12\x10\n\x08\x64uration\x18\x05 \x01(\x03\x12+\n\talgorithm\x18\x06 \x01(\x0e\x32\x18.pb.gubernator.Algorithm\x12)\n\x08\x62\x65havior\x18\x07 \x01(\x0e\x32\x17.pb.gubernator.Behavior\"\xea\x01\n\rRateLimitResp\x12%\n\x06status\x18\x01 \x01(\x0e\x32\x15.pb.gubernator.Status\x12\r\n\x05limit\x18\x02 \x01(\x03\x12\x11\n\tremaining\x18\x03 \x01(\x03\x12\x12\n\nreset_time\x18\x04 \x01(\x03\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12<\n\x08metadata\x18\x06 \x03(\x0b\x32*.pb.gubernator.RateLimitResp.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x10\n\x0eHealthCheckReq\"F\n\x0fHealthCheckResp\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x12\n\npeer_count\x18\x03 \x01(\x05*/\n\tAlgorithm\x12\x10\n\x0cTOKEN_BUCKET\x10\x00\x12\x10\n\x0cLEAKY_BUCKET\x10\x01*w\n\x08\x42\x65havior\x12\x0c\n\x08\x42\x41TCHING\x10\x00\x12\x0f\n\x0bNO_BATCHING\x10\x01\x12\n\n\x06GLOBAL\x10\x02\x12\x19\n\x15\x44URATION_IS_GREGORIAN\x10\x04\x12\x13\n\x0fRESET_REMAINING\x10\x08\x12\x10\n\x0cMULTI_REGION\x10\x10*)\n\x06Status\x12\x0f\n\x0bUNDER_LIMIT\x10\x00\x12\x0e\n\nOVER_LIMIT\x10\x01\x32\xdd\x01\n\x02V1\x12p\n\rGetRateLimits\x12\x1f.pb.gubernator.GetRateLimitsReq\x1a .pb.gubernator.GetRateLimitsResp\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/GetRateLimits:\x01*\x12\x65\n\x0bHealthCheck\x12\x1d.pb.gubernator.HealthCheckReq\x1a\x1e.pb.gubernator.HealthCheckResp\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/v1/HealthCheckB\x0fZ\ngubernator\x80\x01\x01\x62\x06proto3') + serialized_options=b'Z\035github.com/mailgun/gubernator\200\001\001', + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x10gubernator.proto\x12\rpb.gubernator\x1a\x1cgoogle/api/annotations.proto\"A\n\x10GetRateLimitsReq\x12-\n\x08requests\x18\x01 \x03(\x0b\x32\x1b.pb.gubernator.RateLimitReq\"D\n\x11GetRateLimitsResp\x12/\n\tresponses\x18\x01 \x03(\x0b\x32\x1c.pb.gubernator.RateLimitResp\"\xb7\x01\n\x0cRateLimitReq\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nunique_key\x18\x02 \x01(\t\x12\x0c\n\x04hits\x18\x03 \x01(\x03\x12\r\n\x05limit\x18\x04 \x01(\x03\x12\x10\n\x08\x64uration\x18\x05 \x01(\x03\x12+\n\talgorithm\x18\x06 \x01(\x0e\x32\x18.pb.gubernator.Algorithm\x12)\n\x08\x62\x65havior\x18\x07 \x01(\x0e\x32\x17.pb.gubernator.Behavior\"\xea\x01\n\rRateLimitResp\x12%\n\x06status\x18\x01 \x01(\x0e\x32\x15.pb.gubernator.Status\x12\r\n\x05limit\x18\x02 \x01(\x03\x12\x11\n\tremaining\x18\x03 \x01(\x03\x12\x12\n\nreset_time\x18\x04 \x01(\x03\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12<\n\x08metadata\x18\x06 \x03(\x0b\x32*.pb.gubernator.RateLimitResp.MetadataEntry\x1a/\n\rMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x10\n\x0eHealthCheckReq\"F\n\x0fHealthCheckResp\x12\x0e\n\x06status\x18\x01 \x01(\t\x12\x0f\n\x07message\x18\x02 \x01(\t\x12\x12\n\npeer_count\x18\x03 \x01(\x05*/\n\tAlgorithm\x12\x10\n\x0cTOKEN_BUCKET\x10\x00\x12\x10\n\x0cLEAKY_BUCKET\x10\x01*w\n\x08\x42\x65havior\x12\x0c\n\x08\x42\x41TCHING\x10\x00\x12\x0f\n\x0bNO_BATCHING\x10\x01\x12\n\n\x06GLOBAL\x10\x02\x12\x19\n\x15\x44URATION_IS_GREGORIAN\x10\x04\x12\x13\n\x0fRESET_REMAINING\x10\x08\x12\x10\n\x0cMULTI_REGION\x10\x10*)\n\x06Status\x12\x0f\n\x0bUNDER_LIMIT\x10\x00\x12\x0e\n\nOVER_LIMIT\x10\x01\x32\xdd\x01\n\x02V1\x12p\n\rGetRateLimits\x12\x1f.pb.gubernator.GetRateLimitsReq\x1a .pb.gubernator.GetRateLimitsResp\"\x1c\x82\xd3\xe4\x93\x02\x16\"\x11/v1/GetRateLimits:\x01*\x12\x65\n\x0bHealthCheck\x12\x1d.pb.gubernator.HealthCheckReq\x1a\x1e.pb.gubernator.HealthCheckResp\"\x17\x82\xd3\xe4\x93\x02\x11\x12\x0f/v1/HealthCheckB\"Z\x1dgithub.com/mailgun/gubernator\x80\x01\x01\x62\x06proto3' , dependencies=[google_dot_api_dot_annotations__pb2.DESCRIPTOR,]) @@ -31,15 +30,18 @@ full_name='pb.gubernator.Algorithm', filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='TOKEN_BUCKET', index=0, number=0, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='LEAKY_BUCKET', index=1, number=1, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, @@ -54,31 +56,38 @@ full_name='pb.gubernator.Behavior', filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='BATCHING', index=0, number=0, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='NO_BATCHING', index=1, number=1, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='GLOBAL', index=2, number=2, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='DURATION_IS_GREGORIAN', index=3, number=4, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='RESET_REMAINING', index=4, number=8, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='MULTI_REGION', index=5, number=16, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, @@ -93,15 +102,18 @@ full_name='pb.gubernator.Status', filename=None, file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, values=[ _descriptor.EnumValueDescriptor( name='UNDER_LIMIT', index=0, number=0, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), _descriptor.EnumValueDescriptor( name='OVER_LIMIT', index=1, number=1, serialized_options=None, - type=None), + type=None, + create_key=_descriptor._internal_create_key), ], containing_type=None, serialized_options=None, @@ -130,6 +142,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='requests', full_name='pb.gubernator.GetRateLimitsReq.requests', index=0, @@ -137,7 +150,7 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -161,6 +174,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='responses', full_name='pb.gubernator.GetRateLimitsResp.responses', index=0, @@ -168,7 +182,7 @@ has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -192,56 +206,57 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='name', full_name='pb.gubernator.RateLimitReq.name', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='unique_key', full_name='pb.gubernator.RateLimitReq.unique_key', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='hits', full_name='pb.gubernator.RateLimitReq.hits', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='limit', full_name='pb.gubernator.RateLimitReq.limit', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='duration', full_name='pb.gubernator.RateLimitReq.duration', index=4, number=5, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='algorithm', full_name='pb.gubernator.RateLimitReq.algorithm', index=5, number=6, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='behavior', full_name='pb.gubernator.RateLimitReq.behavior', index=6, number=7, type=14, cpp_type=8, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -265,28 +280,29 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='key', full_name='pb.gubernator.RateLimitResp.MetadataEntry.key', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='value', full_name='pb.gubernator.RateLimitResp.MetadataEntry.value', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], nested_types=[], enum_types=[ ], - serialized_options=_b('8\001'), + serialized_options=b'8\001', is_extendable=False, syntax='proto3', extension_ranges=[], @@ -302,6 +318,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='status', full_name='pb.gubernator.RateLimitResp.status', index=0, @@ -309,42 +326,42 @@ has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='limit', full_name='pb.gubernator.RateLimitResp.limit', index=1, number=2, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='remaining', full_name='pb.gubernator.RateLimitResp.remaining', index=2, number=3, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='reset_time', full_name='pb.gubernator.RateLimitResp.reset_time', index=3, number=4, type=3, cpp_type=2, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='error', full_name='pb.gubernator.RateLimitResp.error', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='metadata', full_name='pb.gubernator.RateLimitResp.metadata', index=5, number=6, type=11, cpp_type=10, label=3, has_default_value=False, default_value=[], message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -368,6 +385,7 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ ], extensions=[ @@ -392,28 +410,29 @@ filename=None, file=DESCRIPTOR, containing_type=None, + create_key=_descriptor._internal_create_key, fields=[ _descriptor.FieldDescriptor( name='status', full_name='pb.gubernator.HealthCheckResp.status', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='message', full_name='pb.gubernator.HealthCheckResp.message', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), _descriptor.FieldDescriptor( name='peer_count', full_name='pb.gubernator.HealthCheckResp.peer_count', index=2, number=3, type=5, cpp_type=1, label=1, has_default_value=False, default_value=0, message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ], extensions=[ ], @@ -508,6 +527,7 @@ file=DESCRIPTOR, index=0, serialized_options=None, + create_key=_descriptor._internal_create_key, serialized_start=929, serialized_end=1150, methods=[ @@ -518,7 +538,8 @@ containing_service=None, input_type=_GETRATELIMITSREQ, output_type=_GETRATELIMITSRESP, - serialized_options=_b('\202\323\344\223\002\026\"\021/v1/GetRateLimits:\001*'), + serialized_options=b'\202\323\344\223\002\026\"\021/v1/GetRateLimits:\001*', + create_key=_descriptor._internal_create_key, ), _descriptor.MethodDescriptor( name='HealthCheck', @@ -527,7 +548,8 @@ containing_service=None, input_type=_HEALTHCHECKREQ, output_type=_HEALTHCHECKRESP, - serialized_options=_b('\202\323\344\223\002\021\022\017/v1/HealthCheck'), + serialized_options=b'\202\323\344\223\002\021\022\017/v1/HealthCheck', + create_key=_descriptor._internal_create_key, ), ]) _sym_db.RegisterServiceDescriptor(_V1) diff --git a/python/gubernator/gubernator_pb2_grpc.py b/python/gubernator/gubernator_pb2_grpc.py index a3c732e9..02dd7792 100644 --- a/python/gubernator/gubernator_pb2_grpc.py +++ b/python/gubernator/gubernator_pb2_grpc.py @@ -1,64 +1,102 @@ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" import grpc import gubernator_pb2 as gubernator__pb2 class V1Stub(object): - # missing associated documentation comment in .proto file - pass + """Missing associated documentation comment in .proto file.""" - def __init__(self, channel): - """Constructor. + def __init__(self, channel): + """Constructor. - Args: - channel: A grpc.Channel. - """ - self.GetRateLimits = channel.unary_unary( - '/pb.gubernator.V1/GetRateLimits', - request_serializer=gubernator__pb2.GetRateLimitsReq.SerializeToString, - response_deserializer=gubernator__pb2.GetRateLimitsResp.FromString, - ) - self.HealthCheck = channel.unary_unary( - '/pb.gubernator.V1/HealthCheck', - request_serializer=gubernator__pb2.HealthCheckReq.SerializeToString, - response_deserializer=gubernator__pb2.HealthCheckResp.FromString, - ) + Args: + channel: A grpc.Channel. + """ + self.GetRateLimits = channel.unary_unary( + '/pb.gubernator.V1/GetRateLimits', + request_serializer=gubernator__pb2.GetRateLimitsReq.SerializeToString, + response_deserializer=gubernator__pb2.GetRateLimitsResp.FromString, + ) + self.HealthCheck = channel.unary_unary( + '/pb.gubernator.V1/HealthCheck', + request_serializer=gubernator__pb2.HealthCheckReq.SerializeToString, + response_deserializer=gubernator__pb2.HealthCheckResp.FromString, + ) class V1Servicer(object): - # missing associated documentation comment in .proto file - pass + """Missing associated documentation comment in .proto file.""" - def GetRateLimits(self, request, context): - """Given a list of rate limit requests, return the rate limits of each. - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') + def GetRateLimits(self, request, context): + """Given a list of rate limit requests, return the rate limits of each. + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') - def HealthCheck(self, request, context): - """This method is for round trip benchmarking and can be used by - the client to determine connectivity to the server - """ - context.set_code(grpc.StatusCode.UNIMPLEMENTED) - context.set_details('Method not implemented!') - raise NotImplementedError('Method not implemented!') + def HealthCheck(self, request, context): + """This method is for round trip benchmarking and can be used by + the client to determine connectivity to the server + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') def add_V1Servicer_to_server(servicer, server): - rpc_method_handlers = { - 'GetRateLimits': grpc.unary_unary_rpc_method_handler( - servicer.GetRateLimits, - request_deserializer=gubernator__pb2.GetRateLimitsReq.FromString, - response_serializer=gubernator__pb2.GetRateLimitsResp.SerializeToString, - ), - 'HealthCheck': grpc.unary_unary_rpc_method_handler( - servicer.HealthCheck, - request_deserializer=gubernator__pb2.HealthCheckReq.FromString, - response_serializer=gubernator__pb2.HealthCheckResp.SerializeToString, - ), - } - generic_handler = grpc.method_handlers_generic_handler( - 'pb.gubernator.V1', rpc_method_handlers) - server.add_generic_rpc_handlers((generic_handler,)) + rpc_method_handlers = { + 'GetRateLimits': grpc.unary_unary_rpc_method_handler( + servicer.GetRateLimits, + request_deserializer=gubernator__pb2.GetRateLimitsReq.FromString, + response_serializer=gubernator__pb2.GetRateLimitsResp.SerializeToString, + ), + 'HealthCheck': grpc.unary_unary_rpc_method_handler( + servicer.HealthCheck, + request_deserializer=gubernator__pb2.HealthCheckReq.FromString, + response_serializer=gubernator__pb2.HealthCheckResp.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'pb.gubernator.V1', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class V1(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def GetRateLimits(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/pb.gubernator.V1/GetRateLimits', + gubernator__pb2.GetRateLimitsReq.SerializeToString, + gubernator__pb2.GetRateLimitsResp.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def HealthCheck(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/pb.gubernator.V1/HealthCheck', + gubernator__pb2.HealthCheckReq.SerializeToString, + gubernator__pb2.HealthCheckResp.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/python/gubernator/peers_pb2.py b/python/gubernator/peers_pb2.py new file mode 100644 index 00000000..b9ef2063 --- /dev/null +++ b/python/gubernator/peers_pb2.py @@ -0,0 +1,281 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: peers.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +import gubernator_pb2 as gubernator__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='peers.proto', + package='pb.gubernator', + syntax='proto3', + serialized_options=b'Z\035github.com/mailgun/gubernator\200\001\001', + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x0bpeers.proto\x12\rpb.gubernator\x1a\x10gubernator.proto\"E\n\x14GetPeerRateLimitsReq\x12-\n\x08requests\x18\x01 \x03(\x0b\x32\x1b.pb.gubernator.RateLimitReq\"J\n\x15GetPeerRateLimitsResp\x12\x31\n\x0brate_limits\x18\x01 \x03(\x0b\x32\x1c.pb.gubernator.RateLimitResp\"H\n\x14UpdatePeerGlobalsReq\x12\x30\n\x07globals\x18\x01 \x03(\x0b\x32\x1f.pb.gubernator.UpdatePeerGlobal\"z\n\x10UpdatePeerGlobal\x12\x0b\n\x03key\x18\x01 \x01(\t\x12,\n\x06status\x18\x02 \x01(\x0b\x32\x1c.pb.gubernator.RateLimitResp\x12+\n\talgorithm\x18\x03 \x01(\x0e\x32\x18.pb.gubernator.Algorithm\"\x17\n\x15UpdatePeerGlobalsResp2\xcd\x01\n\x07PeersV1\x12`\n\x11GetPeerRateLimits\x12#.pb.gubernator.GetPeerRateLimitsReq\x1a$.pb.gubernator.GetPeerRateLimitsResp\"\x00\x12`\n\x11UpdatePeerGlobals\x12#.pb.gubernator.UpdatePeerGlobalsReq\x1a$.pb.gubernator.UpdatePeerGlobalsResp\"\x00\x42\"Z\x1dgithub.com/mailgun/gubernator\x80\x01\x01\x62\x06proto3' + , + dependencies=[gubernator__pb2.DESCRIPTOR,]) + + + + +_GETPEERRATELIMITSREQ = _descriptor.Descriptor( + name='GetPeerRateLimitsReq', + full_name='pb.gubernator.GetPeerRateLimitsReq', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='requests', full_name='pb.gubernator.GetPeerRateLimitsReq.requests', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=48, + serialized_end=117, +) + + +_GETPEERRATELIMITSRESP = _descriptor.Descriptor( + name='GetPeerRateLimitsResp', + full_name='pb.gubernator.GetPeerRateLimitsResp', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='rate_limits', full_name='pb.gubernator.GetPeerRateLimitsResp.rate_limits', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=119, + serialized_end=193, +) + + +_UPDATEPEERGLOBALSREQ = _descriptor.Descriptor( + name='UpdatePeerGlobalsReq', + full_name='pb.gubernator.UpdatePeerGlobalsReq', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='globals', full_name='pb.gubernator.UpdatePeerGlobalsReq.globals', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=195, + serialized_end=267, +) + + +_UPDATEPEERGLOBAL = _descriptor.Descriptor( + name='UpdatePeerGlobal', + full_name='pb.gubernator.UpdatePeerGlobal', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='pb.gubernator.UpdatePeerGlobal.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='pb.gubernator.UpdatePeerGlobal.status', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='algorithm', full_name='pb.gubernator.UpdatePeerGlobal.algorithm', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=269, + serialized_end=391, +) + + +_UPDATEPEERGLOBALSRESP = _descriptor.Descriptor( + name='UpdatePeerGlobalsResp', + full_name='pb.gubernator.UpdatePeerGlobalsResp', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=393, + serialized_end=416, +) + +_GETPEERRATELIMITSREQ.fields_by_name['requests'].message_type = gubernator__pb2._RATELIMITREQ +_GETPEERRATELIMITSRESP.fields_by_name['rate_limits'].message_type = gubernator__pb2._RATELIMITRESP +_UPDATEPEERGLOBALSREQ.fields_by_name['globals'].message_type = _UPDATEPEERGLOBAL +_UPDATEPEERGLOBAL.fields_by_name['status'].message_type = gubernator__pb2._RATELIMITRESP +_UPDATEPEERGLOBAL.fields_by_name['algorithm'].enum_type = gubernator__pb2._ALGORITHM +DESCRIPTOR.message_types_by_name['GetPeerRateLimitsReq'] = _GETPEERRATELIMITSREQ +DESCRIPTOR.message_types_by_name['GetPeerRateLimitsResp'] = _GETPEERRATELIMITSRESP +DESCRIPTOR.message_types_by_name['UpdatePeerGlobalsReq'] = _UPDATEPEERGLOBALSREQ +DESCRIPTOR.message_types_by_name['UpdatePeerGlobal'] = _UPDATEPEERGLOBAL +DESCRIPTOR.message_types_by_name['UpdatePeerGlobalsResp'] = _UPDATEPEERGLOBALSRESP +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +GetPeerRateLimitsReq = _reflection.GeneratedProtocolMessageType('GetPeerRateLimitsReq', (_message.Message,), { + 'DESCRIPTOR' : _GETPEERRATELIMITSREQ, + '__module__' : 'peers_pb2' + # @@protoc_insertion_point(class_scope:pb.gubernator.GetPeerRateLimitsReq) + }) +_sym_db.RegisterMessage(GetPeerRateLimitsReq) + +GetPeerRateLimitsResp = _reflection.GeneratedProtocolMessageType('GetPeerRateLimitsResp', (_message.Message,), { + 'DESCRIPTOR' : _GETPEERRATELIMITSRESP, + '__module__' : 'peers_pb2' + # @@protoc_insertion_point(class_scope:pb.gubernator.GetPeerRateLimitsResp) + }) +_sym_db.RegisterMessage(GetPeerRateLimitsResp) + +UpdatePeerGlobalsReq = _reflection.GeneratedProtocolMessageType('UpdatePeerGlobalsReq', (_message.Message,), { + 'DESCRIPTOR' : _UPDATEPEERGLOBALSREQ, + '__module__' : 'peers_pb2' + # @@protoc_insertion_point(class_scope:pb.gubernator.UpdatePeerGlobalsReq) + }) +_sym_db.RegisterMessage(UpdatePeerGlobalsReq) + +UpdatePeerGlobal = _reflection.GeneratedProtocolMessageType('UpdatePeerGlobal', (_message.Message,), { + 'DESCRIPTOR' : _UPDATEPEERGLOBAL, + '__module__' : 'peers_pb2' + # @@protoc_insertion_point(class_scope:pb.gubernator.UpdatePeerGlobal) + }) +_sym_db.RegisterMessage(UpdatePeerGlobal) + +UpdatePeerGlobalsResp = _reflection.GeneratedProtocolMessageType('UpdatePeerGlobalsResp', (_message.Message,), { + 'DESCRIPTOR' : _UPDATEPEERGLOBALSRESP, + '__module__' : 'peers_pb2' + # @@protoc_insertion_point(class_scope:pb.gubernator.UpdatePeerGlobalsResp) + }) +_sym_db.RegisterMessage(UpdatePeerGlobalsResp) + + +DESCRIPTOR._options = None + +_PEERSV1 = _descriptor.ServiceDescriptor( + name='PeersV1', + full_name='pb.gubernator.PeersV1', + file=DESCRIPTOR, + index=0, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=419, + serialized_end=624, + methods=[ + _descriptor.MethodDescriptor( + name='GetPeerRateLimits', + full_name='pb.gubernator.PeersV1.GetPeerRateLimits', + index=0, + containing_service=None, + input_type=_GETPEERRATELIMITSREQ, + output_type=_GETPEERRATELIMITSRESP, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='UpdatePeerGlobals', + full_name='pb.gubernator.PeersV1.UpdatePeerGlobals', + index=1, + containing_service=None, + input_type=_UPDATEPEERGLOBALSREQ, + output_type=_UPDATEPEERGLOBALSRESP, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), +]) +_sym_db.RegisterServiceDescriptor(_PEERSV1) + +DESCRIPTOR.services_by_name['PeersV1'] = _PEERSV1 + +# @@protoc_insertion_point(module_scope) diff --git a/python/gubernator/peers_pb2_grpc.py b/python/gubernator/peers_pb2_grpc.py new file mode 100644 index 00000000..7b8f4c99 --- /dev/null +++ b/python/gubernator/peers_pb2_grpc.py @@ -0,0 +1,104 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc + +import peers_pb2 as peers__pb2 + + +class PeersV1Stub(object): + """NOTE: For use by gubernator peers only + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.GetPeerRateLimits = channel.unary_unary( + '/pb.gubernator.PeersV1/GetPeerRateLimits', + request_serializer=peers__pb2.GetPeerRateLimitsReq.SerializeToString, + response_deserializer=peers__pb2.GetPeerRateLimitsResp.FromString, + ) + self.UpdatePeerGlobals = channel.unary_unary( + '/pb.gubernator.PeersV1/UpdatePeerGlobals', + request_serializer=peers__pb2.UpdatePeerGlobalsReq.SerializeToString, + response_deserializer=peers__pb2.UpdatePeerGlobalsResp.FromString, + ) + + +class PeersV1Servicer(object): + """NOTE: For use by gubernator peers only + """ + + def GetPeerRateLimits(self, request, context): + """Used by peers to relay batches of requests to an authoritative peer + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def UpdatePeerGlobals(self, request, context): + """Used by peers send global rate limit updates to other peers + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_PeersV1Servicer_to_server(servicer, server): + rpc_method_handlers = { + 'GetPeerRateLimits': grpc.unary_unary_rpc_method_handler( + servicer.GetPeerRateLimits, + request_deserializer=peers__pb2.GetPeerRateLimitsReq.FromString, + response_serializer=peers__pb2.GetPeerRateLimitsResp.SerializeToString, + ), + 'UpdatePeerGlobals': grpc.unary_unary_rpc_method_handler( + servicer.UpdatePeerGlobals, + request_deserializer=peers__pb2.UpdatePeerGlobalsReq.FromString, + response_serializer=peers__pb2.UpdatePeerGlobalsResp.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'pb.gubernator.PeersV1', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + + + # This class is part of an EXPERIMENTAL API. +class PeersV1(object): + """NOTE: For use by gubernator peers only + """ + + @staticmethod + def GetPeerRateLimits(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/pb.gubernator.PeersV1/GetPeerRateLimits', + peers__pb2.GetPeerRateLimitsReq.SerializeToString, + peers__pb2.GetPeerRateLimitsResp.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + + @staticmethod + def UpdatePeerGlobals(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary(request, target, '/pb.gubernator.PeersV1/UpdatePeerGlobals', + peers__pb2.UpdatePeerGlobalsReq.SerializeToString, + peers__pb2.UpdatePeerGlobalsResp.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) diff --git a/scripts/proto.sh b/scripts/proto.sh index 8d44a0c9..4ce0fcca 100755 --- a/scripts/proto.sh +++ b/scripts/proto.sh @@ -15,32 +15,60 @@ # limitations under the License. # - # Make sure the script fails fast. -set -e -set -u -set -x +set -eux + +SCRIPT_PATH=$(dirname "$0") # relative +REPO_ROOT=$(cd "${SCRIPT_PATH}/.." && pwd ) # absolutized and normalized +PROTO_DIR=$REPO_ROOT/proto +PYTHON_DST_DIR=$REPO_ROOT/python/gubernator +GOLANG_DST_DIR=$REPO_ROOT -PROTO_DIR=proto -GO_DIR=. -PY_DIR=python/gubernator -GRPC_GATEWAY_DIR=$GOPATH/pkg/mod/github.com/grpc-ecosystem/grpc-gateway\@v1.16.0/third_party/googleapis +# Build Golang stabs +go get google.golang.org/protobuf/cmd/protoc-gen-go +go install google.golang.org/protobuf/cmd/protoc-gen-go +go get google.golang.org/grpc/cmd/protoc-gen-go-grpc +go install google.golang.org/grpc/cmd/protoc-gen-go-grpc +go get github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway +go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway +GOPATH=$(go env GOPATH) +export PATH=$PATH:$GOPATH/bin + +GOOGLE_APIS_DIR=$REPO_ROOT/googleapis +if [ -d $GOOGLE_APIS_DIR ] +then + pushd $GOOGLE_APIS_DIR + git pull + popd +else + git clone https://github.com/googleapis/googleapis $GOOGLE_APIS_DIR +fi protoc -I=$PROTO_DIR \ - -I=$GRPC_GATEWAY_DIR \ - --go_out=plugins=grpc:$GO_DIR \ + -I=$GOOGLE_APIS_DIR \ + --go_out=$GOLANG_DST_DIR \ + --go_opt=paths=source_relative \ + --go-grpc_out=$GOLANG_DST_DIR \ + --go-grpc_opt=paths=source_relative \ $PROTO_DIR/*.proto protoc -I=$PROTO_DIR \ - -I=$GRPC_GATEWAY_DIR \ - --grpc-gateway_out=logtostderr=true:$GO_DIR \ + -I=$GOOGLE_APIS_DIR \ + --grpc-gateway_out=$GOLANG_DST_DIR \ + --grpc-gateway_opt=logtostderr=true \ + --grpc-gateway_opt=paths=source_relative \ + --grpc-gateway_opt=generate_unbound_methods=true \ $PROTO_DIR/*.proto -python3 -m grpc_tools.protoc \ +# Build Python stabs +mkdir -p "$PYTHON_DST_DIR" +rm -rf $PYTHON_DST_DIR/* +pip install grpcio +pip install grpcio-tools +python -m grpc.tools.protoc \ -I=$PROTO_DIR \ - -I=$GRPC_GATEWAY_DIR \ - --python_out=$PY_DIR \ - --grpc_python_out=$PY_DIR \ + -I=$GOOGLE_APIS_DIR \ + --python_out=$PYTHON_DST_DIR \ + --grpc_python_out=$PYTHON_DST_DIR \ $PROTO_DIR/*.proto - -touch $PY_DIR/__init__.py +touch $PYTHON_DST_DIR/__init__.py diff --git a/store_test.go b/store_test.go index 115094e6..fb71c7bd 100644 --- a/store_test.go +++ b/store_test.go @@ -22,7 +22,7 @@ import ( "net" "testing" - "github.com/mailgun/gubernator" + "github.com/mailgun/gubernator/v2" "github.com/mailgun/holster/v4/clock" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" diff --git a/tls_test.go b/tls_test.go index 9c389a57..9c66c537 100644 --- a/tls_test.go +++ b/tls_test.go @@ -8,7 +8,7 @@ import ( "net/http" "testing" - "github.com/mailgun/gubernator" + "github.com/mailgun/gubernator/v2" "github.com/mailgun/holster/v4/clock" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require"