mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-15 02:40:23 +00:00
rebase: bump google.golang.org/grpc from 1.67.1 to 1.68.0
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.67.1 to 1.68.0. - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.67.1...v1.68.0) --- updated-dependencies: - dependency-name: google.golang.org/grpc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Praveen M <m.praveen@ibm.com>
This commit is contained in:
parent
925ea1970c
commit
d651011026
10
go.mod
10
go.mod
@ -1,6 +1,6 @@
|
|||||||
module github.com/ceph/ceph-csi
|
module github.com/ceph/ceph-csi
|
||||||
|
|
||||||
go 1.22.5
|
go 1.22.7
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/IBM/keyprotect-go-client v0.15.1
|
github.com/IBM/keyprotect-go-client v0.15.1
|
||||||
@ -28,7 +28,7 @@ require (
|
|||||||
golang.org/x/crypto v0.29.0
|
golang.org/x/crypto v0.29.0
|
||||||
golang.org/x/net v0.31.0
|
golang.org/x/net v0.31.0
|
||||||
golang.org/x/sys v0.27.0
|
golang.org/x/sys v0.27.0
|
||||||
google.golang.org/grpc v1.67.1
|
google.golang.org/grpc v1.68.0
|
||||||
google.golang.org/protobuf v1.35.1
|
google.golang.org/protobuf v1.35.1
|
||||||
//
|
//
|
||||||
// when updating k8s.io/kubernetes, make sure to update the replace section too
|
// when updating k8s.io/kubernetes, make sure to update the replace section too
|
||||||
@ -158,15 +158,15 @@ require (
|
|||||||
go.uber.org/multierr v1.11.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
go.uber.org/zap v1.26.0 // indirect
|
go.uber.org/zap v1.26.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
|
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
|
||||||
golang.org/x/oauth2 v0.22.0 // indirect
|
golang.org/x/oauth2 v0.23.0 // indirect
|
||||||
golang.org/x/sync v0.9.0 // indirect
|
golang.org/x/sync v0.9.0 // indirect
|
||||||
golang.org/x/term v0.26.0 // indirect
|
golang.org/x/term v0.26.0 // indirect
|
||||||
golang.org/x/text v0.20.0 // indirect
|
golang.org/x/text v0.20.0 // indirect
|
||||||
golang.org/x/time v0.5.0 // indirect
|
golang.org/x/time v0.5.0 // indirect
|
||||||
golang.org/x/tools v0.26.0 // indirect
|
golang.org/x/tools v0.26.0 // indirect
|
||||||
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
|
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
|
||||||
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
|
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
|
16
go.sum
16
go.sum
@ -2657,8 +2657,8 @@ golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5H
|
|||||||
golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
|
golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
|
||||||
golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA=
|
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
|
||||||
golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
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-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-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -3263,8 +3263,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.
|
|||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8/go.mod h1:vPrPUTsDCYxXWjP7clS81mZ6/803D8K4iM9Ma27VKas=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240513163218-0867130af1f8/go.mod h1:vPrPUTsDCYxXWjP7clS81mZ6/803D8K4iM9Ma27VKas=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157/go.mod h1:99sLkeliLXfdj2J75X3Ho+rrVCaJze0uwN7zDDkjPVU=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I=
|
||||||
google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA=
|
google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA=
|
||||||
google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c=
|
google.golang.org/genproto/googleapis/bytestream v0.0.0-20230807174057-1744710a1577/go.mod h1:NjCQG/D8JandXxM57PZbAJL1DCNL6EypA0vPPwfsc7c=
|
||||||
google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw=
|
google.golang.org/genproto/googleapis/bytestream v0.0.0-20231030173426-d783a09b4405/go.mod h1:GRUCuLdzVqZte8+Dl/D4N25yLzcGqqWaYkeVOwulFqw=
|
||||||
@ -3314,8 +3314,8 @@ google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.
|
|||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240521202816-d264139d666e/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
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.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
@ -3375,8 +3375,8 @@ google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDom
|
|||||||
google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
|
google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
|
||||||
google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
|
google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
|
||||||
google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
|
google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
|
||||||
google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E=
|
google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0=
|
||||||
google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA=
|
google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA=
|
||||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
|
7
vendor/golang.org/x/oauth2/token.go
generated
vendored
7
vendor/golang.org/x/oauth2/token.go
generated
vendored
@ -49,6 +49,13 @@ type Token struct {
|
|||||||
// mechanisms for that TokenSource will not be used.
|
// mechanisms for that TokenSource will not be used.
|
||||||
Expiry time.Time `json:"expiry,omitempty"`
|
Expiry time.Time `json:"expiry,omitempty"`
|
||||||
|
|
||||||
|
// ExpiresIn is the OAuth2 wire format "expires_in" field,
|
||||||
|
// which specifies how many seconds later the token expires,
|
||||||
|
// relative to an unknown time base approximately around "now".
|
||||||
|
// It is the application's responsibility to populate
|
||||||
|
// `Expiry` from `ExpiresIn` when required.
|
||||||
|
ExpiresIn int64 `json:"expires_in,omitempty"`
|
||||||
|
|
||||||
// raw optionally contains extra metadata from the server
|
// raw optionally contains extra metadata from the server
|
||||||
// when updating a token.
|
// when updating a token.
|
||||||
raw interface{}
|
raw interface{}
|
||||||
|
396
vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go
generated
vendored
396
vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go
generated
vendored
@ -719,6 +719,8 @@ type PythonSettings struct {
|
|||||||
|
|
||||||
// Some settings.
|
// Some settings.
|
||||||
Common *CommonLanguageSettings `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"`
|
Common *CommonLanguageSettings `protobuf:"bytes,1,opt,name=common,proto3" json:"common,omitempty"`
|
||||||
|
// Experimental features to be included during client library generation.
|
||||||
|
ExperimentalFeatures *PythonSettings_ExperimentalFeatures `protobuf:"bytes,2,opt,name=experimental_features,json=experimentalFeatures,proto3" json:"experimental_features,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *PythonSettings) Reset() {
|
func (x *PythonSettings) Reset() {
|
||||||
@ -760,6 +762,13 @@ func (x *PythonSettings) GetCommon() *CommonLanguageSettings {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *PythonSettings) GetExperimentalFeatures() *PythonSettings_ExperimentalFeatures {
|
||||||
|
if x != nil {
|
||||||
|
return x.ExperimentalFeatures
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Settings for Node client libraries.
|
// Settings for Node client libraries.
|
||||||
type NodeSettings struct {
|
type NodeSettings struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
@ -1114,6 +1123,60 @@ func (x *MethodSettings) GetAutoPopulatedFields() []string {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Experimental features to be included during client library generation.
|
||||||
|
// These fields will be deprecated once the feature graduates and is enabled
|
||||||
|
// by default.
|
||||||
|
type PythonSettings_ExperimentalFeatures struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// Enables generation of asynchronous REST clients if `rest` transport is
|
||||||
|
// enabled. By default, asynchronous REST clients will not be generated.
|
||||||
|
// This feature will be enabled by default 1 month after launching the
|
||||||
|
// feature in preview packages.
|
||||||
|
RestAsyncIoEnabled bool `protobuf:"varint,1,opt,name=rest_async_io_enabled,json=restAsyncIoEnabled,proto3" json:"rest_async_io_enabled,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *PythonSettings_ExperimentalFeatures) Reset() {
|
||||||
|
*x = PythonSettings_ExperimentalFeatures{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_google_api_client_proto_msgTypes[13]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *PythonSettings_ExperimentalFeatures) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*PythonSettings_ExperimentalFeatures) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *PythonSettings_ExperimentalFeatures) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_google_api_client_proto_msgTypes[13]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use PythonSettings_ExperimentalFeatures.ProtoReflect.Descriptor instead.
|
||||||
|
func (*PythonSettings_ExperimentalFeatures) Descriptor() ([]byte, []int) {
|
||||||
|
return file_google_api_client_proto_rawDescGZIP(), []int{6, 0}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *PythonSettings_ExperimentalFeatures) GetRestAsyncIoEnabled() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.RestAsyncIoEnabled
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
// Describes settings to use when generating API methods that use the
|
// Describes settings to use when generating API methods that use the
|
||||||
// long-running operation pattern.
|
// long-running operation pattern.
|
||||||
// All default values below are from those used in the client library
|
// All default values below are from those used in the client library
|
||||||
@ -1142,7 +1205,7 @@ type MethodSettings_LongRunning struct {
|
|||||||
func (x *MethodSettings_LongRunning) Reset() {
|
func (x *MethodSettings_LongRunning) Reset() {
|
||||||
*x = MethodSettings_LongRunning{}
|
*x = MethodSettings_LongRunning{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_google_api_client_proto_msgTypes[15]
|
mi := &file_google_api_client_proto_msgTypes[16]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
@ -1155,7 +1218,7 @@ func (x *MethodSettings_LongRunning) String() string {
|
|||||||
func (*MethodSettings_LongRunning) ProtoMessage() {}
|
func (*MethodSettings_LongRunning) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *MethodSettings_LongRunning) ProtoReflect() protoreflect.Message {
|
func (x *MethodSettings_LongRunning) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_api_client_proto_msgTypes[15]
|
mi := &file_google_api_client_proto_msgTypes[16]
|
||||||
if protoimpl.UnsafeEnabled && x != nil {
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
if ms.LoadMessageInfo() == nil {
|
if ms.LoadMessageInfo() == nil {
|
||||||
@ -1460,132 +1523,143 @@ var file_google_api_client_proto_rawDesc = []byte{
|
|||||||
0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
|
0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43,
|
0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43,
|
||||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74,
|
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4c, 0x0a,
|
0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xfd, 0x01,
|
||||||
0x0e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12,
|
0x0a, 0x0e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
|
||||||
0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
|
||||||
0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d,
|
0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f,
|
||||||
0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69,
|
0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74,
|
||||||
0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x4a, 0x0a, 0x0c, 0x4e,
|
0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x64, 0x0a, 0x15,
|
||||||
0x6f, 0x64, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63,
|
0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x65, 0x61,
|
||||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f,
|
0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f,
|
||||||
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c,
|
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53,
|
||||||
0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52,
|
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65,
|
||||||
0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xae, 0x04, 0x0a, 0x0e, 0x44, 0x6f, 0x74, 0x6e,
|
0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x14, 0x65, 0x78,
|
||||||
0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f,
|
0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72,
|
||||||
|
0x65, 0x73, 0x1a, 0x49, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74,
|
||||||
|
0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x15, 0x72, 0x65,
|
||||||
|
0x73, 0x74, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x69, 0x6f, 0x5f, 0x65, 0x6e, 0x61, 0x62,
|
||||||
|
0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x72, 0x65, 0x73, 0x74, 0x41,
|
||||||
|
0x73, 0x79, 0x6e, 0x63, 0x49, 0x6f, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x4a, 0x0a,
|
||||||
|
0x0c, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a,
|
||||||
|
0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e,
|
||||||
|
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
|
||||||
|
0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||||
|
0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xae, 0x04, 0x0a, 0x0e, 0x44, 0x6f,
|
||||||
|
0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06,
|
||||||
|
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67,
|
||||||
|
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||||
|
0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
|
||||||
|
0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x72, 0x65, 0x6e, 0x61,
|
||||||
|
0x6d, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03,
|
||||||
|
0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
||||||
|
0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52,
|
||||||
|
0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e,
|
||||||
|
0x74, 0x72, 0x79, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76,
|
||||||
|
0x69, 0x63, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x11, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f,
|
||||||
|
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||||
|
0x30, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x74,
|
||||||
|
0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61,
|
||||||
|
0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
|
||||||
|
0x79, 0x52, 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
||||||
|
0x63, 0x65, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x72,
|
||||||
|
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10,
|
||||||
|
0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73,
|
||||||
|
0x12, 0x38, 0x0a, 0x18, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73,
|
||||||
|
0x70, 0x61, 0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03,
|
||||||
|
0x28, 0x09, 0x52, 0x16, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70,
|
||||||
|
0x61, 0x63, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x68, 0x61,
|
||||||
|
0x6e, 0x64, 0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74,
|
||||||
|
0x75, 0x72, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x68, 0x61, 0x6e, 0x64,
|
||||||
|
0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
|
||||||
|
0x73, 0x1a, 0x42, 0x0a, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76,
|
||||||
|
0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
|
||||||
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
|
||||||
|
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
|
||||||
|
0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64,
|
||||||
|
0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10,
|
||||||
|
0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79,
|
||||||
|
0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
|
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x0c, 0x52, 0x75,
|
||||||
|
0x62, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f,
|
||||||
0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f,
|
0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f,
|
||||||
0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61,
|
0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61,
|
||||||
0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06,
|
0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06,
|
||||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x12, 0x5a, 0x0a, 0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65,
|
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x0a, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74,
|
||||||
0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
|
0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01,
|
||||||
0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f,
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70,
|
||||||
0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e,
|
0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65,
|
||||||
0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72,
|
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||||
0x79, 0x52, 0x0f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
0x22, 0xc2, 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69,
|
||||||
0x65, 0x73, 0x12, 0x5d, 0x0a, 0x11, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x5f, 0x72, 0x65,
|
0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18,
|
||||||
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x30, 0x2e,
|
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12,
|
||||||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x74, 0x6e, 0x65,
|
0x49, 0x0a, 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18,
|
||||||
0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65,
|
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
|
||||||
0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52,
|
0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||||
0x10, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
0x73, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x6c,
|
||||||
0x73, 0x12, 0x2b, 0x0a, 0x11, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73,
|
0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x75,
|
||||||
0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x69, 0x67,
|
0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65,
|
||||||
0x6e, 0x6f, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x38,
|
0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x75, 0x74, 0x6f, 0x50,
|
||||||
0x0a, 0x18, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
|
0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x94,
|
||||||
0x63, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09,
|
0x02, 0x0a, 0x0b, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x47,
|
||||||
0x52, 0x16, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63,
|
0x0a, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64,
|
||||||
0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x16, 0x68, 0x61, 0x6e, 0x64,
|
0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
|
||||||
0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
|
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72,
|
||||||
0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x68, 0x61, 0x6e, 0x64, 0x77, 0x72,
|
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x6f,
|
||||||
0x69, 0x74, 0x74, 0x65, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a,
|
0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6f, 0x6c, 0x6c, 0x5f,
|
||||||
0x42, 0x0a, 0x14, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72,
|
||||||
0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
|
0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
|
0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, 0x6d,
|
||||||
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a,
|
0x61, 0x78, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20,
|
||||||
0x02, 0x38, 0x01, 0x1a, 0x43, 0x0a, 0x15, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x64, 0x52, 0x65,
|
0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
|
||||||
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
|
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c,
|
||||||
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
|
0x6d, 0x61, 0x78, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x47, 0x0a, 0x12,
|
||||||
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
|
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f,
|
||||||
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x0c, 0x52, 0x75, 0x62, 0x79,
|
0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||||
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d,
|
|
||||||
0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
|
||||||
0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67,
|
|
||||||
0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f,
|
|
||||||
0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x48, 0x0a, 0x0a, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
|
||||||
0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01,
|
|
||||||
0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
|
||||||
0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65,
|
|
||||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0xc2,
|
|
||||||
0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
|
||||||
0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20,
|
|
||||||
0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x49, 0x0a,
|
|
||||||
0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20,
|
|
||||||
0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69,
|
|
||||||
0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e,
|
|
||||||
0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x6c, 0x6f, 0x6e,
|
|
||||||
0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x75, 0x74, 0x6f,
|
|
||||||
0x5f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64,
|
|
||||||
0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x75, 0x74, 0x6f, 0x50, 0x6f, 0x70,
|
|
||||||
0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x94, 0x02, 0x0a,
|
|
||||||
0x0b, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x47, 0x0a, 0x12,
|
|
||||||
0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c,
|
|
||||||
0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
|
||||||
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
|
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
|
||||||
0x69, 0x6f, 0x6e, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c,
|
0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x54, 0x69,
|
||||||
0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65,
|
0x6d, 0x65, 0x6f, 0x75, 0x74, 0x2a, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
|
||||||
0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x02,
|
0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74,
|
||||||
0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d,
|
0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x49,
|
||||||
0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, 0x6d, 0x61, 0x78,
|
0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49,
|
||||||
0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28,
|
0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
|
||||||
0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41,
|
||||||
0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6d, 0x61,
|
0x44, 0x53, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x53, 0x10, 0x03,
|
||||||
0x78, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x47, 0x0a, 0x12, 0x74, 0x6f,
|
0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10,
|
||||||
0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
|
0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12,
|
||||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
|
0x07, 0x0a, 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, 0x45,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f,
|
0x52, 0x41, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x49, 0x10, 0x07, 0x2a, 0x67, 0x0a, 0x18, 0x43,
|
||||||
0x6e, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65,
|
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74,
|
||||||
0x6f, 0x75, 0x74, 0x2a, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69,
|
0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, 0x4e,
|
||||||
0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
|
0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4e,
|
||||||
0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52,
|
0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
|
||||||
0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e,
|
0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x0a, 0x12,
|
||||||
0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09,
|
0x13, 0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47,
|
||||||
0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44, 0x53,
|
0x45, 0x52, 0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73,
|
||||||
0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x53, 0x10, 0x03, 0x12, 0x0f,
|
0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||||
0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10, 0x04, 0x12,
|
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f,
|
||||||
0x0c, 0x0a, 0x08, 0x53, 0x48, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x07, 0x0a,
|
0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52,
|
||||||
0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41,
|
0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
|
||||||
0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x49, 0x10, 0x07, 0x2a, 0x67, 0x0a, 0x18, 0x43, 0x6c, 0x69,
|
0x3a, 0x43, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74,
|
||||||
0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e,
|
0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
||||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f,
|
0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x41, 0x54,
|
0x73, 0x18, 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
|
||||||
0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10,
|
0x74, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73,
|
||||||
0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x0a, 0x12, 0x13, 0x0a,
|
0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
|
||||||
0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x52,
|
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f,
|
||||||
0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73, 0x69, 0x67,
|
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f,
|
||||||
0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
|
0x61, 0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x3a, 0x44, 0x0a, 0x0b, 0x61, 0x70,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f,
|
0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||||
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x6d,
|
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76,
|
||||||
0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3a, 0x43,
|
0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xc1, 0xba, 0xab, 0xfa, 0x01,
|
||||||
0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x12, 0x1f,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||||
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
|
0x42, 0x69, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
|
||||||
0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18,
|
0x70, 0x69, 0x42, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
|
||||||
0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x48,
|
0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67,
|
||||||
0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x63, 0x6f,
|
0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f,
|
||||||
0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
|
0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e,
|
||||||
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74,
|
0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,
|
||||||
0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x61, 0x75,
|
0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||||
0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x3a, 0x44, 0x0a, 0x0b, 0x61, 0x70, 0x69, 0x5f,
|
0x74, 0x6f, 0x33,
|
||||||
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
|
||||||
0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xc1, 0xba, 0xab, 0xfa, 0x01, 0x20, 0x01,
|
|
||||||
0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x69,
|
|
||||||
0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69,
|
|
||||||
0x42, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
|
|
||||||
0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f,
|
|
||||||
0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67,
|
|
||||||
0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74,
|
|
||||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
|
||||||
0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
|
||||||
0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -1601,7 +1675,7 @@ func file_google_api_client_proto_rawDescGZIP() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var file_google_api_client_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
|
var file_google_api_client_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
|
||||||
var file_google_api_client_proto_msgTypes = make([]protoimpl.MessageInfo, 16)
|
var file_google_api_client_proto_msgTypes = make([]protoimpl.MessageInfo, 17)
|
||||||
var file_google_api_client_proto_goTypes = []interface{}{
|
var file_google_api_client_proto_goTypes = []interface{}{
|
||||||
(ClientLibraryOrganization)(0), // 0: google.api.ClientLibraryOrganization
|
(ClientLibraryOrganization)(0), // 0: google.api.ClientLibraryOrganization
|
||||||
(ClientLibraryDestination)(0), // 1: google.api.ClientLibraryDestination
|
(ClientLibraryDestination)(0), // 1: google.api.ClientLibraryDestination
|
||||||
@ -1618,17 +1692,18 @@ var file_google_api_client_proto_goTypes = []interface{}{
|
|||||||
(*GoSettings)(nil), // 12: google.api.GoSettings
|
(*GoSettings)(nil), // 12: google.api.GoSettings
|
||||||
(*MethodSettings)(nil), // 13: google.api.MethodSettings
|
(*MethodSettings)(nil), // 13: google.api.MethodSettings
|
||||||
nil, // 14: google.api.JavaSettings.ServiceClassNamesEntry
|
nil, // 14: google.api.JavaSettings.ServiceClassNamesEntry
|
||||||
nil, // 15: google.api.DotnetSettings.RenamedServicesEntry
|
(*PythonSettings_ExperimentalFeatures)(nil), // 15: google.api.PythonSettings.ExperimentalFeatures
|
||||||
nil, // 16: google.api.DotnetSettings.RenamedResourcesEntry
|
nil, // 16: google.api.DotnetSettings.RenamedServicesEntry
|
||||||
(*MethodSettings_LongRunning)(nil), // 17: google.api.MethodSettings.LongRunning
|
nil, // 17: google.api.DotnetSettings.RenamedResourcesEntry
|
||||||
(api.LaunchStage)(0), // 18: google.api.LaunchStage
|
(*MethodSettings_LongRunning)(nil), // 18: google.api.MethodSettings.LongRunning
|
||||||
(*durationpb.Duration)(nil), // 19: google.protobuf.Duration
|
(api.LaunchStage)(0), // 19: google.api.LaunchStage
|
||||||
(*descriptorpb.MethodOptions)(nil), // 20: google.protobuf.MethodOptions
|
(*durationpb.Duration)(nil), // 20: google.protobuf.Duration
|
||||||
(*descriptorpb.ServiceOptions)(nil), // 21: google.protobuf.ServiceOptions
|
(*descriptorpb.MethodOptions)(nil), // 21: google.protobuf.MethodOptions
|
||||||
|
(*descriptorpb.ServiceOptions)(nil), // 22: google.protobuf.ServiceOptions
|
||||||
}
|
}
|
||||||
var file_google_api_client_proto_depIdxs = []int32{
|
var file_google_api_client_proto_depIdxs = []int32{
|
||||||
1, // 0: google.api.CommonLanguageSettings.destinations:type_name -> google.api.ClientLibraryDestination
|
1, // 0: google.api.CommonLanguageSettings.destinations:type_name -> google.api.ClientLibraryDestination
|
||||||
18, // 1: google.api.ClientLibrarySettings.launch_stage:type_name -> google.api.LaunchStage
|
19, // 1: google.api.ClientLibrarySettings.launch_stage:type_name -> google.api.LaunchStage
|
||||||
5, // 2: google.api.ClientLibrarySettings.java_settings:type_name -> google.api.JavaSettings
|
5, // 2: google.api.ClientLibrarySettings.java_settings:type_name -> google.api.JavaSettings
|
||||||
6, // 3: google.api.ClientLibrarySettings.cpp_settings:type_name -> google.api.CppSettings
|
6, // 3: google.api.ClientLibrarySettings.cpp_settings:type_name -> google.api.CppSettings
|
||||||
7, // 4: google.api.ClientLibrarySettings.php_settings:type_name -> google.api.PhpSettings
|
7, // 4: google.api.ClientLibrarySettings.php_settings:type_name -> google.api.PhpSettings
|
||||||
@ -1645,25 +1720,26 @@ var file_google_api_client_proto_depIdxs = []int32{
|
|||||||
2, // 15: google.api.CppSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 15: google.api.CppSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
2, // 16: google.api.PhpSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 16: google.api.PhpSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
2, // 17: google.api.PythonSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 17: google.api.PythonSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
2, // 18: google.api.NodeSettings.common:type_name -> google.api.CommonLanguageSettings
|
15, // 18: google.api.PythonSettings.experimental_features:type_name -> google.api.PythonSettings.ExperimentalFeatures
|
||||||
2, // 19: google.api.DotnetSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 19: google.api.NodeSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
15, // 20: google.api.DotnetSettings.renamed_services:type_name -> google.api.DotnetSettings.RenamedServicesEntry
|
2, // 20: google.api.DotnetSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
16, // 21: google.api.DotnetSettings.renamed_resources:type_name -> google.api.DotnetSettings.RenamedResourcesEntry
|
16, // 21: google.api.DotnetSettings.renamed_services:type_name -> google.api.DotnetSettings.RenamedServicesEntry
|
||||||
2, // 22: google.api.RubySettings.common:type_name -> google.api.CommonLanguageSettings
|
17, // 22: google.api.DotnetSettings.renamed_resources:type_name -> google.api.DotnetSettings.RenamedResourcesEntry
|
||||||
2, // 23: google.api.GoSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 23: google.api.RubySettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
17, // 24: google.api.MethodSettings.long_running:type_name -> google.api.MethodSettings.LongRunning
|
2, // 24: google.api.GoSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
19, // 25: google.api.MethodSettings.LongRunning.initial_poll_delay:type_name -> google.protobuf.Duration
|
18, // 25: google.api.MethodSettings.long_running:type_name -> google.api.MethodSettings.LongRunning
|
||||||
19, // 26: google.api.MethodSettings.LongRunning.max_poll_delay:type_name -> google.protobuf.Duration
|
20, // 26: google.api.MethodSettings.LongRunning.initial_poll_delay:type_name -> google.protobuf.Duration
|
||||||
19, // 27: google.api.MethodSettings.LongRunning.total_poll_timeout:type_name -> google.protobuf.Duration
|
20, // 27: google.api.MethodSettings.LongRunning.max_poll_delay:type_name -> google.protobuf.Duration
|
||||||
20, // 28: google.api.method_signature:extendee -> google.protobuf.MethodOptions
|
20, // 28: google.api.MethodSettings.LongRunning.total_poll_timeout:type_name -> google.protobuf.Duration
|
||||||
21, // 29: google.api.default_host:extendee -> google.protobuf.ServiceOptions
|
21, // 29: google.api.method_signature:extendee -> google.protobuf.MethodOptions
|
||||||
21, // 30: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions
|
22, // 30: google.api.default_host:extendee -> google.protobuf.ServiceOptions
|
||||||
21, // 31: google.api.api_version:extendee -> google.protobuf.ServiceOptions
|
22, // 31: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions
|
||||||
32, // [32:32] is the sub-list for method output_type
|
22, // 32: google.api.api_version:extendee -> google.protobuf.ServiceOptions
|
||||||
32, // [32:32] is the sub-list for method input_type
|
33, // [33:33] is the sub-list for method output_type
|
||||||
32, // [32:32] is the sub-list for extension type_name
|
33, // [33:33] is the sub-list for method input_type
|
||||||
28, // [28:32] is the sub-list for extension extendee
|
33, // [33:33] is the sub-list for extension type_name
|
||||||
0, // [0:28] is the sub-list for field type_name
|
29, // [29:33] is the sub-list for extension extendee
|
||||||
|
0, // [0:29] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_google_api_client_proto_init() }
|
func init() { file_google_api_client_proto_init() }
|
||||||
@ -1816,7 +1892,19 @@ func file_google_api_client_proto_init() {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_google_api_client_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
|
file_google_api_client_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*PythonSettings_ExperimentalFeatures); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_google_api_client_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*MethodSettings_LongRunning); i {
|
switch v := v.(*MethodSettings_LongRunning); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
@ -1835,7 +1923,7 @@ func file_google_api_client_proto_init() {
|
|||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_google_api_client_proto_rawDesc,
|
RawDescriptor: file_google_api_client_proto_rawDesc,
|
||||||
NumEnums: 2,
|
NumEnums: 2,
|
||||||
NumMessages: 16,
|
NumMessages: 17,
|
||||||
NumExtensions: 4,
|
NumExtensions: 4,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
4
vendor/google.golang.org/grpc/CONTRIBUTING.md
generated
vendored
4
vendor/google.golang.org/grpc/CONTRIBUTING.md
generated
vendored
@ -4,7 +4,7 @@ We definitely welcome your patches and contributions to gRPC! Please read the gR
|
|||||||
organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md)
|
organization's [governance rules](https://github.com/grpc/grpc-community/blob/master/governance.md)
|
||||||
and [contribution guidelines](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) before proceeding.
|
and [contribution guidelines](https://github.com/grpc/grpc-community/blob/master/CONTRIBUTING.md) before proceeding.
|
||||||
|
|
||||||
If you are new to github, please start by reading [Pull Request howto](https://help.github.com/articles/about-pull-requests/)
|
If you are new to GitHub, please start by reading [Pull Request howto](https://help.github.com/articles/about-pull-requests/)
|
||||||
|
|
||||||
## Legal requirements
|
## Legal requirements
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ How to get your contributions merged smoothly and quickly.
|
|||||||
proposal](https://github.com/grpc/proposal).
|
proposal](https://github.com/grpc/proposal).
|
||||||
|
|
||||||
- Provide a good **PR description** as a record of **what** change is being made
|
- Provide a good **PR description** as a record of **what** change is being made
|
||||||
and **why** it was made. Link to a github issue if it exists.
|
and **why** it was made. Link to a GitHub issue if it exists.
|
||||||
|
|
||||||
- If you want to fix formatting or style, consider whether your changes are an
|
- If you want to fix formatting or style, consider whether your changes are an
|
||||||
obvious improvement or might be considered a personal preference. If a style
|
obvious improvement or might be considered a personal preference. If a style
|
||||||
|
15
vendor/google.golang.org/grpc/balancer/balancer.go
generated
vendored
15
vendor/google.golang.org/grpc/balancer/balancer.go
generated
vendored
@ -130,7 +130,7 @@ type SubConn interface {
|
|||||||
// UpdateAddresses updates the addresses used in this SubConn.
|
// UpdateAddresses updates the addresses used in this SubConn.
|
||||||
// gRPC checks if currently-connected address is still in the new list.
|
// gRPC checks if currently-connected address is still in the new list.
|
||||||
// If it's in the list, the connection will be kept.
|
// If it's in the list, the connection will be kept.
|
||||||
// If it's not in the list, the connection will gracefully closed, and
|
// If it's not in the list, the connection will gracefully close, and
|
||||||
// a new connection will be created.
|
// a new connection will be created.
|
||||||
//
|
//
|
||||||
// This will trigger a state transition for the SubConn.
|
// This will trigger a state transition for the SubConn.
|
||||||
@ -142,8 +142,11 @@ type SubConn interface {
|
|||||||
Connect()
|
Connect()
|
||||||
// GetOrBuildProducer returns a reference to the existing Producer for this
|
// GetOrBuildProducer returns a reference to the existing Producer for this
|
||||||
// ProducerBuilder in this SubConn, or, if one does not currently exist,
|
// ProducerBuilder in this SubConn, or, if one does not currently exist,
|
||||||
// creates a new one and returns it. Returns a close function which must
|
// creates a new one and returns it. Returns a close function which may be
|
||||||
// be called when the Producer is no longer needed.
|
// called when the Producer is no longer needed. Otherwise the producer
|
||||||
|
// will automatically be closed upon connection loss or subchannel close.
|
||||||
|
// Should only be called on a SubConn in state Ready. Otherwise the
|
||||||
|
// producer will be unable to create streams.
|
||||||
GetOrBuildProducer(ProducerBuilder) (p Producer, close func())
|
GetOrBuildProducer(ProducerBuilder) (p Producer, close func())
|
||||||
// Shutdown shuts down the SubConn gracefully. Any started RPCs will be
|
// Shutdown shuts down the SubConn gracefully. Any started RPCs will be
|
||||||
// allowed to complete. No future calls should be made on the SubConn.
|
// allowed to complete. No future calls should be made on the SubConn.
|
||||||
@ -452,8 +455,10 @@ type ProducerBuilder interface {
|
|||||||
// Build creates a Producer. The first parameter is always a
|
// Build creates a Producer. The first parameter is always a
|
||||||
// grpc.ClientConnInterface (a type to allow creating RPCs/streams on the
|
// grpc.ClientConnInterface (a type to allow creating RPCs/streams on the
|
||||||
// associated SubConn), but is declared as `any` to avoid a dependency
|
// associated SubConn), but is declared as `any` to avoid a dependency
|
||||||
// cycle. Should also return a close function that will be called when all
|
// cycle. Build also returns a close function that will be called when all
|
||||||
// references to the Producer have been given up.
|
// references to the Producer have been given up for a SubConn, or when a
|
||||||
|
// connectivity state change occurs on the SubConn. The close function
|
||||||
|
// should always block until all asynchronous cleanup work is completed.
|
||||||
Build(grpcClientConnInterface any) (p Producer, close func())
|
Build(grpcClientConnInterface any) (p Producer, close func())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
vendor/google.golang.org/grpc/balancer/base/balancer.go
generated
vendored
2
vendor/google.golang.org/grpc/balancer/base/balancer.go
generated
vendored
@ -133,7 +133,7 @@ func (b *baseBalancer) UpdateClientConnState(s balancer.ClientConnState) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If resolver state contains no addresses, return an error so ClientConn
|
// If resolver state contains no addresses, return an error so ClientConn
|
||||||
// will trigger re-resolve. Also records this as an resolver error, so when
|
// will trigger re-resolve. Also records this as a resolver error, so when
|
||||||
// the overall state turns transient failure, the error message will have
|
// the overall state turns transient failure, the error message will have
|
||||||
// the zero address information.
|
// the zero address information.
|
||||||
if len(s.ResolverState.Addresses) == 0 {
|
if len(s.ResolverState.Addresses) == 0 {
|
||||||
|
24
vendor/google.golang.org/grpc/balancer/pickfirst/internal/internal.go
generated
vendored
Normal file
24
vendor/google.golang.org/grpc/balancer/pickfirst/internal/internal.go
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2024 gRPC authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Package internal contains code internal to the pickfirst package.
|
||||||
|
package internal
|
||||||
|
|
||||||
|
import "math/rand"
|
||||||
|
|
||||||
|
// RandShuffle pseudo-randomizes the order of addresses.
|
||||||
|
var RandShuffle = rand.Shuffle
|
14
vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go
generated
vendored
14
vendor/google.golang.org/grpc/balancer/pickfirst/pickfirst.go
generated
vendored
@ -26,18 +26,23 @@ import (
|
|||||||
"math/rand"
|
"math/rand"
|
||||||
|
|
||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/balancer"
|
||||||
|
"google.golang.org/grpc/balancer/pickfirst/internal"
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
"google.golang.org/grpc/grpclog"
|
"google.golang.org/grpc/grpclog"
|
||||||
"google.golang.org/grpc/internal"
|
"google.golang.org/grpc/internal/envconfig"
|
||||||
internalgrpclog "google.golang.org/grpc/internal/grpclog"
|
internalgrpclog "google.golang.org/grpc/internal/grpclog"
|
||||||
"google.golang.org/grpc/internal/pretty"
|
"google.golang.org/grpc/internal/pretty"
|
||||||
"google.golang.org/grpc/resolver"
|
"google.golang.org/grpc/resolver"
|
||||||
"google.golang.org/grpc/serviceconfig"
|
"google.golang.org/grpc/serviceconfig"
|
||||||
|
|
||||||
|
_ "google.golang.org/grpc/balancer/pickfirst/pickfirstleaf" // For automatically registering the new pickfirst if required.
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
if envconfig.NewPickFirstEnabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
balancer.Register(pickfirstBuilder{})
|
balancer.Register(pickfirstBuilder{})
|
||||||
internal.ShuffleAddressListForTesting = func(n int, swap func(i, j int)) { rand.Shuffle(n, swap) }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var logger = grpclog.Component("pick-first-lb")
|
var logger = grpclog.Component("pick-first-lb")
|
||||||
@ -103,10 +108,13 @@ func (b *pickfirstBalancer) ResolverError(err error) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Shuffler is an interface for shuffling an address list.
|
||||||
type Shuffler interface {
|
type Shuffler interface {
|
||||||
ShuffleAddressListForTesting(n int, swap func(i, j int))
|
ShuffleAddressListForTesting(n int, swap func(i, j int))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ShuffleAddressListForTesting pseudo-randomizes the order of addresses. n
|
||||||
|
// is the number of elements. swap swaps the elements with indexes i and j.
|
||||||
func ShuffleAddressListForTesting(n int, swap func(i, j int)) { rand.Shuffle(n, swap) }
|
func ShuffleAddressListForTesting(n int, swap func(i, j int)) { rand.Shuffle(n, swap) }
|
||||||
|
|
||||||
func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error {
|
func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error {
|
||||||
@ -140,7 +148,7 @@ func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState
|
|||||||
// within each endpoint. - A61
|
// within each endpoint. - A61
|
||||||
if cfg.ShuffleAddressList {
|
if cfg.ShuffleAddressList {
|
||||||
endpoints = append([]resolver.Endpoint{}, endpoints...)
|
endpoints = append([]resolver.Endpoint{}, endpoints...)
|
||||||
internal.ShuffleAddressListForTesting.(func(int, func(int, int)))(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] })
|
internal.RandShuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] })
|
||||||
}
|
}
|
||||||
|
|
||||||
// "Flatten the list by concatenating the ordered list of addresses for each
|
// "Flatten the list by concatenating the ordered list of addresses for each
|
||||||
|
625
vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go
generated
vendored
Normal file
625
vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go
generated
vendored
Normal file
@ -0,0 +1,625 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright 2024 gRPC authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Package pickfirstleaf contains the pick_first load balancing policy which
|
||||||
|
// will be the universal leaf policy after dualstack changes are implemented.
|
||||||
|
//
|
||||||
|
// # Experimental
|
||||||
|
//
|
||||||
|
// Notice: This package is EXPERIMENTAL and may be changed or removed in a
|
||||||
|
// later release.
|
||||||
|
package pickfirstleaf
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"google.golang.org/grpc/balancer"
|
||||||
|
"google.golang.org/grpc/balancer/pickfirst/internal"
|
||||||
|
"google.golang.org/grpc/connectivity"
|
||||||
|
"google.golang.org/grpc/grpclog"
|
||||||
|
"google.golang.org/grpc/internal/envconfig"
|
||||||
|
internalgrpclog "google.golang.org/grpc/internal/grpclog"
|
||||||
|
"google.golang.org/grpc/internal/pretty"
|
||||||
|
"google.golang.org/grpc/resolver"
|
||||||
|
"google.golang.org/grpc/serviceconfig"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
if envconfig.NewPickFirstEnabled {
|
||||||
|
// Register as the default pick_first balancer.
|
||||||
|
Name = "pick_first"
|
||||||
|
}
|
||||||
|
balancer.Register(pickfirstBuilder{})
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
logger = grpclog.Component("pick-first-leaf-lb")
|
||||||
|
// Name is the name of the pick_first_leaf balancer.
|
||||||
|
// It is changed to "pick_first" in init() if this balancer is to be
|
||||||
|
// registered as the default pickfirst.
|
||||||
|
Name = "pick_first_leaf"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TODO: change to pick-first when this becomes the default pick_first policy.
|
||||||
|
const logPrefix = "[pick-first-leaf-lb %p] "
|
||||||
|
|
||||||
|
type pickfirstBuilder struct{}
|
||||||
|
|
||||||
|
func (pickfirstBuilder) Build(cc balancer.ClientConn, _ balancer.BuildOptions) balancer.Balancer {
|
||||||
|
b := &pickfirstBalancer{
|
||||||
|
cc: cc,
|
||||||
|
addressList: addressList{},
|
||||||
|
subConns: resolver.NewAddressMap(),
|
||||||
|
state: connectivity.Connecting,
|
||||||
|
mu: sync.Mutex{},
|
||||||
|
}
|
||||||
|
b.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf(logPrefix, b))
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b pickfirstBuilder) Name() string {
|
||||||
|
return Name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (pickfirstBuilder) ParseConfig(js json.RawMessage) (serviceconfig.LoadBalancingConfig, error) {
|
||||||
|
var cfg pfConfig
|
||||||
|
if err := json.Unmarshal(js, &cfg); err != nil {
|
||||||
|
return nil, fmt.Errorf("pickfirst: unable to unmarshal LB policy config: %s, error: %v", string(js), err)
|
||||||
|
}
|
||||||
|
return cfg, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type pfConfig struct {
|
||||||
|
serviceconfig.LoadBalancingConfig `json:"-"`
|
||||||
|
|
||||||
|
// If set to true, instructs the LB policy to shuffle the order of the list
|
||||||
|
// of endpoints received from the name resolver before attempting to
|
||||||
|
// connect to them.
|
||||||
|
ShuffleAddressList bool `json:"shuffleAddressList"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// scData keeps track of the current state of the subConn.
|
||||||
|
// It is not safe for concurrent access.
|
||||||
|
type scData struct {
|
||||||
|
// The following fields are initialized at build time and read-only after
|
||||||
|
// that.
|
||||||
|
subConn balancer.SubConn
|
||||||
|
addr resolver.Address
|
||||||
|
|
||||||
|
state connectivity.State
|
||||||
|
lastErr error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *pickfirstBalancer) newSCData(addr resolver.Address) (*scData, error) {
|
||||||
|
sd := &scData{
|
||||||
|
state: connectivity.Idle,
|
||||||
|
addr: addr,
|
||||||
|
}
|
||||||
|
sc, err := b.cc.NewSubConn([]resolver.Address{addr}, balancer.NewSubConnOptions{
|
||||||
|
StateListener: func(state balancer.SubConnState) {
|
||||||
|
b.updateSubConnState(sd, state)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
sd.subConn = sc
|
||||||
|
return sd, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type pickfirstBalancer struct {
|
||||||
|
// The following fields are initialized at build time and read-only after
|
||||||
|
// that and therefore do not need to be guarded by a mutex.
|
||||||
|
logger *internalgrpclog.PrefixLogger
|
||||||
|
cc balancer.ClientConn
|
||||||
|
|
||||||
|
// The mutex is used to ensure synchronization of updates triggered
|
||||||
|
// from the idle picker and the already serialized resolver,
|
||||||
|
// SubConn state updates.
|
||||||
|
mu sync.Mutex
|
||||||
|
state connectivity.State
|
||||||
|
// scData for active subonns mapped by address.
|
||||||
|
subConns *resolver.AddressMap
|
||||||
|
addressList addressList
|
||||||
|
firstPass bool
|
||||||
|
numTF int
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResolverError is called by the ClientConn when the name resolver produces
|
||||||
|
// an error or when pickfirst determined the resolver update to be invalid.
|
||||||
|
func (b *pickfirstBalancer) ResolverError(err error) {
|
||||||
|
b.mu.Lock()
|
||||||
|
defer b.mu.Unlock()
|
||||||
|
b.resolverErrorLocked(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *pickfirstBalancer) resolverErrorLocked(err error) {
|
||||||
|
if b.logger.V(2) {
|
||||||
|
b.logger.Infof("Received error from the name resolver: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// The picker will not change since the balancer does not currently
|
||||||
|
// report an error. If the balancer hasn't received a single good resolver
|
||||||
|
// update yet, transition to TRANSIENT_FAILURE.
|
||||||
|
if b.state != connectivity.TransientFailure && b.addressList.size() > 0 {
|
||||||
|
if b.logger.V(2) {
|
||||||
|
b.logger.Infof("Ignoring resolver error because balancer is using a previous good update.")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.TransientFailure,
|
||||||
|
Picker: &picker{err: fmt.Errorf("name resolver error: %v", err)},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error {
|
||||||
|
b.mu.Lock()
|
||||||
|
defer b.mu.Unlock()
|
||||||
|
if len(state.ResolverState.Addresses) == 0 && len(state.ResolverState.Endpoints) == 0 {
|
||||||
|
// Cleanup state pertaining to the previous resolver state.
|
||||||
|
// Treat an empty address list like an error by calling b.ResolverError.
|
||||||
|
b.state = connectivity.TransientFailure
|
||||||
|
b.closeSubConnsLocked()
|
||||||
|
b.addressList.updateAddrs(nil)
|
||||||
|
b.resolverErrorLocked(errors.New("produced zero addresses"))
|
||||||
|
return balancer.ErrBadResolverState
|
||||||
|
}
|
||||||
|
cfg, ok := state.BalancerConfig.(pfConfig)
|
||||||
|
if state.BalancerConfig != nil && !ok {
|
||||||
|
return fmt.Errorf("pickfirst: received illegal BalancerConfig (type %T): %v: %w", state.BalancerConfig, state.BalancerConfig, balancer.ErrBadResolverState)
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.logger.V(2) {
|
||||||
|
b.logger.Infof("Received new config %s, resolver state %s", pretty.ToJSON(cfg), pretty.ToJSON(state.ResolverState))
|
||||||
|
}
|
||||||
|
|
||||||
|
var newAddrs []resolver.Address
|
||||||
|
if endpoints := state.ResolverState.Endpoints; len(endpoints) != 0 {
|
||||||
|
// Perform the optional shuffling described in gRFC A62. The shuffling
|
||||||
|
// will change the order of endpoints but not touch the order of the
|
||||||
|
// addresses within each endpoint. - A61
|
||||||
|
if cfg.ShuffleAddressList {
|
||||||
|
endpoints = append([]resolver.Endpoint{}, endpoints...)
|
||||||
|
internal.RandShuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] })
|
||||||
|
}
|
||||||
|
|
||||||
|
// "Flatten the list by concatenating the ordered list of addresses for
|
||||||
|
// each of the endpoints, in order." - A61
|
||||||
|
for _, endpoint := range endpoints {
|
||||||
|
// "In the flattened list, interleave addresses from the two address
|
||||||
|
// families, as per RFC-8305 section 4." - A61
|
||||||
|
// TODO: support the above language.
|
||||||
|
newAddrs = append(newAddrs, endpoint.Addresses...)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Endpoints not set, process addresses until we migrate resolver
|
||||||
|
// emissions fully to Endpoints. The top channel does wrap emitted
|
||||||
|
// addresses with endpoints, however some balancers such as weighted
|
||||||
|
// target do not forward the corresponding correct endpoints down/split
|
||||||
|
// endpoints properly. Once all balancers correctly forward endpoints
|
||||||
|
// down, can delete this else conditional.
|
||||||
|
newAddrs = state.ResolverState.Addresses
|
||||||
|
if cfg.ShuffleAddressList {
|
||||||
|
newAddrs = append([]resolver.Address{}, newAddrs...)
|
||||||
|
internal.RandShuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If an address appears in multiple endpoints or in the same endpoint
|
||||||
|
// multiple times, we keep it only once. We will create only one SubConn
|
||||||
|
// for the address because an AddressMap is used to store SubConns.
|
||||||
|
// Not de-duplicating would result in attempting to connect to the same
|
||||||
|
// SubConn multiple times in the same pass. We don't want this.
|
||||||
|
newAddrs = deDupAddresses(newAddrs)
|
||||||
|
|
||||||
|
// Since we have a new set of addresses, we are again at first pass.
|
||||||
|
b.firstPass = true
|
||||||
|
|
||||||
|
// If the previous ready SubConn exists in new address list,
|
||||||
|
// keep this connection and don't create new SubConns.
|
||||||
|
prevAddr := b.addressList.currentAddress()
|
||||||
|
prevAddrsCount := b.addressList.size()
|
||||||
|
b.addressList.updateAddrs(newAddrs)
|
||||||
|
if b.state == connectivity.Ready && b.addressList.seekTo(prevAddr) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
b.reconcileSubConnsLocked(newAddrs)
|
||||||
|
// If it's the first resolver update or the balancer was already READY
|
||||||
|
// (but the new address list does not contain the ready SubConn) or
|
||||||
|
// CONNECTING, enter CONNECTING.
|
||||||
|
// We may be in TRANSIENT_FAILURE due to a previous empty address list,
|
||||||
|
// we should still enter CONNECTING because the sticky TF behaviour
|
||||||
|
// mentioned in A62 applies only when the TRANSIENT_FAILURE is reported
|
||||||
|
// due to connectivity failures.
|
||||||
|
if b.state == connectivity.Ready || b.state == connectivity.Connecting || prevAddrsCount == 0 {
|
||||||
|
// Start connection attempt at first address.
|
||||||
|
b.state = connectivity.Connecting
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.Connecting,
|
||||||
|
Picker: &picker{err: balancer.ErrNoSubConnAvailable},
|
||||||
|
})
|
||||||
|
b.requestConnectionLocked()
|
||||||
|
} else if b.state == connectivity.TransientFailure {
|
||||||
|
// If we're in TRANSIENT_FAILURE, we stay in TRANSIENT_FAILURE until
|
||||||
|
// we're READY. See A62.
|
||||||
|
b.requestConnectionLocked()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateSubConnState is unused as a StateListener is always registered when
|
||||||
|
// creating SubConns.
|
||||||
|
func (b *pickfirstBalancer) UpdateSubConnState(subConn balancer.SubConn, state balancer.SubConnState) {
|
||||||
|
b.logger.Errorf("UpdateSubConnState(%v, %+v) called unexpectedly", subConn, state)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *pickfirstBalancer) Close() {
|
||||||
|
b.mu.Lock()
|
||||||
|
defer b.mu.Unlock()
|
||||||
|
b.closeSubConnsLocked()
|
||||||
|
b.state = connectivity.Shutdown
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExitIdle moves the balancer out of idle state. It can be called concurrently
|
||||||
|
// by the idlePicker and clientConn so access to variables should be
|
||||||
|
// synchronized.
|
||||||
|
func (b *pickfirstBalancer) ExitIdle() {
|
||||||
|
b.mu.Lock()
|
||||||
|
defer b.mu.Unlock()
|
||||||
|
if b.state == connectivity.Idle && b.addressList.currentAddress() == b.addressList.first() {
|
||||||
|
b.firstPass = true
|
||||||
|
b.requestConnectionLocked()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *pickfirstBalancer) closeSubConnsLocked() {
|
||||||
|
for _, sd := range b.subConns.Values() {
|
||||||
|
sd.(*scData).subConn.Shutdown()
|
||||||
|
}
|
||||||
|
b.subConns = resolver.NewAddressMap()
|
||||||
|
}
|
||||||
|
|
||||||
|
// deDupAddresses ensures that each address appears only once in the slice.
|
||||||
|
func deDupAddresses(addrs []resolver.Address) []resolver.Address {
|
||||||
|
seenAddrs := resolver.NewAddressMap()
|
||||||
|
retAddrs := []resolver.Address{}
|
||||||
|
|
||||||
|
for _, addr := range addrs {
|
||||||
|
if _, ok := seenAddrs.Get(addr); ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
retAddrs = append(retAddrs, addr)
|
||||||
|
}
|
||||||
|
return retAddrs
|
||||||
|
}
|
||||||
|
|
||||||
|
// reconcileSubConnsLocked updates the active subchannels based on a new address
|
||||||
|
// list from the resolver. It does this by:
|
||||||
|
// - closing subchannels: any existing subchannels associated with addresses
|
||||||
|
// that are no longer in the updated list are shut down.
|
||||||
|
// - removing subchannels: entries for these closed subchannels are removed
|
||||||
|
// from the subchannel map.
|
||||||
|
//
|
||||||
|
// This ensures that the subchannel map accurately reflects the current set of
|
||||||
|
// addresses received from the name resolver.
|
||||||
|
func (b *pickfirstBalancer) reconcileSubConnsLocked(newAddrs []resolver.Address) {
|
||||||
|
newAddrsMap := resolver.NewAddressMap()
|
||||||
|
for _, addr := range newAddrs {
|
||||||
|
newAddrsMap.Set(addr, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, oldAddr := range b.subConns.Keys() {
|
||||||
|
if _, ok := newAddrsMap.Get(oldAddr); ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
val, _ := b.subConns.Get(oldAddr)
|
||||||
|
val.(*scData).subConn.Shutdown()
|
||||||
|
b.subConns.Delete(oldAddr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// shutdownRemainingLocked shuts down remaining subConns. Called when a subConn
|
||||||
|
// becomes ready, which means that all other subConn must be shutdown.
|
||||||
|
func (b *pickfirstBalancer) shutdownRemainingLocked(selected *scData) {
|
||||||
|
for _, v := range b.subConns.Values() {
|
||||||
|
sd := v.(*scData)
|
||||||
|
if sd.subConn != selected.subConn {
|
||||||
|
sd.subConn.Shutdown()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
b.subConns = resolver.NewAddressMap()
|
||||||
|
b.subConns.Set(selected.addr, selected)
|
||||||
|
}
|
||||||
|
|
||||||
|
// requestConnectionLocked starts connecting on the subchannel corresponding to
|
||||||
|
// the current address. If no subchannel exists, one is created. If the current
|
||||||
|
// subchannel is in TransientFailure, a connection to the next address is
|
||||||
|
// attempted until a subchannel is found.
|
||||||
|
func (b *pickfirstBalancer) requestConnectionLocked() {
|
||||||
|
if !b.addressList.isValid() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var lastErr error
|
||||||
|
for valid := true; valid; valid = b.addressList.increment() {
|
||||||
|
curAddr := b.addressList.currentAddress()
|
||||||
|
sd, ok := b.subConns.Get(curAddr)
|
||||||
|
if !ok {
|
||||||
|
var err error
|
||||||
|
// We want to assign the new scData to sd from the outer scope,
|
||||||
|
// hence we can't use := below.
|
||||||
|
sd, err = b.newSCData(curAddr)
|
||||||
|
if err != nil {
|
||||||
|
// This should never happen, unless the clientConn is being shut
|
||||||
|
// down.
|
||||||
|
if b.logger.V(2) {
|
||||||
|
b.logger.Infof("Failed to create a subConn for address %v: %v", curAddr.String(), err)
|
||||||
|
}
|
||||||
|
// Do nothing, the LB policy will be closed soon.
|
||||||
|
return
|
||||||
|
}
|
||||||
|
b.subConns.Set(curAddr, sd)
|
||||||
|
}
|
||||||
|
|
||||||
|
scd := sd.(*scData)
|
||||||
|
switch scd.state {
|
||||||
|
case connectivity.Idle:
|
||||||
|
scd.subConn.Connect()
|
||||||
|
case connectivity.TransientFailure:
|
||||||
|
// Try the next address.
|
||||||
|
lastErr = scd.lastErr
|
||||||
|
continue
|
||||||
|
case connectivity.Ready:
|
||||||
|
// Should never happen.
|
||||||
|
b.logger.Errorf("Requesting a connection even though we have a READY SubConn")
|
||||||
|
case connectivity.Shutdown:
|
||||||
|
// Should never happen.
|
||||||
|
b.logger.Errorf("SubConn with state SHUTDOWN present in SubConns map")
|
||||||
|
case connectivity.Connecting:
|
||||||
|
// Wait for the SubConn to report success or failure.
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// All the remaining addresses in the list are in TRANSIENT_FAILURE, end the
|
||||||
|
// first pass.
|
||||||
|
b.endFirstPassLocked(lastErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *pickfirstBalancer) updateSubConnState(sd *scData, newState balancer.SubConnState) {
|
||||||
|
b.mu.Lock()
|
||||||
|
defer b.mu.Unlock()
|
||||||
|
oldState := sd.state
|
||||||
|
sd.state = newState.ConnectivityState
|
||||||
|
// Previously relevant SubConns can still callback with state updates.
|
||||||
|
// To prevent pickers from returning these obsolete SubConns, this logic
|
||||||
|
// is included to check if the current list of active SubConns includes this
|
||||||
|
// SubConn.
|
||||||
|
if activeSD, found := b.subConns.Get(sd.addr); !found || activeSD != sd {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if newState.ConnectivityState == connectivity.Shutdown {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if newState.ConnectivityState == connectivity.Ready {
|
||||||
|
b.shutdownRemainingLocked(sd)
|
||||||
|
if !b.addressList.seekTo(sd.addr) {
|
||||||
|
// This should not fail as we should have only one SubConn after
|
||||||
|
// entering READY. The SubConn should be present in the addressList.
|
||||||
|
b.logger.Errorf("Address %q not found address list in %v", sd.addr, b.addressList.addresses)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
b.state = connectivity.Ready
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.Ready,
|
||||||
|
Picker: &picker{result: balancer.PickResult{SubConn: sd.subConn}},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the LB policy is READY, and it receives a subchannel state change,
|
||||||
|
// it means that the READY subchannel has failed.
|
||||||
|
// A SubConn can also transition from CONNECTING directly to IDLE when
|
||||||
|
// a transport is successfully created, but the connection fails
|
||||||
|
// before the SubConn can send the notification for READY. We treat
|
||||||
|
// this as a successful connection and transition to IDLE.
|
||||||
|
if (b.state == connectivity.Ready && newState.ConnectivityState != connectivity.Ready) || (oldState == connectivity.Connecting && newState.ConnectivityState == connectivity.Idle) {
|
||||||
|
// Once a transport fails, the balancer enters IDLE and starts from
|
||||||
|
// the first address when the picker is used.
|
||||||
|
b.shutdownRemainingLocked(sd)
|
||||||
|
b.state = connectivity.Idle
|
||||||
|
b.addressList.reset()
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.Idle,
|
||||||
|
Picker: &idlePicker{exitIdle: sync.OnceFunc(b.ExitIdle)},
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.firstPass {
|
||||||
|
switch newState.ConnectivityState {
|
||||||
|
case connectivity.Connecting:
|
||||||
|
// The balancer can be in either IDLE, CONNECTING or
|
||||||
|
// TRANSIENT_FAILURE. If it's in TRANSIENT_FAILURE, stay in
|
||||||
|
// TRANSIENT_FAILURE until it's READY. See A62.
|
||||||
|
// If the balancer is already in CONNECTING, no update is needed.
|
||||||
|
if b.state == connectivity.Idle {
|
||||||
|
b.state = connectivity.Connecting
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.Connecting,
|
||||||
|
Picker: &picker{err: balancer.ErrNoSubConnAvailable},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
case connectivity.TransientFailure:
|
||||||
|
sd.lastErr = newState.ConnectionError
|
||||||
|
// Since we're re-using common SubConns while handling resolver
|
||||||
|
// updates, we could receive an out of turn TRANSIENT_FAILURE from
|
||||||
|
// a pass over the previous address list. We ignore such updates.
|
||||||
|
|
||||||
|
if curAddr := b.addressList.currentAddress(); !equalAddressIgnoringBalAttributes(&curAddr, &sd.addr) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if b.addressList.increment() {
|
||||||
|
b.requestConnectionLocked()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// End of the first pass.
|
||||||
|
b.endFirstPassLocked(newState.ConnectionError)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// We have finished the first pass, keep re-connecting failing SubConns.
|
||||||
|
switch newState.ConnectivityState {
|
||||||
|
case connectivity.TransientFailure:
|
||||||
|
b.numTF = (b.numTF + 1) % b.subConns.Len()
|
||||||
|
sd.lastErr = newState.ConnectionError
|
||||||
|
if b.numTF%b.subConns.Len() == 0 {
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.TransientFailure,
|
||||||
|
Picker: &picker{err: newState.ConnectionError},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// We don't need to request re-resolution since the SubConn already
|
||||||
|
// does that before reporting TRANSIENT_FAILURE.
|
||||||
|
// TODO: #7534 - Move re-resolution requests from SubConn into
|
||||||
|
// pick_first.
|
||||||
|
case connectivity.Idle:
|
||||||
|
sd.subConn.Connect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *pickfirstBalancer) endFirstPassLocked(lastErr error) {
|
||||||
|
b.firstPass = false
|
||||||
|
b.numTF = 0
|
||||||
|
b.state = connectivity.TransientFailure
|
||||||
|
|
||||||
|
b.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: connectivity.TransientFailure,
|
||||||
|
Picker: &picker{err: lastErr},
|
||||||
|
})
|
||||||
|
// Start re-connecting all the SubConns that are already in IDLE.
|
||||||
|
for _, v := range b.subConns.Values() {
|
||||||
|
sd := v.(*scData)
|
||||||
|
if sd.state == connectivity.Idle {
|
||||||
|
sd.subConn.Connect()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type picker struct {
|
||||||
|
result balancer.PickResult
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *picker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
|
||||||
|
return p.result, p.err
|
||||||
|
}
|
||||||
|
|
||||||
|
// idlePicker is used when the SubConn is IDLE and kicks the SubConn into
|
||||||
|
// CONNECTING when Pick is called.
|
||||||
|
type idlePicker struct {
|
||||||
|
exitIdle func()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (i *idlePicker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
|
||||||
|
i.exitIdle()
|
||||||
|
return balancer.PickResult{}, balancer.ErrNoSubConnAvailable
|
||||||
|
}
|
||||||
|
|
||||||
|
// addressList manages sequentially iterating over addresses present in a list
|
||||||
|
// of endpoints. It provides a 1 dimensional view of the addresses present in
|
||||||
|
// the endpoints.
|
||||||
|
// This type is not safe for concurrent access.
|
||||||
|
type addressList struct {
|
||||||
|
addresses []resolver.Address
|
||||||
|
idx int
|
||||||
|
}
|
||||||
|
|
||||||
|
func (al *addressList) isValid() bool {
|
||||||
|
return al.idx < len(al.addresses)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (al *addressList) size() int {
|
||||||
|
return len(al.addresses)
|
||||||
|
}
|
||||||
|
|
||||||
|
// increment moves to the next index in the address list.
|
||||||
|
// This method returns false if it went off the list, true otherwise.
|
||||||
|
func (al *addressList) increment() bool {
|
||||||
|
if !al.isValid() {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
al.idx++
|
||||||
|
return al.idx < len(al.addresses)
|
||||||
|
}
|
||||||
|
|
||||||
|
// currentAddress returns the current address pointed to in the addressList.
|
||||||
|
// If the list is in an invalid state, it returns an empty address instead.
|
||||||
|
func (al *addressList) currentAddress() resolver.Address {
|
||||||
|
if !al.isValid() {
|
||||||
|
return resolver.Address{}
|
||||||
|
}
|
||||||
|
return al.addresses[al.idx]
|
||||||
|
}
|
||||||
|
|
||||||
|
// first returns the first address in the list. If the list is empty, it returns
|
||||||
|
// an empty address instead.
|
||||||
|
func (al *addressList) first() resolver.Address {
|
||||||
|
if len(al.addresses) == 0 {
|
||||||
|
return resolver.Address{}
|
||||||
|
}
|
||||||
|
return al.addresses[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (al *addressList) reset() {
|
||||||
|
al.idx = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (al *addressList) updateAddrs(addrs []resolver.Address) {
|
||||||
|
al.addresses = addrs
|
||||||
|
al.reset()
|
||||||
|
}
|
||||||
|
|
||||||
|
// seekTo returns false if the needle was not found and the current index was
|
||||||
|
// left unchanged.
|
||||||
|
func (al *addressList) seekTo(needle resolver.Address) bool {
|
||||||
|
for ai, addr := range al.addresses {
|
||||||
|
if !equalAddressIgnoringBalAttributes(&addr, &needle) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
al.idx = ai
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// equalAddressIgnoringBalAttributes returns true is a and b are considered
|
||||||
|
// equal. This is different from the Equal method on the resolver.Address type
|
||||||
|
// which considers all fields to determine equality. Here, we only consider
|
||||||
|
// fields that are meaningful to the SubConn.
|
||||||
|
func equalAddressIgnoringBalAttributes(a, b *resolver.Address) bool {
|
||||||
|
return a.Addr == b.Addr && a.ServerName == b.ServerName &&
|
||||||
|
a.Attributes.Equal(b.Attributes) &&
|
||||||
|
a.Metadata == b.Metadata
|
||||||
|
}
|
46
vendor/google.golang.org/grpc/balancer_wrapper.go
generated
vendored
46
vendor/google.golang.org/grpc/balancer_wrapper.go
generated
vendored
@ -24,12 +24,14 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/balancer"
|
||||||
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
"google.golang.org/grpc/internal"
|
"google.golang.org/grpc/internal"
|
||||||
"google.golang.org/grpc/internal/balancer/gracefulswitch"
|
"google.golang.org/grpc/internal/balancer/gracefulswitch"
|
||||||
"google.golang.org/grpc/internal/channelz"
|
"google.golang.org/grpc/internal/channelz"
|
||||||
"google.golang.org/grpc/internal/grpcsync"
|
"google.golang.org/grpc/internal/grpcsync"
|
||||||
"google.golang.org/grpc/resolver"
|
"google.golang.org/grpc/resolver"
|
||||||
|
"google.golang.org/grpc/status"
|
||||||
)
|
)
|
||||||
|
|
||||||
var setConnectedAddress = internal.SetConnectedAddress.(func(*balancer.SubConnState, resolver.Address))
|
var setConnectedAddress = internal.SetConnectedAddress.(func(*balancer.SubConnState, resolver.Address))
|
||||||
@ -256,7 +258,7 @@ type acBalancerWrapper struct {
|
|||||||
ccb *ccBalancerWrapper // read-only
|
ccb *ccBalancerWrapper // read-only
|
||||||
stateListener func(balancer.SubConnState)
|
stateListener func(balancer.SubConnState)
|
||||||
|
|
||||||
mu sync.Mutex
|
producersMu sync.Mutex
|
||||||
producers map[balancer.ProducerBuilder]*refCountedProducer
|
producers map[balancer.ProducerBuilder]*refCountedProducer
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -267,6 +269,9 @@ func (acbw *acBalancerWrapper) updateState(s connectivity.State, curAddr resolve
|
|||||||
if ctx.Err() != nil || acbw.ccb.balancer == nil {
|
if ctx.Err() != nil || acbw.ccb.balancer == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
// Invalidate all producers on any state change.
|
||||||
|
acbw.closeProducers()
|
||||||
|
|
||||||
// Even though it is optional for balancers, gracefulswitch ensures
|
// Even though it is optional for balancers, gracefulswitch ensures
|
||||||
// opts.StateListener is set, so this cannot ever be nil.
|
// opts.StateListener is set, so this cannot ever be nil.
|
||||||
// TODO: delete this comment when UpdateSubConnState is removed.
|
// TODO: delete this comment when UpdateSubConnState is removed.
|
||||||
@ -275,16 +280,6 @@ func (acbw *acBalancerWrapper) updateState(s connectivity.State, curAddr resolve
|
|||||||
setConnectedAddress(&scs, curAddr)
|
setConnectedAddress(&scs, curAddr)
|
||||||
}
|
}
|
||||||
acbw.stateListener(scs)
|
acbw.stateListener(scs)
|
||||||
acbw.ac.mu.Lock()
|
|
||||||
defer acbw.ac.mu.Unlock()
|
|
||||||
if s == connectivity.Ready {
|
|
||||||
// When changing states to READY, reset stateReadyChan. Wait until
|
|
||||||
// after we notify the LB policy's listener(s) in order to prevent
|
|
||||||
// ac.getTransport() from unblocking before the LB policy starts
|
|
||||||
// tracking the subchannel as READY.
|
|
||||||
close(acbw.ac.stateReadyChan)
|
|
||||||
acbw.ac.stateReadyChan = make(chan struct{})
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +296,7 @@ func (acbw *acBalancerWrapper) Connect() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (acbw *acBalancerWrapper) Shutdown() {
|
func (acbw *acBalancerWrapper) Shutdown() {
|
||||||
|
acbw.closeProducers()
|
||||||
acbw.ccb.cc.removeAddrConn(acbw.ac, errConnDrain)
|
acbw.ccb.cc.removeAddrConn(acbw.ac, errConnDrain)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,9 +304,10 @@ func (acbw *acBalancerWrapper) Shutdown() {
|
|||||||
// ready, blocks until it is or ctx expires. Returns an error when the context
|
// ready, blocks until it is or ctx expires. Returns an error when the context
|
||||||
// expires or the addrConn is shut down.
|
// expires or the addrConn is shut down.
|
||||||
func (acbw *acBalancerWrapper) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) {
|
func (acbw *acBalancerWrapper) NewStream(ctx context.Context, desc *StreamDesc, method string, opts ...CallOption) (ClientStream, error) {
|
||||||
transport, err := acbw.ac.getTransport(ctx)
|
transport := acbw.ac.getReadyTransport()
|
||||||
if err != nil {
|
if transport == nil {
|
||||||
return nil, err
|
return nil, status.Errorf(codes.Unavailable, "SubConn state is not Ready")
|
||||||
|
|
||||||
}
|
}
|
||||||
return newNonRetryClientStream(ctx, desc, method, transport, acbw.ac, opts...)
|
return newNonRetryClientStream(ctx, desc, method, transport, acbw.ac, opts...)
|
||||||
}
|
}
|
||||||
@ -335,8 +332,8 @@ type refCountedProducer struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (acbw *acBalancerWrapper) GetOrBuildProducer(pb balancer.ProducerBuilder) (balancer.Producer, func()) {
|
func (acbw *acBalancerWrapper) GetOrBuildProducer(pb balancer.ProducerBuilder) (balancer.Producer, func()) {
|
||||||
acbw.mu.Lock()
|
acbw.producersMu.Lock()
|
||||||
defer acbw.mu.Unlock()
|
defer acbw.producersMu.Unlock()
|
||||||
|
|
||||||
// Look up existing producer from this builder.
|
// Look up existing producer from this builder.
|
||||||
pData := acbw.producers[pb]
|
pData := acbw.producers[pb]
|
||||||
@ -353,13 +350,26 @@ func (acbw *acBalancerWrapper) GetOrBuildProducer(pb balancer.ProducerBuilder) (
|
|||||||
// and delete the refCountedProducer from the map if the total reference
|
// and delete the refCountedProducer from the map if the total reference
|
||||||
// count goes to zero.
|
// count goes to zero.
|
||||||
unref := func() {
|
unref := func() {
|
||||||
acbw.mu.Lock()
|
acbw.producersMu.Lock()
|
||||||
|
// If closeProducers has already closed this producer instance, refs is
|
||||||
|
// set to 0, so the check after decrementing will never pass, and the
|
||||||
|
// producer will not be double-closed.
|
||||||
pData.refs--
|
pData.refs--
|
||||||
if pData.refs == 0 {
|
if pData.refs == 0 {
|
||||||
defer pData.close() // Run outside the acbw mutex
|
defer pData.close() // Run outside the acbw mutex
|
||||||
delete(acbw.producers, pb)
|
delete(acbw.producers, pb)
|
||||||
}
|
}
|
||||||
acbw.mu.Unlock()
|
acbw.producersMu.Unlock()
|
||||||
}
|
}
|
||||||
return pData.producer, grpcsync.OnceFunc(unref)
|
return pData.producer, grpcsync.OnceFunc(unref)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (acbw *acBalancerWrapper) closeProducers() {
|
||||||
|
acbw.producersMu.Lock()
|
||||||
|
defer acbw.producersMu.Unlock()
|
||||||
|
for pb, pData := range acbw.producers {
|
||||||
|
pData.refs = 0
|
||||||
|
pData.close()
|
||||||
|
delete(acbw.producers, pb)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
36
vendor/google.golang.org/grpc/clientconn.go
generated
vendored
36
vendor/google.golang.org/grpc/clientconn.go
generated
vendored
@ -832,7 +832,6 @@ func (cc *ClientConn) newAddrConnLocked(addrs []resolver.Address, opts balancer.
|
|||||||
dopts: cc.dopts,
|
dopts: cc.dopts,
|
||||||
channelz: channelz.RegisterSubChannel(cc.channelz, ""),
|
channelz: channelz.RegisterSubChannel(cc.channelz, ""),
|
||||||
resetBackoff: make(chan struct{}),
|
resetBackoff: make(chan struct{}),
|
||||||
stateReadyChan: make(chan struct{}),
|
|
||||||
}
|
}
|
||||||
ac.ctx, ac.cancel = context.WithCancel(cc.ctx)
|
ac.ctx, ac.cancel = context.WithCancel(cc.ctx)
|
||||||
// Start with our address set to the first address; this may be updated if
|
// Start with our address set to the first address; this may be updated if
|
||||||
@ -1141,10 +1140,15 @@ func (cc *ClientConn) Close() error {
|
|||||||
|
|
||||||
<-cc.resolverWrapper.serializer.Done()
|
<-cc.resolverWrapper.serializer.Done()
|
||||||
<-cc.balancerWrapper.serializer.Done()
|
<-cc.balancerWrapper.serializer.Done()
|
||||||
|
var wg sync.WaitGroup
|
||||||
for ac := range conns {
|
for ac := range conns {
|
||||||
|
wg.Add(1)
|
||||||
|
go func(ac *addrConn) {
|
||||||
|
defer wg.Done()
|
||||||
ac.tearDown(ErrClientConnClosing)
|
ac.tearDown(ErrClientConnClosing)
|
||||||
|
}(ac)
|
||||||
}
|
}
|
||||||
|
wg.Wait()
|
||||||
cc.addTraceEvent("deleted")
|
cc.addTraceEvent("deleted")
|
||||||
// TraceEvent needs to be called before RemoveEntry, as TraceEvent may add
|
// TraceEvent needs to be called before RemoveEntry, as TraceEvent may add
|
||||||
// trace reference to the entity being deleted, and thus prevent it from being
|
// trace reference to the entity being deleted, and thus prevent it from being
|
||||||
@ -1180,7 +1184,6 @@ type addrConn struct {
|
|||||||
|
|
||||||
// Use updateConnectivityState for updating addrConn's connectivity state.
|
// Use updateConnectivityState for updating addrConn's connectivity state.
|
||||||
state connectivity.State
|
state connectivity.State
|
||||||
stateReadyChan chan struct{} // closed and recreated on every READY state change.
|
|
||||||
|
|
||||||
backoffIdx int // Needs to be stateful for resetConnectBackoff.
|
backoffIdx int // Needs to be stateful for resetConnectBackoff.
|
||||||
resetBackoff chan struct{}
|
resetBackoff chan struct{}
|
||||||
@ -1251,6 +1254,8 @@ func (ac *addrConn) resetTransportAndUnlock() {
|
|||||||
ac.mu.Unlock()
|
ac.mu.Unlock()
|
||||||
|
|
||||||
if err := ac.tryAllAddrs(acCtx, addrs, connectDeadline); err != nil {
|
if err := ac.tryAllAddrs(acCtx, addrs, connectDeadline); err != nil {
|
||||||
|
// TODO: #7534 - Move re-resolution requests into the pick_first LB policy
|
||||||
|
// to ensure one resolution request per pass instead of per subconn failure.
|
||||||
ac.cc.resolveNow(resolver.ResolveNowOptions{})
|
ac.cc.resolveNow(resolver.ResolveNowOptions{})
|
||||||
ac.mu.Lock()
|
ac.mu.Lock()
|
||||||
if acCtx.Err() != nil {
|
if acCtx.Err() != nil {
|
||||||
@ -1292,7 +1297,7 @@ func (ac *addrConn) resetTransportAndUnlock() {
|
|||||||
ac.mu.Unlock()
|
ac.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
// tryAllAddrs tries to creates a connection to the addresses, and stop when at
|
// tryAllAddrs tries to create a connection to the addresses, and stop when at
|
||||||
// the first successful one. It returns an error if no address was successfully
|
// the first successful one. It returns an error if no address was successfully
|
||||||
// connected, or updates ac appropriately with the new transport.
|
// connected, or updates ac appropriately with the new transport.
|
||||||
func (ac *addrConn) tryAllAddrs(ctx context.Context, addrs []resolver.Address, connectDeadline time.Time) error {
|
func (ac *addrConn) tryAllAddrs(ctx context.Context, addrs []resolver.Address, connectDeadline time.Time) error {
|
||||||
@ -1504,29 +1509,6 @@ func (ac *addrConn) getReadyTransport() transport.ClientTransport {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// getTransport waits until the addrconn is ready and returns the transport.
|
|
||||||
// If the context expires first, returns an appropriate status. If the
|
|
||||||
// addrConn is stopped first, returns an Unavailable status error.
|
|
||||||
func (ac *addrConn) getTransport(ctx context.Context) (transport.ClientTransport, error) {
|
|
||||||
for ctx.Err() == nil {
|
|
||||||
ac.mu.Lock()
|
|
||||||
t, state, sc := ac.transport, ac.state, ac.stateReadyChan
|
|
||||||
ac.mu.Unlock()
|
|
||||||
if state == connectivity.Ready {
|
|
||||||
return t, nil
|
|
||||||
}
|
|
||||||
if state == connectivity.Shutdown {
|
|
||||||
return nil, status.Errorf(codes.Unavailable, "SubConn shutting down")
|
|
||||||
}
|
|
||||||
|
|
||||||
select {
|
|
||||||
case <-ctx.Done():
|
|
||||||
case <-sc:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, status.FromContextError(ctx.Err()).Err()
|
|
||||||
}
|
|
||||||
|
|
||||||
// tearDown starts to tear down the addrConn.
|
// tearDown starts to tear down the addrConn.
|
||||||
//
|
//
|
||||||
// Note that tearDown doesn't remove ac from ac.cc.conns, so the addrConn struct
|
// Note that tearDown doesn't remove ac from ac.cc.conns, so the addrConn struct
|
||||||
|
29
vendor/google.golang.org/grpc/credentials/tls.go
generated
vendored
29
vendor/google.golang.org/grpc/credentials/tls.go
generated
vendored
@ -200,25 +200,40 @@ var tls12ForbiddenCipherSuites = map[uint16]struct{}{
|
|||||||
|
|
||||||
// NewTLS uses c to construct a TransportCredentials based on TLS.
|
// NewTLS uses c to construct a TransportCredentials based on TLS.
|
||||||
func NewTLS(c *tls.Config) TransportCredentials {
|
func NewTLS(c *tls.Config) TransportCredentials {
|
||||||
tc := &tlsCreds{credinternal.CloneTLSConfig(c)}
|
config := applyDefaults(c)
|
||||||
tc.config.NextProtos = credinternal.AppendH2ToNextProtos(tc.config.NextProtos)
|
if config.GetConfigForClient != nil {
|
||||||
|
oldFn := config.GetConfigForClient
|
||||||
|
config.GetConfigForClient = func(hello *tls.ClientHelloInfo) (*tls.Config, error) {
|
||||||
|
cfgForClient, err := oldFn(hello)
|
||||||
|
if err != nil || cfgForClient == nil {
|
||||||
|
return cfgForClient, err
|
||||||
|
}
|
||||||
|
return applyDefaults(cfgForClient), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return &tlsCreds{config: config}
|
||||||
|
}
|
||||||
|
|
||||||
|
func applyDefaults(c *tls.Config) *tls.Config {
|
||||||
|
config := credinternal.CloneTLSConfig(c)
|
||||||
|
config.NextProtos = credinternal.AppendH2ToNextProtos(config.NextProtos)
|
||||||
// If the user did not configure a MinVersion and did not configure a
|
// If the user did not configure a MinVersion and did not configure a
|
||||||
// MaxVersion < 1.2, use MinVersion=1.2, which is required by
|
// MaxVersion < 1.2, use MinVersion=1.2, which is required by
|
||||||
// https://datatracker.ietf.org/doc/html/rfc7540#section-9.2
|
// https://datatracker.ietf.org/doc/html/rfc7540#section-9.2
|
||||||
if tc.config.MinVersion == 0 && (tc.config.MaxVersion == 0 || tc.config.MaxVersion >= tls.VersionTLS12) {
|
if config.MinVersion == 0 && (config.MaxVersion == 0 || config.MaxVersion >= tls.VersionTLS12) {
|
||||||
tc.config.MinVersion = tls.VersionTLS12
|
config.MinVersion = tls.VersionTLS12
|
||||||
}
|
}
|
||||||
// If the user did not configure CipherSuites, use all "secure" cipher
|
// If the user did not configure CipherSuites, use all "secure" cipher
|
||||||
// suites reported by the TLS package, but remove some explicitly forbidden
|
// suites reported by the TLS package, but remove some explicitly forbidden
|
||||||
// by https://datatracker.ietf.org/doc/html/rfc7540#appendix-A
|
// by https://datatracker.ietf.org/doc/html/rfc7540#appendix-A
|
||||||
if tc.config.CipherSuites == nil {
|
if config.CipherSuites == nil {
|
||||||
for _, cs := range tls.CipherSuites() {
|
for _, cs := range tls.CipherSuites() {
|
||||||
if _, ok := tls12ForbiddenCipherSuites[cs.ID]; !ok {
|
if _, ok := tls12ForbiddenCipherSuites[cs.ID]; !ok {
|
||||||
tc.config.CipherSuites = append(tc.config.CipherSuites, cs.ID)
|
config.CipherSuites = append(config.CipherSuites, cs.ID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return tc
|
return config
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewClientTLSFromCert constructs TLS credentials from the provided root
|
// NewClientTLSFromCert constructs TLS credentials from the provided root
|
||||||
|
2
vendor/google.golang.org/grpc/dialoptions.go
generated
vendored
2
vendor/google.golang.org/grpc/dialoptions.go
generated
vendored
@ -436,7 +436,7 @@ func WithTimeout(d time.Duration) DialOption {
|
|||||||
// option to true from the Control field. For a concrete example of how to do
|
// option to true from the Control field. For a concrete example of how to do
|
||||||
// this, see internal.NetDialerWithTCPKeepalive().
|
// this, see internal.NetDialerWithTCPKeepalive().
|
||||||
//
|
//
|
||||||
// For more information, please see [issue 23459] in the Go github repo.
|
// For more information, please see [issue 23459] in the Go GitHub repo.
|
||||||
//
|
//
|
||||||
// [issue 23459]: https://github.com/golang/go/issues/23459
|
// [issue 23459]: https://github.com/golang/go/issues/23459
|
||||||
func WithContextDialer(f func(context.Context, string) (net.Conn, error)) DialOption {
|
func WithContextDialer(f func(context.Context, string) (net.Conn, error)) DialOption {
|
||||||
|
2
vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/config.go
generated
vendored
2
vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/config.go
generated
vendored
@ -33,6 +33,8 @@ type lbConfig struct {
|
|||||||
childConfig serviceconfig.LoadBalancingConfig
|
childConfig serviceconfig.LoadBalancingConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChildName returns the name of the child balancer of the gracefulswitch
|
||||||
|
// Balancer.
|
||||||
func ChildName(l serviceconfig.LoadBalancingConfig) string {
|
func ChildName(l serviceconfig.LoadBalancingConfig) string {
|
||||||
return l.(*lbConfig).childBuilder.Name()
|
return l.(*lbConfig).childBuilder.Name()
|
||||||
}
|
}
|
||||||
|
15
vendor/google.golang.org/grpc/internal/channelz/channel.go
generated
vendored
15
vendor/google.golang.org/grpc/internal/channelz/channel.go
generated
vendored
@ -43,6 +43,8 @@ type Channel struct {
|
|||||||
// Non-zero traceRefCount means the trace of this channel cannot be deleted.
|
// Non-zero traceRefCount means the trace of this channel cannot be deleted.
|
||||||
traceRefCount int32
|
traceRefCount int32
|
||||||
|
|
||||||
|
// ChannelMetrics holds connectivity state, target and call metrics for the
|
||||||
|
// channel within channelz.
|
||||||
ChannelMetrics ChannelMetrics
|
ChannelMetrics ChannelMetrics
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,6 +52,8 @@ type Channel struct {
|
|||||||
// nesting.
|
// nesting.
|
||||||
func (c *Channel) channelzIdentifier() {}
|
func (c *Channel) channelzIdentifier() {}
|
||||||
|
|
||||||
|
// String returns a string representation of the Channel, including its parent
|
||||||
|
// entity and ID.
|
||||||
func (c *Channel) String() string {
|
func (c *Channel) String() string {
|
||||||
if c.Parent == nil {
|
if c.Parent == nil {
|
||||||
return fmt.Sprintf("Channel #%d", c.ID)
|
return fmt.Sprintf("Channel #%d", c.ID)
|
||||||
@ -61,24 +65,31 @@ func (c *Channel) id() int64 {
|
|||||||
return c.ID
|
return c.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SubChans returns a copy of the map of sub-channels associated with the
|
||||||
|
// Channel.
|
||||||
func (c *Channel) SubChans() map[int64]string {
|
func (c *Channel) SubChans() map[int64]string {
|
||||||
db.mu.RLock()
|
db.mu.RLock()
|
||||||
defer db.mu.RUnlock()
|
defer db.mu.RUnlock()
|
||||||
return copyMap(c.subChans)
|
return copyMap(c.subChans)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NestedChans returns a copy of the map of nested channels associated with the
|
||||||
|
// Channel.
|
||||||
func (c *Channel) NestedChans() map[int64]string {
|
func (c *Channel) NestedChans() map[int64]string {
|
||||||
db.mu.RLock()
|
db.mu.RLock()
|
||||||
defer db.mu.RUnlock()
|
defer db.mu.RUnlock()
|
||||||
return copyMap(c.nestedChans)
|
return copyMap(c.nestedChans)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Trace returns a copy of the Channel's trace data.
|
||||||
func (c *Channel) Trace() *ChannelTrace {
|
func (c *Channel) Trace() *ChannelTrace {
|
||||||
db.mu.RLock()
|
db.mu.RLock()
|
||||||
defer db.mu.RUnlock()
|
defer db.mu.RUnlock()
|
||||||
return c.trace.copy()
|
return c.trace.copy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChannelMetrics holds connectivity state, target and call metrics for the
|
||||||
|
// channel within channelz.
|
||||||
type ChannelMetrics struct {
|
type ChannelMetrics struct {
|
||||||
// The current connectivity state of the channel.
|
// The current connectivity state of the channel.
|
||||||
State atomic.Pointer[connectivity.State]
|
State atomic.Pointer[connectivity.State]
|
||||||
@ -136,12 +147,16 @@ func strFromPointer(s *string) string {
|
|||||||
return *s
|
return *s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// String returns a string representation of the ChannelMetrics, including its
|
||||||
|
// state, target, and call metrics.
|
||||||
func (c *ChannelMetrics) String() string {
|
func (c *ChannelMetrics) String() string {
|
||||||
return fmt.Sprintf("State: %v, Target: %s, CallsStarted: %v, CallsSucceeded: %v, CallsFailed: %v, LastCallStartedTimestamp: %v",
|
return fmt.Sprintf("State: %v, Target: %s, CallsStarted: %v, CallsSucceeded: %v, CallsFailed: %v, LastCallStartedTimestamp: %v",
|
||||||
c.State.Load(), strFromPointer(c.Target.Load()), c.CallsStarted.Load(), c.CallsSucceeded.Load(), c.CallsFailed.Load(), c.LastCallStartedTimestamp.Load(),
|
c.State.Load(), strFromPointer(c.Target.Load()), c.CallsStarted.Load(), c.CallsSucceeded.Load(), c.CallsFailed.Load(), c.LastCallStartedTimestamp.Load(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewChannelMetricForTesting creates a new instance of ChannelMetrics with
|
||||||
|
// specified initial values for testing purposes.
|
||||||
func NewChannelMetricForTesting(state connectivity.State, target string, started, succeeded, failed, timestamp int64) *ChannelMetrics {
|
func NewChannelMetricForTesting(state connectivity.State, target string, started, succeeded, failed, timestamp int64) *ChannelMetrics {
|
||||||
c := &ChannelMetrics{}
|
c := &ChannelMetrics{}
|
||||||
c.State.Store(&state)
|
c.State.Store(&state)
|
||||||
|
2
vendor/google.golang.org/grpc/internal/channelz/server.go
generated
vendored
2
vendor/google.golang.org/grpc/internal/channelz/server.go
generated
vendored
@ -59,6 +59,8 @@ func NewServerMetricsForTesting(started, succeeded, failed, timestamp int64) *Se
|
|||||||
return sm
|
return sm
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CopyFrom copies the metrics data from the provided ServerMetrics
|
||||||
|
// instance into the current instance.
|
||||||
func (sm *ServerMetrics) CopyFrom(o *ServerMetrics) {
|
func (sm *ServerMetrics) CopyFrom(o *ServerMetrics) {
|
||||||
sm.CallsStarted.Store(o.CallsStarted.Load())
|
sm.CallsStarted.Store(o.CallsStarted.Load())
|
||||||
sm.CallsSucceeded.Store(o.CallsSucceeded.Load())
|
sm.CallsSucceeded.Store(o.CallsSucceeded.Load())
|
||||||
|
7
vendor/google.golang.org/grpc/internal/channelz/socket.go
generated
vendored
7
vendor/google.golang.org/grpc/internal/channelz/socket.go
generated
vendored
@ -70,13 +70,18 @@ type EphemeralSocketMetrics struct {
|
|||||||
RemoteFlowControlWindow int64
|
RemoteFlowControlWindow int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SocketType represents the type of socket.
|
||||||
type SocketType string
|
type SocketType string
|
||||||
|
|
||||||
|
// SocketType can be one of these.
|
||||||
const (
|
const (
|
||||||
SocketTypeNormal = "NormalSocket"
|
SocketTypeNormal = "NormalSocket"
|
||||||
SocketTypeListen = "ListenSocket"
|
SocketTypeListen = "ListenSocket"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Socket represents a socket within channelz which includes socket
|
||||||
|
// metrics and data related to socket activity and provides methods
|
||||||
|
// for managing and interacting with sockets.
|
||||||
type Socket struct {
|
type Socket struct {
|
||||||
Entity
|
Entity
|
||||||
SocketType SocketType
|
SocketType SocketType
|
||||||
@ -100,6 +105,8 @@ type Socket struct {
|
|||||||
Security credentials.ChannelzSecurityValue
|
Security credentials.ChannelzSecurityValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// String returns a string representation of the Socket, including its parent
|
||||||
|
// entity, socket type, and ID.
|
||||||
func (ls *Socket) String() string {
|
func (ls *Socket) String() string {
|
||||||
return fmt.Sprintf("%s %s #%d", ls.Parent, ls.SocketType, ls.ID)
|
return fmt.Sprintf("%s %s #%d", ls.Parent, ls.SocketType, ls.ID)
|
||||||
}
|
}
|
||||||
|
2
vendor/google.golang.org/grpc/internal/channelz/subchannel.go
generated
vendored
2
vendor/google.golang.org/grpc/internal/channelz/subchannel.go
generated
vendored
@ -47,12 +47,14 @@ func (sc *SubChannel) id() int64 {
|
|||||||
return sc.ID
|
return sc.ID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Sockets returns a copy of the sockets map associated with the SubChannel.
|
||||||
func (sc *SubChannel) Sockets() map[int64]string {
|
func (sc *SubChannel) Sockets() map[int64]string {
|
||||||
db.mu.RLock()
|
db.mu.RLock()
|
||||||
defer db.mu.RUnlock()
|
defer db.mu.RUnlock()
|
||||||
return copyMap(sc.sockets)
|
return copyMap(sc.sockets)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Trace returns a copy of the ChannelTrace associated with the SubChannel.
|
||||||
func (sc *SubChannel) Trace() *ChannelTrace {
|
func (sc *SubChannel) Trace() *ChannelTrace {
|
||||||
db.mu.RLock()
|
db.mu.RLock()
|
||||||
defer db.mu.RUnlock()
|
defer db.mu.RUnlock()
|
||||||
|
9
vendor/google.golang.org/grpc/internal/channelz/trace.go
generated
vendored
9
vendor/google.golang.org/grpc/internal/channelz/trace.go
generated
vendored
@ -79,12 +79,20 @@ type TraceEvent struct {
|
|||||||
Parent *TraceEvent
|
Parent *TraceEvent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ChannelTrace provides tracing information for a channel.
|
||||||
|
// It tracks various events and metadata related to the channel's lifecycle
|
||||||
|
// and operations.
|
||||||
type ChannelTrace struct {
|
type ChannelTrace struct {
|
||||||
cm *channelMap
|
cm *channelMap
|
||||||
clearCalled bool
|
clearCalled bool
|
||||||
|
// The time when the trace was created.
|
||||||
CreationTime time.Time
|
CreationTime time.Time
|
||||||
|
// A counter for the number of events recorded in the
|
||||||
|
// trace.
|
||||||
EventNum int64
|
EventNum int64
|
||||||
mu sync.Mutex
|
mu sync.Mutex
|
||||||
|
// A slice of traceEvent pointers representing the events recorded for
|
||||||
|
// this channel.
|
||||||
Events []*traceEvent
|
Events []*traceEvent
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,6 +183,7 @@ var refChannelTypeToString = map[RefChannelType]string{
|
|||||||
RefNormalSocket: "NormalSocket",
|
RefNormalSocket: "NormalSocket",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// String returns a string representation of the RefChannelType
|
||||||
func (r RefChannelType) String() string {
|
func (r RefChannelType) String() string {
|
||||||
return refChannelTypeToString[r]
|
return refChannelTypeToString[r]
|
||||||
}
|
}
|
||||||
|
5
vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
generated
vendored
5
vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
generated
vendored
@ -50,6 +50,11 @@ var (
|
|||||||
// xDS fallback is turned on. If this is unset or is false, only the first
|
// xDS fallback is turned on. If this is unset or is false, only the first
|
||||||
// xDS server in the list of server configs will be used.
|
// xDS server in the list of server configs will be used.
|
||||||
XDSFallbackSupport = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FALLBACK", false)
|
XDSFallbackSupport = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FALLBACK", false)
|
||||||
|
// NewPickFirstEnabled is set if the new pickfirst leaf policy is to be used
|
||||||
|
// instead of the exiting pickfirst implementation. This can be enabled by
|
||||||
|
// setting the environment variable "GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST"
|
||||||
|
// to "true".
|
||||||
|
NewPickFirstEnabled = boolFromEnv("GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST", false)
|
||||||
)
|
)
|
||||||
|
|
||||||
func boolFromEnv(envVar string, def bool) bool {
|
func boolFromEnv(envVar string, def bool) bool {
|
||||||
|
2
vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go
generated
vendored
2
vendor/google.golang.org/grpc/internal/grpcsync/callback_serializer.go
generated
vendored
@ -53,7 +53,7 @@ func NewCallbackSerializer(ctx context.Context) *CallbackSerializer {
|
|||||||
return cs
|
return cs
|
||||||
}
|
}
|
||||||
|
|
||||||
// TrySchedule tries to schedules the provided callback function f to be
|
// TrySchedule tries to schedule the provided callback function f to be
|
||||||
// executed in the order it was added. This is a best-effort operation. If the
|
// executed in the order it was added. This is a best-effort operation. If the
|
||||||
// context passed to NewCallbackSerializer was canceled before this method is
|
// context passed to NewCallbackSerializer was canceled before this method is
|
||||||
// called, the callback will not be scheduled.
|
// called, the callback will not be scheduled.
|
||||||
|
2
vendor/google.golang.org/grpc/internal/grpcutil/method.go
generated
vendored
2
vendor/google.golang.org/grpc/internal/grpcutil/method.go
generated
vendored
@ -39,7 +39,7 @@ func ParseMethod(methodName string) (service, method string, _ error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// baseContentType is the base content-type for gRPC. This is a valid
|
// baseContentType is the base content-type for gRPC. This is a valid
|
||||||
// content-type on it's own, but can also include a content-subtype such as
|
// content-type on its own, but can also include a content-subtype such as
|
||||||
// "proto" as a suffix after "+" or ";". See
|
// "proto" as a suffix after "+" or ";". See
|
||||||
// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests
|
// https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md#requests
|
||||||
// for more details.
|
// for more details.
|
||||||
|
4
vendor/google.golang.org/grpc/internal/idle/idle.go
generated
vendored
4
vendor/google.golang.org/grpc/internal/idle/idle.go
generated
vendored
@ -182,6 +182,7 @@ func (m *Manager) tryEnterIdleMode() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EnterIdleModeForTesting instructs the channel to enter idle mode.
|
||||||
func (m *Manager) EnterIdleModeForTesting() {
|
func (m *Manager) EnterIdleModeForTesting() {
|
||||||
m.tryEnterIdleMode()
|
m.tryEnterIdleMode()
|
||||||
}
|
}
|
||||||
@ -225,7 +226,7 @@ func (m *Manager) ExitIdleMode() error {
|
|||||||
// came in and OnCallBegin() noticed that the calls count is negative.
|
// came in and OnCallBegin() noticed that the calls count is negative.
|
||||||
// - Channel is in idle mode, and multiple new RPCs come in at the same
|
// - Channel is in idle mode, and multiple new RPCs come in at the same
|
||||||
// time, all of them notice a negative calls count in OnCallBegin and get
|
// time, all of them notice a negative calls count in OnCallBegin and get
|
||||||
// here. The first one to get the lock would got the channel to exit idle.
|
// here. The first one to get the lock would get the channel to exit idle.
|
||||||
// - Channel is not in idle mode, and the user calls Connect which calls
|
// - Channel is not in idle mode, and the user calls Connect which calls
|
||||||
// m.ExitIdleMode.
|
// m.ExitIdleMode.
|
||||||
//
|
//
|
||||||
@ -266,6 +267,7 @@ func (m *Manager) isClosed() bool {
|
|||||||
return atomic.LoadInt32(&m.closed) == 1
|
return atomic.LoadInt32(&m.closed) == 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Close stops the timer associated with the Manager, if it exists.
|
||||||
func (m *Manager) Close() {
|
func (m *Manager) Close() {
|
||||||
atomic.StoreInt32(&m.closed, 1)
|
atomic.StoreInt32(&m.closed, 1)
|
||||||
|
|
||||||
|
8
vendor/google.golang.org/grpc/internal/internal.go
generated
vendored
8
vendor/google.golang.org/grpc/internal/internal.go
generated
vendored
@ -191,6 +191,8 @@ var (
|
|||||||
// ExitIdleModeForTesting gets the ClientConn to exit IDLE mode.
|
// ExitIdleModeForTesting gets the ClientConn to exit IDLE mode.
|
||||||
ExitIdleModeForTesting any // func(*grpc.ClientConn) error
|
ExitIdleModeForTesting any // func(*grpc.ClientConn) error
|
||||||
|
|
||||||
|
// ChannelzTurnOffForTesting disables the Channelz service for testing
|
||||||
|
// purposes.
|
||||||
ChannelzTurnOffForTesting func()
|
ChannelzTurnOffForTesting func()
|
||||||
|
|
||||||
// TriggerXDSResourceNotFoundForTesting causes the provided xDS Client to
|
// TriggerXDSResourceNotFoundForTesting causes the provided xDS Client to
|
||||||
@ -205,10 +207,6 @@ var (
|
|||||||
// default resolver scheme.
|
// default resolver scheme.
|
||||||
UserSetDefaultScheme = false
|
UserSetDefaultScheme = false
|
||||||
|
|
||||||
// ShuffleAddressListForTesting pseudo-randomizes the order of addresses. n
|
|
||||||
// is the number of elements. swap swaps the elements with indexes i and j.
|
|
||||||
ShuffleAddressListForTesting any // func(n int, swap func(i, j int))
|
|
||||||
|
|
||||||
// ConnectedAddress returns the connected address for a SubConnState. The
|
// ConnectedAddress returns the connected address for a SubConnState. The
|
||||||
// address is only valid if the state is READY.
|
// address is only valid if the state is READY.
|
||||||
ConnectedAddress any // func (scs SubConnState) resolver.Address
|
ConnectedAddress any // func (scs SubConnState) resolver.Address
|
||||||
@ -235,7 +233,7 @@ var (
|
|||||||
//
|
//
|
||||||
// The implementation is expected to create a health checking RPC stream by
|
// The implementation is expected to create a health checking RPC stream by
|
||||||
// calling newStream(), watch for the health status of serviceName, and report
|
// calling newStream(), watch for the health status of serviceName, and report
|
||||||
// it's health back by calling setConnectivityState().
|
// its health back by calling setConnectivityState().
|
||||||
//
|
//
|
||||||
// The health checking protocol is defined at:
|
// The health checking protocol is defined at:
|
||||||
// https://github.com/grpc/grpc/blob/master/doc/health-checking.md
|
// https://github.com/grpc/grpc/blob/master/doc/health-checking.md
|
||||||
|
2
vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go
generated
vendored
2
vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go
generated
vendored
@ -177,7 +177,7 @@ type dnsResolver struct {
|
|||||||
// finished. Otherwise, data race will be possible. [Race Example] in
|
// finished. Otherwise, data race will be possible. [Race Example] in
|
||||||
// dns_resolver_test we replace the real lookup functions with mocked ones to
|
// dns_resolver_test we replace the real lookup functions with mocked ones to
|
||||||
// facilitate testing. If Close() doesn't wait for watcher() goroutine
|
// facilitate testing. If Close() doesn't wait for watcher() goroutine
|
||||||
// finishes, race detector sometimes will warns lookup (READ the lookup
|
// finishes, race detector sometimes will warn lookup (READ the lookup
|
||||||
// function pointers) inside watcher() goroutine has data race with
|
// function pointers) inside watcher() goroutine has data race with
|
||||||
// replaceNetFunc (WRITE the lookup function pointers).
|
// replaceNetFunc (WRITE the lookup function pointers).
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
|
10
vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go
generated
vendored
10
vendor/google.golang.org/grpc/internal/stats/metrics_recorder_list.go
generated
vendored
@ -54,6 +54,8 @@ func verifyLabels(desc *estats.MetricDescriptor, labelsRecv ...string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RecordInt64Count records the measurement alongside labels on the int
|
||||||
|
// count associated with the provided handle.
|
||||||
func (l *MetricsRecorderList) RecordInt64Count(handle *estats.Int64CountHandle, incr int64, labels ...string) {
|
func (l *MetricsRecorderList) RecordInt64Count(handle *estats.Int64CountHandle, incr int64, labels ...string) {
|
||||||
verifyLabels(handle.Descriptor(), labels...)
|
verifyLabels(handle.Descriptor(), labels...)
|
||||||
|
|
||||||
@ -62,6 +64,8 @@ func (l *MetricsRecorderList) RecordInt64Count(handle *estats.Int64CountHandle,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RecordFloat64Count records the measurement alongside labels on the float
|
||||||
|
// count associated with the provided handle.
|
||||||
func (l *MetricsRecorderList) RecordFloat64Count(handle *estats.Float64CountHandle, incr float64, labels ...string) {
|
func (l *MetricsRecorderList) RecordFloat64Count(handle *estats.Float64CountHandle, incr float64, labels ...string) {
|
||||||
verifyLabels(handle.Descriptor(), labels...)
|
verifyLabels(handle.Descriptor(), labels...)
|
||||||
|
|
||||||
@ -70,6 +74,8 @@ func (l *MetricsRecorderList) RecordFloat64Count(handle *estats.Float64CountHand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RecordInt64Histo records the measurement alongside labels on the int
|
||||||
|
// histo associated with the provided handle.
|
||||||
func (l *MetricsRecorderList) RecordInt64Histo(handle *estats.Int64HistoHandle, incr int64, labels ...string) {
|
func (l *MetricsRecorderList) RecordInt64Histo(handle *estats.Int64HistoHandle, incr int64, labels ...string) {
|
||||||
verifyLabels(handle.Descriptor(), labels...)
|
verifyLabels(handle.Descriptor(), labels...)
|
||||||
|
|
||||||
@ -78,6 +84,8 @@ func (l *MetricsRecorderList) RecordInt64Histo(handle *estats.Int64HistoHandle,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RecordFloat64Histo records the measurement alongside labels on the float
|
||||||
|
// histo associated with the provided handle.
|
||||||
func (l *MetricsRecorderList) RecordFloat64Histo(handle *estats.Float64HistoHandle, incr float64, labels ...string) {
|
func (l *MetricsRecorderList) RecordFloat64Histo(handle *estats.Float64HistoHandle, incr float64, labels ...string) {
|
||||||
verifyLabels(handle.Descriptor(), labels...)
|
verifyLabels(handle.Descriptor(), labels...)
|
||||||
|
|
||||||
@ -86,6 +94,8 @@ func (l *MetricsRecorderList) RecordFloat64Histo(handle *estats.Float64HistoHand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RecordInt64Gauge records the measurement alongside labels on the int
|
||||||
|
// gauge associated with the provided handle.
|
||||||
func (l *MetricsRecorderList) RecordInt64Gauge(handle *estats.Int64GaugeHandle, incr int64, labels ...string) {
|
func (l *MetricsRecorderList) RecordInt64Gauge(handle *estats.Int64GaugeHandle, incr int64, labels ...string) {
|
||||||
verifyLabels(handle.Descriptor(), labels...)
|
verifyLabels(handle.Descriptor(), labels...)
|
||||||
|
|
||||||
|
35
vendor/google.golang.org/grpc/internal/status/status.go
generated
vendored
35
vendor/google.golang.org/grpc/internal/status/status.go
generated
vendored
@ -149,6 +149,8 @@ func (s *Status) WithDetails(details ...protoadapt.MessageV1) (*Status, error) {
|
|||||||
|
|
||||||
// Details returns a slice of details messages attached to the status.
|
// Details returns a slice of details messages attached to the status.
|
||||||
// If a detail cannot be decoded, the error is returned in place of the detail.
|
// If a detail cannot be decoded, the error is returned in place of the detail.
|
||||||
|
// If the detail can be decoded, the proto message returned is of the same
|
||||||
|
// type that was given to WithDetails().
|
||||||
func (s *Status) Details() []any {
|
func (s *Status) Details() []any {
|
||||||
if s == nil || s.s == nil {
|
if s == nil || s.s == nil {
|
||||||
return nil
|
return nil
|
||||||
@ -160,7 +162,38 @@ func (s *Status) Details() []any {
|
|||||||
details = append(details, err)
|
details = append(details, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
details = append(details, detail)
|
// The call to MessageV1Of is required to unwrap the proto message if
|
||||||
|
// it implemented only the MessageV1 API. The proto message would have
|
||||||
|
// been wrapped in a V2 wrapper in Status.WithDetails. V2 messages are
|
||||||
|
// added to a global registry used by any.UnmarshalNew().
|
||||||
|
// MessageV1Of has the following behaviour:
|
||||||
|
// 1. If the given message is a wrapped MessageV1, it returns the
|
||||||
|
// unwrapped value.
|
||||||
|
// 2. If the given message already implements MessageV1, it returns it
|
||||||
|
// as is.
|
||||||
|
// 3. Else, it wraps the MessageV2 in a MessageV1 wrapper.
|
||||||
|
//
|
||||||
|
// Since the Status.WithDetails() API only accepts MessageV1, calling
|
||||||
|
// MessageV1Of ensures we return the same type that was given to
|
||||||
|
// WithDetails:
|
||||||
|
// * If the give type implemented only MessageV1, the unwrapping from
|
||||||
|
// point 1 above will restore the type.
|
||||||
|
// * If the given type implemented both MessageV1 and MessageV2, point 2
|
||||||
|
// above will ensure no wrapping is performed.
|
||||||
|
// * If the given type implemented only MessageV2 and was wrapped using
|
||||||
|
// MessageV1Of before passing to WithDetails(), it would be unwrapped
|
||||||
|
// in WithDetails by calling MessageV2Of(). Point 3 above will ensure
|
||||||
|
// that the type is wrapped in a MessageV1 wrapper again before
|
||||||
|
// returning. Note that protoc-gen-go doesn't generate code which
|
||||||
|
// implements ONLY MessageV2 at the time of writing.
|
||||||
|
//
|
||||||
|
// NOTE: Status details can also be added using the FromProto method.
|
||||||
|
// This could theoretically allow passing a Detail message that only
|
||||||
|
// implements the V2 API. In such a case the message will be wrapped in
|
||||||
|
// a MessageV1 wrapper when fetched using Details().
|
||||||
|
// Since protoc-gen-go generates only code that implements both V1 and
|
||||||
|
// V2 APIs for backward compatibility, this is not a concern.
|
||||||
|
details = append(details, protoadapt.MessageV1Of(detail))
|
||||||
}
|
}
|
||||||
return details
|
return details
|
||||||
}
|
}
|
||||||
|
56
vendor/google.golang.org/grpc/internal/transport/http2_client.go
generated
vendored
56
vendor/google.golang.org/grpc/internal/transport/http2_client.go
generated
vendored
@ -87,7 +87,7 @@ type http2Client struct {
|
|||||||
// goAway is closed to notify the upper layer (i.e., addrConn.transportMonitor)
|
// goAway is closed to notify the upper layer (i.e., addrConn.transportMonitor)
|
||||||
// that the server sent GoAway on this transport.
|
// that the server sent GoAway on this transport.
|
||||||
goAway chan struct{}
|
goAway chan struct{}
|
||||||
|
keepaliveDone chan struct{} // Closed when the keepalive goroutine exits.
|
||||||
framer *framer
|
framer *framer
|
||||||
// controlBuf delivers all the control related tasks (e.g., window
|
// controlBuf delivers all the control related tasks (e.g., window
|
||||||
// updates, reset streams, and various settings) to the controller.
|
// updates, reset streams, and various settings) to the controller.
|
||||||
@ -335,6 +335,7 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts
|
|||||||
readerDone: make(chan struct{}),
|
readerDone: make(chan struct{}),
|
||||||
writerDone: make(chan struct{}),
|
writerDone: make(chan struct{}),
|
||||||
goAway: make(chan struct{}),
|
goAway: make(chan struct{}),
|
||||||
|
keepaliveDone: make(chan struct{}),
|
||||||
framer: newFramer(conn, writeBufSize, readBufSize, opts.SharedWriteBuffer, maxHeaderListSize),
|
framer: newFramer(conn, writeBufSize, readBufSize, opts.SharedWriteBuffer, maxHeaderListSize),
|
||||||
fc: &trInFlow{limit: uint32(icwz)},
|
fc: &trInFlow{limit: uint32(icwz)},
|
||||||
scheme: scheme,
|
scheme: scheme,
|
||||||
@ -527,8 +528,9 @@ func (t *http2Client) getPeer() *peer.Peer {
|
|||||||
// to be the last frame loopy writes to the transport.
|
// to be the last frame loopy writes to the transport.
|
||||||
func (t *http2Client) outgoingGoAwayHandler(g *goAway) (bool, error) {
|
func (t *http2Client) outgoingGoAwayHandler(g *goAway) (bool, error) {
|
||||||
t.mu.Lock()
|
t.mu.Lock()
|
||||||
defer t.mu.Unlock()
|
maxStreamID := t.nextID - 2
|
||||||
if err := t.framer.fr.WriteGoAway(t.nextID-2, http2.ErrCodeNo, g.debugData); err != nil {
|
t.mu.Unlock()
|
||||||
|
if err := t.framer.fr.WriteGoAway(maxStreamID, http2.ErrCodeNo, g.debugData); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
return false, g.closeConn
|
return false, g.closeConn
|
||||||
@ -1008,6 +1010,9 @@ func (t *http2Client) Close(err error) {
|
|||||||
// should unblock it so that the goroutine eventually exits.
|
// should unblock it so that the goroutine eventually exits.
|
||||||
t.kpDormancyCond.Signal()
|
t.kpDormancyCond.Signal()
|
||||||
}
|
}
|
||||||
|
// Append info about previous goaways if there were any, since this may be important
|
||||||
|
// for understanding the root cause for this connection to be closed.
|
||||||
|
goAwayDebugMessage := t.goAwayDebugMessage
|
||||||
t.mu.Unlock()
|
t.mu.Unlock()
|
||||||
|
|
||||||
// Per HTTP/2 spec, a GOAWAY frame must be sent before closing the
|
// Per HTTP/2 spec, a GOAWAY frame must be sent before closing the
|
||||||
@ -1025,11 +1030,13 @@ func (t *http2Client) Close(err error) {
|
|||||||
}
|
}
|
||||||
t.cancel()
|
t.cancel()
|
||||||
t.conn.Close()
|
t.conn.Close()
|
||||||
|
// Waits for the reader and keepalive goroutines to exit before returning to
|
||||||
|
// ensure all resources are cleaned up before Close can return.
|
||||||
|
<-t.readerDone
|
||||||
|
if t.keepaliveEnabled {
|
||||||
|
<-t.keepaliveDone
|
||||||
|
}
|
||||||
channelz.RemoveEntry(t.channelz.ID)
|
channelz.RemoveEntry(t.channelz.ID)
|
||||||
// Append info about previous goaways if there were any, since this may be important
|
|
||||||
// for understanding the root cause for this connection to be closed.
|
|
||||||
_, goAwayDebugMessage := t.GetGoAwayReason()
|
|
||||||
|
|
||||||
var st *status.Status
|
var st *status.Status
|
||||||
if len(goAwayDebugMessage) > 0 {
|
if len(goAwayDebugMessage) > 0 {
|
||||||
st = status.Newf(codes.Unavailable, "closing transport due to: %v, received prior goaway: %v", err, goAwayDebugMessage)
|
st = status.Newf(codes.Unavailable, "closing transport due to: %v, received prior goaway: %v", err, goAwayDebugMessage)
|
||||||
@ -1316,11 +1323,11 @@ func (t *http2Client) handlePing(f *http2.PingFrame) {
|
|||||||
t.controlBuf.put(pingAck)
|
t.controlBuf.put(pingAck)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) {
|
func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) error {
|
||||||
t.mu.Lock()
|
t.mu.Lock()
|
||||||
if t.state == closing {
|
if t.state == closing {
|
||||||
t.mu.Unlock()
|
t.mu.Unlock()
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
if f.ErrCode == http2.ErrCodeEnhanceYourCalm && string(f.DebugData()) == "too_many_pings" {
|
if f.ErrCode == http2.ErrCodeEnhanceYourCalm && string(f.DebugData()) == "too_many_pings" {
|
||||||
// When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
|
// When a client receives a GOAWAY with error code ENHANCE_YOUR_CALM and debug
|
||||||
@ -1332,8 +1339,7 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) {
|
|||||||
id := f.LastStreamID
|
id := f.LastStreamID
|
||||||
if id > 0 && id%2 == 0 {
|
if id > 0 && id%2 == 0 {
|
||||||
t.mu.Unlock()
|
t.mu.Unlock()
|
||||||
t.Close(connectionErrorf(true, nil, "received goaway with non-zero even-numbered stream id: %v", id))
|
return connectionErrorf(true, nil, "received goaway with non-zero even-numbered stream id: %v", id)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
// A client can receive multiple GoAways from the server (see
|
// A client can receive multiple GoAways from the server (see
|
||||||
// https://github.com/grpc/grpc-go/issues/1387). The idea is that the first
|
// https://github.com/grpc/grpc-go/issues/1387). The idea is that the first
|
||||||
@ -1350,8 +1356,7 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) {
|
|||||||
// If there are multiple GoAways the first one should always have an ID greater than the following ones.
|
// If there are multiple GoAways the first one should always have an ID greater than the following ones.
|
||||||
if id > t.prevGoAwayID {
|
if id > t.prevGoAwayID {
|
||||||
t.mu.Unlock()
|
t.mu.Unlock()
|
||||||
t.Close(connectionErrorf(true, nil, "received goaway with stream id: %v, which exceeds stream id of previous goaway: %v", id, t.prevGoAwayID))
|
return connectionErrorf(true, nil, "received goaway with stream id: %v, which exceeds stream id of previous goaway: %v", id, t.prevGoAwayID)
|
||||||
return
|
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
t.setGoAwayReason(f)
|
t.setGoAwayReason(f)
|
||||||
@ -1375,8 +1380,7 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) {
|
|||||||
t.prevGoAwayID = id
|
t.prevGoAwayID = id
|
||||||
if len(t.activeStreams) == 0 {
|
if len(t.activeStreams) == 0 {
|
||||||
t.mu.Unlock()
|
t.mu.Unlock()
|
||||||
t.Close(connectionErrorf(true, nil, "received goaway and there are no active streams"))
|
return connectionErrorf(true, nil, "received goaway and there are no active streams")
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
streamsToClose := make([]*Stream, 0)
|
streamsToClose := make([]*Stream, 0)
|
||||||
@ -1393,6 +1397,7 @@ func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) {
|
|||||||
for _, stream := range streamsToClose {
|
for _, stream := range streamsToClose {
|
||||||
t.closeStream(stream, errStreamDrain, false, http2.ErrCodeNo, statusGoAway, nil, false)
|
t.closeStream(stream, errStreamDrain, false, http2.ErrCodeNo, statusGoAway, nil, false)
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// setGoAwayReason sets the value of t.goAwayReason based
|
// setGoAwayReason sets the value of t.goAwayReason based
|
||||||
@ -1628,7 +1633,13 @@ func (t *http2Client) readServerPreface() error {
|
|||||||
// network connection. If the server preface is not read successfully, an
|
// network connection. If the server preface is not read successfully, an
|
||||||
// error is pushed to errCh; otherwise errCh is closed with no error.
|
// error is pushed to errCh; otherwise errCh is closed with no error.
|
||||||
func (t *http2Client) reader(errCh chan<- error) {
|
func (t *http2Client) reader(errCh chan<- error) {
|
||||||
defer close(t.readerDone)
|
var errClose error
|
||||||
|
defer func() {
|
||||||
|
close(t.readerDone)
|
||||||
|
if errClose != nil {
|
||||||
|
t.Close(errClose)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
if err := t.readServerPreface(); err != nil {
|
if err := t.readServerPreface(); err != nil {
|
||||||
errCh <- err
|
errCh <- err
|
||||||
@ -1669,7 +1680,7 @@ func (t *http2Client) reader(errCh chan<- error) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// Transport error.
|
// Transport error.
|
||||||
t.Close(connectionErrorf(true, err, "error reading from server: %v", err))
|
errClose = connectionErrorf(true, err, "error reading from server: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
switch frame := frame.(type) {
|
switch frame := frame.(type) {
|
||||||
@ -1684,7 +1695,7 @@ func (t *http2Client) reader(errCh chan<- error) {
|
|||||||
case *http2.PingFrame:
|
case *http2.PingFrame:
|
||||||
t.handlePing(frame)
|
t.handlePing(frame)
|
||||||
case *http2.GoAwayFrame:
|
case *http2.GoAwayFrame:
|
||||||
t.handleGoAway(frame)
|
errClose = t.handleGoAway(frame)
|
||||||
case *http2.WindowUpdateFrame:
|
case *http2.WindowUpdateFrame:
|
||||||
t.handleWindowUpdate(frame)
|
t.handleWindowUpdate(frame)
|
||||||
default:
|
default:
|
||||||
@ -1697,6 +1708,13 @@ func (t *http2Client) reader(errCh chan<- error) {
|
|||||||
|
|
||||||
// keepalive running in a separate goroutine makes sure the connection is alive by sending pings.
|
// keepalive running in a separate goroutine makes sure the connection is alive by sending pings.
|
||||||
func (t *http2Client) keepalive() {
|
func (t *http2Client) keepalive() {
|
||||||
|
var err error
|
||||||
|
defer func() {
|
||||||
|
close(t.keepaliveDone)
|
||||||
|
if err != nil {
|
||||||
|
t.Close(err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
p := &ping{data: [8]byte{}}
|
p := &ping{data: [8]byte{}}
|
||||||
// True iff a ping has been sent, and no data has been received since then.
|
// True iff a ping has been sent, and no data has been received since then.
|
||||||
outstandingPing := false
|
outstandingPing := false
|
||||||
@ -1720,7 +1738,7 @@ func (t *http2Client) keepalive() {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if outstandingPing && timeoutLeft <= 0 {
|
if outstandingPing && timeoutLeft <= 0 {
|
||||||
t.Close(connectionErrorf(true, nil, "keepalive ping failed to receive ACK within timeout"))
|
err = connectionErrorf(true, nil, "keepalive ping failed to receive ACK within timeout")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
t.mu.Lock()
|
t.mu.Lock()
|
||||||
|
9
vendor/google.golang.org/grpc/internal/transport/transport.go
generated
vendored
9
vendor/google.golang.org/grpc/internal/transport/transport.go
generated
vendored
@ -547,6 +547,15 @@ func (s *Stream) write(m recvMsg) {
|
|||||||
s.buf.put(m)
|
s.buf.put(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReadHeader reads data into the provided header slice from the stream. It
|
||||||
|
// first checks if there was an error during a previous read operation and
|
||||||
|
// returns it if present. It then requests a read operation for the length of
|
||||||
|
// the header. It continues to read from the stream until the entire header
|
||||||
|
// slice is filled or an error occurs. If an `io.EOF` error is encountered
|
||||||
|
// with partially read data, it is converted to `io.ErrUnexpectedEOF` to
|
||||||
|
// indicate an unexpected end of the stream. The method returns any error
|
||||||
|
// encountered during the read process or nil if the header was successfully
|
||||||
|
// read.
|
||||||
func (s *Stream) ReadHeader(header []byte) (err error) {
|
func (s *Stream) ReadHeader(header []byte) (err error) {
|
||||||
// Don't request a read if there was an error earlier
|
// Don't request a read if there was an error earlier
|
||||||
if er := s.trReader.er; er != nil {
|
if er := s.trReader.er; er != nil {
|
||||||
|
26
vendor/google.golang.org/grpc/mem/buffers.go
generated
vendored
26
vendor/google.golang.org/grpc/mem/buffers.go
generated
vendored
@ -65,6 +65,9 @@ var (
|
|||||||
refObjectPool = sync.Pool{New: func() any { return new(atomic.Int32) }}
|
refObjectPool = sync.Pool{New: func() any { return new(atomic.Int32) }}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// IsBelowBufferPoolingThreshold returns true if the given size is less than or
|
||||||
|
// equal to the threshold for buffer pooling. This is used to determine whether
|
||||||
|
// to pool buffers or allocate them directly.
|
||||||
func IsBelowBufferPoolingThreshold(size int) bool {
|
func IsBelowBufferPoolingThreshold(size int) bool {
|
||||||
return size <= bufferPoolingThreshold
|
return size <= bufferPoolingThreshold
|
||||||
}
|
}
|
||||||
@ -89,7 +92,11 @@ func newBuffer() *buffer {
|
|||||||
//
|
//
|
||||||
// Note that the backing array of the given data is not copied.
|
// Note that the backing array of the given data is not copied.
|
||||||
func NewBuffer(data *[]byte, pool BufferPool) Buffer {
|
func NewBuffer(data *[]byte, pool BufferPool) Buffer {
|
||||||
if pool == nil || IsBelowBufferPoolingThreshold(len(*data)) {
|
// Use the buffer's capacity instead of the length, otherwise buffers may
|
||||||
|
// not be reused under certain conditions. For example, if a large buffer
|
||||||
|
// is acquired from the pool, but fewer bytes than the buffering threshold
|
||||||
|
// are written to it, the buffer will not be returned to the pool.
|
||||||
|
if pool == nil || IsBelowBufferPoolingThreshold(cap(*data)) {
|
||||||
return (SliceBuffer)(*data)
|
return (SliceBuffer)(*data)
|
||||||
}
|
}
|
||||||
b := newBuffer()
|
b := newBuffer()
|
||||||
@ -194,19 +201,19 @@ func (b *buffer) read(buf []byte) (int, Buffer) {
|
|||||||
return n, b
|
return n, b
|
||||||
}
|
}
|
||||||
|
|
||||||
// String returns a string representation of the buffer. May be used for
|
|
||||||
// debugging purposes.
|
|
||||||
func (b *buffer) String() string {
|
func (b *buffer) String() string {
|
||||||
return fmt.Sprintf("mem.Buffer(%p, data: %p, length: %d)", b, b.ReadOnlyData(), len(b.ReadOnlyData()))
|
return fmt.Sprintf("mem.Buffer(%p, data: %p, length: %d)", b, b.ReadOnlyData(), len(b.ReadOnlyData()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReadUnsafe reads bytes from the given Buffer into the provided slice.
|
||||||
|
// It does not perform safety checks.
|
||||||
func ReadUnsafe(dst []byte, buf Buffer) (int, Buffer) {
|
func ReadUnsafe(dst []byte, buf Buffer) (int, Buffer) {
|
||||||
return buf.read(dst)
|
return buf.read(dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SplitUnsafe modifies the receiver to point to the first n bytes while it
|
// SplitUnsafe modifies the receiver to point to the first n bytes while it
|
||||||
// returns a new reference to the remaining bytes. The returned Buffer functions
|
// returns a new reference to the remaining bytes. The returned Buffer
|
||||||
// just like a normal reference acquired using Ref().
|
// functions just like a normal reference acquired using Ref().
|
||||||
func SplitUnsafe(buf Buffer, n int) (left, right Buffer) {
|
func SplitUnsafe(buf Buffer, n int) (left, right Buffer) {
|
||||||
return buf.split(n)
|
return buf.split(n)
|
||||||
}
|
}
|
||||||
@ -232,11 +239,20 @@ func (e emptyBuffer) read([]byte) (int, Buffer) {
|
|||||||
return 0, e
|
return 0, e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SliceBuffer is a Buffer implementation that wraps a byte slice. It provides
|
||||||
|
// methods for reading, splitting, and managing the byte slice.
|
||||||
type SliceBuffer []byte
|
type SliceBuffer []byte
|
||||||
|
|
||||||
|
// ReadOnlyData returns the byte slice.
|
||||||
func (s SliceBuffer) ReadOnlyData() []byte { return s }
|
func (s SliceBuffer) ReadOnlyData() []byte { return s }
|
||||||
|
|
||||||
|
// Ref is a noop implementation of Ref.
|
||||||
func (s SliceBuffer) Ref() {}
|
func (s SliceBuffer) Ref() {}
|
||||||
|
|
||||||
|
// Free is a noop implementation of Free.
|
||||||
func (s SliceBuffer) Free() {}
|
func (s SliceBuffer) Free() {}
|
||||||
|
|
||||||
|
// Len is a noop implementation of Len.
|
||||||
func (s SliceBuffer) Len() int { return len(s) }
|
func (s SliceBuffer) Len() int { return len(s) }
|
||||||
|
|
||||||
func (s SliceBuffer) split(n int) (left, right Buffer) {
|
func (s SliceBuffer) split(n int) (left, right Buffer) {
|
||||||
|
3
vendor/google.golang.org/grpc/rpc_util.go
generated
vendored
3
vendor/google.golang.org/grpc/rpc_util.go
generated
vendored
@ -791,9 +791,8 @@ func checkRecvPayload(pf payloadFormat, recvCompress string, haveCompressor bool
|
|||||||
if !haveCompressor {
|
if !haveCompressor {
|
||||||
if isServer {
|
if isServer {
|
||||||
return status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress)
|
return status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress)
|
||||||
} else {
|
|
||||||
return status.Newf(codes.Internal, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress)
|
|
||||||
}
|
}
|
||||||
|
return status.Newf(codes.Internal, "grpc: Decompressor is not installed for grpc-encoding %q", recvCompress)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
return status.Newf(codes.Internal, "grpc: received unexpected payload format %d", pf)
|
return status.Newf(codes.Internal, "grpc: received unexpected payload format %d", pf)
|
||||||
|
2
vendor/google.golang.org/grpc/version.go
generated
vendored
2
vendor/google.golang.org/grpc/version.go
generated
vendored
@ -19,4 +19,4 @@
|
|||||||
package grpc
|
package grpc
|
||||||
|
|
||||||
// Version is the current grpc version.
|
// Version is the current grpc version.
|
||||||
const Version = "1.67.1"
|
const Version = "1.68.0"
|
||||||
|
12
vendor/modules.txt
vendored
12
vendor/modules.txt
vendored
@ -766,7 +766,7 @@ golang.org/x/net/internal/timeseries
|
|||||||
golang.org/x/net/proxy
|
golang.org/x/net/proxy
|
||||||
golang.org/x/net/trace
|
golang.org/x/net/trace
|
||||||
golang.org/x/net/websocket
|
golang.org/x/net/websocket
|
||||||
# golang.org/x/oauth2 v0.22.0
|
# golang.org/x/oauth2 v0.23.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/oauth2
|
golang.org/x/oauth2
|
||||||
golang.org/x/oauth2/internal
|
golang.org/x/oauth2/internal
|
||||||
@ -825,18 +825,18 @@ golang.org/x/tools/go/ast/inspector
|
|||||||
# gomodules.xyz/jsonpatch/v2 v2.4.0 => github.com/gomodules/jsonpatch/v2 v2.2.0
|
# gomodules.xyz/jsonpatch/v2 v2.4.0 => github.com/gomodules/jsonpatch/v2 v2.2.0
|
||||||
## explicit; go 1.12
|
## explicit; go 1.12
|
||||||
gomodules.xyz/jsonpatch/v2
|
gomodules.xyz/jsonpatch/v2
|
||||||
# google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142
|
# google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
google.golang.org/genproto/googleapis/api
|
google.golang.org/genproto/googleapis/api
|
||||||
google.golang.org/genproto/googleapis/api/annotations
|
google.golang.org/genproto/googleapis/api/annotations
|
||||||
google.golang.org/genproto/googleapis/api/expr/v1alpha1
|
google.golang.org/genproto/googleapis/api/expr/v1alpha1
|
||||||
google.golang.org/genproto/googleapis/api/httpbody
|
google.golang.org/genproto/googleapis/api/httpbody
|
||||||
# google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142
|
# google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1
|
||||||
## explicit; go 1.21
|
## explicit; go 1.21
|
||||||
google.golang.org/genproto/googleapis/rpc/errdetails
|
google.golang.org/genproto/googleapis/rpc/errdetails
|
||||||
google.golang.org/genproto/googleapis/rpc/status
|
google.golang.org/genproto/googleapis/rpc/status
|
||||||
# google.golang.org/grpc v1.67.1
|
# google.golang.org/grpc v1.68.0
|
||||||
## explicit; go 1.21
|
## explicit; go 1.22.7
|
||||||
google.golang.org/grpc
|
google.golang.org/grpc
|
||||||
google.golang.org/grpc/attributes
|
google.golang.org/grpc/attributes
|
||||||
google.golang.org/grpc/backoff
|
google.golang.org/grpc/backoff
|
||||||
@ -844,6 +844,8 @@ google.golang.org/grpc/balancer
|
|||||||
google.golang.org/grpc/balancer/base
|
google.golang.org/grpc/balancer/base
|
||||||
google.golang.org/grpc/balancer/grpclb/state
|
google.golang.org/grpc/balancer/grpclb/state
|
||||||
google.golang.org/grpc/balancer/pickfirst
|
google.golang.org/grpc/balancer/pickfirst
|
||||||
|
google.golang.org/grpc/balancer/pickfirst/internal
|
||||||
|
google.golang.org/grpc/balancer/pickfirst/pickfirstleaf
|
||||||
google.golang.org/grpc/balancer/roundrobin
|
google.golang.org/grpc/balancer/roundrobin
|
||||||
google.golang.org/grpc/binarylog/grpc_binarylog_v1
|
google.golang.org/grpc/binarylog/grpc_binarylog_v1
|
||||||
google.golang.org/grpc/channelz
|
google.golang.org/grpc/channelz
|
||||||
|
Loading…
Reference in New Issue
Block a user