Merge pull request #872 from kubernetes-csi/dependabot/go_modules/google.golang.org/grpc-1.71.0
chore(deps): bump google.golang.org/grpc from 1.70.0 to 1.71.0
This commit is contained in:
commit
f774b51e24
18
go.mod
18
go.mod
@ -10,7 +10,7 @@ require (
|
|||||||
github.com/pborman/uuid v1.2.1
|
github.com/pborman/uuid v1.2.1
|
||||||
github.com/stretchr/testify v1.10.0
|
github.com/stretchr/testify v1.10.0
|
||||||
golang.org/x/net v0.36.0
|
golang.org/x/net v0.36.0
|
||||||
google.golang.org/grpc v1.70.0
|
google.golang.org/grpc v1.71.0
|
||||||
google.golang.org/protobuf v1.36.5
|
google.golang.org/protobuf v1.36.5
|
||||||
k8s.io/api v0.28.12
|
k8s.io/api v0.28.12
|
||||||
k8s.io/apimachinery v0.28.12
|
k8s.io/apimachinery v0.28.12
|
||||||
@ -24,6 +24,8 @@ require (
|
|||||||
sigs.k8s.io/yaml v1.4.0
|
sigs.k8s.io/yaml v1.4.0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
require go.opentelemetry.io/auto/sdk v1.1.0 // indirect
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/NYTimes/gziphandler v1.1.1 // indirect
|
github.com/NYTimes/gziphandler v1.1.1 // indirect
|
||||||
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect
|
github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect
|
||||||
@ -85,12 +87,12 @@ require (
|
|||||||
go.etcd.io/etcd/client/v3 v3.5.9 // indirect
|
go.etcd.io/etcd/client/v3 v3.5.9 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
|
||||||
go.opentelemetry.io/otel v1.32.0 // indirect
|
go.opentelemetry.io/otel v1.34.0 // indirect
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 // indirect
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 // indirect
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.32.0 // indirect
|
go.opentelemetry.io/otel/metric v1.34.0 // indirect
|
||||||
go.opentelemetry.io/otel/sdk v1.32.0 // indirect
|
go.opentelemetry.io/otel/sdk v1.34.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.32.0 // indirect
|
go.opentelemetry.io/otel/trace v1.34.0 // indirect
|
||||||
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
|
||||||
go.uber.org/atomic v1.10.0 // indirect
|
go.uber.org/atomic v1.10.0 // indirect
|
||||||
go.uber.org/multierr v1.11.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
@ -98,7 +100,7 @@ require (
|
|||||||
golang.org/x/crypto v0.35.0 // indirect
|
golang.org/x/crypto v0.35.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/mod v0.23.0
|
golang.org/x/mod v0.23.0
|
||||||
golang.org/x/oauth2 v0.24.0 // indirect
|
golang.org/x/oauth2 v0.25.0 // indirect
|
||||||
golang.org/x/sync v0.11.0 // indirect
|
golang.org/x/sync v0.11.0 // indirect
|
||||||
golang.org/x/sys v0.30.0 // indirect
|
golang.org/x/sys v0.30.0 // indirect
|
||||||
golang.org/x/term v0.29.0 // indirect
|
golang.org/x/term v0.29.0 // indirect
|
||||||
@ -106,8 +108,8 @@ require (
|
|||||||
golang.org/x/time v0.3.0 // indirect
|
golang.org/x/time v0.3.0 // indirect
|
||||||
golang.org/x/tools v0.28.0 // indirect
|
golang.org/x/tools v0.28.0 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
|
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // 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
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
|
|||||||
58
go.sum
58
go.sum
@ -9,8 +9,8 @@ cloud.google.com/go v0.51.0/go.mod h1:hWtGJ6gnXH+KgDv+V0zFGDvpi07n3z8ZNj3T1RW0Gc
|
|||||||
cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
|
cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
|
||||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||||
cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
|
cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
|
||||||
cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo=
|
cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
|
||||||
cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k=
|
cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
|
||||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||||
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
|
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
|
||||||
@ -82,8 +82,8 @@ github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5P
|
|||||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI=
|
github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 h1:boJj011Hh+874zpIySeApCX4GeOjPl9qhRF3QuIZq+Q=
|
||||||
github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
|
github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
|
||||||
github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4=
|
github.com/container-storage-interface/spec v1.2.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4=
|
||||||
github.com/container-storage-interface/spec v1.11.0 h1:H/YKTOeUZwHtyPOr9raR+HgFmGluGCklulxDYxSdVNM=
|
github.com/container-storage-interface/spec v1.11.0 h1:H/YKTOeUZwHtyPOr9raR+HgFmGluGCklulxDYxSdVNM=
|
||||||
github.com/container-storage-interface/spec v1.11.0/go.mod h1:DtUvaQszPml1YJfIK7c00mlv6/g4wNMLanLgiUbKFRI=
|
github.com/container-storage-interface/spec v1.11.0/go.mod h1:DtUvaQszPml1YJfIK7c00mlv6/g4wNMLanLgiUbKFRI=
|
||||||
@ -112,8 +112,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
|
|||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM=
|
github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8=
|
||||||
github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4=
|
github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU=
|
||||||
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
|
github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls=
|
||||||
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||||
@ -159,8 +159,8 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69
|
|||||||
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
|
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
|
||||||
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/glog v1.2.3 h1:oDTdz9f5VGVVNGu/Q7UXKWYsD0873HXLHdJUNBsSEKM=
|
github.com/golang/glog v1.2.4 h1:CNNw5U8lSiiBk7druxtSHHTsRWcxKoac6kZKm2peBBc=
|
||||||
github.com/golang/glog v1.2.3/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
|
github.com/golang/glog v1.2.4/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
|
||||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||||
@ -332,8 +332,8 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
|
|||||||
github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg=
|
github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg=
|
||||||
github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM=
|
github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
|
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
||||||
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
@ -390,24 +390,26 @@ go.etcd.io/etcd/server/v3 v3.5.9/go.mod h1:GgI1fQClQCFIzuVjlvdbMxNbnISt90gdfYyqi
|
|||||||
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||||
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
|
||||||
|
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
|
||||||
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
|
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
|
||||||
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
|
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
|
||||||
go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M=
|
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
|
||||||
go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8=
|
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
|
||||||
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
|
go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
|
||||||
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
|
go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
|
go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk=
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
|
go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w=
|
||||||
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
|
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
|
||||||
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
|
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
|
||||||
go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
|
go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
|
||||||
go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
|
go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
|
||||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
@ -483,8 +485,8 @@ golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAG
|
|||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE=
|
golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
|
||||||
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
golang.org/x/oauth2 v0.25.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=
|
||||||
@ -583,10 +585,10 @@ google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvx
|
|||||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
|
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
|
||||||
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
|
google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a h1:OAiGFfOiA0v9MRYsSidp3ubZaBnteRUyn3xB2ZQ5G/E=
|
google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a/go.mod h1:jehYqy3+AhJU9ve55aNOaSml7wUXjF9x6z2LcCfpAhY=
|
google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a h1:hgh8P4EuoxpsuKMXX/To36nOFD7vixReXgn8lPGnt+o=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20241202173237-19429a94021a/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50=
|
||||||
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=
|
||||||
@ -595,8 +597,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
|
|||||||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||||
google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
|
google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg=
|
||||||
google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
|
google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec=
|
||||||
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=
|
||||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
|
|||||||
27
vendor/go.opentelemetry.io/auto/sdk/CONTRIBUTING.md
generated
vendored
Normal file
27
vendor/go.opentelemetry.io/auto/sdk/CONTRIBUTING.md
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Contributing to go.opentelemetry.io/auto/sdk
|
||||||
|
|
||||||
|
The `go.opentelemetry.io/auto/sdk` module is a purpose built OpenTelemetry SDK.
|
||||||
|
It is designed to be:
|
||||||
|
|
||||||
|
0. An OpenTelemetry compliant SDK
|
||||||
|
1. Instrumented by auto-instrumentation (serializable into OTLP JSON)
|
||||||
|
2. Lightweight
|
||||||
|
3. User-friendly
|
||||||
|
|
||||||
|
These design choices are listed in the order of their importance.
|
||||||
|
|
||||||
|
The primary design goal of this module is to be an OpenTelemetry SDK.
|
||||||
|
This means that it needs to implement the Go APIs found in `go.opentelemetry.io/otel`.
|
||||||
|
|
||||||
|
Having met the requirement of SDK compliance, this module needs to provide code that the `go.opentelemetry.io/auto` module can instrument.
|
||||||
|
The chosen approach to meet this goal is to ensure the telemetry from the SDK is serializable into JSON encoded OTLP.
|
||||||
|
This ensures then that the serialized form is compatible with other OpenTelemetry systems, and the auto-instrumentation can use these systems to deserialize any telemetry it is sent.
|
||||||
|
|
||||||
|
Outside of these first two goals, the intended use becomes relevant.
|
||||||
|
This package is intended to be used in the `go.opentelemetry.io/otel` global API as a default when the auto-instrumentation is running.
|
||||||
|
Because of this, this package needs to not add unnecessary dependencies to that API.
|
||||||
|
Ideally, it adds none.
|
||||||
|
It also needs to operate efficiently.
|
||||||
|
|
||||||
|
Finally, this module is designed to be user-friendly to Go development.
|
||||||
|
It hides complexity in order to provide simpler APIs when the previous goals can all still be met.
|
||||||
201
vendor/go.opentelemetry.io/auto/sdk/LICENSE
generated
vendored
Normal file
201
vendor/go.opentelemetry.io/auto/sdk/LICENSE
generated
vendored
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
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.
|
||||||
15
vendor/go.opentelemetry.io/auto/sdk/VERSIONING.md
generated
vendored
Normal file
15
vendor/go.opentelemetry.io/auto/sdk/VERSIONING.md
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Versioning
|
||||||
|
|
||||||
|
This document describes the versioning policy for this module.
|
||||||
|
This policy is designed so the following goals can be achieved.
|
||||||
|
|
||||||
|
**Users are provided a codebase of value that is stable and secure.**
|
||||||
|
|
||||||
|
## Policy
|
||||||
|
|
||||||
|
* Versioning of this module will be idiomatic of a Go project using [Go modules](https://github.com/golang/go/wiki/Modules).
|
||||||
|
* [Semantic import versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning) will be used.
|
||||||
|
* Versions will comply with [semver 2.0](https://semver.org/spec/v2.0.0.html).
|
||||||
|
* Any `v2` or higher version of this module will be included as a `/vN` at the end of the module path used in `go.mod` files and in the package import path.
|
||||||
|
|
||||||
|
* GitHub releases will be made for all releases.
|
||||||
14
vendor/go.opentelemetry.io/auto/sdk/doc.go
generated
vendored
Normal file
14
vendor/go.opentelemetry.io/auto/sdk/doc.go
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
/*
|
||||||
|
Package sdk provides an auto-instrumentable OpenTelemetry SDK.
|
||||||
|
|
||||||
|
An [go.opentelemetry.io/auto.Instrumentation] can be configured to target the
|
||||||
|
process running this SDK. In that case, all telemetry the SDK produces will be
|
||||||
|
processed and handled by that [go.opentelemetry.io/auto.Instrumentation].
|
||||||
|
|
||||||
|
By default, if there is no [go.opentelemetry.io/auto.Instrumentation] set to
|
||||||
|
auto-instrument the SDK, the SDK will not generate any telemetry.
|
||||||
|
*/
|
||||||
|
package sdk
|
||||||
58
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/attr.go
generated
vendored
Normal file
58
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/attr.go
generated
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package telemetry
|
||||||
|
|
||||||
|
// Attr is a key-value pair.
|
||||||
|
type Attr struct {
|
||||||
|
Key string `json:"key,omitempty"`
|
||||||
|
Value Value `json:"value,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns an Attr for a string value.
|
||||||
|
func String(key, value string) Attr {
|
||||||
|
return Attr{key, StringValue(value)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int64 returns an Attr for an int64 value.
|
||||||
|
func Int64(key string, value int64) Attr {
|
||||||
|
return Attr{key, Int64Value(value)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int returns an Attr for an int value.
|
||||||
|
func Int(key string, value int) Attr {
|
||||||
|
return Int64(key, int64(value))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float64 returns an Attr for a float64 value.
|
||||||
|
func Float64(key string, value float64) Attr {
|
||||||
|
return Attr{key, Float64Value(value)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bool returns an Attr for a bool value.
|
||||||
|
func Bool(key string, value bool) Attr {
|
||||||
|
return Attr{key, BoolValue(value)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bytes returns an Attr for a []byte value.
|
||||||
|
// The passed slice must not be changed after it is passed.
|
||||||
|
func Bytes(key string, value []byte) Attr {
|
||||||
|
return Attr{key, BytesValue(value)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Slice returns an Attr for a []Value value.
|
||||||
|
// The passed slice must not be changed after it is passed.
|
||||||
|
func Slice(key string, value ...Value) Attr {
|
||||||
|
return Attr{key, SliceValue(value...)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Map returns an Attr for a map value.
|
||||||
|
// The passed slice must not be changed after it is passed.
|
||||||
|
func Map(key string, value ...Attr) Attr {
|
||||||
|
return Attr{key, MapValue(value...)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Equal returns if a is equal to b.
|
||||||
|
func (a Attr) Equal(b Attr) bool {
|
||||||
|
return a.Key == b.Key && a.Value.Equal(b.Value)
|
||||||
|
}
|
||||||
8
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/doc.go
generated
vendored
Normal file
8
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/doc.go
generated
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
/*
|
||||||
|
Package telemetry provides a lightweight representations of OpenTelemetry
|
||||||
|
telemetry that is compatible with the OTLP JSON protobuf encoding.
|
||||||
|
*/
|
||||||
|
package telemetry
|
||||||
103
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go
generated
vendored
Normal file
103
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/id.go
generated
vendored
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package telemetry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
traceIDSize = 16
|
||||||
|
spanIDSize = 8
|
||||||
|
)
|
||||||
|
|
||||||
|
// TraceID is a custom data type that is used for all trace IDs.
|
||||||
|
type TraceID [traceIDSize]byte
|
||||||
|
|
||||||
|
// String returns the hex string representation form of a TraceID.
|
||||||
|
func (tid TraceID) String() string {
|
||||||
|
return hex.EncodeToString(tid[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsEmpty returns false if id contains at least one non-zero byte.
|
||||||
|
func (tid TraceID) IsEmpty() bool {
|
||||||
|
return tid == [traceIDSize]byte{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON converts the trace ID into a hex string enclosed in quotes.
|
||||||
|
func (tid TraceID) MarshalJSON() ([]byte, error) {
|
||||||
|
if tid.IsEmpty() {
|
||||||
|
return []byte(`""`), nil
|
||||||
|
}
|
||||||
|
return marshalJSON(tid[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON inflates the trace ID from hex string, possibly enclosed in
|
||||||
|
// quotes.
|
||||||
|
func (tid *TraceID) UnmarshalJSON(data []byte) error {
|
||||||
|
*tid = [traceIDSize]byte{}
|
||||||
|
return unmarshalJSON(tid[:], data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SpanID is a custom data type that is used for all span IDs.
|
||||||
|
type SpanID [spanIDSize]byte
|
||||||
|
|
||||||
|
// String returns the hex string representation form of a SpanID.
|
||||||
|
func (sid SpanID) String() string {
|
||||||
|
return hex.EncodeToString(sid[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsEmpty returns true if the span ID contains at least one non-zero byte.
|
||||||
|
func (sid SpanID) IsEmpty() bool {
|
||||||
|
return sid == [spanIDSize]byte{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON converts span ID into a hex string enclosed in quotes.
|
||||||
|
func (sid SpanID) MarshalJSON() ([]byte, error) {
|
||||||
|
if sid.IsEmpty() {
|
||||||
|
return []byte(`""`), nil
|
||||||
|
}
|
||||||
|
return marshalJSON(sid[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes span ID from hex string, possibly enclosed in quotes.
|
||||||
|
func (sid *SpanID) UnmarshalJSON(data []byte) error {
|
||||||
|
*sid = [spanIDSize]byte{}
|
||||||
|
return unmarshalJSON(sid[:], data)
|
||||||
|
}
|
||||||
|
|
||||||
|
// marshalJSON converts id into a hex string enclosed in quotes.
|
||||||
|
func marshalJSON(id []byte) ([]byte, error) {
|
||||||
|
// Plus 2 quote chars at the start and end.
|
||||||
|
hexLen := hex.EncodedLen(len(id)) + 2
|
||||||
|
|
||||||
|
b := make([]byte, hexLen)
|
||||||
|
hex.Encode(b[1:hexLen-1], id)
|
||||||
|
b[0], b[hexLen-1] = '"', '"'
|
||||||
|
|
||||||
|
return b, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// unmarshalJSON inflates trace id from hex string, possibly enclosed in quotes.
|
||||||
|
func unmarshalJSON(dst []byte, src []byte) error {
|
||||||
|
if l := len(src); l >= 2 && src[0] == '"' && src[l-1] == '"' {
|
||||||
|
src = src[1 : l-1]
|
||||||
|
}
|
||||||
|
nLen := len(src)
|
||||||
|
if nLen == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(dst) != hex.DecodedLen(nLen) {
|
||||||
|
return errors.New("invalid length for ID")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := hex.Decode(dst, src)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("cannot unmarshal ID from string '%s': %w", string(src), err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
67
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go
generated
vendored
Normal file
67
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/number.go
generated
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package telemetry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// protoInt64 represents the protobuf encoding of integers which can be either
|
||||||
|
// strings or integers.
|
||||||
|
type protoInt64 int64
|
||||||
|
|
||||||
|
// Int64 returns the protoInt64 as an int64.
|
||||||
|
func (i *protoInt64) Int64() int64 { return int64(*i) }
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes both strings and integers.
|
||||||
|
func (i *protoInt64) UnmarshalJSON(data []byte) error {
|
||||||
|
if data[0] == '"' {
|
||||||
|
var str string
|
||||||
|
if err := json.Unmarshal(data, &str); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
parsedInt, err := strconv.ParseInt(str, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*i = protoInt64(parsedInt)
|
||||||
|
} else {
|
||||||
|
var parsedInt int64
|
||||||
|
if err := json.Unmarshal(data, &parsedInt); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*i = protoInt64(parsedInt)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// protoUint64 represents the protobuf encoding of integers which can be either
|
||||||
|
// strings or integers.
|
||||||
|
type protoUint64 uint64
|
||||||
|
|
||||||
|
// Int64 returns the protoUint64 as a uint64.
|
||||||
|
func (i *protoUint64) Uint64() uint64 { return uint64(*i) }
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes both strings and integers.
|
||||||
|
func (i *protoUint64) UnmarshalJSON(data []byte) error {
|
||||||
|
if data[0] == '"' {
|
||||||
|
var str string
|
||||||
|
if err := json.Unmarshal(data, &str); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
parsedUint, err := strconv.ParseUint(str, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*i = protoUint64(parsedUint)
|
||||||
|
} else {
|
||||||
|
var parsedUint uint64
|
||||||
|
if err := json.Unmarshal(data, &parsedUint); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*i = protoUint64(parsedUint)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
66
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/resource.go
generated
vendored
Normal file
66
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/resource.go
generated
vendored
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package telemetry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Resource information.
|
||||||
|
type Resource struct {
|
||||||
|
// Attrs are the set of attributes that describe the resource. Attribute
|
||||||
|
// keys MUST be unique (it is not allowed to have more than one attribute
|
||||||
|
// with the same key).
|
||||||
|
Attrs []Attr `json:"attributes,omitempty"`
|
||||||
|
// DroppedAttrs is the number of dropped attributes. If the value
|
||||||
|
// is 0, then no attributes were dropped.
|
||||||
|
DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r.
|
||||||
|
func (r *Resource) UnmarshalJSON(data []byte) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||||
|
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if t != json.Delim('{') {
|
||||||
|
return errors.New("invalid Resource type")
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
keyIface, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// Empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, ok := keyIface.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid Resource field: %#v", keyIface)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "attributes":
|
||||||
|
err = decoder.Decode(&r.Attrs)
|
||||||
|
case "droppedAttributesCount", "dropped_attributes_count":
|
||||||
|
err = decoder.Decode(&r.DroppedAttrs)
|
||||||
|
default:
|
||||||
|
// Skip unknown.
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
67
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/scope.go
generated
vendored
Normal file
67
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/scope.go
generated
vendored
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package telemetry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Scope is the identifying values of the instrumentation scope.
|
||||||
|
type Scope struct {
|
||||||
|
Name string `json:"name,omitempty"`
|
||||||
|
Version string `json:"version,omitempty"`
|
||||||
|
Attrs []Attr `json:"attributes,omitempty"`
|
||||||
|
DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes the OTLP formatted JSON contained in data into r.
|
||||||
|
func (s *Scope) UnmarshalJSON(data []byte) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||||
|
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if t != json.Delim('{') {
|
||||||
|
return errors.New("invalid Scope type")
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
keyIface, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// Empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, ok := keyIface.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid Scope field: %#v", keyIface)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "name":
|
||||||
|
err = decoder.Decode(&s.Name)
|
||||||
|
case "version":
|
||||||
|
err = decoder.Decode(&s.Version)
|
||||||
|
case "attributes":
|
||||||
|
err = decoder.Decode(&s.Attrs)
|
||||||
|
case "droppedAttributesCount", "dropped_attributes_count":
|
||||||
|
err = decoder.Decode(&s.DroppedAttrs)
|
||||||
|
default:
|
||||||
|
// Skip unknown.
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
456
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go
generated
vendored
Normal file
456
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/span.go
generated
vendored
Normal file
@ -0,0 +1,456 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package telemetry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/hex"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// A Span represents a single operation performed by a single component of the
|
||||||
|
// system.
|
||||||
|
type Span struct {
|
||||||
|
// A unique identifier for a trace. All spans from the same trace share
|
||||||
|
// the same `trace_id`. The ID is a 16-byte array. An ID with all zeroes OR
|
||||||
|
// of length other than 16 bytes is considered invalid (empty string in OTLP/JSON
|
||||||
|
// is zero-length and thus is also invalid).
|
||||||
|
//
|
||||||
|
// This field is required.
|
||||||
|
TraceID TraceID `json:"traceId,omitempty"`
|
||||||
|
// A unique identifier for a span within a trace, assigned when the span
|
||||||
|
// is created. The ID is an 8-byte array. An ID with all zeroes OR of length
|
||||||
|
// other than 8 bytes is considered invalid (empty string in OTLP/JSON
|
||||||
|
// is zero-length and thus is also invalid).
|
||||||
|
//
|
||||||
|
// This field is required.
|
||||||
|
SpanID SpanID `json:"spanId,omitempty"`
|
||||||
|
// trace_state conveys information about request position in multiple distributed tracing graphs.
|
||||||
|
// It is a trace_state in w3c-trace-context format: https://www.w3.org/TR/trace-context/#tracestate-header
|
||||||
|
// See also https://github.com/w3c/distributed-tracing for more details about this field.
|
||||||
|
TraceState string `json:"traceState,omitempty"`
|
||||||
|
// The `span_id` of this span's parent span. If this is a root span, then this
|
||||||
|
// field must be empty. The ID is an 8-byte array.
|
||||||
|
ParentSpanID SpanID `json:"parentSpanId,omitempty"`
|
||||||
|
// Flags, a bit field.
|
||||||
|
//
|
||||||
|
// Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace
|
||||||
|
// Context specification. To read the 8-bit W3C trace flag, use
|
||||||
|
// `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`.
|
||||||
|
//
|
||||||
|
// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions.
|
||||||
|
//
|
||||||
|
// Bits 8 and 9 represent the 3 states of whether a span's parent
|
||||||
|
// is remote. The states are (unknown, is not remote, is remote).
|
||||||
|
// To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`.
|
||||||
|
// To read whether the span is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`.
|
||||||
|
//
|
||||||
|
// When creating span messages, if the message is logically forwarded from another source
|
||||||
|
// with an equivalent flags fields (i.e., usually another OTLP span message), the field SHOULD
|
||||||
|
// be copied as-is. If creating from a source that does not have an equivalent flags field
|
||||||
|
// (such as a runtime representation of an OpenTelemetry span), the high 22 bits MUST
|
||||||
|
// be set to zero.
|
||||||
|
// Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero.
|
||||||
|
//
|
||||||
|
// [Optional].
|
||||||
|
Flags uint32 `json:"flags,omitempty"`
|
||||||
|
// A description of the span's operation.
|
||||||
|
//
|
||||||
|
// For example, the name can be a qualified method name or a file name
|
||||||
|
// and a line number where the operation is called. A best practice is to use
|
||||||
|
// the same display name at the same call point in an application.
|
||||||
|
// This makes it easier to correlate spans in different traces.
|
||||||
|
//
|
||||||
|
// This field is semantically required to be set to non-empty string.
|
||||||
|
// Empty value is equivalent to an unknown span name.
|
||||||
|
//
|
||||||
|
// This field is required.
|
||||||
|
Name string `json:"name"`
|
||||||
|
// Distinguishes between spans generated in a particular context. For example,
|
||||||
|
// two spans with the same name may be distinguished using `CLIENT` (caller)
|
||||||
|
// and `SERVER` (callee) to identify queueing latency associated with the span.
|
||||||
|
Kind SpanKind `json:"kind,omitempty"`
|
||||||
|
// start_time_unix_nano is the start time of the span. On the client side, this is the time
|
||||||
|
// kept by the local machine where the span execution starts. On the server side, this
|
||||||
|
// is the time when the server's application handler starts running.
|
||||||
|
// Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970.
|
||||||
|
//
|
||||||
|
// This field is semantically required and it is expected that end_time >= start_time.
|
||||||
|
StartTime time.Time `json:"startTimeUnixNano,omitempty"`
|
||||||
|
// end_time_unix_nano is the end time of the span. On the client side, this is the time
|
||||||
|
// kept by the local machine where the span execution ends. On the server side, this
|
||||||
|
// is the time when the server application handler stops running.
|
||||||
|
// Value is UNIX Epoch time in nanoseconds since 00:00:00 UTC on 1 January 1970.
|
||||||
|
//
|
||||||
|
// This field is semantically required and it is expected that end_time >= start_time.
|
||||||
|
EndTime time.Time `json:"endTimeUnixNano,omitempty"`
|
||||||
|
// attributes is a collection of key/value pairs. Note, global attributes
|
||||||
|
// like server name can be set using the resource API. Examples of attributes:
|
||||||
|
//
|
||||||
|
// "/http/user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
|
||||||
|
// "/http/server_latency": 300
|
||||||
|
// "example.com/myattribute": true
|
||||||
|
// "example.com/score": 10.239
|
||||||
|
//
|
||||||
|
// The OpenTelemetry API specification further restricts the allowed value types:
|
||||||
|
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/common/README.md#attribute
|
||||||
|
// Attribute keys MUST be unique (it is not allowed to have more than one
|
||||||
|
// attribute with the same key).
|
||||||
|
Attrs []Attr `json:"attributes,omitempty"`
|
||||||
|
// dropped_attributes_count is the number of attributes that were discarded. Attributes
|
||||||
|
// can be discarded because their keys are too long or because there are too many
|
||||||
|
// attributes. If this value is 0, then no attributes were dropped.
|
||||||
|
DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"`
|
||||||
|
// events is a collection of Event items.
|
||||||
|
Events []*SpanEvent `json:"events,omitempty"`
|
||||||
|
// dropped_events_count is the number of dropped events. If the value is 0, then no
|
||||||
|
// events were dropped.
|
||||||
|
DroppedEvents uint32 `json:"droppedEventsCount,omitempty"`
|
||||||
|
// links is a collection of Links, which are references from this span to a span
|
||||||
|
// in the same or different trace.
|
||||||
|
Links []*SpanLink `json:"links,omitempty"`
|
||||||
|
// dropped_links_count is the number of dropped links after the maximum size was
|
||||||
|
// enforced. If this value is 0, then no links were dropped.
|
||||||
|
DroppedLinks uint32 `json:"droppedLinksCount,omitempty"`
|
||||||
|
// An optional final status for this span. Semantically when Status isn't set, it means
|
||||||
|
// span's status code is unset, i.e. assume STATUS_CODE_UNSET (code = 0).
|
||||||
|
Status *Status `json:"status,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON encodes s into OTLP formatted JSON.
|
||||||
|
func (s Span) MarshalJSON() ([]byte, error) {
|
||||||
|
startT := s.StartTime.UnixNano()
|
||||||
|
if s.StartTime.IsZero() || startT < 0 {
|
||||||
|
startT = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
endT := s.EndTime.UnixNano()
|
||||||
|
if s.EndTime.IsZero() || endT < 0 {
|
||||||
|
endT = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override non-empty default SpanID marshal and omitempty.
|
||||||
|
var parentSpanId string
|
||||||
|
if !s.ParentSpanID.IsEmpty() {
|
||||||
|
b := make([]byte, hex.EncodedLen(spanIDSize))
|
||||||
|
hex.Encode(b, s.ParentSpanID[:])
|
||||||
|
parentSpanId = string(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
type Alias Span
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Alias
|
||||||
|
ParentSpanID string `json:"parentSpanId,omitempty"`
|
||||||
|
StartTime uint64 `json:"startTimeUnixNano,omitempty"`
|
||||||
|
EndTime uint64 `json:"endTimeUnixNano,omitempty"`
|
||||||
|
}{
|
||||||
|
Alias: Alias(s),
|
||||||
|
ParentSpanID: parentSpanId,
|
||||||
|
StartTime: uint64(startT),
|
||||||
|
EndTime: uint64(endT),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes the OTLP formatted JSON contained in data into s.
|
||||||
|
func (s *Span) UnmarshalJSON(data []byte) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||||
|
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if t != json.Delim('{') {
|
||||||
|
return errors.New("invalid Span type")
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
keyIface, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// Empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, ok := keyIface.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid Span field: %#v", keyIface)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "traceId", "trace_id":
|
||||||
|
err = decoder.Decode(&s.TraceID)
|
||||||
|
case "spanId", "span_id":
|
||||||
|
err = decoder.Decode(&s.SpanID)
|
||||||
|
case "traceState", "trace_state":
|
||||||
|
err = decoder.Decode(&s.TraceState)
|
||||||
|
case "parentSpanId", "parent_span_id":
|
||||||
|
err = decoder.Decode(&s.ParentSpanID)
|
||||||
|
case "flags":
|
||||||
|
err = decoder.Decode(&s.Flags)
|
||||||
|
case "name":
|
||||||
|
err = decoder.Decode(&s.Name)
|
||||||
|
case "kind":
|
||||||
|
err = decoder.Decode(&s.Kind)
|
||||||
|
case "startTimeUnixNano", "start_time_unix_nano":
|
||||||
|
var val protoUint64
|
||||||
|
err = decoder.Decode(&val)
|
||||||
|
s.StartTime = time.Unix(0, int64(val.Uint64()))
|
||||||
|
case "endTimeUnixNano", "end_time_unix_nano":
|
||||||
|
var val protoUint64
|
||||||
|
err = decoder.Decode(&val)
|
||||||
|
s.EndTime = time.Unix(0, int64(val.Uint64()))
|
||||||
|
case "attributes":
|
||||||
|
err = decoder.Decode(&s.Attrs)
|
||||||
|
case "droppedAttributesCount", "dropped_attributes_count":
|
||||||
|
err = decoder.Decode(&s.DroppedAttrs)
|
||||||
|
case "events":
|
||||||
|
err = decoder.Decode(&s.Events)
|
||||||
|
case "droppedEventsCount", "dropped_events_count":
|
||||||
|
err = decoder.Decode(&s.DroppedEvents)
|
||||||
|
case "links":
|
||||||
|
err = decoder.Decode(&s.Links)
|
||||||
|
case "droppedLinksCount", "dropped_links_count":
|
||||||
|
err = decoder.Decode(&s.DroppedLinks)
|
||||||
|
case "status":
|
||||||
|
err = decoder.Decode(&s.Status)
|
||||||
|
default:
|
||||||
|
// Skip unknown.
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SpanFlags represents constants used to interpret the
|
||||||
|
// Span.flags field, which is protobuf 'fixed32' type and is to
|
||||||
|
// be used as bit-fields. Each non-zero value defined in this enum is
|
||||||
|
// a bit-mask. To extract the bit-field, for example, use an
|
||||||
|
// expression like:
|
||||||
|
//
|
||||||
|
// (span.flags & SPAN_FLAGS_TRACE_FLAGS_MASK)
|
||||||
|
//
|
||||||
|
// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions.
|
||||||
|
//
|
||||||
|
// Note that Span flags were introduced in version 1.1 of the
|
||||||
|
// OpenTelemetry protocol. Older Span producers do not set this
|
||||||
|
// field, consequently consumers should not rely on the absence of a
|
||||||
|
// particular flag bit to indicate the presence of a particular feature.
|
||||||
|
type SpanFlags int32
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Bits 0-7 are used for trace flags.
|
||||||
|
SpanFlagsTraceFlagsMask SpanFlags = 255
|
||||||
|
// Bits 8 and 9 are used to indicate that the parent span or link span is remote.
|
||||||
|
// Bit 8 (`HAS_IS_REMOTE`) indicates whether the value is known.
|
||||||
|
// Bit 9 (`IS_REMOTE`) indicates whether the span or link is remote.
|
||||||
|
SpanFlagsContextHasIsRemoteMask SpanFlags = 256
|
||||||
|
// SpanFlagsContextHasIsRemoteMask indicates the Span is remote.
|
||||||
|
SpanFlagsContextIsRemoteMask SpanFlags = 512
|
||||||
|
)
|
||||||
|
|
||||||
|
// SpanKind is the type of span. Can be used to specify additional relationships between spans
|
||||||
|
// in addition to a parent/child relationship.
|
||||||
|
type SpanKind int32
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Indicates that the span represents an internal operation within an application,
|
||||||
|
// as opposed to an operation happening at the boundaries. Default value.
|
||||||
|
SpanKindInternal SpanKind = 1
|
||||||
|
// Indicates that the span covers server-side handling of an RPC or other
|
||||||
|
// remote network request.
|
||||||
|
SpanKindServer SpanKind = 2
|
||||||
|
// Indicates that the span describes a request to some remote service.
|
||||||
|
SpanKindClient SpanKind = 3
|
||||||
|
// Indicates that the span describes a producer sending a message to a broker.
|
||||||
|
// Unlike CLIENT and SERVER, there is often no direct critical path latency relationship
|
||||||
|
// between producer and consumer spans. A PRODUCER span ends when the message was accepted
|
||||||
|
// by the broker while the logical processing of the message might span a much longer time.
|
||||||
|
SpanKindProducer SpanKind = 4
|
||||||
|
// Indicates that the span describes consumer receiving a message from a broker.
|
||||||
|
// Like the PRODUCER kind, there is often no direct critical path latency relationship
|
||||||
|
// between producer and consumer spans.
|
||||||
|
SpanKindConsumer SpanKind = 5
|
||||||
|
)
|
||||||
|
|
||||||
|
// Event is a time-stamped annotation of the span, consisting of user-supplied
|
||||||
|
// text description and key-value pairs.
|
||||||
|
type SpanEvent struct {
|
||||||
|
// time_unix_nano is the time the event occurred.
|
||||||
|
Time time.Time `json:"timeUnixNano,omitempty"`
|
||||||
|
// name of the event.
|
||||||
|
// This field is semantically required to be set to non-empty string.
|
||||||
|
Name string `json:"name,omitempty"`
|
||||||
|
// attributes is a collection of attribute key/value pairs on the event.
|
||||||
|
// Attribute keys MUST be unique (it is not allowed to have more than one
|
||||||
|
// attribute with the same key).
|
||||||
|
Attrs []Attr `json:"attributes,omitempty"`
|
||||||
|
// dropped_attributes_count is the number of dropped attributes. If the value is 0,
|
||||||
|
// then no attributes were dropped.
|
||||||
|
DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON encodes e into OTLP formatted JSON.
|
||||||
|
func (e SpanEvent) MarshalJSON() ([]byte, error) {
|
||||||
|
t := e.Time.UnixNano()
|
||||||
|
if e.Time.IsZero() || t < 0 {
|
||||||
|
t = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
type Alias SpanEvent
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Alias
|
||||||
|
Time uint64 `json:"timeUnixNano,omitempty"`
|
||||||
|
}{
|
||||||
|
Alias: Alias(e),
|
||||||
|
Time: uint64(t),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes the OTLP formatted JSON contained in data into se.
|
||||||
|
func (se *SpanEvent) UnmarshalJSON(data []byte) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||||
|
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if t != json.Delim('{') {
|
||||||
|
return errors.New("invalid SpanEvent type")
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
keyIface, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// Empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, ok := keyIface.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid SpanEvent field: %#v", keyIface)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "timeUnixNano", "time_unix_nano":
|
||||||
|
var val protoUint64
|
||||||
|
err = decoder.Decode(&val)
|
||||||
|
se.Time = time.Unix(0, int64(val.Uint64()))
|
||||||
|
case "name":
|
||||||
|
err = decoder.Decode(&se.Name)
|
||||||
|
case "attributes":
|
||||||
|
err = decoder.Decode(&se.Attrs)
|
||||||
|
case "droppedAttributesCount", "dropped_attributes_count":
|
||||||
|
err = decoder.Decode(&se.DroppedAttrs)
|
||||||
|
default:
|
||||||
|
// Skip unknown.
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// A pointer from the current span to another span in the same trace or in a
|
||||||
|
// different trace. For example, this can be used in batching operations,
|
||||||
|
// where a single batch handler processes multiple requests from different
|
||||||
|
// traces or when the handler receives a request from a different project.
|
||||||
|
type SpanLink struct {
|
||||||
|
// A unique identifier of a trace that this linked span is part of. The ID is a
|
||||||
|
// 16-byte array.
|
||||||
|
TraceID TraceID `json:"traceId,omitempty"`
|
||||||
|
// A unique identifier for the linked span. The ID is an 8-byte array.
|
||||||
|
SpanID SpanID `json:"spanId,omitempty"`
|
||||||
|
// The trace_state associated with the link.
|
||||||
|
TraceState string `json:"traceState,omitempty"`
|
||||||
|
// attributes is a collection of attribute key/value pairs on the link.
|
||||||
|
// Attribute keys MUST be unique (it is not allowed to have more than one
|
||||||
|
// attribute with the same key).
|
||||||
|
Attrs []Attr `json:"attributes,omitempty"`
|
||||||
|
// dropped_attributes_count is the number of dropped attributes. If the value is 0,
|
||||||
|
// then no attributes were dropped.
|
||||||
|
DroppedAttrs uint32 `json:"droppedAttributesCount,omitempty"`
|
||||||
|
// Flags, a bit field.
|
||||||
|
//
|
||||||
|
// Bits 0-7 (8 least significant bits) are the trace flags as defined in W3C Trace
|
||||||
|
// Context specification. To read the 8-bit W3C trace flag, use
|
||||||
|
// `flags & SPAN_FLAGS_TRACE_FLAGS_MASK`.
|
||||||
|
//
|
||||||
|
// See https://www.w3.org/TR/trace-context-2/#trace-flags for the flag definitions.
|
||||||
|
//
|
||||||
|
// Bits 8 and 9 represent the 3 states of whether the link is remote.
|
||||||
|
// The states are (unknown, is not remote, is remote).
|
||||||
|
// To read whether the value is known, use `(flags & SPAN_FLAGS_CONTEXT_HAS_IS_REMOTE_MASK) != 0`.
|
||||||
|
// To read whether the link is remote, use `(flags & SPAN_FLAGS_CONTEXT_IS_REMOTE_MASK) != 0`.
|
||||||
|
//
|
||||||
|
// Readers MUST NOT assume that bits 10-31 (22 most significant bits) will be zero.
|
||||||
|
// When creating new spans, bits 10-31 (most-significant 22-bits) MUST be zero.
|
||||||
|
//
|
||||||
|
// [Optional].
|
||||||
|
Flags uint32 `json:"flags,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes the OTLP formatted JSON contained in data into sl.
|
||||||
|
func (sl *SpanLink) UnmarshalJSON(data []byte) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||||
|
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if t != json.Delim('{') {
|
||||||
|
return errors.New("invalid SpanLink type")
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
keyIface, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// Empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, ok := keyIface.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid SpanLink field: %#v", keyIface)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "traceId", "trace_id":
|
||||||
|
err = decoder.Decode(&sl.TraceID)
|
||||||
|
case "spanId", "span_id":
|
||||||
|
err = decoder.Decode(&sl.SpanID)
|
||||||
|
case "traceState", "trace_state":
|
||||||
|
err = decoder.Decode(&sl.TraceState)
|
||||||
|
case "attributes":
|
||||||
|
err = decoder.Decode(&sl.Attrs)
|
||||||
|
case "droppedAttributesCount", "dropped_attributes_count":
|
||||||
|
err = decoder.Decode(&sl.DroppedAttrs)
|
||||||
|
case "flags":
|
||||||
|
err = decoder.Decode(&sl.Flags)
|
||||||
|
default:
|
||||||
|
// Skip unknown.
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
40
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go
generated
vendored
Normal file
40
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/status.go
generated
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package telemetry
|
||||||
|
|
||||||
|
// For the semantics of status codes see
|
||||||
|
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/api.md#set-status
|
||||||
|
type StatusCode int32
|
||||||
|
|
||||||
|
const (
|
||||||
|
// The default status.
|
||||||
|
StatusCodeUnset StatusCode = 0
|
||||||
|
// The Span has been validated by an Application developer or Operator to
|
||||||
|
// have completed successfully.
|
||||||
|
StatusCodeOK StatusCode = 1
|
||||||
|
// The Span contains an error.
|
||||||
|
StatusCodeError StatusCode = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
var statusCodeStrings = []string{
|
||||||
|
"Unset",
|
||||||
|
"OK",
|
||||||
|
"Error",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s StatusCode) String() string {
|
||||||
|
if s >= 0 && int(s) < len(statusCodeStrings) {
|
||||||
|
return statusCodeStrings[s]
|
||||||
|
}
|
||||||
|
return "<unknown telemetry.StatusCode>"
|
||||||
|
}
|
||||||
|
|
||||||
|
// The Status type defines a logical error model that is suitable for different
|
||||||
|
// programming environments, including REST APIs and RPC APIs.
|
||||||
|
type Status struct {
|
||||||
|
// A developer-facing human readable error message.
|
||||||
|
Message string `json:"message,omitempty"`
|
||||||
|
// The status code.
|
||||||
|
Code StatusCode `json:"code,omitempty"`
|
||||||
|
}
|
||||||
189
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go
generated
vendored
Normal file
189
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/traces.go
generated
vendored
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package telemetry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Traces represents the traces data that can be stored in a persistent storage,
|
||||||
|
// OR can be embedded by other protocols that transfer OTLP traces data but do
|
||||||
|
// not implement the OTLP protocol.
|
||||||
|
//
|
||||||
|
// The main difference between this message and collector protocol is that
|
||||||
|
// in this message there will not be any "control" or "metadata" specific to
|
||||||
|
// OTLP protocol.
|
||||||
|
//
|
||||||
|
// When new fields are added into this message, the OTLP request MUST be updated
|
||||||
|
// as well.
|
||||||
|
type Traces struct {
|
||||||
|
// An array of ResourceSpans.
|
||||||
|
// For data coming from a single resource this array will typically contain
|
||||||
|
// one element. Intermediary nodes that receive data from multiple origins
|
||||||
|
// typically batch the data before forwarding further and in that case this
|
||||||
|
// array will contain multiple elements.
|
||||||
|
ResourceSpans []*ResourceSpans `json:"resourceSpans,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes the OTLP formatted JSON contained in data into td.
|
||||||
|
func (td *Traces) UnmarshalJSON(data []byte) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||||
|
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if t != json.Delim('{') {
|
||||||
|
return errors.New("invalid TracesData type")
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
keyIface, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// Empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, ok := keyIface.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid TracesData field: %#v", keyIface)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "resourceSpans", "resource_spans":
|
||||||
|
err = decoder.Decode(&td.ResourceSpans)
|
||||||
|
default:
|
||||||
|
// Skip unknown.
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// A collection of ScopeSpans from a Resource.
|
||||||
|
type ResourceSpans struct {
|
||||||
|
// The resource for the spans in this message.
|
||||||
|
// If this field is not set then no resource info is known.
|
||||||
|
Resource Resource `json:"resource"`
|
||||||
|
// A list of ScopeSpans that originate from a resource.
|
||||||
|
ScopeSpans []*ScopeSpans `json:"scopeSpans,omitempty"`
|
||||||
|
// This schema_url applies to the data in the "resource" field. It does not apply
|
||||||
|
// to the data in the "scope_spans" field which have their own schema_url field.
|
||||||
|
SchemaURL string `json:"schemaUrl,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes the OTLP formatted JSON contained in data into rs.
|
||||||
|
func (rs *ResourceSpans) UnmarshalJSON(data []byte) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||||
|
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if t != json.Delim('{') {
|
||||||
|
return errors.New("invalid ResourceSpans type")
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
keyIface, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// Empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, ok := keyIface.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid ResourceSpans field: %#v", keyIface)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "resource":
|
||||||
|
err = decoder.Decode(&rs.Resource)
|
||||||
|
case "scopeSpans", "scope_spans":
|
||||||
|
err = decoder.Decode(&rs.ScopeSpans)
|
||||||
|
case "schemaUrl", "schema_url":
|
||||||
|
err = decoder.Decode(&rs.SchemaURL)
|
||||||
|
default:
|
||||||
|
// Skip unknown.
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// A collection of Spans produced by an InstrumentationScope.
|
||||||
|
type ScopeSpans struct {
|
||||||
|
// The instrumentation scope information for the spans in this message.
|
||||||
|
// Semantically when InstrumentationScope isn't set, it is equivalent with
|
||||||
|
// an empty instrumentation scope name (unknown).
|
||||||
|
Scope *Scope `json:"scope"`
|
||||||
|
// A list of Spans that originate from an instrumentation scope.
|
||||||
|
Spans []*Span `json:"spans,omitempty"`
|
||||||
|
// The Schema URL, if known. This is the identifier of the Schema that the span data
|
||||||
|
// is recorded in. To learn more about Schema URL see
|
||||||
|
// https://opentelemetry.io/docs/specs/otel/schemas/#schema-url
|
||||||
|
// This schema_url applies to all spans and span events in the "spans" field.
|
||||||
|
SchemaURL string `json:"schemaUrl,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes the OTLP formatted JSON contained in data into ss.
|
||||||
|
func (ss *ScopeSpans) UnmarshalJSON(data []byte) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||||
|
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if t != json.Delim('{') {
|
||||||
|
return errors.New("invalid ScopeSpans type")
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
keyIface, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// Empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, ok := keyIface.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid ScopeSpans field: %#v", keyIface)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "scope":
|
||||||
|
err = decoder.Decode(&ss.Scope)
|
||||||
|
case "spans":
|
||||||
|
err = decoder.Decode(&ss.Spans)
|
||||||
|
case "schemaUrl", "schema_url":
|
||||||
|
err = decoder.Decode(&ss.SchemaURL)
|
||||||
|
default:
|
||||||
|
// Skip unknown.
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
452
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go
generated
vendored
Normal file
452
vendor/go.opentelemetry.io/auto/sdk/internal/telemetry/value.go
generated
vendored
Normal file
@ -0,0 +1,452 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
//go:generate stringer -type=ValueKind -trimprefix=ValueKind
|
||||||
|
|
||||||
|
package telemetry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"cmp"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"math"
|
||||||
|
"slices"
|
||||||
|
"strconv"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
// A Value represents a structured value.
|
||||||
|
// A zero value is valid and represents an empty value.
|
||||||
|
type Value struct {
|
||||||
|
// Ensure forward compatibility by explicitly making this not comparable.
|
||||||
|
noCmp [0]func() //nolint: unused // This is indeed used.
|
||||||
|
|
||||||
|
// num holds the value for Int64, Float64, and Bool. It holds the length
|
||||||
|
// for String, Bytes, Slice, Map.
|
||||||
|
num uint64
|
||||||
|
// any holds either the KindBool, KindInt64, KindFloat64, stringptr,
|
||||||
|
// bytesptr, sliceptr, or mapptr. If KindBool, KindInt64, or KindFloat64
|
||||||
|
// then the value of Value is in num as described above. Otherwise, it
|
||||||
|
// contains the value wrapped in the appropriate type.
|
||||||
|
any any
|
||||||
|
}
|
||||||
|
|
||||||
|
type (
|
||||||
|
// sliceptr represents a value in Value.any for KindString Values.
|
||||||
|
stringptr *byte
|
||||||
|
// bytesptr represents a value in Value.any for KindBytes Values.
|
||||||
|
bytesptr *byte
|
||||||
|
// sliceptr represents a value in Value.any for KindSlice Values.
|
||||||
|
sliceptr *Value
|
||||||
|
// mapptr represents a value in Value.any for KindMap Values.
|
||||||
|
mapptr *Attr
|
||||||
|
)
|
||||||
|
|
||||||
|
// ValueKind is the kind of a [Value].
|
||||||
|
type ValueKind int
|
||||||
|
|
||||||
|
// ValueKind values.
|
||||||
|
const (
|
||||||
|
ValueKindEmpty ValueKind = iota
|
||||||
|
ValueKindBool
|
||||||
|
ValueKindFloat64
|
||||||
|
ValueKindInt64
|
||||||
|
ValueKindString
|
||||||
|
ValueKindBytes
|
||||||
|
ValueKindSlice
|
||||||
|
ValueKindMap
|
||||||
|
)
|
||||||
|
|
||||||
|
var valueKindStrings = []string{
|
||||||
|
"Empty",
|
||||||
|
"Bool",
|
||||||
|
"Float64",
|
||||||
|
"Int64",
|
||||||
|
"String",
|
||||||
|
"Bytes",
|
||||||
|
"Slice",
|
||||||
|
"Map",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k ValueKind) String() string {
|
||||||
|
if k >= 0 && int(k) < len(valueKindStrings) {
|
||||||
|
return valueKindStrings[k]
|
||||||
|
}
|
||||||
|
return "<unknown telemetry.ValueKind>"
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringValue returns a new [Value] for a string.
|
||||||
|
func StringValue(v string) Value {
|
||||||
|
return Value{
|
||||||
|
num: uint64(len(v)),
|
||||||
|
any: stringptr(unsafe.StringData(v)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntValue returns a [Value] for an int.
|
||||||
|
func IntValue(v int) Value { return Int64Value(int64(v)) }
|
||||||
|
|
||||||
|
// Int64Value returns a [Value] for an int64.
|
||||||
|
func Int64Value(v int64) Value {
|
||||||
|
return Value{num: uint64(v), any: ValueKindInt64}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float64Value returns a [Value] for a float64.
|
||||||
|
func Float64Value(v float64) Value {
|
||||||
|
return Value{num: math.Float64bits(v), any: ValueKindFloat64}
|
||||||
|
}
|
||||||
|
|
||||||
|
// BoolValue returns a [Value] for a bool.
|
||||||
|
func BoolValue(v bool) Value { //nolint:revive // Not a control flag.
|
||||||
|
var n uint64
|
||||||
|
if v {
|
||||||
|
n = 1
|
||||||
|
}
|
||||||
|
return Value{num: n, any: ValueKindBool}
|
||||||
|
}
|
||||||
|
|
||||||
|
// BytesValue returns a [Value] for a byte slice. The passed slice must not be
|
||||||
|
// changed after it is passed.
|
||||||
|
func BytesValue(v []byte) Value {
|
||||||
|
return Value{
|
||||||
|
num: uint64(len(v)),
|
||||||
|
any: bytesptr(unsafe.SliceData(v)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SliceValue returns a [Value] for a slice of [Value]. The passed slice must
|
||||||
|
// not be changed after it is passed.
|
||||||
|
func SliceValue(vs ...Value) Value {
|
||||||
|
return Value{
|
||||||
|
num: uint64(len(vs)),
|
||||||
|
any: sliceptr(unsafe.SliceData(vs)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MapValue returns a new [Value] for a slice of key-value pairs. The passed
|
||||||
|
// slice must not be changed after it is passed.
|
||||||
|
func MapValue(kvs ...Attr) Value {
|
||||||
|
return Value{
|
||||||
|
num: uint64(len(kvs)),
|
||||||
|
any: mapptr(unsafe.SliceData(kvs)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AsString returns the value held by v as a string.
|
||||||
|
func (v Value) AsString() string {
|
||||||
|
if sp, ok := v.any.(stringptr); ok {
|
||||||
|
return unsafe.String(sp, v.num)
|
||||||
|
}
|
||||||
|
// TODO: error handle
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// asString returns the value held by v as a string. It will panic if the Value
|
||||||
|
// is not KindString.
|
||||||
|
func (v Value) asString() string {
|
||||||
|
return unsafe.String(v.any.(stringptr), v.num)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AsInt64 returns the value held by v as an int64.
|
||||||
|
func (v Value) AsInt64() int64 {
|
||||||
|
if v.Kind() != ValueKindInt64 {
|
||||||
|
// TODO: error handle
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return v.asInt64()
|
||||||
|
}
|
||||||
|
|
||||||
|
// asInt64 returns the value held by v as an int64. If v is not of KindInt64,
|
||||||
|
// this will return garbage.
|
||||||
|
func (v Value) asInt64() int64 {
|
||||||
|
// Assumes v.num was a valid int64 (overflow not checked).
|
||||||
|
return int64(v.num) // nolint: gosec
|
||||||
|
}
|
||||||
|
|
||||||
|
// AsBool returns the value held by v as a bool.
|
||||||
|
func (v Value) AsBool() bool {
|
||||||
|
if v.Kind() != ValueKindBool {
|
||||||
|
// TODO: error handle
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return v.asBool()
|
||||||
|
}
|
||||||
|
|
||||||
|
// asBool returns the value held by v as a bool. If v is not of KindBool, this
|
||||||
|
// will return garbage.
|
||||||
|
func (v Value) asBool() bool { return v.num == 1 }
|
||||||
|
|
||||||
|
// AsFloat64 returns the value held by v as a float64.
|
||||||
|
func (v Value) AsFloat64() float64 {
|
||||||
|
if v.Kind() != ValueKindFloat64 {
|
||||||
|
// TODO: error handle
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return v.asFloat64()
|
||||||
|
}
|
||||||
|
|
||||||
|
// asFloat64 returns the value held by v as a float64. If v is not of
|
||||||
|
// KindFloat64, this will return garbage.
|
||||||
|
func (v Value) asFloat64() float64 { return math.Float64frombits(v.num) }
|
||||||
|
|
||||||
|
// AsBytes returns the value held by v as a []byte.
|
||||||
|
func (v Value) AsBytes() []byte {
|
||||||
|
if sp, ok := v.any.(bytesptr); ok {
|
||||||
|
return unsafe.Slice((*byte)(sp), v.num)
|
||||||
|
}
|
||||||
|
// TODO: error handle
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// asBytes returns the value held by v as a []byte. It will panic if the Value
|
||||||
|
// is not KindBytes.
|
||||||
|
func (v Value) asBytes() []byte {
|
||||||
|
return unsafe.Slice((*byte)(v.any.(bytesptr)), v.num)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AsSlice returns the value held by v as a []Value.
|
||||||
|
func (v Value) AsSlice() []Value {
|
||||||
|
if sp, ok := v.any.(sliceptr); ok {
|
||||||
|
return unsafe.Slice((*Value)(sp), v.num)
|
||||||
|
}
|
||||||
|
// TODO: error handle
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// asSlice returns the value held by v as a []Value. It will panic if the Value
|
||||||
|
// is not KindSlice.
|
||||||
|
func (v Value) asSlice() []Value {
|
||||||
|
return unsafe.Slice((*Value)(v.any.(sliceptr)), v.num)
|
||||||
|
}
|
||||||
|
|
||||||
|
// AsMap returns the value held by v as a []Attr.
|
||||||
|
func (v Value) AsMap() []Attr {
|
||||||
|
if sp, ok := v.any.(mapptr); ok {
|
||||||
|
return unsafe.Slice((*Attr)(sp), v.num)
|
||||||
|
}
|
||||||
|
// TODO: error handle
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// asMap returns the value held by v as a []Attr. It will panic if the
|
||||||
|
// Value is not KindMap.
|
||||||
|
func (v Value) asMap() []Attr {
|
||||||
|
return unsafe.Slice((*Attr)(v.any.(mapptr)), v.num)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Kind returns the Kind of v.
|
||||||
|
func (v Value) Kind() ValueKind {
|
||||||
|
switch x := v.any.(type) {
|
||||||
|
case ValueKind:
|
||||||
|
return x
|
||||||
|
case stringptr:
|
||||||
|
return ValueKindString
|
||||||
|
case bytesptr:
|
||||||
|
return ValueKindBytes
|
||||||
|
case sliceptr:
|
||||||
|
return ValueKindSlice
|
||||||
|
case mapptr:
|
||||||
|
return ValueKindMap
|
||||||
|
default:
|
||||||
|
return ValueKindEmpty
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Empty returns if v does not hold any value.
|
||||||
|
func (v Value) Empty() bool { return v.Kind() == ValueKindEmpty }
|
||||||
|
|
||||||
|
// Equal returns if v is equal to w.
|
||||||
|
func (v Value) Equal(w Value) bool {
|
||||||
|
k1 := v.Kind()
|
||||||
|
k2 := w.Kind()
|
||||||
|
if k1 != k2 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
switch k1 {
|
||||||
|
case ValueKindInt64, ValueKindBool:
|
||||||
|
return v.num == w.num
|
||||||
|
case ValueKindString:
|
||||||
|
return v.asString() == w.asString()
|
||||||
|
case ValueKindFloat64:
|
||||||
|
return v.asFloat64() == w.asFloat64()
|
||||||
|
case ValueKindSlice:
|
||||||
|
return slices.EqualFunc(v.asSlice(), w.asSlice(), Value.Equal)
|
||||||
|
case ValueKindMap:
|
||||||
|
sv := sortMap(v.asMap())
|
||||||
|
sw := sortMap(w.asMap())
|
||||||
|
return slices.EqualFunc(sv, sw, Attr.Equal)
|
||||||
|
case ValueKindBytes:
|
||||||
|
return bytes.Equal(v.asBytes(), w.asBytes())
|
||||||
|
case ValueKindEmpty:
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
// TODO: error handle
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func sortMap(m []Attr) []Attr {
|
||||||
|
sm := make([]Attr, len(m))
|
||||||
|
copy(sm, m)
|
||||||
|
slices.SortFunc(sm, func(a, b Attr) int {
|
||||||
|
return cmp.Compare(a.Key, b.Key)
|
||||||
|
})
|
||||||
|
|
||||||
|
return sm
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns Value's value as a string, formatted like [fmt.Sprint].
|
||||||
|
//
|
||||||
|
// The returned string is meant for debugging;
|
||||||
|
// the string representation is not stable.
|
||||||
|
func (v Value) String() string {
|
||||||
|
switch v.Kind() {
|
||||||
|
case ValueKindString:
|
||||||
|
return v.asString()
|
||||||
|
case ValueKindInt64:
|
||||||
|
// Assumes v.num was a valid int64 (overflow not checked).
|
||||||
|
return strconv.FormatInt(int64(v.num), 10) // nolint: gosec
|
||||||
|
case ValueKindFloat64:
|
||||||
|
return strconv.FormatFloat(v.asFloat64(), 'g', -1, 64)
|
||||||
|
case ValueKindBool:
|
||||||
|
return strconv.FormatBool(v.asBool())
|
||||||
|
case ValueKindBytes:
|
||||||
|
return fmt.Sprint(v.asBytes())
|
||||||
|
case ValueKindMap:
|
||||||
|
return fmt.Sprint(v.asMap())
|
||||||
|
case ValueKindSlice:
|
||||||
|
return fmt.Sprint(v.asSlice())
|
||||||
|
case ValueKindEmpty:
|
||||||
|
return "<nil>"
|
||||||
|
default:
|
||||||
|
// Try to handle this as gracefully as possible.
|
||||||
|
//
|
||||||
|
// Don't panic here. The goal here is to have developers find this
|
||||||
|
// first if a slog.Kind is is not handled. It is
|
||||||
|
// preferable to have user's open issue asking why their attributes
|
||||||
|
// have a "unhandled: " prefix than say that their code is panicking.
|
||||||
|
return fmt.Sprintf("<unhandled telemetry.ValueKind: %s>", v.Kind())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON encodes v into OTLP formatted JSON.
|
||||||
|
func (v *Value) MarshalJSON() ([]byte, error) {
|
||||||
|
switch v.Kind() {
|
||||||
|
case ValueKindString:
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Value string `json:"stringValue"`
|
||||||
|
}{v.asString()})
|
||||||
|
case ValueKindInt64:
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Value string `json:"intValue"`
|
||||||
|
}{strconv.FormatInt(int64(v.num), 10)})
|
||||||
|
case ValueKindFloat64:
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Value float64 `json:"doubleValue"`
|
||||||
|
}{v.asFloat64()})
|
||||||
|
case ValueKindBool:
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Value bool `json:"boolValue"`
|
||||||
|
}{v.asBool()})
|
||||||
|
case ValueKindBytes:
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Value []byte `json:"bytesValue"`
|
||||||
|
}{v.asBytes()})
|
||||||
|
case ValueKindMap:
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Value struct {
|
||||||
|
Values []Attr `json:"values"`
|
||||||
|
} `json:"kvlistValue"`
|
||||||
|
}{struct {
|
||||||
|
Values []Attr `json:"values"`
|
||||||
|
}{v.asMap()}})
|
||||||
|
case ValueKindSlice:
|
||||||
|
return json.Marshal(struct {
|
||||||
|
Value struct {
|
||||||
|
Values []Value `json:"values"`
|
||||||
|
} `json:"arrayValue"`
|
||||||
|
}{struct {
|
||||||
|
Values []Value `json:"values"`
|
||||||
|
}{v.asSlice()}})
|
||||||
|
case ValueKindEmpty:
|
||||||
|
return nil, nil
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unknown Value kind: %s", v.Kind().String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON decodes the OTLP formatted JSON contained in data into v.
|
||||||
|
func (v *Value) UnmarshalJSON(data []byte) error {
|
||||||
|
decoder := json.NewDecoder(bytes.NewReader(data))
|
||||||
|
|
||||||
|
t, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if t != json.Delim('{') {
|
||||||
|
return errors.New("invalid Value type")
|
||||||
|
}
|
||||||
|
|
||||||
|
for decoder.More() {
|
||||||
|
keyIface, err := decoder.Token()
|
||||||
|
if err != nil {
|
||||||
|
if errors.Is(err, io.EOF) {
|
||||||
|
// Empty.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
key, ok := keyIface.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid Value key: %#v", keyIface)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch key {
|
||||||
|
case "stringValue", "string_value":
|
||||||
|
var val string
|
||||||
|
err = decoder.Decode(&val)
|
||||||
|
*v = StringValue(val)
|
||||||
|
case "boolValue", "bool_value":
|
||||||
|
var val bool
|
||||||
|
err = decoder.Decode(&val)
|
||||||
|
*v = BoolValue(val)
|
||||||
|
case "intValue", "int_value":
|
||||||
|
var val protoInt64
|
||||||
|
err = decoder.Decode(&val)
|
||||||
|
*v = Int64Value(val.Int64())
|
||||||
|
case "doubleValue", "double_value":
|
||||||
|
var val float64
|
||||||
|
err = decoder.Decode(&val)
|
||||||
|
*v = Float64Value(val)
|
||||||
|
case "bytesValue", "bytes_value":
|
||||||
|
var val64 string
|
||||||
|
if err := decoder.Decode(&val64); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
var val []byte
|
||||||
|
val, err = base64.StdEncoding.DecodeString(val64)
|
||||||
|
*v = BytesValue(val)
|
||||||
|
case "arrayValue", "array_value":
|
||||||
|
var val struct{ Values []Value }
|
||||||
|
err = decoder.Decode(&val)
|
||||||
|
*v = SliceValue(val.Values...)
|
||||||
|
case "kvlistValue", "kvlist_value":
|
||||||
|
var val struct{ Values []Attr }
|
||||||
|
err = decoder.Decode(&val)
|
||||||
|
*v = MapValue(val.Values...)
|
||||||
|
default:
|
||||||
|
// Skip unknown.
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// Use first valid. Ignore the rest.
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only unknown fields. Return nil without unmarshaling any value.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
94
vendor/go.opentelemetry.io/auto/sdk/limit.go
generated
vendored
Normal file
94
vendor/go.opentelemetry.io/auto/sdk/limit.go
generated
vendored
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package sdk
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// maxSpan are the span limits resolved during startup.
|
||||||
|
var maxSpan = newSpanLimits()
|
||||||
|
|
||||||
|
type spanLimits struct {
|
||||||
|
// Attrs is the number of allowed attributes for a span.
|
||||||
|
//
|
||||||
|
// This is resolved from the environment variable value for the
|
||||||
|
// OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT key if it exists. Otherwise, the
|
||||||
|
// environment variable value for OTEL_ATTRIBUTE_COUNT_LIMIT, or 128 if
|
||||||
|
// that is not set, is used.
|
||||||
|
Attrs int
|
||||||
|
// AttrValueLen is the maximum attribute value length allowed for a span.
|
||||||
|
//
|
||||||
|
// This is resolved from the environment variable value for the
|
||||||
|
// OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT key if it exists. Otherwise, the
|
||||||
|
// environment variable value for OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT, or -1
|
||||||
|
// if that is not set, is used.
|
||||||
|
AttrValueLen int
|
||||||
|
// Events is the number of allowed events for a span.
|
||||||
|
//
|
||||||
|
// This is resolved from the environment variable value for the
|
||||||
|
// OTEL_SPAN_EVENT_COUNT_LIMIT key, or 128 is used if that is not set.
|
||||||
|
Events int
|
||||||
|
// EventAttrs is the number of allowed attributes for a span event.
|
||||||
|
//
|
||||||
|
// The is resolved from the environment variable value for the
|
||||||
|
// OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT key, or 128 is used if that is not set.
|
||||||
|
EventAttrs int
|
||||||
|
// Links is the number of allowed Links for a span.
|
||||||
|
//
|
||||||
|
// This is resolved from the environment variable value for the
|
||||||
|
// OTEL_SPAN_LINK_COUNT_LIMIT, or 128 is used if that is not set.
|
||||||
|
Links int
|
||||||
|
// LinkAttrs is the number of allowed attributes for a span link.
|
||||||
|
//
|
||||||
|
// This is resolved from the environment variable value for the
|
||||||
|
// OTEL_LINK_ATTRIBUTE_COUNT_LIMIT, or 128 is used if that is not set.
|
||||||
|
LinkAttrs int
|
||||||
|
}
|
||||||
|
|
||||||
|
func newSpanLimits() spanLimits {
|
||||||
|
return spanLimits{
|
||||||
|
Attrs: firstEnv(
|
||||||
|
128,
|
||||||
|
"OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT",
|
||||||
|
"OTEL_ATTRIBUTE_COUNT_LIMIT",
|
||||||
|
),
|
||||||
|
AttrValueLen: firstEnv(
|
||||||
|
-1, // Unlimited.
|
||||||
|
"OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT",
|
||||||
|
"OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT",
|
||||||
|
),
|
||||||
|
Events: firstEnv(128, "OTEL_SPAN_EVENT_COUNT_LIMIT"),
|
||||||
|
EventAttrs: firstEnv(128, "OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT"),
|
||||||
|
Links: firstEnv(128, "OTEL_SPAN_LINK_COUNT_LIMIT"),
|
||||||
|
LinkAttrs: firstEnv(128, "OTEL_LINK_ATTRIBUTE_COUNT_LIMIT"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// firstEnv returns the parsed integer value of the first matching environment
|
||||||
|
// variable from keys. The defaultVal is returned if the value is not an
|
||||||
|
// integer or no match is found.
|
||||||
|
func firstEnv(defaultVal int, keys ...string) int {
|
||||||
|
for _, key := range keys {
|
||||||
|
strV := os.Getenv(key)
|
||||||
|
if strV == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
v, err := strconv.Atoi(strV)
|
||||||
|
if err == nil {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
slog.Warn(
|
||||||
|
"invalid limit environment variable",
|
||||||
|
"error", err,
|
||||||
|
"key", key,
|
||||||
|
"value", strV,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultVal
|
||||||
|
}
|
||||||
432
vendor/go.opentelemetry.io/auto/sdk/span.go
generated
vendored
Normal file
432
vendor/go.opentelemetry.io/auto/sdk/span.go
generated
vendored
Normal file
@ -0,0 +1,432 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package sdk
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
|
"time"
|
||||||
|
"unicode/utf8"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel/attribute"
|
||||||
|
"go.opentelemetry.io/otel/codes"
|
||||||
|
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
|
||||||
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
"go.opentelemetry.io/otel/trace/noop"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/auto/sdk/internal/telemetry"
|
||||||
|
)
|
||||||
|
|
||||||
|
type span struct {
|
||||||
|
noop.Span
|
||||||
|
|
||||||
|
spanContext trace.SpanContext
|
||||||
|
sampled atomic.Bool
|
||||||
|
|
||||||
|
mu sync.Mutex
|
||||||
|
traces *telemetry.Traces
|
||||||
|
span *telemetry.Span
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *span) SpanContext() trace.SpanContext {
|
||||||
|
if s == nil {
|
||||||
|
return trace.SpanContext{}
|
||||||
|
}
|
||||||
|
// s.spanContext is immutable, do not acquire lock s.mu.
|
||||||
|
return s.spanContext
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *span) IsRecording() bool {
|
||||||
|
if s == nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return s.sampled.Load()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *span) SetStatus(c codes.Code, msg string) {
|
||||||
|
if s == nil || !s.sampled.Load() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
if s.span.Status == nil {
|
||||||
|
s.span.Status = new(telemetry.Status)
|
||||||
|
}
|
||||||
|
|
||||||
|
s.span.Status.Message = msg
|
||||||
|
|
||||||
|
switch c {
|
||||||
|
case codes.Unset:
|
||||||
|
s.span.Status.Code = telemetry.StatusCodeUnset
|
||||||
|
case codes.Error:
|
||||||
|
s.span.Status.Code = telemetry.StatusCodeError
|
||||||
|
case codes.Ok:
|
||||||
|
s.span.Status.Code = telemetry.StatusCodeOK
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *span) SetAttributes(attrs ...attribute.KeyValue) {
|
||||||
|
if s == nil || !s.sampled.Load() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
limit := maxSpan.Attrs
|
||||||
|
if limit == 0 {
|
||||||
|
// No attributes allowed.
|
||||||
|
s.span.DroppedAttrs += uint32(len(attrs))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
m := make(map[string]int)
|
||||||
|
for i, a := range s.span.Attrs {
|
||||||
|
m[a.Key] = i
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, a := range attrs {
|
||||||
|
val := convAttrValue(a.Value)
|
||||||
|
if val.Empty() {
|
||||||
|
s.span.DroppedAttrs++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if idx, ok := m[string(a.Key)]; ok {
|
||||||
|
s.span.Attrs[idx] = telemetry.Attr{
|
||||||
|
Key: string(a.Key),
|
||||||
|
Value: val,
|
||||||
|
}
|
||||||
|
} else if limit < 0 || len(s.span.Attrs) < limit {
|
||||||
|
s.span.Attrs = append(s.span.Attrs, telemetry.Attr{
|
||||||
|
Key: string(a.Key),
|
||||||
|
Value: val,
|
||||||
|
})
|
||||||
|
m[string(a.Key)] = len(s.span.Attrs) - 1
|
||||||
|
} else {
|
||||||
|
s.span.DroppedAttrs++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// convCappedAttrs converts up to limit attrs into a []telemetry.Attr. The
|
||||||
|
// number of dropped attributes is also returned.
|
||||||
|
func convCappedAttrs(limit int, attrs []attribute.KeyValue) ([]telemetry.Attr, uint32) {
|
||||||
|
if limit == 0 {
|
||||||
|
return nil, uint32(len(attrs))
|
||||||
|
}
|
||||||
|
|
||||||
|
if limit < 0 {
|
||||||
|
// Unlimited.
|
||||||
|
return convAttrs(attrs), 0
|
||||||
|
}
|
||||||
|
|
||||||
|
limit = min(len(attrs), limit)
|
||||||
|
return convAttrs(attrs[:limit]), uint32(len(attrs) - limit)
|
||||||
|
}
|
||||||
|
|
||||||
|
func convAttrs(attrs []attribute.KeyValue) []telemetry.Attr {
|
||||||
|
if len(attrs) == 0 {
|
||||||
|
// Avoid allocations if not necessary.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
out := make([]telemetry.Attr, 0, len(attrs))
|
||||||
|
for _, attr := range attrs {
|
||||||
|
key := string(attr.Key)
|
||||||
|
val := convAttrValue(attr.Value)
|
||||||
|
if val.Empty() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
out = append(out, telemetry.Attr{Key: key, Value: val})
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func convAttrValue(value attribute.Value) telemetry.Value {
|
||||||
|
switch value.Type() {
|
||||||
|
case attribute.BOOL:
|
||||||
|
return telemetry.BoolValue(value.AsBool())
|
||||||
|
case attribute.INT64:
|
||||||
|
return telemetry.Int64Value(value.AsInt64())
|
||||||
|
case attribute.FLOAT64:
|
||||||
|
return telemetry.Float64Value(value.AsFloat64())
|
||||||
|
case attribute.STRING:
|
||||||
|
v := truncate(maxSpan.AttrValueLen, value.AsString())
|
||||||
|
return telemetry.StringValue(v)
|
||||||
|
case attribute.BOOLSLICE:
|
||||||
|
slice := value.AsBoolSlice()
|
||||||
|
out := make([]telemetry.Value, 0, len(slice))
|
||||||
|
for _, v := range slice {
|
||||||
|
out = append(out, telemetry.BoolValue(v))
|
||||||
|
}
|
||||||
|
return telemetry.SliceValue(out...)
|
||||||
|
case attribute.INT64SLICE:
|
||||||
|
slice := value.AsInt64Slice()
|
||||||
|
out := make([]telemetry.Value, 0, len(slice))
|
||||||
|
for _, v := range slice {
|
||||||
|
out = append(out, telemetry.Int64Value(v))
|
||||||
|
}
|
||||||
|
return telemetry.SliceValue(out...)
|
||||||
|
case attribute.FLOAT64SLICE:
|
||||||
|
slice := value.AsFloat64Slice()
|
||||||
|
out := make([]telemetry.Value, 0, len(slice))
|
||||||
|
for _, v := range slice {
|
||||||
|
out = append(out, telemetry.Float64Value(v))
|
||||||
|
}
|
||||||
|
return telemetry.SliceValue(out...)
|
||||||
|
case attribute.STRINGSLICE:
|
||||||
|
slice := value.AsStringSlice()
|
||||||
|
out := make([]telemetry.Value, 0, len(slice))
|
||||||
|
for _, v := range slice {
|
||||||
|
v = truncate(maxSpan.AttrValueLen, v)
|
||||||
|
out = append(out, telemetry.StringValue(v))
|
||||||
|
}
|
||||||
|
return telemetry.SliceValue(out...)
|
||||||
|
}
|
||||||
|
return telemetry.Value{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// truncate returns a truncated version of s such that it contains less than
|
||||||
|
// the limit number of characters. Truncation is applied by returning the limit
|
||||||
|
// number of valid characters contained in s.
|
||||||
|
//
|
||||||
|
// If limit is negative, it returns the original string.
|
||||||
|
//
|
||||||
|
// UTF-8 is supported. When truncating, all invalid characters are dropped
|
||||||
|
// before applying truncation.
|
||||||
|
//
|
||||||
|
// If s already contains less than the limit number of bytes, it is returned
|
||||||
|
// unchanged. No invalid characters are removed.
|
||||||
|
func truncate(limit int, s string) string {
|
||||||
|
// This prioritize performance in the following order based on the most
|
||||||
|
// common expected use-cases.
|
||||||
|
//
|
||||||
|
// - Short values less than the default limit (128).
|
||||||
|
// - Strings with valid encodings that exceed the limit.
|
||||||
|
// - No limit.
|
||||||
|
// - Strings with invalid encodings that exceed the limit.
|
||||||
|
if limit < 0 || len(s) <= limit {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// Optimistically, assume all valid UTF-8.
|
||||||
|
var b strings.Builder
|
||||||
|
count := 0
|
||||||
|
for i, c := range s {
|
||||||
|
if c != utf8.RuneError {
|
||||||
|
count++
|
||||||
|
if count > limit {
|
||||||
|
return s[:i]
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
_, size := utf8.DecodeRuneInString(s[i:])
|
||||||
|
if size == 1 {
|
||||||
|
// Invalid encoding.
|
||||||
|
b.Grow(len(s) - 1)
|
||||||
|
_, _ = b.WriteString(s[:i])
|
||||||
|
s = s[i:]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fast-path, no invalid input.
|
||||||
|
if b.Cap() == 0 {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// Truncate while validating UTF-8.
|
||||||
|
for i := 0; i < len(s) && count < limit; {
|
||||||
|
c := s[i]
|
||||||
|
if c < utf8.RuneSelf {
|
||||||
|
// Optimization for single byte runes (common case).
|
||||||
|
_ = b.WriteByte(c)
|
||||||
|
i++
|
||||||
|
count++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
_, size := utf8.DecodeRuneInString(s[i:])
|
||||||
|
if size == 1 {
|
||||||
|
// We checked for all 1-byte runes above, this is a RuneError.
|
||||||
|
i++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _ = b.WriteString(s[i : i+size])
|
||||||
|
i += size
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
|
||||||
|
return b.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *span) End(opts ...trace.SpanEndOption) {
|
||||||
|
if s == nil || !s.sampled.Swap(false) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// s.end exists so the lock (s.mu) is not held while s.ended is called.
|
||||||
|
s.ended(s.end(opts))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *span) end(opts []trace.SpanEndOption) []byte {
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
cfg := trace.NewSpanEndConfig(opts...)
|
||||||
|
if t := cfg.Timestamp(); !t.IsZero() {
|
||||||
|
s.span.EndTime = cfg.Timestamp()
|
||||||
|
} else {
|
||||||
|
s.span.EndTime = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
b, _ := json.Marshal(s.traces) // TODO: do not ignore this error.
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expected to be implemented in eBPF.
|
||||||
|
//
|
||||||
|
//go:noinline
|
||||||
|
func (*span) ended(buf []byte) { ended(buf) }
|
||||||
|
|
||||||
|
// ended is used for testing.
|
||||||
|
var ended = func([]byte) {}
|
||||||
|
|
||||||
|
func (s *span) RecordError(err error, opts ...trace.EventOption) {
|
||||||
|
if s == nil || err == nil || !s.sampled.Load() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg := trace.NewEventConfig(opts...)
|
||||||
|
|
||||||
|
attrs := cfg.Attributes()
|
||||||
|
attrs = append(attrs,
|
||||||
|
semconv.ExceptionType(typeStr(err)),
|
||||||
|
semconv.ExceptionMessage(err.Error()),
|
||||||
|
)
|
||||||
|
if cfg.StackTrace() {
|
||||||
|
buf := make([]byte, 2048)
|
||||||
|
n := runtime.Stack(buf, false)
|
||||||
|
attrs = append(attrs, semconv.ExceptionStacktrace(string(buf[0:n])))
|
||||||
|
}
|
||||||
|
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
s.addEvent(semconv.ExceptionEventName, cfg.Timestamp(), attrs)
|
||||||
|
}
|
||||||
|
|
||||||
|
func typeStr(i any) string {
|
||||||
|
t := reflect.TypeOf(i)
|
||||||
|
if t.PkgPath() == "" && t.Name() == "" {
|
||||||
|
// Likely a builtin type.
|
||||||
|
return t.String()
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%s.%s", t.PkgPath(), t.Name())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *span) AddEvent(name string, opts ...trace.EventOption) {
|
||||||
|
if s == nil || !s.sampled.Load() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg := trace.NewEventConfig(opts...)
|
||||||
|
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
s.addEvent(name, cfg.Timestamp(), cfg.Attributes())
|
||||||
|
}
|
||||||
|
|
||||||
|
// addEvent adds an event with name and attrs at tStamp to the span. The span
|
||||||
|
// lock (s.mu) needs to be held by the caller.
|
||||||
|
func (s *span) addEvent(name string, tStamp time.Time, attrs []attribute.KeyValue) {
|
||||||
|
limit := maxSpan.Events
|
||||||
|
|
||||||
|
if limit == 0 {
|
||||||
|
s.span.DroppedEvents++
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if limit > 0 && len(s.span.Events) == limit {
|
||||||
|
// Drop head while avoiding allocation of more capacity.
|
||||||
|
copy(s.span.Events[:limit-1], s.span.Events[1:])
|
||||||
|
s.span.Events = s.span.Events[:limit-1]
|
||||||
|
s.span.DroppedEvents++
|
||||||
|
}
|
||||||
|
|
||||||
|
e := &telemetry.SpanEvent{Time: tStamp, Name: name}
|
||||||
|
e.Attrs, e.DroppedAttrs = convCappedAttrs(maxSpan.EventAttrs, attrs)
|
||||||
|
|
||||||
|
s.span.Events = append(s.span.Events, e)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *span) AddLink(link trace.Link) {
|
||||||
|
if s == nil || !s.sampled.Load() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
l := maxSpan.Links
|
||||||
|
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
if l == 0 {
|
||||||
|
s.span.DroppedLinks++
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if l > 0 && len(s.span.Links) == l {
|
||||||
|
// Drop head while avoiding allocation of more capacity.
|
||||||
|
copy(s.span.Links[:l-1], s.span.Links[1:])
|
||||||
|
s.span.Links = s.span.Links[:l-1]
|
||||||
|
s.span.DroppedLinks++
|
||||||
|
}
|
||||||
|
|
||||||
|
s.span.Links = append(s.span.Links, convLink(link))
|
||||||
|
}
|
||||||
|
|
||||||
|
func convLinks(links []trace.Link) []*telemetry.SpanLink {
|
||||||
|
out := make([]*telemetry.SpanLink, 0, len(links))
|
||||||
|
for _, link := range links {
|
||||||
|
out = append(out, convLink(link))
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func convLink(link trace.Link) *telemetry.SpanLink {
|
||||||
|
l := &telemetry.SpanLink{
|
||||||
|
TraceID: telemetry.TraceID(link.SpanContext.TraceID()),
|
||||||
|
SpanID: telemetry.SpanID(link.SpanContext.SpanID()),
|
||||||
|
TraceState: link.SpanContext.TraceState().String(),
|
||||||
|
Flags: uint32(link.SpanContext.TraceFlags()),
|
||||||
|
}
|
||||||
|
l.Attrs, l.DroppedAttrs = convCappedAttrs(maxSpan.LinkAttrs, link.Attributes)
|
||||||
|
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *span) SetName(name string) {
|
||||||
|
if s == nil || !s.sampled.Load() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
|
||||||
|
s.span.Name = name
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*span) TracerProvider() trace.TracerProvider { return TracerProvider() }
|
||||||
124
vendor/go.opentelemetry.io/auto/sdk/tracer.go
generated
vendored
Normal file
124
vendor/go.opentelemetry.io/auto/sdk/tracer.go
generated
vendored
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package sdk
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
"go.opentelemetry.io/otel/trace/noop"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/auto/sdk/internal/telemetry"
|
||||||
|
)
|
||||||
|
|
||||||
|
type tracer struct {
|
||||||
|
noop.Tracer
|
||||||
|
|
||||||
|
name, schemaURL, version string
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ trace.Tracer = tracer{}
|
||||||
|
|
||||||
|
func (t tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span) {
|
||||||
|
var psc trace.SpanContext
|
||||||
|
sampled := true
|
||||||
|
span := new(span)
|
||||||
|
|
||||||
|
// Ask eBPF for sampling decision and span context info.
|
||||||
|
t.start(ctx, span, &psc, &sampled, &span.spanContext)
|
||||||
|
|
||||||
|
span.sampled.Store(sampled)
|
||||||
|
|
||||||
|
ctx = trace.ContextWithSpan(ctx, span)
|
||||||
|
|
||||||
|
if sampled {
|
||||||
|
// Only build traces if sampled.
|
||||||
|
cfg := trace.NewSpanStartConfig(opts...)
|
||||||
|
span.traces, span.span = t.traces(name, cfg, span.spanContext, psc)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx, span
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expected to be implemented in eBPF.
|
||||||
|
//
|
||||||
|
//go:noinline
|
||||||
|
func (t *tracer) start(
|
||||||
|
ctx context.Context,
|
||||||
|
spanPtr *span,
|
||||||
|
psc *trace.SpanContext,
|
||||||
|
sampled *bool,
|
||||||
|
sc *trace.SpanContext,
|
||||||
|
) {
|
||||||
|
start(ctx, spanPtr, psc, sampled, sc)
|
||||||
|
}
|
||||||
|
|
||||||
|
// start is used for testing.
|
||||||
|
var start = func(context.Context, *span, *trace.SpanContext, *bool, *trace.SpanContext) {}
|
||||||
|
|
||||||
|
func (t tracer) traces(name string, cfg trace.SpanConfig, sc, psc trace.SpanContext) (*telemetry.Traces, *telemetry.Span) {
|
||||||
|
span := &telemetry.Span{
|
||||||
|
TraceID: telemetry.TraceID(sc.TraceID()),
|
||||||
|
SpanID: telemetry.SpanID(sc.SpanID()),
|
||||||
|
Flags: uint32(sc.TraceFlags()),
|
||||||
|
TraceState: sc.TraceState().String(),
|
||||||
|
ParentSpanID: telemetry.SpanID(psc.SpanID()),
|
||||||
|
Name: name,
|
||||||
|
Kind: spanKind(cfg.SpanKind()),
|
||||||
|
}
|
||||||
|
|
||||||
|
span.Attrs, span.DroppedAttrs = convCappedAttrs(maxSpan.Attrs, cfg.Attributes())
|
||||||
|
|
||||||
|
links := cfg.Links()
|
||||||
|
if limit := maxSpan.Links; limit == 0 {
|
||||||
|
span.DroppedLinks = uint32(len(links))
|
||||||
|
} else {
|
||||||
|
if limit > 0 {
|
||||||
|
n := max(len(links)-limit, 0)
|
||||||
|
span.DroppedLinks = uint32(n)
|
||||||
|
links = links[n:]
|
||||||
|
}
|
||||||
|
span.Links = convLinks(links)
|
||||||
|
}
|
||||||
|
|
||||||
|
if t := cfg.Timestamp(); !t.IsZero() {
|
||||||
|
span.StartTime = cfg.Timestamp()
|
||||||
|
} else {
|
||||||
|
span.StartTime = time.Now()
|
||||||
|
}
|
||||||
|
|
||||||
|
return &telemetry.Traces{
|
||||||
|
ResourceSpans: []*telemetry.ResourceSpans{
|
||||||
|
{
|
||||||
|
ScopeSpans: []*telemetry.ScopeSpans{
|
||||||
|
{
|
||||||
|
Scope: &telemetry.Scope{
|
||||||
|
Name: t.name,
|
||||||
|
Version: t.version,
|
||||||
|
},
|
||||||
|
Spans: []*telemetry.Span{span},
|
||||||
|
SchemaURL: t.schemaURL,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, span
|
||||||
|
}
|
||||||
|
|
||||||
|
func spanKind(kind trace.SpanKind) telemetry.SpanKind {
|
||||||
|
switch kind {
|
||||||
|
case trace.SpanKindInternal:
|
||||||
|
return telemetry.SpanKindInternal
|
||||||
|
case trace.SpanKindServer:
|
||||||
|
return telemetry.SpanKindServer
|
||||||
|
case trace.SpanKindClient:
|
||||||
|
return telemetry.SpanKindClient
|
||||||
|
case trace.SpanKindProducer:
|
||||||
|
return telemetry.SpanKindProducer
|
||||||
|
case trace.SpanKindConsumer:
|
||||||
|
return telemetry.SpanKindConsumer
|
||||||
|
}
|
||||||
|
return telemetry.SpanKind(0) // undefined.
|
||||||
|
}
|
||||||
33
vendor/go.opentelemetry.io/auto/sdk/tracer_provider.go
generated
vendored
Normal file
33
vendor/go.opentelemetry.io/auto/sdk/tracer_provider.go
generated
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Copyright The OpenTelemetry Authors
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package sdk
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
"go.opentelemetry.io/otel/trace/noop"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TracerProvider returns an auto-instrumentable [trace.TracerProvider].
|
||||||
|
//
|
||||||
|
// If an [go.opentelemetry.io/auto.Instrumentation] is configured to instrument
|
||||||
|
// the process using the returned TracerProvider, all of the telemetry it
|
||||||
|
// produces will be processed and handled by that Instrumentation. By default,
|
||||||
|
// if no Instrumentation instruments the TracerProvider it will not generate
|
||||||
|
// any trace telemetry.
|
||||||
|
func TracerProvider() trace.TracerProvider { return tracerProviderInstance }
|
||||||
|
|
||||||
|
var tracerProviderInstance = new(tracerProvider)
|
||||||
|
|
||||||
|
type tracerProvider struct{ noop.TracerProvider }
|
||||||
|
|
||||||
|
var _ trace.TracerProvider = tracerProvider{}
|
||||||
|
|
||||||
|
func (p tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.Tracer {
|
||||||
|
cfg := trace.NewTracerConfig(opts...)
|
||||||
|
return tracer{
|
||||||
|
name: name,
|
||||||
|
version: cfg.InstrumentationVersion(),
|
||||||
|
schemaURL: cfg.SchemaURL(),
|
||||||
|
}
|
||||||
|
}
|
||||||
18
vendor/go.opentelemetry.io/otel/.golangci.yml
generated
vendored
18
vendor/go.opentelemetry.io/otel/.golangci.yml
generated
vendored
@ -22,6 +22,7 @@ linters:
|
|||||||
- govet
|
- govet
|
||||||
- ineffassign
|
- ineffassign
|
||||||
- misspell
|
- misspell
|
||||||
|
- perfsprint
|
||||||
- revive
|
- revive
|
||||||
- staticcheck
|
- staticcheck
|
||||||
- tenv
|
- tenv
|
||||||
@ -30,6 +31,7 @@ linters:
|
|||||||
- unconvert
|
- unconvert
|
||||||
- unused
|
- unused
|
||||||
- unparam
|
- unparam
|
||||||
|
- usestdlibvars
|
||||||
|
|
||||||
issues:
|
issues:
|
||||||
# Maximum issues count per one linter.
|
# Maximum issues count per one linter.
|
||||||
@ -61,10 +63,11 @@ issues:
|
|||||||
text: "calls to (.+) only in main[(][)] or init[(][)] functions"
|
text: "calls to (.+) only in main[(][)] or init[(][)] functions"
|
||||||
linters:
|
linters:
|
||||||
- revive
|
- revive
|
||||||
# It's okay to not run gosec in a test.
|
# It's okay to not run gosec and perfsprint in a test.
|
||||||
- path: _test\.go
|
- path: _test\.go
|
||||||
linters:
|
linters:
|
||||||
- gosec
|
- gosec
|
||||||
|
- perfsprint
|
||||||
# Ignoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand)
|
# Ignoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand)
|
||||||
# as we commonly use it in tests and examples.
|
# as we commonly use it in tests and examples.
|
||||||
- text: "G404:"
|
- text: "G404:"
|
||||||
@ -95,6 +98,13 @@ linters-settings:
|
|||||||
- pkg: "crypto/md5"
|
- pkg: "crypto/md5"
|
||||||
- pkg: "crypto/sha1"
|
- pkg: "crypto/sha1"
|
||||||
- pkg: "crypto/**/pkix"
|
- pkg: "crypto/**/pkix"
|
||||||
|
auto/sdk:
|
||||||
|
files:
|
||||||
|
- "!internal/global/trace.go"
|
||||||
|
- "~internal/global/trace_test.go"
|
||||||
|
deny:
|
||||||
|
- pkg: "go.opentelemetry.io/auto/sdk"
|
||||||
|
desc: Do not use SDK from automatic instrumentation.
|
||||||
otlp-internal:
|
otlp-internal:
|
||||||
files:
|
files:
|
||||||
- "!**/exporters/otlp/internal/**/*.go"
|
- "!**/exporters/otlp/internal/**/*.go"
|
||||||
@ -154,6 +164,12 @@ linters-settings:
|
|||||||
locale: US
|
locale: US
|
||||||
ignore-words:
|
ignore-words:
|
||||||
- cancelled
|
- cancelled
|
||||||
|
perfsprint:
|
||||||
|
err-error: true
|
||||||
|
errorf: true
|
||||||
|
int-conversion: true
|
||||||
|
sprintf1: true
|
||||||
|
strconcat: true
|
||||||
revive:
|
revive:
|
||||||
# Sets the default failure confidence.
|
# Sets the default failure confidence.
|
||||||
# This means that linting errors with less than 0.8 confidence will be ignored.
|
# This means that linting errors with less than 0.8 confidence will be ignored.
|
||||||
|
|||||||
45
vendor/go.opentelemetry.io/otel/CHANGELOG.md
generated
vendored
45
vendor/go.opentelemetry.io/otel/CHANGELOG.md
generated
vendored
@ -11,6 +11,47 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
|||||||
<!-- Released section -->
|
<!-- Released section -->
|
||||||
<!-- Don't change this section unless doing release -->
|
<!-- Don't change this section unless doing release -->
|
||||||
|
|
||||||
|
## [1.34.0/0.56.0/0.10.0] 2025-01-17
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Remove the notices from `Logger` to make the whole Logs API user-facing in `go.opentelemetry.io/otel/log`. (#6167)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Relax minimum Go version to 1.22.0 in various modules. (#6073)
|
||||||
|
- The `Type` name logged for the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` client is corrected from `otlphttpgrpc` to `otlptracegrpc`. (#6143)
|
||||||
|
- The `Type` name logged for the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlphttpgrpc` client is corrected from `otlphttphttp` to `otlptracehttp`. (#6143)
|
||||||
|
|
||||||
|
## [1.33.0/0.55.0/0.9.0/0.0.12] 2024-12-12
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Add `Reset` method to `SpanRecorder` in `go.opentelemetry.io/otel/sdk/trace/tracetest`. (#5994)
|
||||||
|
- Add `EnabledInstrument` interface in `go.opentelemetry.io/otel/sdk/metric/internal/x`.
|
||||||
|
This is an experimental interface that is implemented by synchronous instruments provided by `go.opentelemetry.io/otel/sdk/metric`.
|
||||||
|
Users can use it to avoid performing computationally expensive operations when recording measurements.
|
||||||
|
It does not fall within the scope of the OpenTelemetry Go versioning and stability [policy](./VERSIONING.md) and it may be changed in backwards incompatible ways or removed in feature releases. (#6016)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- The default global API now supports full auto-instrumentation from the `go.opentelemetry.io/auto` package.
|
||||||
|
See that package for more information. (#5920)
|
||||||
|
- Propagate non-retryable error messages to client in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5929)
|
||||||
|
- Propagate non-retryable error messages to client in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5929)
|
||||||
|
- Propagate non-retryable error messages to client in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5929)
|
||||||
|
- Performance improvements for attribute value `AsStringSlice`, `AsFloat64Slice`, `AsInt64Slice`, `AsBoolSlice`. (#6011)
|
||||||
|
- Change `EnabledParameters` to have a `Severity` field instead of a getter and setter in `go.opentelemetry.io/otel/log`. (#6009)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Fix inconsistent request body closing in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5954)
|
||||||
|
- Fix inconsistent request body closing in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#5954)
|
||||||
|
- Fix inconsistent request body closing in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#5954)
|
||||||
|
- Fix invalid exemplar keys in `go.opentelemetry.io/otel/exporters/prometheus`. (#5995)
|
||||||
|
- Fix attribute value truncation in `go.opentelemetry.io/otel/sdk/trace`. (#5997)
|
||||||
|
- Fix attribute value truncation in `go.opentelemetry.io/otel/sdk/log`. (#6032)
|
||||||
|
|
||||||
## [1.32.0/0.54.0/0.8.0/0.0.11] 2024-11-08
|
## [1.32.0/0.54.0/0.8.0/0.0.11] 2024-11-08
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
@ -3156,7 +3197,9 @@ It contains api and sdk for trace and meter.
|
|||||||
- CircleCI build CI manifest files.
|
- CircleCI build CI manifest files.
|
||||||
- CODEOWNERS file to track owners of this project.
|
- CODEOWNERS file to track owners of this project.
|
||||||
|
|
||||||
[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.32.0...HEAD
|
[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.34.0...HEAD
|
||||||
|
[1.34.0/0.56.0/0.10.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.34.0
|
||||||
|
[1.33.0/0.55.0/0.9.0/0.0.12]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.33.0
|
||||||
[1.32.0/0.54.0/0.8.0/0.0.11]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.32.0
|
[1.32.0/0.54.0/0.8.0/0.0.11]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.32.0
|
||||||
[1.31.0/0.53.0/0.7.0/0.0.10]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.31.0
|
[1.31.0/0.53.0/0.7.0/0.0.10]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.31.0
|
||||||
[1.30.0/0.52.0/0.6.0/0.0.9]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.30.0
|
[1.30.0/0.52.0/0.6.0/0.0.9]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.30.0
|
||||||
|
|||||||
14
vendor/go.opentelemetry.io/otel/Makefile
generated
vendored
14
vendor/go.opentelemetry.io/otel/Makefile
generated
vendored
@ -14,8 +14,8 @@ TIMEOUT = 60
|
|||||||
.DEFAULT_GOAL := precommit
|
.DEFAULT_GOAL := precommit
|
||||||
|
|
||||||
.PHONY: precommit ci
|
.PHONY: precommit ci
|
||||||
precommit: generate license-check misspell go-mod-tidy golangci-lint-fix verify-readmes verify-mods test-default
|
precommit: generate toolchain-check license-check misspell go-mod-tidy golangci-lint-fix verify-readmes verify-mods test-default
|
||||||
ci: generate license-check lint vanity-import-check verify-readmes verify-mods build test-default check-clean-work-tree test-coverage
|
ci: generate toolchain-check license-check lint vanity-import-check verify-readmes verify-mods build test-default check-clean-work-tree test-coverage
|
||||||
|
|
||||||
# Tools
|
# Tools
|
||||||
|
|
||||||
@ -235,6 +235,16 @@ govulncheck/%: $(GOVULNCHECK)
|
|||||||
codespell: $(CODESPELL)
|
codespell: $(CODESPELL)
|
||||||
@$(DOCKERPY) $(CODESPELL)
|
@$(DOCKERPY) $(CODESPELL)
|
||||||
|
|
||||||
|
.PHONY: toolchain-check
|
||||||
|
toolchain-check:
|
||||||
|
@toolchainRes=$$(for f in $(ALL_GO_MOD_DIRS); do \
|
||||||
|
awk '/^toolchain/ { found=1; next } END { if (found) print FILENAME }' $$f/go.mod; \
|
||||||
|
done); \
|
||||||
|
if [ -n "$${toolchainRes}" ]; then \
|
||||||
|
echo "toolchain checking failed:"; echo "$${toolchainRes}"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
.PHONY: license-check
|
.PHONY: license-check
|
||||||
license-check:
|
license-check:
|
||||||
@licRes=$$(for f in $$(find . -type f \( -iname '*.go' -o -iname '*.sh' \) ! -path '**/third_party/*' ! -path './.git/*' ) ; do \
|
@licRes=$$(for f in $$(find . -type f \( -iname '*.go' -o -iname '*.sh' \) ! -path '**/third_party/*' ! -path './.git/*' ) ; do \
|
||||||
|
|||||||
2
vendor/go.opentelemetry.io/otel/README.md
generated
vendored
2
vendor/go.opentelemetry.io/otel/README.md
generated
vendored
@ -1,6 +1,6 @@
|
|||||||
# OpenTelemetry-Go
|
# OpenTelemetry-Go
|
||||||
|
|
||||||
[](https://github.com/open-telemetry/opentelemetry-go/actions?query=workflow%3Aci+branch%3Amain)
|
[](https://github.com/open-telemetry/opentelemetry-go/actions/workflows/ci.yml)
|
||||||
[](https://app.codecov.io/gh/open-telemetry/opentelemetry-go?branch=main)
|
[](https://app.codecov.io/gh/open-telemetry/opentelemetry-go?branch=main)
|
||||||
[](https://pkg.go.dev/go.opentelemetry.io/otel)
|
[](https://pkg.go.dev/go.opentelemetry.io/otel)
|
||||||
[](https://goreportcard.com/report/go.opentelemetry.io/otel)
|
[](https://goreportcard.com/report/go.opentelemetry.io/otel)
|
||||||
|
|||||||
6
vendor/go.opentelemetry.io/otel/RELEASING.md
generated
vendored
6
vendor/go.opentelemetry.io/otel/RELEASING.md
generated
vendored
@ -130,6 +130,6 @@ Importantly, bump any package versions referenced to be the latest one you just
|
|||||||
|
|
||||||
Bump the dependencies in the following Go services:
|
Bump the dependencies in the following Go services:
|
||||||
|
|
||||||
- [`accountingservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/accountingservice)
|
- [`accounting`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/accounting)
|
||||||
- [`checkoutservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/checkoutservice)
|
- [`checkoutservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/checkout)
|
||||||
- [`productcatalogservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/productcatalogservice)
|
- [`productcatalogservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/product-catalog)
|
||||||
|
|||||||
2
vendor/go.opentelemetry.io/otel/VERSIONING.md
generated
vendored
2
vendor/go.opentelemetry.io/otel/VERSIONING.md
generated
vendored
@ -26,7 +26,7 @@ is designed so the following goals can be achieved.
|
|||||||
go.opentelemetry.io/otel/v2 v2.0.1`) and in the package import path
|
go.opentelemetry.io/otel/v2 v2.0.1`) and in the package import path
|
||||||
(e.g., `import "go.opentelemetry.io/otel/v2/trace"`). This includes the
|
(e.g., `import "go.opentelemetry.io/otel/v2/trace"`). This includes the
|
||||||
paths used in `go get` commands (e.g., `go get
|
paths used in `go get` commands (e.g., `go get
|
||||||
go.opentelemetry.io/otel/v2@v2.0.1`. Note there is both a `/v2` and a
|
go.opentelemetry.io/otel/v2@v2.0.1`). Note there is both a `/v2` and a
|
||||||
`@v2.0.1` in that example. One way to think about it is that the module
|
`@v2.0.1` in that example. One way to think about it is that the module
|
||||||
name now includes the `/v2`, so include `/v2` whenever you are using the
|
name now includes the `/v2`, so include `/v2` whenever you are using the
|
||||||
module name).
|
module name).
|
||||||
|
|||||||
4
vendor/go.opentelemetry.io/otel/baggage/baggage.go
generated
vendored
4
vendor/go.opentelemetry.io/otel/baggage/baggage.go
generated
vendored
@ -355,7 +355,7 @@ func parseMember(member string) (Member, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// replaceInvalidUTF8Sequences replaces invalid UTF-8 sequences with '<27>'.
|
// replaceInvalidUTF8Sequences replaces invalid UTF-8 sequences with '<27>'.
|
||||||
func replaceInvalidUTF8Sequences(cap int, unescapeVal string) string {
|
func replaceInvalidUTF8Sequences(c int, unescapeVal string) string {
|
||||||
if utf8.ValidString(unescapeVal) {
|
if utf8.ValidString(unescapeVal) {
|
||||||
return unescapeVal
|
return unescapeVal
|
||||||
}
|
}
|
||||||
@ -363,7 +363,7 @@ func replaceInvalidUTF8Sequences(cap int, unescapeVal string) string {
|
|||||||
// https://github.com/w3c/baggage/blob/8c215efbeebd3fa4b1aceb937a747e56444f22f3/baggage/HTTP_HEADER_FORMAT.md?plain=1#L69
|
// https://github.com/w3c/baggage/blob/8c215efbeebd3fa4b1aceb937a747e56444f22f3/baggage/HTTP_HEADER_FORMAT.md?plain=1#L69
|
||||||
|
|
||||||
var b strings.Builder
|
var b strings.Builder
|
||||||
b.Grow(cap)
|
b.Grow(c)
|
||||||
for i := 0; i < len(unescapeVal); {
|
for i := 0; i < len(unescapeVal); {
|
||||||
r, size := utf8.DecodeRuneInString(unescapeVal[i:])
|
r, size := utf8.DecodeRuneInString(unescapeVal[i:])
|
||||||
if r == utf8.RuneError && size == 1 {
|
if r == utf8.RuneError && size == 1 {
|
||||||
|
|||||||
3
vendor/go.opentelemetry.io/otel/codes/codes.go
generated
vendored
3
vendor/go.opentelemetry.io/otel/codes/codes.go
generated
vendored
@ -5,6 +5,7 @@ package codes // import "go.opentelemetry.io/otel/codes"
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
)
|
)
|
||||||
@ -63,7 +64,7 @@ func (c *Code) UnmarshalJSON(b []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if c == nil {
|
if c == nil {
|
||||||
return fmt.Errorf("nil receiver passed to UnmarshalJSON")
|
return errors.New("nil receiver passed to UnmarshalJSON")
|
||||||
}
|
}
|
||||||
|
|
||||||
var x interface{}
|
var x interface{}
|
||||||
|
|||||||
44
vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go
generated
vendored
44
vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go
generated
vendored
@ -49,12 +49,11 @@ func AsBoolSlice(v interface{}) []bool {
|
|||||||
if rv.Type().Kind() != reflect.Array {
|
if rv.Type().Kind() != reflect.Array {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var zero bool
|
cpy := make([]bool, rv.Len())
|
||||||
correctLen := rv.Len()
|
if len(cpy) > 0 {
|
||||||
correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero))
|
_ = reflect.Copy(reflect.ValueOf(cpy), rv)
|
||||||
cpy := reflect.New(correctType)
|
}
|
||||||
_ = reflect.Copy(cpy.Elem(), rv)
|
return cpy
|
||||||
return cpy.Elem().Slice(0, correctLen).Interface().([]bool)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AsInt64Slice converts an int64 array into a slice into with same elements as array.
|
// AsInt64Slice converts an int64 array into a slice into with same elements as array.
|
||||||
@ -63,12 +62,11 @@ func AsInt64Slice(v interface{}) []int64 {
|
|||||||
if rv.Type().Kind() != reflect.Array {
|
if rv.Type().Kind() != reflect.Array {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var zero int64
|
cpy := make([]int64, rv.Len())
|
||||||
correctLen := rv.Len()
|
if len(cpy) > 0 {
|
||||||
correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero))
|
_ = reflect.Copy(reflect.ValueOf(cpy), rv)
|
||||||
cpy := reflect.New(correctType)
|
}
|
||||||
_ = reflect.Copy(cpy.Elem(), rv)
|
return cpy
|
||||||
return cpy.Elem().Slice(0, correctLen).Interface().([]int64)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AsFloat64Slice converts a float64 array into a slice into with same elements as array.
|
// AsFloat64Slice converts a float64 array into a slice into with same elements as array.
|
||||||
@ -77,12 +75,11 @@ func AsFloat64Slice(v interface{}) []float64 {
|
|||||||
if rv.Type().Kind() != reflect.Array {
|
if rv.Type().Kind() != reflect.Array {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var zero float64
|
cpy := make([]float64, rv.Len())
|
||||||
correctLen := rv.Len()
|
if len(cpy) > 0 {
|
||||||
correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero))
|
_ = reflect.Copy(reflect.ValueOf(cpy), rv)
|
||||||
cpy := reflect.New(correctType)
|
}
|
||||||
_ = reflect.Copy(cpy.Elem(), rv)
|
return cpy
|
||||||
return cpy.Elem().Slice(0, correctLen).Interface().([]float64)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// AsStringSlice converts a string array into a slice into with same elements as array.
|
// AsStringSlice converts a string array into a slice into with same elements as array.
|
||||||
@ -91,10 +88,9 @@ func AsStringSlice(v interface{}) []string {
|
|||||||
if rv.Type().Kind() != reflect.Array {
|
if rv.Type().Kind() != reflect.Array {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
var zero string
|
cpy := make([]string, rv.Len())
|
||||||
correctLen := rv.Len()
|
if len(cpy) > 0 {
|
||||||
correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero))
|
_ = reflect.Copy(reflect.ValueOf(cpy), rv)
|
||||||
cpy := reflect.New(correctType)
|
}
|
||||||
_ = reflect.Copy(cpy.Elem(), rv)
|
return cpy
|
||||||
return cpy.Elem().Slice(0, correctLen).Interface().([]string)
|
|
||||||
}
|
}
|
||||||
|
|||||||
25
vendor/go.opentelemetry.io/otel/internal/global/trace.go
generated
vendored
25
vendor/go.opentelemetry.io/otel/internal/global/trace.go
generated
vendored
@ -25,6 +25,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
|
|
||||||
|
"go.opentelemetry.io/auto/sdk"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/codes"
|
"go.opentelemetry.io/otel/codes"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
@ -145,6 +146,30 @@ func (t *tracer) Start(ctx context.Context, name string, opts ...trace.SpanStart
|
|||||||
return delegate.(trace.Tracer).Start(ctx, name, opts...)
|
return delegate.(trace.Tracer).Start(ctx, name, opts...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return t.newSpan(ctx, autoInstEnabled, name, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
// autoInstEnabled determines if the auto-instrumentation SDK span is returned
|
||||||
|
// from the tracer when not backed by a delegate and auto-instrumentation has
|
||||||
|
// attached to this process.
|
||||||
|
//
|
||||||
|
// The auto-instrumentation is expected to overwrite this value to true when it
|
||||||
|
// attaches. By default, this will point to false and mean a tracer will return
|
||||||
|
// a nonRecordingSpan by default.
|
||||||
|
var autoInstEnabled = new(bool)
|
||||||
|
|
||||||
|
func (t *tracer) newSpan(ctx context.Context, autoSpan *bool, name string, opts []trace.SpanStartOption) (context.Context, trace.Span) {
|
||||||
|
// autoInstEnabled is passed to newSpan via the autoSpan parameter. This is
|
||||||
|
// so the auto-instrumentation can define a uprobe for (*t).newSpan and be
|
||||||
|
// provided with the address of the bool autoInstEnabled points to. It
|
||||||
|
// needs to be a parameter so that pointer can be reliably determined, it
|
||||||
|
// should not be read from the global.
|
||||||
|
|
||||||
|
if *autoSpan {
|
||||||
|
tracer := sdk.TracerProvider().Tracer(t.name, t.opts...)
|
||||||
|
return tracer.Start(ctx, name, opts...)
|
||||||
|
}
|
||||||
|
|
||||||
s := nonRecordingSpan{sc: trace.SpanContextFromContext(ctx), tracer: t}
|
s := nonRecordingSpan{sc: trace.SpanContextFromContext(ctx), tracer: t}
|
||||||
ctx = trace.ContextWithSpan(ctx, s)
|
ctx = trace.ContextWithSpan(ctx, s)
|
||||||
return ctx, s
|
return ctx, s
|
||||||
|
|||||||
6
vendor/go.opentelemetry.io/otel/renovate.json
generated
vendored
6
vendor/go.opentelemetry.io/otel/renovate.json
generated
vendored
@ -14,12 +14,6 @@
|
|||||||
"matchDepTypes": ["indirect"],
|
"matchDepTypes": ["indirect"],
|
||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"matchFileNames": ["internal/tools/**"],
|
|
||||||
"matchManagers": ["gomod"],
|
|
||||||
"matchDepTypes": ["indirect"],
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"matchPackageNames": ["google.golang.org/genproto/googleapis/**"],
|
"matchPackageNames": ["google.golang.org/genproto/googleapis/**"],
|
||||||
"groupName": "googleapis"
|
"groupName": "googleapis"
|
||||||
|
|||||||
5
vendor/go.opentelemetry.io/otel/sdk/trace/sampler_env.go
generated
vendored
5
vendor/go.opentelemetry.io/otel/sdk/trace/sampler_env.go
generated
vendored
@ -5,7 +5,6 @@ package trace // import "go.opentelemetry.io/otel/sdk/trace"
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -26,7 +25,7 @@ const (
|
|||||||
type errUnsupportedSampler string
|
type errUnsupportedSampler string
|
||||||
|
|
||||||
func (e errUnsupportedSampler) Error() string {
|
func (e errUnsupportedSampler) Error() string {
|
||||||
return fmt.Sprintf("unsupported sampler: %s", string(e))
|
return "unsupported sampler: " + string(e)
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -39,7 +38,7 @@ type samplerArgParseError struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (e samplerArgParseError) Error() string {
|
func (e samplerArgParseError) Error() string {
|
||||||
return fmt.Sprintf("parsing sampler argument: %s", e.parseErr.Error())
|
return "parsing sampler argument: " + e.parseErr.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e samplerArgParseError) Unwrap() error {
|
func (e samplerArgParseError) Unwrap() error {
|
||||||
|
|||||||
101
vendor/go.opentelemetry.io/otel/sdk/trace/span.go
generated
vendored
101
vendor/go.opentelemetry.io/otel/sdk/trace/span.go
generated
vendored
@ -347,54 +347,99 @@ func truncateAttr(limit int, attr attribute.KeyValue) attribute.KeyValue {
|
|||||||
}
|
}
|
||||||
switch attr.Value.Type() {
|
switch attr.Value.Type() {
|
||||||
case attribute.STRING:
|
case attribute.STRING:
|
||||||
if v := attr.Value.AsString(); len(v) > limit {
|
v := attr.Value.AsString()
|
||||||
return attr.Key.String(safeTruncate(v, limit))
|
return attr.Key.String(truncate(limit, v))
|
||||||
}
|
|
||||||
case attribute.STRINGSLICE:
|
case attribute.STRINGSLICE:
|
||||||
v := attr.Value.AsStringSlice()
|
v := attr.Value.AsStringSlice()
|
||||||
for i := range v {
|
for i := range v {
|
||||||
if len(v[i]) > limit {
|
v[i] = truncate(limit, v[i])
|
||||||
v[i] = safeTruncate(v[i], limit)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return attr.Key.StringSlice(v)
|
return attr.Key.StringSlice(v)
|
||||||
}
|
}
|
||||||
return attr
|
return attr
|
||||||
}
|
}
|
||||||
|
|
||||||
// safeTruncate truncates the string and guarantees valid UTF-8 is returned.
|
// truncate returns a truncated version of s such that it contains less than
|
||||||
func safeTruncate(input string, limit int) string {
|
// the limit number of characters. Truncation is applied by returning the limit
|
||||||
if trunc, ok := safeTruncateValidUTF8(input, limit); ok {
|
// number of valid characters contained in s.
|
||||||
return trunc
|
//
|
||||||
|
// If limit is negative, it returns the original string.
|
||||||
|
//
|
||||||
|
// UTF-8 is supported. When truncating, all invalid characters are dropped
|
||||||
|
// before applying truncation.
|
||||||
|
//
|
||||||
|
// If s already contains less than the limit number of bytes, it is returned
|
||||||
|
// unchanged. No invalid characters are removed.
|
||||||
|
func truncate(limit int, s string) string {
|
||||||
|
// This prioritize performance in the following order based on the most
|
||||||
|
// common expected use-cases.
|
||||||
|
//
|
||||||
|
// - Short values less than the default limit (128).
|
||||||
|
// - Strings with valid encodings that exceed the limit.
|
||||||
|
// - No limit.
|
||||||
|
// - Strings with invalid encodings that exceed the limit.
|
||||||
|
if limit < 0 || len(s) <= limit {
|
||||||
|
return s
|
||||||
}
|
}
|
||||||
trunc, _ := safeTruncateValidUTF8(strings.ToValidUTF8(input, ""), limit)
|
|
||||||
return trunc
|
|
||||||
}
|
|
||||||
|
|
||||||
// safeTruncateValidUTF8 returns a copy of the input string safely truncated to
|
// Optimistically, assume all valid UTF-8.
|
||||||
// limit. The truncation is ensured to occur at the bounds of complete UTF-8
|
var b strings.Builder
|
||||||
// characters. If invalid encoding of UTF-8 is encountered, input is returned
|
count := 0
|
||||||
// with false, otherwise, the truncated input will be returned with true.
|
for i, c := range s {
|
||||||
func safeTruncateValidUTF8(input string, limit int) (string, bool) {
|
if c != utf8.RuneError {
|
||||||
for cnt := 0; cnt <= limit; {
|
count++
|
||||||
r, size := utf8.DecodeRuneInString(input[cnt:])
|
if count > limit {
|
||||||
if r == utf8.RuneError {
|
return s[:i]
|
||||||
return input, false
|
}
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if cnt+size > limit {
|
_, size := utf8.DecodeRuneInString(s[i:])
|
||||||
return input[:cnt], true
|
if size == 1 {
|
||||||
|
// Invalid encoding.
|
||||||
|
b.Grow(len(s) - 1)
|
||||||
|
_, _ = b.WriteString(s[:i])
|
||||||
|
s = s[i:]
|
||||||
|
break
|
||||||
}
|
}
|
||||||
cnt += size
|
|
||||||
}
|
}
|
||||||
return input, true
|
|
||||||
|
// Fast-path, no invalid input.
|
||||||
|
if b.Cap() == 0 {
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
// Truncate while validating UTF-8.
|
||||||
|
for i := 0; i < len(s) && count < limit; {
|
||||||
|
c := s[i]
|
||||||
|
if c < utf8.RuneSelf {
|
||||||
|
// Optimization for single byte runes (common case).
|
||||||
|
_ = b.WriteByte(c)
|
||||||
|
i++
|
||||||
|
count++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
_, size := utf8.DecodeRuneInString(s[i:])
|
||||||
|
if size == 1 {
|
||||||
|
// We checked for all 1-byte runes above, this is a RuneError.
|
||||||
|
i++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
_, _ = b.WriteString(s[i : i+size])
|
||||||
|
i += size
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
|
||||||
|
return b.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
// End ends the span. This method does nothing if the span is already ended or
|
// End ends the span. This method does nothing if the span is already ended or
|
||||||
// is not being recorded.
|
// is not being recorded.
|
||||||
//
|
//
|
||||||
// The only SpanOption currently supported is WithTimestamp which will set the
|
// The only SpanEndOption currently supported are [trace.WithTimestamp], and
|
||||||
// end time for a Span's life-cycle.
|
// [trace.WithStackTrace].
|
||||||
//
|
//
|
||||||
// If this method is called while panicking an error event is added to the
|
// If this method is called while panicking an error event is added to the
|
||||||
// Span before ending it and the panic is continued.
|
// Span before ending it and the panic is continued.
|
||||||
|
|||||||
2
vendor/go.opentelemetry.io/otel/sdk/version.go
generated
vendored
2
vendor/go.opentelemetry.io/otel/sdk/version.go
generated
vendored
@ -5,5 +5,5 @@ package sdk // import "go.opentelemetry.io/otel/sdk"
|
|||||||
|
|
||||||
// Version is the current release version of the OpenTelemetry SDK in use.
|
// Version is the current release version of the OpenTelemetry SDK in use.
|
||||||
func Version() string {
|
func Version() string {
|
||||||
return "1.32.0"
|
return "1.34.0"
|
||||||
}
|
}
|
||||||
|
|||||||
2
vendor/go.opentelemetry.io/otel/trace/config.go
generated
vendored
2
vendor/go.opentelemetry.io/otel/trace/config.go
generated
vendored
@ -213,7 +213,7 @@ var _ SpanStartEventOption = attributeOption{}
|
|||||||
|
|
||||||
// WithAttributes adds the attributes related to a span life-cycle event.
|
// WithAttributes adds the attributes related to a span life-cycle event.
|
||||||
// These attributes are used to describe the work a Span represents when this
|
// These attributes are used to describe the work a Span represents when this
|
||||||
// option is provided to a Span's start or end events. Otherwise, these
|
// option is provided to a Span's start event. Otherwise, these
|
||||||
// attributes provide additional information about the event being recorded
|
// attributes provide additional information about the event being recorded
|
||||||
// (e.g. error, state change, processing progress, system event).
|
// (e.g. error, state change, processing progress, system event).
|
||||||
//
|
//
|
||||||
|
|||||||
2
vendor/go.opentelemetry.io/otel/version.go
generated
vendored
2
vendor/go.opentelemetry.io/otel/version.go
generated
vendored
@ -5,5 +5,5 @@ package otel // import "go.opentelemetry.io/otel"
|
|||||||
|
|
||||||
// Version is the current release version of OpenTelemetry in use.
|
// Version is the current release version of OpenTelemetry in use.
|
||||||
func Version() string {
|
func Version() string {
|
||||||
return "1.32.0"
|
return "1.34.0"
|
||||||
}
|
}
|
||||||
|
|||||||
8
vendor/go.opentelemetry.io/otel/versions.yaml
generated
vendored
8
vendor/go.opentelemetry.io/otel/versions.yaml
generated
vendored
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
module-sets:
|
module-sets:
|
||||||
stable-v1:
|
stable-v1:
|
||||||
version: v1.32.0
|
version: v1.34.0
|
||||||
modules:
|
modules:
|
||||||
- go.opentelemetry.io/otel
|
- go.opentelemetry.io/otel
|
||||||
- go.opentelemetry.io/otel/bridge/opencensus
|
- go.opentelemetry.io/otel/bridge/opencensus
|
||||||
@ -23,11 +23,11 @@ module-sets:
|
|||||||
- go.opentelemetry.io/otel/sdk/metric
|
- go.opentelemetry.io/otel/sdk/metric
|
||||||
- go.opentelemetry.io/otel/trace
|
- go.opentelemetry.io/otel/trace
|
||||||
experimental-metrics:
|
experimental-metrics:
|
||||||
version: v0.54.0
|
version: v0.56.0
|
||||||
modules:
|
modules:
|
||||||
- go.opentelemetry.io/otel/exporters/prometheus
|
- go.opentelemetry.io/otel/exporters/prometheus
|
||||||
experimental-logs:
|
experimental-logs:
|
||||||
version: v0.8.0
|
version: v0.10.0
|
||||||
modules:
|
modules:
|
||||||
- go.opentelemetry.io/otel/log
|
- go.opentelemetry.io/otel/log
|
||||||
- go.opentelemetry.io/otel/sdk/log
|
- go.opentelemetry.io/otel/sdk/log
|
||||||
@ -35,7 +35,7 @@ module-sets:
|
|||||||
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp
|
- go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp
|
||||||
- go.opentelemetry.io/otel/exporters/stdout/stdoutlog
|
- go.opentelemetry.io/otel/exporters/stdout/stdoutlog
|
||||||
experimental-schema:
|
experimental-schema:
|
||||||
version: v0.0.11
|
version: v0.0.12
|
||||||
modules:
|
modules:
|
||||||
- go.opentelemetry.io/otel/schema
|
- go.opentelemetry.io/otel/schema
|
||||||
excluded-modules:
|
excluded-modules:
|
||||||
|
|||||||
2
vendor/golang.org/x/oauth2/oauth2.go
generated
vendored
2
vendor/golang.org/x/oauth2/oauth2.go
generated
vendored
@ -56,7 +56,7 @@ type Config struct {
|
|||||||
// the OAuth flow, after the resource owner's URLs.
|
// the OAuth flow, after the resource owner's URLs.
|
||||||
RedirectURL string
|
RedirectURL string
|
||||||
|
|
||||||
// Scope specifies optional requested permissions.
|
// Scopes specifies optional requested permissions.
|
||||||
Scopes []string
|
Scopes []string
|
||||||
|
|
||||||
// authStyleCache caches which auth style to use when Endpoint.AuthStyle is
|
// authStyleCache caches which auth style to use when Endpoint.AuthStyle is
|
||||||
|
|||||||
711
vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go
generated
vendored
711
vendor/google.golang.org/genproto/googleapis/api/annotations/client.pb.go
generated
vendored
@ -180,6 +180,8 @@ type CommonLanguageSettings struct {
|
|||||||
ReferenceDocsUri string `protobuf:"bytes,1,opt,name=reference_docs_uri,json=referenceDocsUri,proto3" json:"reference_docs_uri,omitempty"`
|
ReferenceDocsUri string `protobuf:"bytes,1,opt,name=reference_docs_uri,json=referenceDocsUri,proto3" json:"reference_docs_uri,omitempty"`
|
||||||
// The destination where API teams want this client library to be published.
|
// The destination where API teams want this client library to be published.
|
||||||
Destinations []ClientLibraryDestination `protobuf:"varint,2,rep,packed,name=destinations,proto3,enum=google.api.ClientLibraryDestination" json:"destinations,omitempty"`
|
Destinations []ClientLibraryDestination `protobuf:"varint,2,rep,packed,name=destinations,proto3,enum=google.api.ClientLibraryDestination" json:"destinations,omitempty"`
|
||||||
|
// Configuration for which RPCs should be generated in the GAPIC client.
|
||||||
|
SelectiveGapicGeneration *SelectiveGapicGeneration `protobuf:"bytes,3,opt,name=selective_gapic_generation,json=selectiveGapicGeneration,proto3" json:"selective_gapic_generation,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *CommonLanguageSettings) Reset() {
|
func (x *CommonLanguageSettings) Reset() {
|
||||||
@ -229,6 +231,13 @@ func (x *CommonLanguageSettings) GetDestinations() []ClientLibraryDestination {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *CommonLanguageSettings) GetSelectiveGapicGeneration() *SelectiveGapicGeneration {
|
||||||
|
if x != nil {
|
||||||
|
return x.SelectiveGapicGeneration
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Details about how and where to publish client libraries.
|
// Details about how and where to publish client libraries.
|
||||||
type ClientLibrarySettings struct {
|
type ClientLibrarySettings struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
@ -984,6 +993,16 @@ type GoSettings 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"`
|
||||||
|
// Map of service names to renamed services. Keys are the package relative
|
||||||
|
// service names and values are the name to be used for the service client
|
||||||
|
// and call options.
|
||||||
|
//
|
||||||
|
// publishing:
|
||||||
|
//
|
||||||
|
// go_settings:
|
||||||
|
// renamed_services:
|
||||||
|
// Publisher: TopicAdmin
|
||||||
|
RenamedServices map[string]string `protobuf:"bytes,2,rep,name=renamed_services,json=renamedServices,proto3" json:"renamed_services,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GoSettings) Reset() {
|
func (x *GoSettings) Reset() {
|
||||||
@ -1025,6 +1044,13 @@ func (x *GoSettings) GetCommon() *CommonLanguageSettings {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *GoSettings) GetRenamedServices() map[string]string {
|
||||||
|
if x != nil {
|
||||||
|
return x.RenamedServices
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Describes the generator configuration for a method.
|
// Describes the generator configuration for a method.
|
||||||
type MethodSettings struct {
|
type MethodSettings struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
@ -1123,6 +1149,57 @@ func (x *MethodSettings) GetAutoPopulatedFields() []string {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This message is used to configure the generation of a subset of the RPCs in
|
||||||
|
// a service for client libraries.
|
||||||
|
type SelectiveGapicGeneration struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
// An allowlist of the fully qualified names of RPCs that should be included
|
||||||
|
// on public client surfaces.
|
||||||
|
Methods []string `protobuf:"bytes,1,rep,name=methods,proto3" json:"methods,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SelectiveGapicGeneration) Reset() {
|
||||||
|
*x = SelectiveGapicGeneration{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_google_api_client_proto_msgTypes[12]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SelectiveGapicGeneration) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*SelectiveGapicGeneration) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *SelectiveGapicGeneration) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_google_api_client_proto_msgTypes[12]
|
||||||
|
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 SelectiveGapicGeneration.ProtoReflect.Descriptor instead.
|
||||||
|
func (*SelectiveGapicGeneration) Descriptor() ([]byte, []int) {
|
||||||
|
return file_google_api_client_proto_rawDescGZIP(), []int{12}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SelectiveGapicGeneration) GetMethods() []string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Methods
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Experimental features to be included during client library generation.
|
// Experimental features to be included during client library generation.
|
||||||
// These fields will be deprecated once the feature graduates and is enabled
|
// These fields will be deprecated once the feature graduates and is enabled
|
||||||
// by default.
|
// by default.
|
||||||
@ -1136,12 +1213,17 @@ type PythonSettings_ExperimentalFeatures struct {
|
|||||||
// This feature will be enabled by default 1 month after launching the
|
// This feature will be enabled by default 1 month after launching the
|
||||||
// feature in preview packages.
|
// feature in preview packages.
|
||||||
RestAsyncIoEnabled bool `protobuf:"varint,1,opt,name=rest_async_io_enabled,json=restAsyncIoEnabled,proto3" json:"rest_async_io_enabled,omitempty"`
|
RestAsyncIoEnabled bool `protobuf:"varint,1,opt,name=rest_async_io_enabled,json=restAsyncIoEnabled,proto3" json:"rest_async_io_enabled,omitempty"`
|
||||||
|
// Enables generation of protobuf code using new types that are more
|
||||||
|
// Pythonic which are included in `protobuf>=5.29.x`. This feature will be
|
||||||
|
// enabled by default 1 month after launching the feature in preview
|
||||||
|
// packages.
|
||||||
|
ProtobufPythonicTypesEnabled bool `protobuf:"varint,2,opt,name=protobuf_pythonic_types_enabled,json=protobufPythonicTypesEnabled,proto3" json:"protobuf_pythonic_types_enabled,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *PythonSettings_ExperimentalFeatures) Reset() {
|
func (x *PythonSettings_ExperimentalFeatures) Reset() {
|
||||||
*x = PythonSettings_ExperimentalFeatures{}
|
*x = PythonSettings_ExperimentalFeatures{}
|
||||||
if protoimpl.UnsafeEnabled {
|
if protoimpl.UnsafeEnabled {
|
||||||
mi := &file_google_api_client_proto_msgTypes[13]
|
mi := &file_google_api_client_proto_msgTypes[14]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
@ -1154,7 +1236,7 @@ func (x *PythonSettings_ExperimentalFeatures) String() string {
|
|||||||
func (*PythonSettings_ExperimentalFeatures) ProtoMessage() {}
|
func (*PythonSettings_ExperimentalFeatures) ProtoMessage() {}
|
||||||
|
|
||||||
func (x *PythonSettings_ExperimentalFeatures) ProtoReflect() protoreflect.Message {
|
func (x *PythonSettings_ExperimentalFeatures) ProtoReflect() protoreflect.Message {
|
||||||
mi := &file_google_api_client_proto_msgTypes[13]
|
mi := &file_google_api_client_proto_msgTypes[14]
|
||||||
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 {
|
||||||
@ -1177,6 +1259,13 @@ func (x *PythonSettings_ExperimentalFeatures) GetRestAsyncIoEnabled() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *PythonSettings_ExperimentalFeatures) GetProtobufPythonicTypesEnabled() bool {
|
||||||
|
if x != nil {
|
||||||
|
return x.ProtobufPythonicTypesEnabled
|
||||||
|
}
|
||||||
|
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
|
||||||
@ -1205,7 +1294,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[16]
|
mi := &file_google_api_client_proto_msgTypes[18]
|
||||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
ms.StoreMessageInfo(mi)
|
ms.StoreMessageInfo(mi)
|
||||||
}
|
}
|
||||||
@ -1218,7 +1307,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[16]
|
mi := &file_google_api_client_proto_msgTypes[18]
|
||||||
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 {
|
||||||
@ -1406,7 +1495,7 @@ var file_google_api_client_proto_rawDesc = []byte{
|
|||||||
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72,
|
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72,
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
|
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x94, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
|
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf8, 0x01, 0x0a, 0x16, 0x43, 0x6f, 0x6d, 0x6d, 0x6f,
|
||||||
0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
0x6e, 0x4c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
||||||
0x73, 0x12, 0x30, 0x0a, 0x12, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x64,
|
0x73, 0x12, 0x30, 0x0a, 0x12, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x64,
|
||||||
0x6f, 0x63, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18,
|
0x6f, 0x63, 0x73, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18,
|
||||||
@ -1415,251 +1504,275 @@ var file_google_api_client_proto_rawDesc = []byte{
|
|||||||
0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||||
0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62,
|
0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62,
|
||||||
0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
|
0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52,
|
||||||
0x0c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x93, 0x05,
|
0x0c, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x62, 0x0a,
|
||||||
0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53,
|
0x1a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x67, 0x61, 0x70, 0x69, 0x63,
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
|
0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||||
0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x53,
|
||||||
0x6e, 0x12, 0x3a, 0x0a, 0x0c, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f, 0x73, 0x74, 0x61, 0x67,
|
0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x61, 0x70, 0x69, 0x63, 0x47, 0x65, 0x6e,
|
||||||
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x18, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
||||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65,
|
0x76, 0x65, 0x47, 0x61, 0x70, 0x69, 0x63, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x52, 0x0b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x2c, 0x0a,
|
0x6e, 0x22, 0x93, 0x05, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72,
|
||||||
0x12, 0x72, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x65, 0x6e,
|
0x61, 0x72, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76,
|
||||||
0x75, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x65, 0x73, 0x74, 0x4e,
|
0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65,
|
||||||
0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x6a,
|
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3a, 0x0a, 0x0c, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x5f,
|
||||||
0x61, 0x76, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x15, 0x20, 0x01,
|
0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x67, 0x6f,
|
||||||
|
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53,
|
||||||
|
0x74, 0x61, 0x67, 0x65, 0x52, 0x0b, 0x6c, 0x61, 0x75, 0x6e, 0x63, 0x68, 0x53, 0x74, 0x61, 0x67,
|
||||||
|
0x65, 0x12, 0x2c, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69,
|
||||||
|
0x63, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72,
|
||||||
|
0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x65, 0x72, 0x69, 0x63, 0x45, 0x6e, 0x75, 0x6d, 0x73, 0x12,
|
||||||
|
0x3d, 0x0a, 0x0d, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
|
||||||
|
0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
|
||||||
|
0x61, 0x70, 0x69, 0x2e, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
|
||||||
|
0x52, 0x0c, 0x6a, 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a,
|
||||||
|
0x0a, 0x0c, 0x63, 0x70, 0x70, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x16,
|
||||||
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70,
|
||||||
|
0x69, 0x2e, 0x43, 0x70, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0b, 0x63,
|
||||||
|
0x70, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x70, 0x68,
|
||||||
|
0x70, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b,
|
||||||
|
0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x68,
|
||||||
|
0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0b, 0x70, 0x68, 0x70, 0x53, 0x65,
|
||||||
|
0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e,
|
||||||
|
0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
|
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x79, 0x74,
|
||||||
|
0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0e, 0x70, 0x79, 0x74,
|
||||||
|
0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x6e,
|
||||||
|
0x6f, 0x64, 0x65, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x19, 0x20, 0x01,
|
||||||
0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
||||||
0x4a, 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x6a, 0x61,
|
0x4e, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x6e, 0x6f,
|
||||||
0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x63, 0x70,
|
0x64, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x64, 0x6f,
|
||||||
0x70, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b,
|
0x74, 0x6e, 0x65, 0x74, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x1a, 0x20,
|
||||||
0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x70,
|
0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69,
|
||||||
0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0b, 0x63, 0x70, 0x70, 0x53, 0x65,
|
0x2e, 0x44, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52,
|
||||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x70, 0x68, 0x70, 0x5f, 0x73, 0x65,
|
0x0e, 0x64, 0x6f, 0x74, 0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12,
|
||||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67,
|
0x3d, 0x0a, 0x0d, 0x72, 0x75, 0x62, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
|
||||||
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x68, 0x70, 0x53, 0x65, 0x74,
|
0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0b, 0x70, 0x68, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
|
0x61, 0x70, 0x69, 0x2e, 0x52, 0x75, 0x62, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
|
||||||
0x67, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74,
|
0x52, 0x0c, 0x72, 0x75, 0x62, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x37,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
|
0x0a, 0x0b, 0x67, 0x6f, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x1c, 0x20,
|
||||||
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53,
|
0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69,
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0e, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53,
|
0x2e, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0a, 0x67, 0x6f, 0x53,
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x6e, 0x6f, 0x64, 0x65, 0x5f,
|
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0xf4, 0x04, 0x0a, 0x0a, 0x50, 0x75, 0x62, 0x6c,
|
||||||
0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18,
|
0x69, 0x73, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x43, 0x0a, 0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64,
|
||||||
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4e, 0x6f, 0x64, 0x65,
|
0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||||
0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x6e, 0x6f, 0x64, 0x65, 0x53, 0x65,
|
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74,
|
||||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x43, 0x0a, 0x0f, 0x64, 0x6f, 0x74, 0x6e, 0x65, 0x74,
|
0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0e, 0x6d, 0x65, 0x74,
|
||||||
0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x6e,
|
||||||
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x44, 0x6f, 0x74,
|
0x65, 0x77, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x65, 0x20, 0x01,
|
||||||
0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0e, 0x64, 0x6f, 0x74,
|
0x28, 0x09, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x49, 0x73, 0x73, 0x75, 0x65, 0x55, 0x72, 0x69, 0x12,
|
||||||
0x6e, 0x65, 0x74, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3d, 0x0a, 0x0d, 0x72,
|
0x2b, 0x0a, 0x11, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
0x75, 0x62, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x1b, 0x20, 0x01,
|
0x5f, 0x75, 0x72, 0x69, 0x18, 0x66, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x6f, 0x63, 0x75,
|
||||||
0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x69, 0x12, 0x24, 0x0a, 0x0e,
|
||||||
0x52, 0x75, 0x62, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0c, 0x72, 0x75,
|
0x61, 0x70, 0x69, 0x5f, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x67,
|
||||||
0x62, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x37, 0x0a, 0x0b, 0x67, 0x6f,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x70, 0x69, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x4e, 0x61,
|
||||||
0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0x6d, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x6c, 0x61, 0x62,
|
||||||
0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6f, 0x53,
|
0x65, 0x6c, 0x18, 0x68, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62,
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0a, 0x67, 0x6f, 0x53, 0x65, 0x74, 0x74, 0x69,
|
0x4c, 0x61, 0x62, 0x65, 0x6c, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x64, 0x65, 0x6f, 0x77, 0x6e,
|
||||||
0x6e, 0x67, 0x73, 0x22, 0xf4, 0x04, 0x0a, 0x0a, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x69,
|
0x65, 0x72, 0x5f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x18,
|
||||||
0x6e, 0x67, 0x12, 0x43, 0x0a, 0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73, 0x65, 0x74,
|
0x69, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x63, 0x6f, 0x64, 0x65, 0x6f, 0x77, 0x6e, 0x65, 0x72,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f,
|
0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x64,
|
||||||
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53,
|
0x6f, 0x63, 0x5f, 0x74, 0x61, 0x67, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x6a, 0x20,
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0e, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53,
|
0x01, 0x28, 0x09, 0x52, 0x0c, 0x64, 0x6f, 0x63, 0x54, 0x61, 0x67, 0x50, 0x72, 0x65, 0x66, 0x69,
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x6e, 0x65, 0x77, 0x5f, 0x69,
|
0x78, 0x12, 0x49, 0x0a, 0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f,
|
||||||
0x73, 0x73, 0x75, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x65, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
|
0x6e, 0x18, 0x6b, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
||||||
0x6e, 0x65, 0x77, 0x49, 0x73, 0x73, 0x75, 0x65, 0x55, 0x72, 0x69, 0x12, 0x2b, 0x0a, 0x11, 0x64,
|
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61,
|
||||||
0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69,
|
0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c,
|
||||||
0x18, 0x66, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
|
0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x10,
|
||||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x69, 0x12, 0x24, 0x0a, 0x0e, 0x61, 0x70, 0x69, 0x5f,
|
0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
|
||||||
0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x67, 0x20, 0x01, 0x28, 0x09,
|
0x18, 0x6d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
|
||||||
0x52, 0x0c, 0x61, 0x70, 0x69, 0x53, 0x68, 0x6f, 0x72, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x21,
|
0x61, 0x70, 0x69, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72,
|
||||||
0x0a, 0x0c, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x68,
|
0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x6c, 0x69, 0x62, 0x72, 0x61,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x4c, 0x61, 0x62, 0x65,
|
0x72, 0x79, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x49, 0x0a, 0x21, 0x70, 0x72,
|
||||||
0x6c, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x6f, 0x64, 0x65, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x67,
|
0x6f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x6f,
|
||||||
0x69, 0x74, 0x68, 0x75, 0x62, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x73, 0x18, 0x69, 0x20, 0x03, 0x28,
|
0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18,
|
||||||
0x09, 0x52, 0x14, 0x63, 0x6f, 0x64, 0x65, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x47, 0x69, 0x74, 0x68,
|
0x6e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x66, 0x65,
|
||||||
0x75, 0x62, 0x54, 0x65, 0x61, 0x6d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x64, 0x6f, 0x63, 0x5f, 0x74,
|
0x72, 0x65, 0x6e, 0x63, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69,
|
||||||
0x61, 0x67, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x09, 0x52,
|
0x6f, 0x6e, 0x55, 0x72, 0x69, 0x12, 0x47, 0x0a, 0x20, 0x72, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65,
|
||||||
0x0c, 0x64, 0x6f, 0x63, 0x54, 0x61, 0x67, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x49, 0x0a,
|
0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74,
|
||||||
0x0c, 0x6f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x6b, 0x20,
|
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69,
|
0x1d, 0x72, 0x65, 0x73, 0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x44, 0x6f,
|
||||||
0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72,
|
0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x69, 0x22, 0x9a,
|
||||||
0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6f, 0x72, 0x67, 0x61,
|
0x02, 0x0a, 0x0c, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12,
|
||||||
0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x10, 0x6c, 0x69, 0x62, 0x72,
|
0x27, 0x0a, 0x0f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61,
|
||||||
0x61, 0x72, 0x79, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x6d, 0x20, 0x03,
|
0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72,
|
||||||
0x28, 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
0x79, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76,
|
||||||
0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65, 0x74,
|
0x69, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18,
|
||||||
0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x0f, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x65,
|
0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
|
||||||
0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x49, 0x0a, 0x21, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x5f,
|
0x70, 0x69, 0x2e, 0x4a, 0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e,
|
||||||
0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
|
0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65,
|
||||||
0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x6e, 0x20, 0x01, 0x28,
|
0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43,
|
||||||
0x09, 0x52, 0x1e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63,
|
0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d,
|
||||||
0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72,
|
0x6d, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||||
0x69, 0x12, 0x47, 0x0a, 0x20, 0x72, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65,
|
0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e,
|
||||||
0x6e, 0x63, 0x65, 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63,
|
||||||
0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x1d, 0x72, 0x65, 0x73,
|
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x1a, 0x44, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||||
0x74, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65,
|
0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
|
||||||
0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x69, 0x22, 0x9a, 0x02, 0x0a, 0x0c, 0x4a,
|
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
|
||||||
0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6c,
|
0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x01,
|
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x0b, 0x43,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x50, 0x61, 0x63,
|
0x70, 0x70, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f,
|
||||||
0x6b, 0x61, 0x67, 0x65, 0x12, 0x5f, 0x0a, 0x13, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f,
|
|
||||||
0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
|
|
||||||
0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x4a,
|
|
||||||
0x61, 0x76, 0x61, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x53, 0x65, 0x72, 0x76,
|
|
||||||
0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x45, 0x6e, 0x74,
|
|
||||||
0x72, 0x79, 0x52, 0x11, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73, 0x73,
|
|
||||||
0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18,
|
|
||||||
0x03, 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, 0x1a, 0x44, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6c, 0x61, 0x73,
|
|
||||||
0x73, 0x4e, 0x61, 0x6d, 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, 0x49, 0x0a, 0x0b, 0x43, 0x70, 0x70, 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, 0x49, 0x0a, 0x0b, 0x50, 0x68, 0x70, 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, 0xfd, 0x01,
|
|
||||||
0x0a, 0x0e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 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, 0x64, 0x0a, 0x15,
|
|
||||||
0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x65, 0x61,
|
|
||||||
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, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53,
|
|
||||||
0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65,
|
|
||||||
0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x14, 0x65, 0x78,
|
|
||||||
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, 0x22, 0x48, 0x0a, 0x0a, 0x47, 0x6f, 0x53, 0x65, 0x74, 0x74,
|
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x22, 0x49, 0x0a, 0x0b, 0x50, 0x68, 0x70, 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, 0xc5, 0x02, 0x0a, 0x0e, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74,
|
||||||
0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x18, 0x01,
|
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,
|
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,
|
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,
|
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,
|
0x12, 0x64, 0x0a, 0x15, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c,
|
||||||
0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18,
|
0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12,
|
0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x79, 0x74,
|
||||||
0x49, 0x0a, 0x0c, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18,
|
0x68, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x45, 0x78, 0x70, 0x65,
|
||||||
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
|
0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73,
|
||||||
0x70, 0x69, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67,
|
0x52, 0x14, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65,
|
||||||
0x73, 0x2e, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x52, 0x0b, 0x6c,
|
0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x1a, 0x90, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x70, 0x65, 0x72,
|
||||||
0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x32, 0x0a, 0x15, 0x61, 0x75,
|
0x69, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12,
|
||||||
0x74, 0x6f, 0x5f, 0x70, 0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65,
|
0x31, 0x0a, 0x15, 0x72, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x5f, 0x69, 0x6f,
|
||||||
0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x61, 0x75, 0x74, 0x6f, 0x50,
|
0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12,
|
||||||
0x6f, 0x70, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x1a, 0x94,
|
0x72, 0x65, 0x73, 0x74, 0x41, 0x73, 0x79, 0x6e, 0x63, 0x49, 0x6f, 0x45, 0x6e, 0x61, 0x62, 0x6c,
|
||||||
0x02, 0x0a, 0x0b, 0x4c, 0x6f, 0x6e, 0x67, 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x47,
|
0x65, 0x64, 0x12, 0x45, 0x0a, 0x1f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x5f, 0x70,
|
||||||
0x0a, 0x12, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64,
|
0x79, 0x74, 0x68, 0x6f, 0x6e, 0x69, 0x63, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x5f, 0x65, 0x6e,
|
||||||
0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f,
|
0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1c, 0x70, 0x72, 0x6f,
|
||||||
0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72,
|
0x74, 0x6f, 0x62, 0x75, 0x66, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x69, 0x63, 0x54, 0x79, 0x70,
|
||||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x6f,
|
0x65, 0x73, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x4a, 0x0a, 0x0c, 0x4e, 0x6f, 0x64,
|
||||||
0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x32, 0x0a, 0x15, 0x70, 0x6f, 0x6c, 0x6c, 0x5f,
|
0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3a, 0x0a, 0x06, 0x63, 0x6f, 0x6d,
|
||||||
0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72,
|
0x6d, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x13, 0x70, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61,
|
0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x4c, 0x61, 0x6e,
|
||||||
0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, 0x6d,
|
0x67, 0x75, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x06, 0x63,
|
||||||
0x61, 0x78, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20,
|
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, 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, 0xe4, 0x01, 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, 0x12, 0x56, 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, 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
||||||
|
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x47, 0x6f, 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, 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, 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,
|
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, 0x69, 0x6f, 0x6e, 0x52, 0x0c,
|
0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10,
|
||||||
0x6d, 0x61, 0x78, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x47, 0x0a, 0x12,
|
0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79,
|
||||||
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f,
|
0x12, 0x32, 0x0a, 0x15, 0x70, 0x6f, 0x6c, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x6d,
|
||||||
0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x69, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52,
|
||||||
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
|
0x13, 0x70, 0x6f, 0x6c, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70,
|
||||||
0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x54, 0x69,
|
0x6c, 0x69, 0x65, 0x72, 0x12, 0x3f, 0x0a, 0x0e, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x6f, 0x6c, 0x6c,
|
||||||
0x6d, 0x65, 0x6f, 0x75, 0x74, 0x2a, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74,
|
0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
|
||||||
0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74,
|
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
|
||||||
0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x49,
|
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x6d, 0x61, 0x78, 0x50, 0x6f, 0x6c, 0x6c,
|
||||||
0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49,
|
0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x47, 0x0a, 0x12, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x70,
|
||||||
0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
|
0x6f, 0x6c, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||||
0x12, 0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41,
|
0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x44, 0x53, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x53, 0x10, 0x03,
|
0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x74, 0x6f,
|
||||||
0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10,
|
0x74, 0x61, 0x6c, 0x50, 0x6f, 0x6c, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0x34,
|
||||||
0x04, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12,
|
0x0a, 0x18, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x47, 0x61, 0x70, 0x69, 0x63,
|
||||||
0x07, 0x0a, 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, 0x45,
|
0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65,
|
||||||
0x52, 0x41, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x49, 0x10, 0x07, 0x2a, 0x67, 0x0a, 0x18, 0x43,
|
0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x74,
|
||||||
0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74,
|
0x68, 0x6f, 0x64, 0x73, 0x2a, 0xa3, 0x01, 0x0a, 0x19, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x4c,
|
||||||
0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, 0x4e,
|
0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x4f, 0x72, 0x67, 0x61, 0x6e, 0x69, 0x7a, 0x61, 0x74, 0x69,
|
||||||
0x54, 0x5f, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4e,
|
0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x27, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x49, 0x42,
|
||||||
0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45,
|
0x52, 0x41, 0x52, 0x59, 0x5f, 0x4f, 0x52, 0x47, 0x41, 0x4e, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f,
|
||||||
0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x0a, 0x12,
|
0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12,
|
||||||
0x13, 0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47,
|
0x09, 0x0a, 0x05, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x44,
|
||||||
0x45, 0x52, 0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73,
|
0x53, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x48, 0x4f, 0x54, 0x4f, 0x53, 0x10, 0x03, 0x12,
|
||||||
0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
0x0f, 0x0a, 0x0b, 0x53, 0x54, 0x52, 0x45, 0x45, 0x54, 0x5f, 0x56, 0x49, 0x45, 0x57, 0x10, 0x04,
|
||||||
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f,
|
0x12, 0x0c, 0x0a, 0x08, 0x53, 0x48, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x07,
|
||||||
0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52,
|
0x0a, 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x47, 0x45, 0x4e, 0x45, 0x52,
|
||||||
0x0f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
|
0x41, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x41, 0x49, 0x10, 0x07, 0x2a, 0x67, 0x0a, 0x18, 0x43, 0x6c,
|
||||||
0x3a, 0x43, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74,
|
0x69, 0x65, 0x6e, 0x74, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x44, 0x65, 0x73, 0x74, 0x69,
|
||||||
0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2a, 0x0a, 0x26, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54,
|
||||||
0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
|
0x5f, 0x4c, 0x49, 0x42, 0x52, 0x41, 0x52, 0x59, 0x5f, 0x44, 0x45, 0x53, 0x54, 0x49, 0x4e, 0x41,
|
||||||
0x73, 0x18, 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
|
0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
|
||||||
0x74, 0x48, 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73,
|
0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x10, 0x0a, 0x12, 0x13,
|
||||||
0x63, 0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
|
0x0a, 0x0f, 0x50, 0x41, 0x43, 0x4b, 0x41, 0x47, 0x45, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f,
|
0x52, 0x10, 0x14, 0x3a, 0x4a, 0x0a, 0x10, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x73, 0x69,
|
||||||
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f,
|
0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
|
||||||
0x61, 0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x3a, 0x44, 0x0a, 0x0b, 0x61, 0x70,
|
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64,
|
||||||
0x69, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9b, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f,
|
||||||
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76,
|
0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x3a,
|
||||||
0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xc1, 0xba, 0xab, 0xfa, 0x01,
|
0x43, 0x0a, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x12,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x70, 0x69, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
||||||
0x42, 0x69, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61,
|
0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73,
|
||||||
0x70, 0x69, 0x42, 0x0b, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
|
0x18, 0x99, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
|
||||||
0x01, 0x5a, 0x41, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67,
|
0x48, 0x6f, 0x73, 0x74, 0x3a, 0x43, 0x0a, 0x0c, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x73, 0x63,
|
||||||
0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f,
|
0x6f, 0x70, 0x65, 0x73, 0x12, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
|
||||||
0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e,
|
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70,
|
||||||
0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3b, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74,
|
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x9a, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6f, 0x61,
|
||||||
0x69, 0x6f, 0x6e, 0x73, 0xa2, 0x02, 0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
0x75, 0x74, 0x68, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x73, 0x3a, 0x44, 0x0a, 0x0b, 0x61, 0x70, 0x69,
|
||||||
0x74, 0x6f, 0x33,
|
0x5f, 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 (
|
||||||
@ -1675,7 +1788,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, 17)
|
var file_google_api_client_proto_msgTypes = make([]protoimpl.MessageInfo, 19)
|
||||||
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
|
||||||
@ -1691,55 +1804,59 @@ var file_google_api_client_proto_goTypes = []interface{}{
|
|||||||
(*RubySettings)(nil), // 11: google.api.RubySettings
|
(*RubySettings)(nil), // 11: google.api.RubySettings
|
||||||
(*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
|
(*SelectiveGapicGeneration)(nil), // 14: google.api.SelectiveGapicGeneration
|
||||||
(*PythonSettings_ExperimentalFeatures)(nil), // 15: google.api.PythonSettings.ExperimentalFeatures
|
nil, // 15: google.api.JavaSettings.ServiceClassNamesEntry
|
||||||
nil, // 16: google.api.DotnetSettings.RenamedServicesEntry
|
(*PythonSettings_ExperimentalFeatures)(nil), // 16: google.api.PythonSettings.ExperimentalFeatures
|
||||||
nil, // 17: google.api.DotnetSettings.RenamedResourcesEntry
|
nil, // 17: google.api.DotnetSettings.RenamedServicesEntry
|
||||||
(*MethodSettings_LongRunning)(nil), // 18: google.api.MethodSettings.LongRunning
|
nil, // 18: google.api.DotnetSettings.RenamedResourcesEntry
|
||||||
(api.LaunchStage)(0), // 19: google.api.LaunchStage
|
nil, // 19: google.api.GoSettings.RenamedServicesEntry
|
||||||
(*durationpb.Duration)(nil), // 20: google.protobuf.Duration
|
(*MethodSettings_LongRunning)(nil), // 20: google.api.MethodSettings.LongRunning
|
||||||
(*descriptorpb.MethodOptions)(nil), // 21: google.protobuf.MethodOptions
|
(api.LaunchStage)(0), // 21: google.api.LaunchStage
|
||||||
(*descriptorpb.ServiceOptions)(nil), // 22: google.protobuf.ServiceOptions
|
(*durationpb.Duration)(nil), // 22: google.protobuf.Duration
|
||||||
|
(*descriptorpb.MethodOptions)(nil), // 23: google.protobuf.MethodOptions
|
||||||
|
(*descriptorpb.ServiceOptions)(nil), // 24: 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
|
||||||
19, // 1: google.api.ClientLibrarySettings.launch_stage:type_name -> google.api.LaunchStage
|
14, // 1: google.api.CommonLanguageSettings.selective_gapic_generation:type_name -> google.api.SelectiveGapicGeneration
|
||||||
5, // 2: google.api.ClientLibrarySettings.java_settings:type_name -> google.api.JavaSettings
|
21, // 2: google.api.ClientLibrarySettings.launch_stage:type_name -> google.api.LaunchStage
|
||||||
6, // 3: google.api.ClientLibrarySettings.cpp_settings:type_name -> google.api.CppSettings
|
5, // 3: google.api.ClientLibrarySettings.java_settings:type_name -> google.api.JavaSettings
|
||||||
7, // 4: google.api.ClientLibrarySettings.php_settings:type_name -> google.api.PhpSettings
|
6, // 4: google.api.ClientLibrarySettings.cpp_settings:type_name -> google.api.CppSettings
|
||||||
8, // 5: google.api.ClientLibrarySettings.python_settings:type_name -> google.api.PythonSettings
|
7, // 5: google.api.ClientLibrarySettings.php_settings:type_name -> google.api.PhpSettings
|
||||||
9, // 6: google.api.ClientLibrarySettings.node_settings:type_name -> google.api.NodeSettings
|
8, // 6: google.api.ClientLibrarySettings.python_settings:type_name -> google.api.PythonSettings
|
||||||
10, // 7: google.api.ClientLibrarySettings.dotnet_settings:type_name -> google.api.DotnetSettings
|
9, // 7: google.api.ClientLibrarySettings.node_settings:type_name -> google.api.NodeSettings
|
||||||
11, // 8: google.api.ClientLibrarySettings.ruby_settings:type_name -> google.api.RubySettings
|
10, // 8: google.api.ClientLibrarySettings.dotnet_settings:type_name -> google.api.DotnetSettings
|
||||||
12, // 9: google.api.ClientLibrarySettings.go_settings:type_name -> google.api.GoSettings
|
11, // 9: google.api.ClientLibrarySettings.ruby_settings:type_name -> google.api.RubySettings
|
||||||
13, // 10: google.api.Publishing.method_settings:type_name -> google.api.MethodSettings
|
12, // 10: google.api.ClientLibrarySettings.go_settings:type_name -> google.api.GoSettings
|
||||||
0, // 11: google.api.Publishing.organization:type_name -> google.api.ClientLibraryOrganization
|
13, // 11: google.api.Publishing.method_settings:type_name -> google.api.MethodSettings
|
||||||
3, // 12: google.api.Publishing.library_settings:type_name -> google.api.ClientLibrarySettings
|
0, // 12: google.api.Publishing.organization:type_name -> google.api.ClientLibraryOrganization
|
||||||
14, // 13: google.api.JavaSettings.service_class_names:type_name -> google.api.JavaSettings.ServiceClassNamesEntry
|
3, // 13: google.api.Publishing.library_settings:type_name -> google.api.ClientLibrarySettings
|
||||||
2, // 14: google.api.JavaSettings.common:type_name -> google.api.CommonLanguageSettings
|
15, // 14: google.api.JavaSettings.service_class_names:type_name -> google.api.JavaSettings.ServiceClassNamesEntry
|
||||||
2, // 15: google.api.CppSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 15: google.api.JavaSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
2, // 16: google.api.PhpSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 16: google.api.CppSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
2, // 17: google.api.PythonSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 17: google.api.PhpSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
15, // 18: google.api.PythonSettings.experimental_features:type_name -> google.api.PythonSettings.ExperimentalFeatures
|
2, // 18: google.api.PythonSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
2, // 19: google.api.NodeSettings.common:type_name -> google.api.CommonLanguageSettings
|
16, // 19: google.api.PythonSettings.experimental_features:type_name -> google.api.PythonSettings.ExperimentalFeatures
|
||||||
2, // 20: google.api.DotnetSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 20: google.api.NodeSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
16, // 21: google.api.DotnetSettings.renamed_services:type_name -> google.api.DotnetSettings.RenamedServicesEntry
|
2, // 21: google.api.DotnetSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
17, // 22: google.api.DotnetSettings.renamed_resources:type_name -> google.api.DotnetSettings.RenamedResourcesEntry
|
17, // 22: google.api.DotnetSettings.renamed_services:type_name -> google.api.DotnetSettings.RenamedServicesEntry
|
||||||
2, // 23: google.api.RubySettings.common:type_name -> google.api.CommonLanguageSettings
|
18, // 23: google.api.DotnetSettings.renamed_resources:type_name -> google.api.DotnetSettings.RenamedResourcesEntry
|
||||||
2, // 24: google.api.GoSettings.common:type_name -> google.api.CommonLanguageSettings
|
2, // 24: google.api.RubySettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
18, // 25: google.api.MethodSettings.long_running:type_name -> google.api.MethodSettings.LongRunning
|
2, // 25: google.api.GoSettings.common:type_name -> google.api.CommonLanguageSettings
|
||||||
20, // 26: google.api.MethodSettings.LongRunning.initial_poll_delay:type_name -> google.protobuf.Duration
|
19, // 26: google.api.GoSettings.renamed_services:type_name -> google.api.GoSettings.RenamedServicesEntry
|
||||||
20, // 27: google.api.MethodSettings.LongRunning.max_poll_delay:type_name -> google.protobuf.Duration
|
20, // 27: google.api.MethodSettings.long_running:type_name -> google.api.MethodSettings.LongRunning
|
||||||
20, // 28: google.api.MethodSettings.LongRunning.total_poll_timeout:type_name -> google.protobuf.Duration
|
22, // 28: google.api.MethodSettings.LongRunning.initial_poll_delay:type_name -> google.protobuf.Duration
|
||||||
21, // 29: google.api.method_signature:extendee -> google.protobuf.MethodOptions
|
22, // 29: google.api.MethodSettings.LongRunning.max_poll_delay:type_name -> google.protobuf.Duration
|
||||||
22, // 30: google.api.default_host:extendee -> google.protobuf.ServiceOptions
|
22, // 30: google.api.MethodSettings.LongRunning.total_poll_timeout:type_name -> google.protobuf.Duration
|
||||||
22, // 31: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions
|
23, // 31: google.api.method_signature:extendee -> google.protobuf.MethodOptions
|
||||||
22, // 32: google.api.api_version:extendee -> google.protobuf.ServiceOptions
|
24, // 32: google.api.default_host:extendee -> google.protobuf.ServiceOptions
|
||||||
33, // [33:33] is the sub-list for method output_type
|
24, // 33: google.api.oauth_scopes:extendee -> google.protobuf.ServiceOptions
|
||||||
33, // [33:33] is the sub-list for method input_type
|
24, // 34: google.api.api_version:extendee -> google.protobuf.ServiceOptions
|
||||||
33, // [33:33] is the sub-list for extension type_name
|
35, // [35:35] is the sub-list for method output_type
|
||||||
29, // [29:33] is the sub-list for extension extendee
|
35, // [35:35] is the sub-list for method input_type
|
||||||
0, // [0:29] is the sub-list for field type_name
|
35, // [35:35] is the sub-list for extension type_name
|
||||||
|
31, // [31:35] is the sub-list for extension extendee
|
||||||
|
0, // [0:31] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_google_api_client_proto_init() }
|
func init() { file_google_api_client_proto_init() }
|
||||||
@ -1892,7 +2009,19 @@ func file_google_api_client_proto_init() {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_google_api_client_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
|
file_google_api_client_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*SelectiveGapicGeneration); 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[14].Exporter = func(v interface{}, i int) interface{} {
|
||||||
switch v := v.(*PythonSettings_ExperimentalFeatures); i {
|
switch v := v.(*PythonSettings_ExperimentalFeatures); i {
|
||||||
case 0:
|
case 0:
|
||||||
return &v.state
|
return &v.state
|
||||||
@ -1904,7 +2033,7 @@ func file_google_api_client_proto_init() {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
file_google_api_client_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
|
file_google_api_client_proto_msgTypes[18].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
|
||||||
@ -1923,7 +2052,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: 17,
|
NumMessages: 19,
|
||||||
NumExtensions: 4,
|
NumExtensions: 4,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
|||||||
6
vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go
generated
vendored
6
vendor/google.golang.org/genproto/googleapis/api/httpbody/httpbody.pb.go
generated
vendored
@ -159,14 +159,14 @@ var file_google_api_httpbody_proto_rawDesc = []byte{
|
|||||||
0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
|
0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x34, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69,
|
||||||
0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
|
||||||
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52,
|
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52,
|
||||||
0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x68, 0x0a, 0x0e, 0x63,
|
0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x65, 0x0a, 0x0e, 0x63,
|
||||||
0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0d, 0x48,
|
0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0d, 0x48,
|
||||||
0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b,
|
0x74, 0x74, 0x70, 0x42, 0x6f, 0x64, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3b,
|
||||||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72,
|
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,
|
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, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f,
|
0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f,
|
||||||
0x64, 0x79, 0x3b, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f, 0x64, 0x79, 0xf8, 0x01, 0x01, 0xa2, 0x02,
|
0x64, 0x79, 0x3b, 0x68, 0x74, 0x74, 0x70, 0x62, 0x6f, 0x64, 0x79, 0xa2, 0x02, 0x04, 0x47, 0x41,
|
||||||
0x04, 0x47, 0x41, 0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x50, 0x49, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
128
vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go
generated
vendored
128
vendor/google.golang.org/genproto/googleapis/rpc/errdetails/error_details.pb.go
generated
vendored
@ -80,11 +80,12 @@ type ErrorInfo struct {
|
|||||||
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
|
Domain string `protobuf:"bytes,2,opt,name=domain,proto3" json:"domain,omitempty"`
|
||||||
// Additional structured details about this error.
|
// Additional structured details about this error.
|
||||||
//
|
//
|
||||||
// Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
|
// Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
|
||||||
|
// ideally be lowerCamelCase. Also, they must be limited to 64 characters in
|
||||||
// length. When identifying the current value of an exceeded limit, the units
|
// length. When identifying the current value of an exceeded limit, the units
|
||||||
// should be contained in the key, not the value. For example, rather than
|
// should be contained in the key, not the value. For example, rather than
|
||||||
// {"instanceLimit": "100/request"}, should be returned as,
|
// `{"instanceLimit": "100/request"}`, should be returned as,
|
||||||
// {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
|
// `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
|
||||||
// instances that can be created in a single (batch) request.
|
// instances that can be created in a single (batch) request.
|
||||||
Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
Metadata map[string]string `protobuf:"bytes,3,rep,name=metadata,proto3" json:"metadata,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
|
||||||
}
|
}
|
||||||
@ -870,6 +871,16 @@ type BadRequest_FieldViolation struct {
|
|||||||
Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"`
|
Field string `protobuf:"bytes,1,opt,name=field,proto3" json:"field,omitempty"`
|
||||||
// A description of why the request element is bad.
|
// A description of why the request element is bad.
|
||||||
Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
|
Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"`
|
||||||
|
// The reason of the field-level error. This is a constant value that
|
||||||
|
// identifies the proximate cause of the field-level error. It should
|
||||||
|
// uniquely identify the type of the FieldViolation within the scope of the
|
||||||
|
// google.rpc.ErrorInfo.domain. This should be at most 63
|
||||||
|
// characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
|
||||||
|
// which represents UPPER_SNAKE_CASE.
|
||||||
|
Reason string `protobuf:"bytes,3,opt,name=reason,proto3" json:"reason,omitempty"`
|
||||||
|
// Provides a localized error message for field-level errors that is safe to
|
||||||
|
// return to the API consumer.
|
||||||
|
LocalizedMessage *LocalizedMessage `protobuf:"bytes,4,opt,name=localized_message,json=localizedMessage,proto3" json:"localized_message,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *BadRequest_FieldViolation) Reset() {
|
func (x *BadRequest_FieldViolation) Reset() {
|
||||||
@ -918,6 +929,20 @@ func (x *BadRequest_FieldViolation) GetDescription() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *BadRequest_FieldViolation) GetReason() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.Reason
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *BadRequest_FieldViolation) GetLocalizedMessage() *LocalizedMessage {
|
||||||
|
if x != nil {
|
||||||
|
return x.LocalizedMessage
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Describes a URL link.
|
// Describes a URL link.
|
||||||
type Help_Link struct {
|
type Help_Link struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
@ -1026,51 +1051,57 @@ var file_google_rpc_error_details_proto_rawDesc = []byte{
|
|||||||
0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
|
0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
|
||||||
0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
|
0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72,
|
||||||
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,
|
0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65,
|
||||||
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xa8, 0x01, 0x0a, 0x0a, 0x42, 0x61,
|
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8c, 0x02, 0x0a, 0x0a, 0x42, 0x61,
|
||||||
0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x10, 0x66, 0x69, 0x65, 0x6c,
|
0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x50, 0x0a, 0x10, 0x66, 0x69, 0x65, 0x6c,
|
||||||
0x64, 0x5f, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03,
|
0x64, 0x5f, 0x76, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03,
|
||||||
0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e,
|
0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e,
|
||||||
0x42, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64,
|
0x42, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64,
|
||||||
0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x66, 0x69, 0x65, 0x6c, 0x64,
|
0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x66, 0x69, 0x65, 0x6c, 0x64,
|
||||||
0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x48, 0x0a, 0x0e, 0x46, 0x69,
|
0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xab, 0x01, 0x0a, 0x0e, 0x46,
|
||||||
0x65, 0x6c, 0x64, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05,
|
0x69, 0x65, 0x6c, 0x64, 0x56, 0x69, 0x6f, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a,
|
||||||
0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65,
|
0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69,
|
||||||
0x6c, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f,
|
0x65, 0x6c, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
|
||||||
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
|
0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4f, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49,
|
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18,
|
||||||
0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69,
|
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x49, 0x0a,
|
||||||
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
0x11, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
|
||||||
0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x61,
|
0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||||
0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e,
|
0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d,
|
||||||
0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x90, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x10, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65,
|
||||||
0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72,
|
0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x4f, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75,
|
||||||
0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72,
|
0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72,
|
0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71,
|
||||||
0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
|
0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, 0x6e,
|
||||||
0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65,
|
0x67, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x65,
|
||||||
0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
|
0x72, 0x76, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61, 0x22, 0x90, 0x01, 0x0a, 0x0c, 0x52, 0x65,
|
||||||
0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69,
|
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65,
|
||||||
0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73,
|
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6f, 0x0a, 0x04, 0x48, 0x65, 0x6c, 0x70,
|
0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
|
||||||
0x12, 0x2b, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
|
||||||
0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x6c,
|
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||||
0x70, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x1a, 0x3a, 0x0a,
|
0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20,
|
||||||
0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70,
|
0x01, 0x28, 0x09, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65,
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63,
|
0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||||
0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x02,
|
0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x6f, 0x0a, 0x04,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x44, 0x0a, 0x10, 0x4c, 0x6f, 0x63,
|
0x48, 0x65, 0x6c, 0x70, 0x12, 0x2b, 0x0a, 0x05, 0x6c, 0x69, 0x6e, 0x6b, 0x73, 0x18, 0x01, 0x20,
|
||||||
0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a,
|
0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63,
|
||||||
0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c,
|
0x2e, 0x48, 0x65, 0x6c, 0x70, 0x2e, 0x4c, 0x69, 0x6e, 0x6b, 0x52, 0x05, 0x6c, 0x69, 0x6e, 0x6b,
|
||||||
0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
|
0x73, 0x1a, 0x3a, 0x0a, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42,
|
0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b,
|
||||||
0x6c, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70,
|
0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x75,
|
||||||
0x63, 0x42, 0x11, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x50,
|
0x72, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0x44, 0x0a,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
|
0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
|
||||||
0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f,
|
0x65, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x72, 0x70,
|
0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73,
|
||||||
0x63, 0x2f, 0x65, 0x72, 0x72, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x3b, 0x65, 0x72, 0x72,
|
0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73,
|
||||||
0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0xa2, 0x02, 0x03, 0x52, 0x50, 0x43, 0x62, 0x06, 0x70,
|
0x61, 0x67, 0x65, 0x42, 0x6c, 0x0a, 0x0e, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x65, 0x2e, 0x72, 0x70, 0x63, 0x42, 0x11, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x44, 0x65, 0x74, 0x61,
|
||||||
|
0x69, 0x6c, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3f, 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, 0x72, 0x70, 0x63, 0x2f, 0x65, 0x72, 0x72, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73,
|
||||||
|
0x3b, 0x65, 0x72, 0x72, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0xa2, 0x02, 0x03, 0x52, 0x50,
|
||||||
|
0x43, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -1111,11 +1142,12 @@ var file_google_rpc_error_details_proto_depIdxs = []int32{
|
|||||||
12, // 3: google.rpc.PreconditionFailure.violations:type_name -> google.rpc.PreconditionFailure.Violation
|
12, // 3: google.rpc.PreconditionFailure.violations:type_name -> google.rpc.PreconditionFailure.Violation
|
||||||
13, // 4: google.rpc.BadRequest.field_violations:type_name -> google.rpc.BadRequest.FieldViolation
|
13, // 4: google.rpc.BadRequest.field_violations:type_name -> google.rpc.BadRequest.FieldViolation
|
||||||
14, // 5: google.rpc.Help.links:type_name -> google.rpc.Help.Link
|
14, // 5: google.rpc.Help.links:type_name -> google.rpc.Help.Link
|
||||||
6, // [6:6] is the sub-list for method output_type
|
9, // 6: google.rpc.BadRequest.FieldViolation.localized_message:type_name -> google.rpc.LocalizedMessage
|
||||||
6, // [6:6] is the sub-list for method input_type
|
7, // [7:7] is the sub-list for method output_type
|
||||||
6, // [6:6] is the sub-list for extension type_name
|
7, // [7:7] is the sub-list for method input_type
|
||||||
6, // [6:6] is the sub-list for extension extendee
|
7, // [7:7] is the sub-list for extension type_name
|
||||||
0, // [0:6] is the sub-list for field type_name
|
7, // [7:7] is the sub-list for extension extendee
|
||||||
|
0, // [0:7] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_google_rpc_error_details_proto_init() }
|
func init() { file_google_rpc_error_details_proto_init() }
|
||||||
|
|||||||
22
vendor/google.golang.org/grpc/balancer/balancer.go
generated
vendored
22
vendor/google.golang.org/grpc/balancer/balancer.go
generated
vendored
@ -129,6 +129,13 @@ type State struct {
|
|||||||
// brand new implementation of this interface. For the situations like
|
// brand new implementation of this interface. For the situations like
|
||||||
// testing, the new implementation should embed this interface. This allows
|
// testing, the new implementation should embed this interface. This allows
|
||||||
// gRPC to add new methods to this interface.
|
// gRPC to add new methods to this interface.
|
||||||
|
//
|
||||||
|
// NOTICE: This interface is intended to be implemented by gRPC, or intercepted
|
||||||
|
// by custom load balancing polices. Users should not need their own complete
|
||||||
|
// implementation of this interface -- they should always delegate to a
|
||||||
|
// ClientConn passed to Builder.Build() by embedding it in their
|
||||||
|
// implementations. An embedded ClientConn must never be nil, or runtime panics
|
||||||
|
// will occur.
|
||||||
type ClientConn interface {
|
type ClientConn interface {
|
||||||
// NewSubConn is called by balancer to create a new SubConn.
|
// NewSubConn is called by balancer to create a new SubConn.
|
||||||
// It doesn't block and wait for the connections to be established.
|
// It doesn't block and wait for the connections to be established.
|
||||||
@ -167,6 +174,17 @@ type ClientConn interface {
|
|||||||
//
|
//
|
||||||
// Deprecated: Use the Target field in the BuildOptions instead.
|
// Deprecated: Use the Target field in the BuildOptions instead.
|
||||||
Target() string
|
Target() string
|
||||||
|
|
||||||
|
// MetricsRecorder provides the metrics recorder that balancers can use to
|
||||||
|
// record metrics. Balancer implementations which do not register metrics on
|
||||||
|
// metrics registry and record on them can ignore this method. The returned
|
||||||
|
// MetricsRecorder is guaranteed to never be nil.
|
||||||
|
MetricsRecorder() estats.MetricsRecorder
|
||||||
|
|
||||||
|
// EnforceClientConnEmbedding is included to force implementers to embed
|
||||||
|
// another implementation of this interface, allowing gRPC to add methods
|
||||||
|
// without breaking users.
|
||||||
|
internal.EnforceClientConnEmbedding
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildOptions contains additional information for Build.
|
// BuildOptions contains additional information for Build.
|
||||||
@ -198,10 +216,6 @@ type BuildOptions struct {
|
|||||||
// same resolver.Target as passed to the resolver. See the documentation for
|
// same resolver.Target as passed to the resolver. See the documentation for
|
||||||
// the resolver.Target type for details about what it contains.
|
// the resolver.Target type for details about what it contains.
|
||||||
Target resolver.Target
|
Target resolver.Target
|
||||||
// MetricsRecorder is the metrics recorder that balancers can use to record
|
|
||||||
// metrics. Balancer implementations which do not register metrics on
|
|
||||||
// metrics registry and record on them can ignore this field.
|
|
||||||
MetricsRecorder estats.MetricsRecorder
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Builder creates a balancer.
|
// Builder creates a balancer.
|
||||||
|
|||||||
358
vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go
generated
vendored
Normal file
358
vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go
generated
vendored
Normal file
@ -0,0 +1,358 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 endpointsharding implements a load balancing policy that manages
|
||||||
|
// homogeneous child policies each owning a single endpoint.
|
||||||
|
//
|
||||||
|
// # Experimental
|
||||||
|
//
|
||||||
|
// Notice: This package is EXPERIMENTAL and may be changed or removed in a
|
||||||
|
// later release.
|
||||||
|
package endpointsharding
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
rand "math/rand/v2"
|
||||||
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
|
|
||||||
|
"google.golang.org/grpc/balancer"
|
||||||
|
"google.golang.org/grpc/balancer/base"
|
||||||
|
"google.golang.org/grpc/connectivity"
|
||||||
|
"google.golang.org/grpc/resolver"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChildState is the balancer state of a child along with the endpoint which
|
||||||
|
// identifies the child balancer.
|
||||||
|
type ChildState struct {
|
||||||
|
Endpoint resolver.Endpoint
|
||||||
|
State balancer.State
|
||||||
|
|
||||||
|
// Balancer exposes only the ExitIdler interface of the child LB policy.
|
||||||
|
// Other methods of the child policy are called only by endpointsharding.
|
||||||
|
Balancer balancer.ExitIdler
|
||||||
|
}
|
||||||
|
|
||||||
|
// Options are the options to configure the behaviour of the
|
||||||
|
// endpointsharding balancer.
|
||||||
|
type Options struct {
|
||||||
|
// DisableAutoReconnect allows the balancer to keep child balancer in the
|
||||||
|
// IDLE state until they are explicitly triggered to exit using the
|
||||||
|
// ChildState obtained from the endpointsharding picker. When set to false,
|
||||||
|
// the endpointsharding balancer will automatically call ExitIdle on child
|
||||||
|
// connections that report IDLE.
|
||||||
|
DisableAutoReconnect bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChildBuilderFunc creates a new balancer with the ClientConn. It has the same
|
||||||
|
// type as the balancer.Builder.Build method.
|
||||||
|
type ChildBuilderFunc func(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer
|
||||||
|
|
||||||
|
// NewBalancer returns a load balancing policy that manages homogeneous child
|
||||||
|
// policies each owning a single endpoint. The endpointsharding balancer
|
||||||
|
// forwards the LoadBalancingConfig in ClientConn state updates to its children.
|
||||||
|
func NewBalancer(cc balancer.ClientConn, opts balancer.BuildOptions, childBuilder ChildBuilderFunc, esOpts Options) balancer.Balancer {
|
||||||
|
es := &endpointSharding{
|
||||||
|
cc: cc,
|
||||||
|
bOpts: opts,
|
||||||
|
esOpts: esOpts,
|
||||||
|
childBuilder: childBuilder,
|
||||||
|
}
|
||||||
|
es.children.Store(resolver.NewEndpointMap())
|
||||||
|
return es
|
||||||
|
}
|
||||||
|
|
||||||
|
// endpointSharding is a balancer that wraps child balancers. It creates a child
|
||||||
|
// balancer with child config for every unique Endpoint received. It updates the
|
||||||
|
// child states on any update from parent or child.
|
||||||
|
type endpointSharding struct {
|
||||||
|
cc balancer.ClientConn
|
||||||
|
bOpts balancer.BuildOptions
|
||||||
|
esOpts Options
|
||||||
|
childBuilder ChildBuilderFunc
|
||||||
|
|
||||||
|
// childMu synchronizes calls to any single child. It must be held for all
|
||||||
|
// calls into a child. To avoid deadlocks, do not acquire childMu while
|
||||||
|
// holding mu.
|
||||||
|
childMu sync.Mutex
|
||||||
|
children atomic.Pointer[resolver.EndpointMap] // endpoint -> *balancerWrapper
|
||||||
|
|
||||||
|
// inhibitChildUpdates is set during UpdateClientConnState/ResolverError
|
||||||
|
// calls (calls to children will each produce an update, only want one
|
||||||
|
// update).
|
||||||
|
inhibitChildUpdates atomic.Bool
|
||||||
|
|
||||||
|
// mu synchronizes access to the state stored in balancerWrappers in the
|
||||||
|
// children field. mu must not be held during calls into a child since
|
||||||
|
// synchronous calls back from the child may require taking mu, causing a
|
||||||
|
// deadlock. To avoid deadlocks, do not acquire childMu while holding mu.
|
||||||
|
mu sync.Mutex
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateClientConnState creates a child for new endpoints and deletes children
|
||||||
|
// for endpoints that are no longer present. It also updates all the children,
|
||||||
|
// and sends a single synchronous update of the childrens' aggregated state at
|
||||||
|
// the end of the UpdateClientConnState operation. If any endpoint has no
|
||||||
|
// addresses it will ignore that endpoint. Otherwise, returns first error found
|
||||||
|
// from a child, but fully processes the new update.
|
||||||
|
func (es *endpointSharding) UpdateClientConnState(state balancer.ClientConnState) error {
|
||||||
|
es.childMu.Lock()
|
||||||
|
defer es.childMu.Unlock()
|
||||||
|
|
||||||
|
es.inhibitChildUpdates.Store(true)
|
||||||
|
defer func() {
|
||||||
|
es.inhibitChildUpdates.Store(false)
|
||||||
|
es.updateState()
|
||||||
|
}()
|
||||||
|
var ret error
|
||||||
|
|
||||||
|
children := es.children.Load()
|
||||||
|
newChildren := resolver.NewEndpointMap()
|
||||||
|
|
||||||
|
// Update/Create new children.
|
||||||
|
for _, endpoint := range state.ResolverState.Endpoints {
|
||||||
|
if _, ok := newChildren.Get(endpoint); ok {
|
||||||
|
// Endpoint child was already created, continue to avoid duplicate
|
||||||
|
// update.
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
var childBalancer *balancerWrapper
|
||||||
|
if val, ok := children.Get(endpoint); ok {
|
||||||
|
childBalancer = val.(*balancerWrapper)
|
||||||
|
// Endpoint attributes may have changed, update the stored endpoint.
|
||||||
|
es.mu.Lock()
|
||||||
|
childBalancer.childState.Endpoint = endpoint
|
||||||
|
es.mu.Unlock()
|
||||||
|
} else {
|
||||||
|
childBalancer = &balancerWrapper{
|
||||||
|
childState: ChildState{Endpoint: endpoint},
|
||||||
|
ClientConn: es.cc,
|
||||||
|
es: es,
|
||||||
|
}
|
||||||
|
childBalancer.childState.Balancer = childBalancer
|
||||||
|
childBalancer.child = es.childBuilder(childBalancer, es.bOpts)
|
||||||
|
}
|
||||||
|
newChildren.Set(endpoint, childBalancer)
|
||||||
|
if err := childBalancer.updateClientConnStateLocked(balancer.ClientConnState{
|
||||||
|
BalancerConfig: state.BalancerConfig,
|
||||||
|
ResolverState: resolver.State{
|
||||||
|
Endpoints: []resolver.Endpoint{endpoint},
|
||||||
|
Attributes: state.ResolverState.Attributes,
|
||||||
|
},
|
||||||
|
}); err != nil && ret == nil {
|
||||||
|
// Return first error found, and always commit full processing of
|
||||||
|
// updating children. If desired to process more specific errors
|
||||||
|
// across all endpoints, caller should make these specific
|
||||||
|
// validations, this is a current limitation for simplicity sake.
|
||||||
|
ret = err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Delete old children that are no longer present.
|
||||||
|
for _, e := range children.Keys() {
|
||||||
|
child, _ := children.Get(e)
|
||||||
|
if _, ok := newChildren.Get(e); !ok {
|
||||||
|
child.(*balancerWrapper).closeLocked()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
es.children.Store(newChildren)
|
||||||
|
if newChildren.Len() == 0 {
|
||||||
|
return balancer.ErrBadResolverState
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResolverError forwards the resolver error to all of the endpointSharding's
|
||||||
|
// children and sends a single synchronous update of the childStates at the end
|
||||||
|
// of the ResolverError operation.
|
||||||
|
func (es *endpointSharding) ResolverError(err error) {
|
||||||
|
es.childMu.Lock()
|
||||||
|
defer es.childMu.Unlock()
|
||||||
|
es.inhibitChildUpdates.Store(true)
|
||||||
|
defer func() {
|
||||||
|
es.inhibitChildUpdates.Store(false)
|
||||||
|
es.updateState()
|
||||||
|
}()
|
||||||
|
children := es.children.Load()
|
||||||
|
for _, child := range children.Values() {
|
||||||
|
child.(*balancerWrapper).resolverErrorLocked(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (es *endpointSharding) UpdateSubConnState(balancer.SubConn, balancer.SubConnState) {
|
||||||
|
// UpdateSubConnState is deprecated.
|
||||||
|
}
|
||||||
|
|
||||||
|
func (es *endpointSharding) Close() {
|
||||||
|
es.childMu.Lock()
|
||||||
|
defer es.childMu.Unlock()
|
||||||
|
children := es.children.Load()
|
||||||
|
for _, child := range children.Values() {
|
||||||
|
child.(*balancerWrapper).closeLocked()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// updateState updates this component's state. It sends the aggregated state,
|
||||||
|
// and a picker with round robin behavior with all the child states present if
|
||||||
|
// needed.
|
||||||
|
func (es *endpointSharding) updateState() {
|
||||||
|
if es.inhibitChildUpdates.Load() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var readyPickers, connectingPickers, idlePickers, transientFailurePickers []balancer.Picker
|
||||||
|
|
||||||
|
es.mu.Lock()
|
||||||
|
defer es.mu.Unlock()
|
||||||
|
|
||||||
|
children := es.children.Load()
|
||||||
|
childStates := make([]ChildState, 0, children.Len())
|
||||||
|
|
||||||
|
for _, child := range children.Values() {
|
||||||
|
bw := child.(*balancerWrapper)
|
||||||
|
childState := bw.childState
|
||||||
|
childStates = append(childStates, childState)
|
||||||
|
childPicker := childState.State.Picker
|
||||||
|
switch childState.State.ConnectivityState {
|
||||||
|
case connectivity.Ready:
|
||||||
|
readyPickers = append(readyPickers, childPicker)
|
||||||
|
case connectivity.Connecting:
|
||||||
|
connectingPickers = append(connectingPickers, childPicker)
|
||||||
|
case connectivity.Idle:
|
||||||
|
idlePickers = append(idlePickers, childPicker)
|
||||||
|
case connectivity.TransientFailure:
|
||||||
|
transientFailurePickers = append(transientFailurePickers, childPicker)
|
||||||
|
// connectivity.Shutdown shouldn't appear.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Construct the round robin picker based off the aggregated state. Whatever
|
||||||
|
// the aggregated state, use the pickers present that are currently in that
|
||||||
|
// state only.
|
||||||
|
var aggState connectivity.State
|
||||||
|
var pickers []balancer.Picker
|
||||||
|
if len(readyPickers) >= 1 {
|
||||||
|
aggState = connectivity.Ready
|
||||||
|
pickers = readyPickers
|
||||||
|
} else if len(connectingPickers) >= 1 {
|
||||||
|
aggState = connectivity.Connecting
|
||||||
|
pickers = connectingPickers
|
||||||
|
} else if len(idlePickers) >= 1 {
|
||||||
|
aggState = connectivity.Idle
|
||||||
|
pickers = idlePickers
|
||||||
|
} else if len(transientFailurePickers) >= 1 {
|
||||||
|
aggState = connectivity.TransientFailure
|
||||||
|
pickers = transientFailurePickers
|
||||||
|
} else {
|
||||||
|
aggState = connectivity.TransientFailure
|
||||||
|
pickers = []balancer.Picker{base.NewErrPicker(errors.New("no children to pick from"))}
|
||||||
|
} // No children (resolver error before valid update).
|
||||||
|
p := &pickerWithChildStates{
|
||||||
|
pickers: pickers,
|
||||||
|
childStates: childStates,
|
||||||
|
next: uint32(rand.IntN(len(pickers))),
|
||||||
|
}
|
||||||
|
es.cc.UpdateState(balancer.State{
|
||||||
|
ConnectivityState: aggState,
|
||||||
|
Picker: p,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// pickerWithChildStates delegates to the pickers it holds in a round robin
|
||||||
|
// fashion. It also contains the childStates of all the endpointSharding's
|
||||||
|
// children.
|
||||||
|
type pickerWithChildStates struct {
|
||||||
|
pickers []balancer.Picker
|
||||||
|
childStates []ChildState
|
||||||
|
next uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *pickerWithChildStates) Pick(info balancer.PickInfo) (balancer.PickResult, error) {
|
||||||
|
nextIndex := atomic.AddUint32(&p.next, 1)
|
||||||
|
picker := p.pickers[nextIndex%uint32(len(p.pickers))]
|
||||||
|
return picker.Pick(info)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChildStatesFromPicker returns the state of all the children managed by the
|
||||||
|
// endpoint sharding balancer that created this picker.
|
||||||
|
func ChildStatesFromPicker(picker balancer.Picker) []ChildState {
|
||||||
|
p, ok := picker.(*pickerWithChildStates)
|
||||||
|
if !ok {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return p.childStates
|
||||||
|
}
|
||||||
|
|
||||||
|
// balancerWrapper is a wrapper of a balancer. It ID's a child balancer by
|
||||||
|
// endpoint, and persists recent child balancer state.
|
||||||
|
type balancerWrapper 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.
|
||||||
|
|
||||||
|
// child contains the wrapped balancer. Access its methods only through
|
||||||
|
// methods on balancerWrapper to ensure proper synchronization
|
||||||
|
child balancer.Balancer
|
||||||
|
balancer.ClientConn // embed to intercept UpdateState, doesn't deal with SubConns
|
||||||
|
|
||||||
|
es *endpointSharding
|
||||||
|
|
||||||
|
// Access to the following fields is guarded by es.mu.
|
||||||
|
|
||||||
|
childState ChildState
|
||||||
|
isClosed bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bw *balancerWrapper) UpdateState(state balancer.State) {
|
||||||
|
bw.es.mu.Lock()
|
||||||
|
bw.childState.State = state
|
||||||
|
bw.es.mu.Unlock()
|
||||||
|
if state.ConnectivityState == connectivity.Idle && !bw.es.esOpts.DisableAutoReconnect {
|
||||||
|
bw.ExitIdle()
|
||||||
|
}
|
||||||
|
bw.es.updateState()
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExitIdle pings an IDLE child balancer to exit idle in a new goroutine to
|
||||||
|
// avoid deadlocks due to synchronous balancer state updates.
|
||||||
|
func (bw *balancerWrapper) ExitIdle() {
|
||||||
|
if ei, ok := bw.child.(balancer.ExitIdler); ok {
|
||||||
|
go func() {
|
||||||
|
bw.es.childMu.Lock()
|
||||||
|
if !bw.isClosed {
|
||||||
|
ei.ExitIdle()
|
||||||
|
}
|
||||||
|
bw.es.childMu.Unlock()
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// updateClientConnStateLocked delivers the ClientConnState to the child
|
||||||
|
// balancer. Callers must hold the child mutex of the parent endpointsharding
|
||||||
|
// balancer.
|
||||||
|
func (bw *balancerWrapper) updateClientConnStateLocked(ccs balancer.ClientConnState) error {
|
||||||
|
return bw.child.UpdateClientConnState(ccs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// closeLocked closes the child balancer. Callers must hold the child mutext of
|
||||||
|
// the parent endpointsharding balancer.
|
||||||
|
func (bw *balancerWrapper) closeLocked() {
|
||||||
|
bw.child.Close()
|
||||||
|
bw.isClosed = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (bw *balancerWrapper) resolverErrorLocked(err error) {
|
||||||
|
bw.child.ResolverError(err)
|
||||||
|
}
|
||||||
2
vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go
generated
vendored
2
vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go
generated
vendored
@ -120,7 +120,7 @@ func (pickfirstBuilder) Build(cc balancer.ClientConn, bo balancer.BuildOptions)
|
|||||||
b := &pickfirstBalancer{
|
b := &pickfirstBalancer{
|
||||||
cc: cc,
|
cc: cc,
|
||||||
target: bo.Target.String(),
|
target: bo.Target.String(),
|
||||||
metricsRecorder: bo.MetricsRecorder, // ClientConn will always create a Metrics Recorder.
|
metricsRecorder: cc.MetricsRecorder(),
|
||||||
|
|
||||||
subConns: resolver.NewAddressMap(),
|
subConns: resolver.NewAddressMap(),
|
||||||
state: connectivity.Connecting,
|
state: connectivity.Connecting,
|
||||||
|
|||||||
78
vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go
generated
vendored
78
vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go
generated
vendored
@ -22,12 +22,13 @@
|
|||||||
package roundrobin
|
package roundrobin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
rand "math/rand/v2"
|
"fmt"
|
||||||
"sync/atomic"
|
|
||||||
|
|
||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/balancer"
|
||||||
"google.golang.org/grpc/balancer/base"
|
"google.golang.org/grpc/balancer/endpointsharding"
|
||||||
|
"google.golang.org/grpc/balancer/pickfirst/pickfirstleaf"
|
||||||
"google.golang.org/grpc/grpclog"
|
"google.golang.org/grpc/grpclog"
|
||||||
|
internalgrpclog "google.golang.org/grpc/internal/grpclog"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Name is the name of round_robin balancer.
|
// Name is the name of round_robin balancer.
|
||||||
@ -35,47 +36,44 @@ const Name = "round_robin"
|
|||||||
|
|
||||||
var logger = grpclog.Component("roundrobin")
|
var logger = grpclog.Component("roundrobin")
|
||||||
|
|
||||||
// newBuilder creates a new roundrobin balancer builder.
|
|
||||||
func newBuilder() balancer.Builder {
|
|
||||||
return base.NewBalancerBuilder(Name, &rrPickerBuilder{}, base.Config{HealthCheck: true})
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
balancer.Register(newBuilder())
|
balancer.Register(builder{})
|
||||||
}
|
}
|
||||||
|
|
||||||
type rrPickerBuilder struct{}
|
type builder struct{}
|
||||||
|
|
||||||
func (*rrPickerBuilder) Build(info base.PickerBuildInfo) balancer.Picker {
|
func (bb builder) Name() string {
|
||||||
logger.Infof("roundrobinPicker: Build called with info: %v", info)
|
return Name
|
||||||
if len(info.ReadySCs) == 0 {
|
}
|
||||||
return base.NewErrPicker(balancer.ErrNoSubConnAvailable)
|
|
||||||
|
func (bb builder) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer {
|
||||||
|
childBuilder := balancer.Get(pickfirstleaf.Name).Build
|
||||||
|
bal := &rrBalancer{
|
||||||
|
cc: cc,
|
||||||
|
Balancer: endpointsharding.NewBalancer(cc, opts, childBuilder, endpointsharding.Options{}),
|
||||||
}
|
}
|
||||||
scs := make([]balancer.SubConn, 0, len(info.ReadySCs))
|
bal.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[%p] ", bal))
|
||||||
for sc := range info.ReadySCs {
|
bal.logger.Infof("Created")
|
||||||
scs = append(scs, sc)
|
return bal
|
||||||
}
|
}
|
||||||
return &rrPicker{
|
|
||||||
subConns: scs,
|
type rrBalancer struct {
|
||||||
// Start at a random index, as the same RR balancer rebuilds a new
|
balancer.Balancer
|
||||||
// picker when SubConn states change, and we don't want to apply excess
|
cc balancer.ClientConn
|
||||||
// load to the first server in the list.
|
logger *internalgrpclog.PrefixLogger
|
||||||
next: uint32(rand.IntN(len(scs))),
|
}
|
||||||
|
|
||||||
|
func (b *rrBalancer) UpdateClientConnState(ccs balancer.ClientConnState) error {
|
||||||
|
return b.Balancer.UpdateClientConnState(balancer.ClientConnState{
|
||||||
|
// Enable the health listener in pickfirst children for client side health
|
||||||
|
// checks and outlier detection, if configured.
|
||||||
|
ResolverState: pickfirstleaf.EnableHealthListener(ccs.ResolverState),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *rrBalancer) ExitIdle() {
|
||||||
|
// Should always be ok, as child is endpoint sharding.
|
||||||
|
if ei, ok := b.Balancer.(balancer.ExitIdler); ok {
|
||||||
|
ei.ExitIdle()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type rrPicker struct {
|
|
||||||
// subConns is the snapshot of the roundrobin balancer when this picker was
|
|
||||||
// created. The slice is immutable. Each Get() will do a round robin
|
|
||||||
// selection from it and return the selected SubConn.
|
|
||||||
subConns []balancer.SubConn
|
|
||||||
next uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *rrPicker) Pick(balancer.PickInfo) (balancer.PickResult, error) {
|
|
||||||
subConnsLen := uint32(len(p.subConns))
|
|
||||||
nextIndex := atomic.AddUint32(&p.next, 1)
|
|
||||||
|
|
||||||
sc := p.subConns[nextIndex%subConnsLen]
|
|
||||||
return balancer.PickResult{SubConn: sc}, nil
|
|
||||||
}
|
|
||||||
|
|||||||
2
vendor/google.golang.org/grpc/balancer/subconn.go
generated
vendored
2
vendor/google.golang.org/grpc/balancer/subconn.go
generated
vendored
@ -44,7 +44,7 @@ import (
|
|||||||
// should only use a single address.
|
// should only use a single address.
|
||||||
//
|
//
|
||||||
// NOTICE: This interface is intended to be implemented by gRPC, or intercepted
|
// NOTICE: This interface is intended to be implemented by gRPC, or intercepted
|
||||||
// by custom load balancing poilices. Users should not need their own complete
|
// by custom load balancing polices. Users should not need their own complete
|
||||||
// implementation of this interface -- they should always delegate to a SubConn
|
// implementation of this interface -- they should always delegate to a SubConn
|
||||||
// returned by ClientConn.NewSubConn() by embedding it in their implementations.
|
// returned by ClientConn.NewSubConn() by embedding it in their implementations.
|
||||||
// An embedded SubConn must never be nil, or runtime panics will occur.
|
// An embedded SubConn must never be nil, or runtime panics will occur.
|
||||||
|
|||||||
9
vendor/google.golang.org/grpc/balancer_wrapper.go
generated
vendored
9
vendor/google.golang.org/grpc/balancer_wrapper.go
generated
vendored
@ -26,6 +26,7 @@ import (
|
|||||||
"google.golang.org/grpc/balancer"
|
"google.golang.org/grpc/balancer"
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
"google.golang.org/grpc/connectivity"
|
"google.golang.org/grpc/connectivity"
|
||||||
|
"google.golang.org/grpc/experimental/stats"
|
||||||
"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"
|
||||||
@ -59,6 +60,7 @@ var (
|
|||||||
// It uses the gracefulswitch.Balancer internally to ensure that balancer
|
// It uses the gracefulswitch.Balancer internally to ensure that balancer
|
||||||
// switches happen in a graceful manner.
|
// switches happen in a graceful manner.
|
||||||
type ccBalancerWrapper struct {
|
type ccBalancerWrapper struct {
|
||||||
|
internal.EnforceClientConnEmbedding
|
||||||
// The following fields are initialized when the wrapper is created and are
|
// The following fields are initialized when the wrapper is created and are
|
||||||
// read-only afterwards, and therefore can be accessed without a mutex.
|
// read-only afterwards, and therefore can be accessed without a mutex.
|
||||||
cc *ClientConn
|
cc *ClientConn
|
||||||
@ -92,7 +94,6 @@ func newCCBalancerWrapper(cc *ClientConn) *ccBalancerWrapper {
|
|||||||
CustomUserAgent: cc.dopts.copts.UserAgent,
|
CustomUserAgent: cc.dopts.copts.UserAgent,
|
||||||
ChannelzParent: cc.channelz,
|
ChannelzParent: cc.channelz,
|
||||||
Target: cc.parsedTarget,
|
Target: cc.parsedTarget,
|
||||||
MetricsRecorder: cc.metricsRecorderList,
|
|
||||||
},
|
},
|
||||||
serializer: grpcsync.NewCallbackSerializer(ctx),
|
serializer: grpcsync.NewCallbackSerializer(ctx),
|
||||||
serializerCancel: cancel,
|
serializerCancel: cancel,
|
||||||
@ -101,6 +102,10 @@ func newCCBalancerWrapper(cc *ClientConn) *ccBalancerWrapper {
|
|||||||
return ccb
|
return ccb
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ccb *ccBalancerWrapper) MetricsRecorder() stats.MetricsRecorder {
|
||||||
|
return ccb.cc.metricsRecorderList
|
||||||
|
}
|
||||||
|
|
||||||
// updateClientConnState is invoked by grpc to push a ClientConnState update to
|
// updateClientConnState is invoked by grpc to push a ClientConnState update to
|
||||||
// the underlying balancer. This is always executed from the serializer, so
|
// the underlying balancer. This is always executed from the serializer, so
|
||||||
// it is safe to call into the balancer here.
|
// it is safe to call into the balancer here.
|
||||||
@ -415,7 +420,7 @@ func (acbw *acBalancerWrapper) GetOrBuildProducer(pb balancer.ProducerBuilder) (
|
|||||||
}
|
}
|
||||||
acbw.producersMu.Unlock()
|
acbw.producersMu.Unlock()
|
||||||
}
|
}
|
||||||
return pData.producer, grpcsync.OnceFunc(unref)
|
return pData.producer, sync.OnceFunc(unref)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (acbw *acBalancerWrapper) closeProducers() {
|
func (acbw *acBalancerWrapper) closeProducers() {
|
||||||
|
|||||||
118
vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
generated
vendored
118
vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
generated
vendored
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.35.2
|
// protoc-gen-go v1.36.4
|
||||||
// protoc v5.27.1
|
// protoc v5.27.1
|
||||||
// source: grpc/binlog/v1/binarylog.proto
|
// source: grpc/binlog/v1/binarylog.proto
|
||||||
|
|
||||||
@ -31,6 +31,7 @@ import (
|
|||||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||||
reflect "reflect"
|
reflect "reflect"
|
||||||
sync "sync"
|
sync "sync"
|
||||||
|
unsafe "unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -233,10 +234,7 @@ func (Address_Type) EnumDescriptor() ([]byte, []int) {
|
|||||||
|
|
||||||
// Log entry we store in binary logs
|
// Log entry we store in binary logs
|
||||||
type GrpcLogEntry struct {
|
type GrpcLogEntry struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
// The timestamp of the binary log message
|
// The timestamp of the binary log message
|
||||||
Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
|
Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
|
||||||
// Uniquely identifies a call. The value must not be 0 in order to disambiguate
|
// Uniquely identifies a call. The value must not be 0 in order to disambiguate
|
||||||
@ -255,7 +253,7 @@ type GrpcLogEntry struct {
|
|||||||
// The logger uses one of the following fields to record the payload,
|
// The logger uses one of the following fields to record the payload,
|
||||||
// according to the type of the log entry.
|
// according to the type of the log entry.
|
||||||
//
|
//
|
||||||
// Types that are assignable to Payload:
|
// Types that are valid to be assigned to Payload:
|
||||||
//
|
//
|
||||||
// *GrpcLogEntry_ClientHeader
|
// *GrpcLogEntry_ClientHeader
|
||||||
// *GrpcLogEntry_ServerHeader
|
// *GrpcLogEntry_ServerHeader
|
||||||
@ -269,7 +267,9 @@ type GrpcLogEntry struct {
|
|||||||
// EVENT_TYPE_SERVER_HEADER normally or EVENT_TYPE_SERVER_TRAILER in
|
// EVENT_TYPE_SERVER_HEADER normally or EVENT_TYPE_SERVER_TRAILER in
|
||||||
// the case of trailers-only. On server side, peer is always
|
// the case of trailers-only. On server side, peer is always
|
||||||
// logged on EVENT_TYPE_CLIENT_HEADER.
|
// logged on EVENT_TYPE_CLIENT_HEADER.
|
||||||
Peer *Address `protobuf:"bytes,11,opt,name=peer,proto3" json:"peer,omitempty"`
|
Peer *Address `protobuf:"bytes,11,opt,name=peer,proto3" json:"peer,omitempty"`
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GrpcLogEntry) Reset() {
|
func (x *GrpcLogEntry) Reset() {
|
||||||
@ -337,37 +337,45 @@ func (x *GrpcLogEntry) GetLogger() GrpcLogEntry_Logger {
|
|||||||
return GrpcLogEntry_LOGGER_UNKNOWN
|
return GrpcLogEntry_LOGGER_UNKNOWN
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *GrpcLogEntry) GetPayload() isGrpcLogEntry_Payload {
|
func (x *GrpcLogEntry) GetPayload() isGrpcLogEntry_Payload {
|
||||||
if m != nil {
|
if x != nil {
|
||||||
return m.Payload
|
return x.Payload
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GrpcLogEntry) GetClientHeader() *ClientHeader {
|
func (x *GrpcLogEntry) GetClientHeader() *ClientHeader {
|
||||||
if x, ok := x.GetPayload().(*GrpcLogEntry_ClientHeader); ok {
|
if x != nil {
|
||||||
return x.ClientHeader
|
if x, ok := x.Payload.(*GrpcLogEntry_ClientHeader); ok {
|
||||||
|
return x.ClientHeader
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GrpcLogEntry) GetServerHeader() *ServerHeader {
|
func (x *GrpcLogEntry) GetServerHeader() *ServerHeader {
|
||||||
if x, ok := x.GetPayload().(*GrpcLogEntry_ServerHeader); ok {
|
if x != nil {
|
||||||
return x.ServerHeader
|
if x, ok := x.Payload.(*GrpcLogEntry_ServerHeader); ok {
|
||||||
|
return x.ServerHeader
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GrpcLogEntry) GetMessage() *Message {
|
func (x *GrpcLogEntry) GetMessage() *Message {
|
||||||
if x, ok := x.GetPayload().(*GrpcLogEntry_Message); ok {
|
if x != nil {
|
||||||
return x.Message
|
if x, ok := x.Payload.(*GrpcLogEntry_Message); ok {
|
||||||
|
return x.Message
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *GrpcLogEntry) GetTrailer() *Trailer {
|
func (x *GrpcLogEntry) GetTrailer() *Trailer {
|
||||||
if x, ok := x.GetPayload().(*GrpcLogEntry_Trailer); ok {
|
if x != nil {
|
||||||
return x.Trailer
|
if x, ok := x.Payload.(*GrpcLogEntry_Trailer); ok {
|
||||||
|
return x.Trailer
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -416,10 +424,7 @@ func (*GrpcLogEntry_Message) isGrpcLogEntry_Payload() {}
|
|||||||
func (*GrpcLogEntry_Trailer) isGrpcLogEntry_Payload() {}
|
func (*GrpcLogEntry_Trailer) isGrpcLogEntry_Payload() {}
|
||||||
|
|
||||||
type ClientHeader struct {
|
type ClientHeader struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
// This contains only the metadata from the application.
|
// This contains only the metadata from the application.
|
||||||
Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
|
Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
|
||||||
// The name of the RPC method, which looks something like:
|
// The name of the RPC method, which looks something like:
|
||||||
@ -433,7 +438,9 @@ type ClientHeader struct {
|
|||||||
// <host> or <host>:<port> .
|
// <host> or <host>:<port> .
|
||||||
Authority string `protobuf:"bytes,3,opt,name=authority,proto3" json:"authority,omitempty"`
|
Authority string `protobuf:"bytes,3,opt,name=authority,proto3" json:"authority,omitempty"`
|
||||||
// the RPC timeout
|
// the RPC timeout
|
||||||
Timeout *durationpb.Duration `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"`
|
Timeout *durationpb.Duration `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"`
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ClientHeader) Reset() {
|
func (x *ClientHeader) Reset() {
|
||||||
@ -495,12 +502,11 @@ func (x *ClientHeader) GetTimeout() *durationpb.Duration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type ServerHeader struct {
|
type ServerHeader struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
// This contains only the metadata from the application.
|
// This contains only the metadata from the application.
|
||||||
Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
|
Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *ServerHeader) Reset() {
|
func (x *ServerHeader) Reset() {
|
||||||
@ -541,10 +547,7 @@ func (x *ServerHeader) GetMetadata() *Metadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Trailer struct {
|
type Trailer struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
// This contains only the metadata from the application.
|
// This contains only the metadata from the application.
|
||||||
Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
|
Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"`
|
||||||
// The gRPC status code.
|
// The gRPC status code.
|
||||||
@ -555,6 +558,8 @@ type Trailer struct {
|
|||||||
// The value of the 'grpc-status-details-bin' metadata key. If
|
// The value of the 'grpc-status-details-bin' metadata key. If
|
||||||
// present, this is always an encoded 'google.rpc.Status' message.
|
// present, this is always an encoded 'google.rpc.Status' message.
|
||||||
StatusDetails []byte `protobuf:"bytes,4,opt,name=status_details,json=statusDetails,proto3" json:"status_details,omitempty"`
|
StatusDetails []byte `protobuf:"bytes,4,opt,name=status_details,json=statusDetails,proto3" json:"status_details,omitempty"`
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Trailer) Reset() {
|
func (x *Trailer) Reset() {
|
||||||
@ -617,15 +622,14 @@ func (x *Trailer) GetStatusDetails() []byte {
|
|||||||
|
|
||||||
// Message payload, used by CLIENT_MESSAGE and SERVER_MESSAGE
|
// Message payload, used by CLIENT_MESSAGE and SERVER_MESSAGE
|
||||||
type Message struct {
|
type Message struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
|
||||||
unknownFields protoimpl.UnknownFields
|
|
||||||
|
|
||||||
// Length of the message. It may not be the same as the length of the
|
// Length of the message. It may not be the same as the length of the
|
||||||
// data field, as the logging payload can be truncated or omitted.
|
// data field, as the logging payload can be truncated or omitted.
|
||||||
Length uint32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"`
|
Length uint32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"`
|
||||||
// May be truncated or omitted.
|
// May be truncated or omitted.
|
||||||
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
|
Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Message) Reset() {
|
func (x *Message) Reset() {
|
||||||
@ -694,11 +698,10 @@ func (x *Message) GetData() []byte {
|
|||||||
// header is just a normal metadata key.
|
// header is just a normal metadata key.
|
||||||
// The pair will not count towards the size limit.
|
// The pair will not count towards the size limit.
|
||||||
type Metadata struct {
|
type Metadata struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
Entry []*MetadataEntry `protobuf:"bytes,1,rep,name=entry,proto3" json:"entry,omitempty"`
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
Entry []*MetadataEntry `protobuf:"bytes,1,rep,name=entry,proto3" json:"entry,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Metadata) Reset() {
|
func (x *Metadata) Reset() {
|
||||||
@ -740,12 +743,11 @@ func (x *Metadata) GetEntry() []*MetadataEntry {
|
|||||||
|
|
||||||
// A metadata key value pair
|
// A metadata key value pair
|
||||||
type MetadataEntry struct {
|
type MetadataEntry struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
||||||
|
Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
|
|
||||||
Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *MetadataEntry) Reset() {
|
func (x *MetadataEntry) Reset() {
|
||||||
@ -794,14 +796,13 @@ func (x *MetadataEntry) GetValue() []byte {
|
|||||||
|
|
||||||
// Address information
|
// Address information
|
||||||
type Address struct {
|
type Address struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
Type Address_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.binarylog.v1.Address_Type" json:"type,omitempty"`
|
||||||
unknownFields protoimpl.UnknownFields
|
Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
|
||||||
|
|
||||||
Type Address_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.binarylog.v1.Address_Type" json:"type,omitempty"`
|
|
||||||
Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"`
|
|
||||||
// only for TYPE_IPV4 and TYPE_IPV6
|
// only for TYPE_IPV4 and TYPE_IPV6
|
||||||
IpPort uint32 `protobuf:"varint,3,opt,name=ip_port,json=ipPort,proto3" json:"ip_port,omitempty"`
|
IpPort uint32 `protobuf:"varint,3,opt,name=ip_port,json=ipPort,proto3" json:"ip_port,omitempty"`
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Address) Reset() {
|
func (x *Address) Reset() {
|
||||||
@ -857,7 +858,7 @@ func (x *Address) GetIpPort() uint32 {
|
|||||||
|
|
||||||
var File_grpc_binlog_v1_binarylog_proto protoreflect.FileDescriptor
|
var File_grpc_binlog_v1_binarylog_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
var file_grpc_binlog_v1_binarylog_proto_rawDesc = []byte{
|
var file_grpc_binlog_v1_binarylog_proto_rawDesc = string([]byte{
|
||||||
0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x2f, 0x76, 0x31,
|
0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x2f, 0x76, 0x31,
|
||||||
0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x12, 0x11, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67,
|
0x12, 0x11, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67,
|
||||||
@ -983,16 +984,16 @@ var file_grpc_binlog_v1_binarylog_proto_rawDesc = []byte{
|
|||||||
0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x62, 0x69,
|
0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x62, 0x69,
|
||||||
0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
|
0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x6f, 0x33,
|
0x6f, 0x33,
|
||||||
}
|
})
|
||||||
|
|
||||||
var (
|
var (
|
||||||
file_grpc_binlog_v1_binarylog_proto_rawDescOnce sync.Once
|
file_grpc_binlog_v1_binarylog_proto_rawDescOnce sync.Once
|
||||||
file_grpc_binlog_v1_binarylog_proto_rawDescData = file_grpc_binlog_v1_binarylog_proto_rawDesc
|
file_grpc_binlog_v1_binarylog_proto_rawDescData []byte
|
||||||
)
|
)
|
||||||
|
|
||||||
func file_grpc_binlog_v1_binarylog_proto_rawDescGZIP() []byte {
|
func file_grpc_binlog_v1_binarylog_proto_rawDescGZIP() []byte {
|
||||||
file_grpc_binlog_v1_binarylog_proto_rawDescOnce.Do(func() {
|
file_grpc_binlog_v1_binarylog_proto_rawDescOnce.Do(func() {
|
||||||
file_grpc_binlog_v1_binarylog_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_binlog_v1_binarylog_proto_rawDescData)
|
file_grpc_binlog_v1_binarylog_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_grpc_binlog_v1_binarylog_proto_rawDesc), len(file_grpc_binlog_v1_binarylog_proto_rawDesc)))
|
||||||
})
|
})
|
||||||
return file_grpc_binlog_v1_binarylog_proto_rawDescData
|
return file_grpc_binlog_v1_binarylog_proto_rawDescData
|
||||||
}
|
}
|
||||||
@ -1051,7 +1052,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
|
|||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_grpc_binlog_v1_binarylog_proto_rawDesc,
|
RawDescriptor: unsafe.Slice(unsafe.StringData(file_grpc_binlog_v1_binarylog_proto_rawDesc), len(file_grpc_binlog_v1_binarylog_proto_rawDesc)),
|
||||||
NumEnums: 3,
|
NumEnums: 3,
|
||||||
NumMessages: 8,
|
NumMessages: 8,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
@ -1063,7 +1064,6 @@ func file_grpc_binlog_v1_binarylog_proto_init() {
|
|||||||
MessageInfos: file_grpc_binlog_v1_binarylog_proto_msgTypes,
|
MessageInfos: file_grpc_binlog_v1_binarylog_proto_msgTypes,
|
||||||
}.Build()
|
}.Build()
|
||||||
File_grpc_binlog_v1_binarylog_proto = out.File
|
File_grpc_binlog_v1_binarylog_proto = out.File
|
||||||
file_grpc_binlog_v1_binarylog_proto_rawDesc = nil
|
|
||||||
file_grpc_binlog_v1_binarylog_proto_goTypes = nil
|
file_grpc_binlog_v1_binarylog_proto_goTypes = nil
|
||||||
file_grpc_binlog_v1_binarylog_proto_depIdxs = nil
|
file_grpc_binlog_v1_binarylog_proto_depIdxs = nil
|
||||||
}
|
}
|
||||||
|
|||||||
47
vendor/google.golang.org/grpc/clientconn.go
generated
vendored
47
vendor/google.golang.org/grpc/clientconn.go
generated
vendored
@ -118,12 +118,26 @@ func (dcs *defaultConfigSelector) SelectConfig(rpcInfo iresolver.RPCInfo) (*ires
|
|||||||
|
|
||||||
// NewClient creates a new gRPC "channel" for the target URI provided. No I/O
|
// NewClient creates a new gRPC "channel" for the target URI provided. No I/O
|
||||||
// is performed. Use of the ClientConn for RPCs will automatically cause it to
|
// is performed. Use of the ClientConn for RPCs will automatically cause it to
|
||||||
// connect. Connect may be used to manually create a connection, but for most
|
// connect. The Connect method may be called to manually create a connection,
|
||||||
// users this is unnecessary.
|
// but for most users this should be unnecessary.
|
||||||
//
|
//
|
||||||
// The target name syntax is defined in
|
// The target name syntax is defined in
|
||||||
// https://github.com/grpc/grpc/blob/master/doc/naming.md. e.g. to use dns
|
// https://github.com/grpc/grpc/blob/master/doc/naming.md. E.g. to use the dns
|
||||||
// resolver, a "dns:///" prefix should be applied to the target.
|
// name resolver, a "dns:///" prefix may be applied to the target. The default
|
||||||
|
// name resolver will be used if no scheme is detected, or if the parsed scheme
|
||||||
|
// is not a registered name resolver. The default resolver is "dns" but can be
|
||||||
|
// overridden using the resolver package's SetDefaultScheme.
|
||||||
|
//
|
||||||
|
// Examples:
|
||||||
|
//
|
||||||
|
// - "foo.googleapis.com:8080"
|
||||||
|
// - "dns:///foo.googleapis.com:8080"
|
||||||
|
// - "dns:///foo.googleapis.com"
|
||||||
|
// - "dns:///10.0.0.213:8080"
|
||||||
|
// - "dns:///%5B2001:db8:85a3:8d3:1319:8a2e:370:7348%5D:443"
|
||||||
|
// - "dns://8.8.8.8/foo.googleapis.com:8080"
|
||||||
|
// - "dns://8.8.8.8/foo.googleapis.com"
|
||||||
|
// - "zookeeper://zk.example.com:9900/example_service"
|
||||||
//
|
//
|
||||||
// The DialOptions returned by WithBlock, WithTimeout,
|
// The DialOptions returned by WithBlock, WithTimeout,
|
||||||
// WithReturnConnectionError, and FailOnNonTempDialError are ignored by this
|
// WithReturnConnectionError, and FailOnNonTempDialError are ignored by this
|
||||||
@ -181,7 +195,7 @@ func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error)
|
|||||||
}
|
}
|
||||||
cc.dopts.defaultServiceConfig, _ = scpr.Config.(*ServiceConfig)
|
cc.dopts.defaultServiceConfig, _ = scpr.Config.(*ServiceConfig)
|
||||||
}
|
}
|
||||||
cc.mkp = cc.dopts.copts.KeepaliveParams
|
cc.keepaliveParams = cc.dopts.copts.KeepaliveParams
|
||||||
|
|
||||||
if err = cc.initAuthority(); err != nil {
|
if err = cc.initAuthority(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -225,7 +239,12 @@ func Dial(target string, opts ...DialOption) (*ClientConn, error) {
|
|||||||
func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error) {
|
func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error) {
|
||||||
// At the end of this method, we kick the channel out of idle, rather than
|
// At the end of this method, we kick the channel out of idle, rather than
|
||||||
// waiting for the first rpc.
|
// waiting for the first rpc.
|
||||||
opts = append([]DialOption{withDefaultScheme("passthrough")}, opts...)
|
//
|
||||||
|
// WithLocalDNSResolution dial option in `grpc.Dial` ensures that it
|
||||||
|
// preserves behavior: when default scheme passthrough is used, skip
|
||||||
|
// hostname resolution, when "dns" is used for resolution, perform
|
||||||
|
// resolution on the client.
|
||||||
|
opts = append([]DialOption{withDefaultScheme("passthrough"), WithLocalDNSResolution()}, opts...)
|
||||||
cc, err := NewClient(target, opts...)
|
cc, err := NewClient(target, opts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -618,7 +637,7 @@ type ClientConn struct {
|
|||||||
balancerWrapper *ccBalancerWrapper // Always recreated whenever entering idle to simplify Close.
|
balancerWrapper *ccBalancerWrapper // Always recreated whenever entering idle to simplify Close.
|
||||||
sc *ServiceConfig // Latest service config received from the resolver.
|
sc *ServiceConfig // Latest service config received from the resolver.
|
||||||
conns map[*addrConn]struct{} // Set to nil on close.
|
conns map[*addrConn]struct{} // Set to nil on close.
|
||||||
mkp keepalive.ClientParameters // May be updated upon receipt of a GoAway.
|
keepaliveParams keepalive.ClientParameters // May be updated upon receipt of a GoAway.
|
||||||
// firstResolveEvent is used to track whether the name resolver sent us at
|
// firstResolveEvent is used to track whether the name resolver sent us at
|
||||||
// least one update. RPCs block on this event. May be accessed without mu
|
// least one update. RPCs block on this event. May be accessed without mu
|
||||||
// if we know we cannot be asked to enter idle mode while accessing it (e.g.
|
// if we know we cannot be asked to enter idle mode while accessing it (e.g.
|
||||||
@ -867,7 +886,13 @@ func (cc *ClientConn) Target() string {
|
|||||||
return cc.target
|
return cc.target
|
||||||
}
|
}
|
||||||
|
|
||||||
// CanonicalTarget returns the canonical target string of the ClientConn.
|
// CanonicalTarget returns the canonical target string used when creating cc.
|
||||||
|
//
|
||||||
|
// This always has the form "<scheme>://[authority]/<endpoint>". For example:
|
||||||
|
//
|
||||||
|
// - "dns:///example.com:42"
|
||||||
|
// - "dns://8.8.8.8/example.com:42"
|
||||||
|
// - "unix:///path/to/socket"
|
||||||
func (cc *ClientConn) CanonicalTarget() string {
|
func (cc *ClientConn) CanonicalTarget() string {
|
||||||
return cc.parsedTarget.String()
|
return cc.parsedTarget.String()
|
||||||
}
|
}
|
||||||
@ -1210,8 +1235,8 @@ func (ac *addrConn) adjustParams(r transport.GoAwayReason) {
|
|||||||
case transport.GoAwayTooManyPings:
|
case transport.GoAwayTooManyPings:
|
||||||
v := 2 * ac.dopts.copts.KeepaliveParams.Time
|
v := 2 * ac.dopts.copts.KeepaliveParams.Time
|
||||||
ac.cc.mu.Lock()
|
ac.cc.mu.Lock()
|
||||||
if v > ac.cc.mkp.Time {
|
if v > ac.cc.keepaliveParams.Time {
|
||||||
ac.cc.mkp.Time = v
|
ac.cc.keepaliveParams.Time = v
|
||||||
}
|
}
|
||||||
ac.cc.mu.Unlock()
|
ac.cc.mu.Unlock()
|
||||||
}
|
}
|
||||||
@ -1307,7 +1332,7 @@ func (ac *addrConn) tryAllAddrs(ctx context.Context, addrs []resolver.Address, c
|
|||||||
ac.mu.Lock()
|
ac.mu.Lock()
|
||||||
|
|
||||||
ac.cc.mu.RLock()
|
ac.cc.mu.RLock()
|
||||||
ac.dopts.copts.KeepaliveParams = ac.cc.mkp
|
ac.dopts.copts.KeepaliveParams = ac.cc.keepaliveParams
|
||||||
ac.cc.mu.RUnlock()
|
ac.cc.mu.RUnlock()
|
||||||
|
|
||||||
copts := ac.dopts.copts
|
copts := ac.dopts.copts
|
||||||
|
|||||||
34
vendor/google.golang.org/grpc/dialoptions.go
generated
vendored
34
vendor/google.golang.org/grpc/dialoptions.go
generated
vendored
@ -73,7 +73,7 @@ type dialOptions struct {
|
|||||||
chainUnaryInts []UnaryClientInterceptor
|
chainUnaryInts []UnaryClientInterceptor
|
||||||
chainStreamInts []StreamClientInterceptor
|
chainStreamInts []StreamClientInterceptor
|
||||||
|
|
||||||
cp Compressor
|
compressorV0 Compressor
|
||||||
dc Decompressor
|
dc Decompressor
|
||||||
bs internalbackoff.Strategy
|
bs internalbackoff.Strategy
|
||||||
block bool
|
block bool
|
||||||
@ -94,6 +94,8 @@ type dialOptions struct {
|
|||||||
idleTimeout time.Duration
|
idleTimeout time.Duration
|
||||||
defaultScheme string
|
defaultScheme string
|
||||||
maxCallAttempts int
|
maxCallAttempts int
|
||||||
|
enableLocalDNSResolution bool // Specifies if target hostnames should be resolved when proxying is enabled.
|
||||||
|
useProxy bool // Specifies if a server should be connected via proxy.
|
||||||
}
|
}
|
||||||
|
|
||||||
// DialOption configures how we set up the connection.
|
// DialOption configures how we set up the connection.
|
||||||
@ -256,7 +258,7 @@ func WithCodec(c Codec) DialOption {
|
|||||||
// Deprecated: use UseCompressor instead. Will be supported throughout 1.x.
|
// Deprecated: use UseCompressor instead. Will be supported throughout 1.x.
|
||||||
func WithCompressor(cp Compressor) DialOption {
|
func WithCompressor(cp Compressor) DialOption {
|
||||||
return newFuncDialOption(func(o *dialOptions) {
|
return newFuncDialOption(func(o *dialOptions) {
|
||||||
o.cp = cp
|
o.compressorV0 = cp
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -377,7 +379,22 @@ func WithInsecure() DialOption {
|
|||||||
// later release.
|
// later release.
|
||||||
func WithNoProxy() DialOption {
|
func WithNoProxy() DialOption {
|
||||||
return newFuncDialOption(func(o *dialOptions) {
|
return newFuncDialOption(func(o *dialOptions) {
|
||||||
o.copts.UseProxy = false
|
o.useProxy = false
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithLocalDNSResolution forces local DNS name resolution even when a proxy is
|
||||||
|
// specified in the environment. By default, the server name is provided
|
||||||
|
// directly to the proxy as part of the CONNECT handshake. This is ignored if
|
||||||
|
// WithNoProxy is used.
|
||||||
|
//
|
||||||
|
// # Experimental
|
||||||
|
//
|
||||||
|
// Notice: This API is EXPERIMENTAL and may be changed or removed in a
|
||||||
|
// later release.
|
||||||
|
func WithLocalDNSResolution() DialOption {
|
||||||
|
return newFuncDialOption(func(o *dialOptions) {
|
||||||
|
o.enableLocalDNSResolution = true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -667,14 +684,15 @@ func defaultDialOptions() dialOptions {
|
|||||||
copts: transport.ConnectOptions{
|
copts: transport.ConnectOptions{
|
||||||
ReadBufferSize: defaultReadBufSize,
|
ReadBufferSize: defaultReadBufSize,
|
||||||
WriteBufferSize: defaultWriteBufSize,
|
WriteBufferSize: defaultWriteBufSize,
|
||||||
UseProxy: true,
|
|
||||||
UserAgent: grpcUA,
|
UserAgent: grpcUA,
|
||||||
BufferPool: mem.DefaultBufferPool(),
|
BufferPool: mem.DefaultBufferPool(),
|
||||||
},
|
},
|
||||||
bs: internalbackoff.DefaultExponential,
|
bs: internalbackoff.DefaultExponential,
|
||||||
idleTimeout: 30 * time.Minute,
|
idleTimeout: 30 * time.Minute,
|
||||||
defaultScheme: "dns",
|
defaultScheme: "dns",
|
||||||
maxCallAttempts: defaultMaxCallAttempts,
|
maxCallAttempts: defaultMaxCallAttempts,
|
||||||
|
useProxy: true,
|
||||||
|
enableLocalDNSResolution: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
35
vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go
generated
vendored
35
vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go
generated
vendored
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// versions:
|
// versions:
|
||||||
// protoc-gen-go v1.35.2
|
// protoc-gen-go v1.36.4
|
||||||
// protoc v5.27.1
|
// protoc v5.27.1
|
||||||
// source: grpc/health/v1/health.proto
|
// source: grpc/health/v1/health.proto
|
||||||
|
|
||||||
@ -28,6 +28,7 @@ import (
|
|||||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
reflect "reflect"
|
reflect "reflect"
|
||||||
sync "sync"
|
sync "sync"
|
||||||
|
unsafe "unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -90,11 +91,10 @@ func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type HealthCheckRequest struct {
|
type HealthCheckRequest struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *HealthCheckRequest) Reset() {
|
func (x *HealthCheckRequest) Reset() {
|
||||||
@ -135,11 +135,10 @@ func (x *HealthCheckRequest) GetService() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type HealthCheckResponse struct {
|
type HealthCheckResponse struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState `protogen:"open.v1"`
|
||||||
sizeCache protoimpl.SizeCache
|
Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"`
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *HealthCheckResponse) Reset() {
|
func (x *HealthCheckResponse) Reset() {
|
||||||
@ -181,7 +180,7 @@ func (x *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus {
|
|||||||
|
|
||||||
var File_grpc_health_v1_health_proto protoreflect.FileDescriptor
|
var File_grpc_health_v1_health_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
var file_grpc_health_v1_health_proto_rawDesc = []byte{
|
var file_grpc_health_v1_health_proto_rawDesc = string([]byte{
|
||||||
0x0a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x76, 0x31,
|
0x0a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x76, 0x31,
|
||||||
0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67,
|
0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67,
|
||||||
0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x22, 0x2e, 0x0a,
|
0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x22, 0x2e, 0x0a,
|
||||||
@ -210,23 +209,24 @@ var file_grpc_health_v1_health_proto_rawDesc = []byte{
|
|||||||
0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72,
|
0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72,
|
||||||
0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61,
|
0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61,
|
||||||
0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x30, 0x01, 0x42, 0x61, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65,
|
0x30, 0x01, 0x42, 0x70, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65,
|
||||||
0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50,
|
0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
|
0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67,
|
||||||
0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68,
|
0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68,
|
||||||
0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74,
|
0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74,
|
||||||
0x68, 0x5f, 0x76, 0x31, 0xaa, 0x02, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x6c,
|
0x68, 0x5f, 0x76, 0x31, 0xa2, 0x02, 0x0c, 0x47, 0x72, 0x70, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74,
|
||||||
0x74, 0x68, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x68, 0x56, 0x31, 0xaa, 0x02, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74,
|
||||||
}
|
0x68, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
|
})
|
||||||
|
|
||||||
var (
|
var (
|
||||||
file_grpc_health_v1_health_proto_rawDescOnce sync.Once
|
file_grpc_health_v1_health_proto_rawDescOnce sync.Once
|
||||||
file_grpc_health_v1_health_proto_rawDescData = file_grpc_health_v1_health_proto_rawDesc
|
file_grpc_health_v1_health_proto_rawDescData []byte
|
||||||
)
|
)
|
||||||
|
|
||||||
func file_grpc_health_v1_health_proto_rawDescGZIP() []byte {
|
func file_grpc_health_v1_health_proto_rawDescGZIP() []byte {
|
||||||
file_grpc_health_v1_health_proto_rawDescOnce.Do(func() {
|
file_grpc_health_v1_health_proto_rawDescOnce.Do(func() {
|
||||||
file_grpc_health_v1_health_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_health_v1_health_proto_rawDescData)
|
file_grpc_health_v1_health_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_grpc_health_v1_health_proto_rawDesc), len(file_grpc_health_v1_health_proto_rawDesc)))
|
||||||
})
|
})
|
||||||
return file_grpc_health_v1_health_proto_rawDescData
|
return file_grpc_health_v1_health_proto_rawDescData
|
||||||
}
|
}
|
||||||
@ -260,7 +260,7 @@ func file_grpc_health_v1_health_proto_init() {
|
|||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
File: protoimpl.DescBuilder{
|
File: protoimpl.DescBuilder{
|
||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_grpc_health_v1_health_proto_rawDesc,
|
RawDescriptor: unsafe.Slice(unsafe.StringData(file_grpc_health_v1_health_proto_rawDesc), len(file_grpc_health_v1_health_proto_rawDesc)),
|
||||||
NumEnums: 1,
|
NumEnums: 1,
|
||||||
NumMessages: 2,
|
NumMessages: 2,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
@ -272,7 +272,6 @@ func file_grpc_health_v1_health_proto_init() {
|
|||||||
MessageInfos: file_grpc_health_v1_health_proto_msgTypes,
|
MessageInfos: file_grpc_health_v1_health_proto_msgTypes,
|
||||||
}.Build()
|
}.Build()
|
||||||
File_grpc_health_v1_health_proto = out.File
|
File_grpc_health_v1_health_proto = out.File
|
||||||
file_grpc_health_v1_health_proto_rawDesc = nil
|
|
||||||
file_grpc_health_v1_health_proto_goTypes = nil
|
file_grpc_health_v1_health_proto_goTypes = nil
|
||||||
file_grpc_health_v1_health_proto_depIdxs = nil
|
file_grpc_health_v1_health_proto_depIdxs = nil
|
||||||
}
|
}
|
||||||
|
|||||||
10
vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
generated
vendored
10
vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
generated
vendored
@ -109,8 +109,9 @@ func (gsb *Balancer) switchTo(builder balancer.Builder) (*balancerWrapper, error
|
|||||||
return nil, errBalancerClosed
|
return nil, errBalancerClosed
|
||||||
}
|
}
|
||||||
bw := &balancerWrapper{
|
bw := &balancerWrapper{
|
||||||
builder: builder,
|
ClientConn: gsb.cc,
|
||||||
gsb: gsb,
|
builder: builder,
|
||||||
|
gsb: gsb,
|
||||||
lastState: balancer.State{
|
lastState: balancer.State{
|
||||||
ConnectivityState: connectivity.Connecting,
|
ConnectivityState: connectivity.Connecting,
|
||||||
Picker: base.NewErrPicker(balancer.ErrNoSubConnAvailable),
|
Picker: base.NewErrPicker(balancer.ErrNoSubConnAvailable),
|
||||||
@ -293,6 +294,7 @@ func (gsb *Balancer) Close() {
|
|||||||
// State updates from the wrapped balancer can result in invocation of the
|
// State updates from the wrapped balancer can result in invocation of the
|
||||||
// graceful switch logic.
|
// graceful switch logic.
|
||||||
type balancerWrapper struct {
|
type balancerWrapper struct {
|
||||||
|
balancer.ClientConn
|
||||||
balancer.Balancer
|
balancer.Balancer
|
||||||
gsb *Balancer
|
gsb *Balancer
|
||||||
builder balancer.Builder
|
builder balancer.Builder
|
||||||
@ -413,7 +415,3 @@ func (bw *balancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver
|
|||||||
bw.gsb.mu.Unlock()
|
bw.gsb.mu.Unlock()
|
||||||
bw.gsb.cc.UpdateAddresses(sc, addrs)
|
bw.gsb.cc.UpdateAddresses(sc, addrs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (bw *balancerWrapper) Target() string {
|
|
||||||
return bw.gsb.cc.Target()
|
|
||||||
}
|
|
||||||
|
|||||||
10
vendor/google.golang.org/grpc/internal/envconfig/xds.go
generated
vendored
10
vendor/google.golang.org/grpc/internal/envconfig/xds.go
generated
vendored
@ -56,7 +56,11 @@ var (
|
|||||||
|
|
||||||
// XDSDualstackEndpointsEnabled is true if gRPC should read the
|
// XDSDualstackEndpointsEnabled is true if gRPC should read the
|
||||||
// "additional addresses" in the xDS endpoint resource.
|
// "additional addresses" in the xDS endpoint resource.
|
||||||
// TODO: https://github.com/grpc/grpc-go/issues/7866 - Control this using
|
XDSDualstackEndpointsEnabled = boolFromEnv("GRPC_EXPERIMENTAL_XDS_DUALSTACK_ENDPOINTS", true)
|
||||||
// an env variable when all LB policies handle endpoints.
|
|
||||||
XDSDualstackEndpointsEnabled = false
|
// XDSSystemRootCertsEnabled is true when xDS enabled gRPC clients can use
|
||||||
|
// the system's default root certificates for TLS certificate validation.
|
||||||
|
// For more details, see:
|
||||||
|
// https://github.com/grpc/proposal/blob/master/A82-xds-system-root-certs.md.
|
||||||
|
XDSSystemRootCertsEnabled = boolFromEnv("GRPC_EXPERIMENTAL_XDS_SYSTEM_ROOT_CERTS", false)
|
||||||
)
|
)
|
||||||
|
|||||||
32
vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go
generated
vendored
32
vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go
generated
vendored
@ -1,32 +0,0 @@
|
|||||||
/*
|
|
||||||
*
|
|
||||||
* Copyright 2022 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 grpcsync
|
|
||||||
|
|
||||||
import (
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
// OnceFunc returns a function wrapping f which ensures f is only executed
|
|
||||||
// once even if the returned function is executed multiple times.
|
|
||||||
func OnceFunc(f func()) func() {
|
|
||||||
var once sync.Once
|
|
||||||
return func() {
|
|
||||||
once.Do(f)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
23
vendor/google.golang.org/grpc/internal/internal.go
generated
vendored
23
vendor/google.golang.org/grpc/internal/internal.go
generated
vendored
@ -64,6 +64,9 @@ var (
|
|||||||
// gRPC server. An xDS-enabled server needs to know what type of credentials
|
// gRPC server. An xDS-enabled server needs to know what type of credentials
|
||||||
// is configured on the underlying gRPC server. This is set by server.go.
|
// is configured on the underlying gRPC server. This is set by server.go.
|
||||||
GetServerCredentials any // func (*grpc.Server) credentials.TransportCredentials
|
GetServerCredentials any // func (*grpc.Server) credentials.TransportCredentials
|
||||||
|
// MetricsRecorderForServer returns the MetricsRecorderList derived from a
|
||||||
|
// server's stats handlers.
|
||||||
|
MetricsRecorderForServer any // func (*grpc.Server) estats.MetricsRecorder
|
||||||
// CanonicalString returns the canonical string of the code defined here:
|
// CanonicalString returns the canonical string of the code defined here:
|
||||||
// https://github.com/grpc/grpc/blob/master/doc/statuscodes.md.
|
// https://github.com/grpc/grpc/blob/master/doc/statuscodes.md.
|
||||||
//
|
//
|
||||||
@ -151,6 +154,20 @@ var (
|
|||||||
// other features, including the CSDS service.
|
// other features, including the CSDS service.
|
||||||
NewXDSResolverWithConfigForTesting any // func([]byte) (resolver.Builder, error)
|
NewXDSResolverWithConfigForTesting any // func([]byte) (resolver.Builder, error)
|
||||||
|
|
||||||
|
// NewXDSResolverWithPoolForTesting creates a new xDS resolver builder
|
||||||
|
// using the provided xDS pool instead of creating a new one using the
|
||||||
|
// bootstrap configuration specified by the supported environment variables.
|
||||||
|
// The resolver.Builder is meant to be used in conjunction with the
|
||||||
|
// grpc.WithResolvers DialOption. The resolver.Builder does not take
|
||||||
|
// ownership of the provided xDS client and it is the responsibility of the
|
||||||
|
// caller to close the client when no longer required.
|
||||||
|
//
|
||||||
|
// Testing Only
|
||||||
|
//
|
||||||
|
// This function should ONLY be used for testing and may not work with some
|
||||||
|
// other features, including the CSDS service.
|
||||||
|
NewXDSResolverWithPoolForTesting any // func(*xdsclient.Pool) (resolver.Builder, error)
|
||||||
|
|
||||||
// NewXDSResolverWithClientForTesting creates a new xDS resolver builder
|
// NewXDSResolverWithClientForTesting creates a new xDS resolver builder
|
||||||
// using the provided xDS client instead of creating a new one using the
|
// using the provided xDS client instead of creating a new one using the
|
||||||
// bootstrap configuration specified by the supported environment variables.
|
// bootstrap configuration specified by the supported environment variables.
|
||||||
@ -277,3 +294,9 @@ const RLSLoadBalancingPolicyName = "rls_experimental"
|
|||||||
type EnforceSubConnEmbedding interface {
|
type EnforceSubConnEmbedding interface {
|
||||||
enforceSubConnEmbedding()
|
enforceSubConnEmbedding()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EnforceClientConnEmbedding is used to enforce proper ClientConn implementation
|
||||||
|
// embedding.
|
||||||
|
type EnforceClientConnEmbedding interface {
|
||||||
|
enforceClientConnEmbedding()
|
||||||
|
}
|
||||||
|
|||||||
54
vendor/google.golang.org/grpc/internal/proxyattributes/proxyattributes.go
generated
vendored
Normal file
54
vendor/google.golang.org/grpc/internal/proxyattributes/proxyattributes.go
generated
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 proxyattributes contains functions for getting and setting proxy
|
||||||
|
// attributes like the CONNECT address and user info.
|
||||||
|
package proxyattributes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/url"
|
||||||
|
|
||||||
|
"google.golang.org/grpc/resolver"
|
||||||
|
)
|
||||||
|
|
||||||
|
type keyType string
|
||||||
|
|
||||||
|
const proxyOptionsKey = keyType("grpc.resolver.delegatingresolver.proxyOptions")
|
||||||
|
|
||||||
|
// Options holds the proxy connection details needed during the CONNECT
|
||||||
|
// handshake.
|
||||||
|
type Options struct {
|
||||||
|
User *url.Userinfo
|
||||||
|
ConnectAddr string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set returns a copy of addr with opts set in its attributes.
|
||||||
|
func Set(addr resolver.Address, opts Options) resolver.Address {
|
||||||
|
addr.Attributes = addr.Attributes.WithValue(proxyOptionsKey, opts)
|
||||||
|
return addr
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get returns the Options for the proxy [resolver.Address] and a boolean
|
||||||
|
// value representing if the attribute is present or not. The returned data
|
||||||
|
// should not be mutated.
|
||||||
|
func Get(addr resolver.Address) (Options, bool) {
|
||||||
|
if a := addr.Attributes.Value(proxyOptionsKey); a != nil {
|
||||||
|
return a.(Options), true
|
||||||
|
}
|
||||||
|
return Options{}, false
|
||||||
|
}
|
||||||
329
vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go
generated
vendored
Normal file
329
vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go
generated
vendored
Normal file
@ -0,0 +1,329 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* 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 delegatingresolver implements a resolver capable of resolving both
|
||||||
|
// target URIs and proxy addresses.
|
||||||
|
package delegatingresolver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"google.golang.org/grpc/grpclog"
|
||||||
|
"google.golang.org/grpc/internal/proxyattributes"
|
||||||
|
"google.golang.org/grpc/resolver"
|
||||||
|
"google.golang.org/grpc/serviceconfig"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
logger = grpclog.Component("delegating-resolver")
|
||||||
|
// HTTPSProxyFromEnvironment will be overwritten in the tests
|
||||||
|
HTTPSProxyFromEnvironment = http.ProxyFromEnvironment
|
||||||
|
)
|
||||||
|
|
||||||
|
// delegatingResolver manages both target URI and proxy address resolution by
|
||||||
|
// delegating these tasks to separate child resolvers. Essentially, it acts as
|
||||||
|
// a intermediary between the gRPC ClientConn and the child resolvers.
|
||||||
|
//
|
||||||
|
// It implements the [resolver.Resolver] interface.
|
||||||
|
type delegatingResolver struct {
|
||||||
|
target resolver.Target // parsed target URI to be resolved
|
||||||
|
cc resolver.ClientConn // gRPC ClientConn
|
||||||
|
targetResolver resolver.Resolver // resolver for the target URI, based on its scheme
|
||||||
|
proxyResolver resolver.Resolver // resolver for the proxy URI; nil if no proxy is configured
|
||||||
|
proxyURL *url.URL // proxy URL, derived from proxy environment and target
|
||||||
|
|
||||||
|
mu sync.Mutex // protects all the fields below
|
||||||
|
targetResolverState *resolver.State // state of the target resolver
|
||||||
|
proxyAddrs []resolver.Address // resolved proxy addresses; empty if no proxy is configured
|
||||||
|
}
|
||||||
|
|
||||||
|
// nopResolver is a resolver that does nothing.
|
||||||
|
type nopResolver struct{}
|
||||||
|
|
||||||
|
func (nopResolver) ResolveNow(resolver.ResolveNowOptions) {}
|
||||||
|
|
||||||
|
func (nopResolver) Close() {}
|
||||||
|
|
||||||
|
// proxyURLForTarget determines the proxy URL for the given address based on
|
||||||
|
// the environment. It can return the following:
|
||||||
|
// - nil URL, nil error: No proxy is configured or the address is excluded
|
||||||
|
// using the `NO_PROXY` environment variable or if req.URL.Host is
|
||||||
|
// "localhost" (with or without // a port number)
|
||||||
|
// - nil URL, non-nil error: An error occurred while retrieving the proxy URL.
|
||||||
|
// - non-nil URL, nil error: A proxy is configured, and the proxy URL was
|
||||||
|
// retrieved successfully without any errors.
|
||||||
|
func proxyURLForTarget(address string) (*url.URL, error) {
|
||||||
|
req := &http.Request{URL: &url.URL{
|
||||||
|
Scheme: "https",
|
||||||
|
Host: address,
|
||||||
|
}}
|
||||||
|
return HTTPSProxyFromEnvironment(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// New creates a new delegating resolver that can create up to two child
|
||||||
|
// resolvers:
|
||||||
|
// - one to resolve the proxy address specified using the supported
|
||||||
|
// environment variables. This uses the registered resolver for the "dns"
|
||||||
|
// scheme.
|
||||||
|
// - one to resolve the target URI using the resolver specified by the scheme
|
||||||
|
// in the target URI or specified by the user using the WithResolvers dial
|
||||||
|
// option. As a special case, if the target URI's scheme is "dns" and a
|
||||||
|
// proxy is specified using the supported environment variables, the target
|
||||||
|
// URI's path portion is used as the resolved address unless target
|
||||||
|
// resolution is enabled using the dial option.
|
||||||
|
func New(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions, targetResolverBuilder resolver.Builder, targetResolutionEnabled bool) (resolver.Resolver, error) {
|
||||||
|
r := &delegatingResolver{
|
||||||
|
target: target,
|
||||||
|
cc: cc,
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
r.proxyURL, err = proxyURLForTarget(target.Endpoint())
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("delegating_resolver: failed to determine proxy URL for target %s: %v", target, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// proxy is not configured or proxy address excluded using `NO_PROXY` env
|
||||||
|
// var, so only target resolver is used.
|
||||||
|
if r.proxyURL == nil {
|
||||||
|
return targetResolverBuilder.Build(target, cc, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
if logger.V(2) {
|
||||||
|
logger.Infof("Proxy URL detected : %s", r.proxyURL)
|
||||||
|
}
|
||||||
|
|
||||||
|
// When the scheme is 'dns' and target resolution on client is not enabled,
|
||||||
|
// resolution should be handled by the proxy, not the client. Therefore, we
|
||||||
|
// bypass the target resolver and store the unresolved target address.
|
||||||
|
if target.URL.Scheme == "dns" && !targetResolutionEnabled {
|
||||||
|
state := resolver.State{
|
||||||
|
Addresses: []resolver.Address{{Addr: target.Endpoint()}},
|
||||||
|
Endpoints: []resolver.Endpoint{{Addresses: []resolver.Address{{Addr: target.Endpoint()}}}},
|
||||||
|
}
|
||||||
|
r.targetResolverState = &state
|
||||||
|
} else {
|
||||||
|
wcc := &wrappingClientConn{
|
||||||
|
stateListener: r.updateTargetResolverState,
|
||||||
|
parent: r,
|
||||||
|
}
|
||||||
|
if r.targetResolver, err = targetResolverBuilder.Build(target, wcc, opts); err != nil {
|
||||||
|
return nil, fmt.Errorf("delegating_resolver: unable to build the resolver for target %s: %v", target, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.proxyResolver, err = r.proxyURIResolver(opts); err != nil {
|
||||||
|
return nil, fmt.Errorf("delegating_resolver: failed to build resolver for proxy URL %q: %v", r.proxyURL, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.targetResolver == nil {
|
||||||
|
r.targetResolver = nopResolver{}
|
||||||
|
}
|
||||||
|
if r.proxyResolver == nil {
|
||||||
|
r.proxyResolver = nopResolver{}
|
||||||
|
}
|
||||||
|
return r, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// proxyURIResolver creates a resolver for resolving proxy URIs using the
|
||||||
|
// "dns" scheme. It adjusts the proxyURL to conform to the "dns:///" format and
|
||||||
|
// builds a resolver with a wrappingClientConn to capture resolved addresses.
|
||||||
|
func (r *delegatingResolver) proxyURIResolver(opts resolver.BuildOptions) (resolver.Resolver, error) {
|
||||||
|
proxyBuilder := resolver.Get("dns")
|
||||||
|
if proxyBuilder == nil {
|
||||||
|
panic("delegating_resolver: resolver for proxy not found for scheme dns")
|
||||||
|
}
|
||||||
|
url := *r.proxyURL
|
||||||
|
url.Scheme = "dns"
|
||||||
|
url.Path = "/" + r.proxyURL.Host
|
||||||
|
url.Host = "" // Clear the Host field to conform to the "dns:///" format
|
||||||
|
|
||||||
|
proxyTarget := resolver.Target{URL: url}
|
||||||
|
wcc := &wrappingClientConn{
|
||||||
|
stateListener: r.updateProxyResolverState,
|
||||||
|
parent: r,
|
||||||
|
}
|
||||||
|
return proxyBuilder.Build(proxyTarget, wcc, opts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *delegatingResolver) ResolveNow(o resolver.ResolveNowOptions) {
|
||||||
|
r.targetResolver.ResolveNow(o)
|
||||||
|
r.proxyResolver.ResolveNow(o)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *delegatingResolver) Close() {
|
||||||
|
r.targetResolver.Close()
|
||||||
|
r.targetResolver = nil
|
||||||
|
|
||||||
|
r.proxyResolver.Close()
|
||||||
|
r.proxyResolver = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// updateClientConnStateLocked creates a list of combined addresses by
|
||||||
|
// pairing each proxy address with every target address. For each pair, it
|
||||||
|
// generates a new [resolver.Address] using the proxy address, and adding the
|
||||||
|
// target address as the attribute along with user info. It returns nil if
|
||||||
|
// either resolver has not sent update even once and returns the error from
|
||||||
|
// ClientConn update once both resolvers have sent update atleast once.
|
||||||
|
func (r *delegatingResolver) updateClientConnStateLocked() error {
|
||||||
|
if r.targetResolverState == nil || r.proxyAddrs == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
curState := *r.targetResolverState
|
||||||
|
// If multiple resolved proxy addresses are present, we send only the
|
||||||
|
// unresolved proxy host and let net.Dial handle the proxy host name
|
||||||
|
// resolution when creating the transport. Sending all resolved addresses
|
||||||
|
// would increase the number of addresses passed to the ClientConn and
|
||||||
|
// subsequently to load balancing (LB) policies like Round Robin, leading
|
||||||
|
// to additional TCP connections. However, if there's only one resolved
|
||||||
|
// proxy address, we send it directly, as it doesn't affect the address
|
||||||
|
// count returned by the target resolver and the address count sent to the
|
||||||
|
// ClientConn.
|
||||||
|
var proxyAddr resolver.Address
|
||||||
|
if len(r.proxyAddrs) == 1 {
|
||||||
|
proxyAddr = r.proxyAddrs[0]
|
||||||
|
} else {
|
||||||
|
proxyAddr = resolver.Address{Addr: r.proxyURL.Host}
|
||||||
|
}
|
||||||
|
var addresses []resolver.Address
|
||||||
|
for _, targetAddr := range (*r.targetResolverState).Addresses {
|
||||||
|
addresses = append(addresses, proxyattributes.Set(proxyAddr, proxyattributes.Options{
|
||||||
|
User: r.proxyURL.User,
|
||||||
|
ConnectAddr: targetAddr.Addr,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create a list of combined endpoints by pairing all proxy endpoints
|
||||||
|
// with every target endpoint. Each time, it constructs a new
|
||||||
|
// [resolver.Endpoint] using the all addresses from all the proxy endpoint
|
||||||
|
// and the target addresses from one endpoint. The target address and user
|
||||||
|
// information from the proxy URL are added as attributes to the proxy
|
||||||
|
// address.The resulting list of addresses is then grouped into endpoints,
|
||||||
|
// covering all combinations of proxy and target endpoints.
|
||||||
|
var endpoints []resolver.Endpoint
|
||||||
|
for _, endpt := range (*r.targetResolverState).Endpoints {
|
||||||
|
var addrs []resolver.Address
|
||||||
|
for _, proxyAddr := range r.proxyAddrs {
|
||||||
|
for _, targetAddr := range endpt.Addresses {
|
||||||
|
addrs = append(addrs, proxyattributes.Set(proxyAddr, proxyattributes.Options{
|
||||||
|
User: r.proxyURL.User,
|
||||||
|
ConnectAddr: targetAddr.Addr,
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
endpoints = append(endpoints, resolver.Endpoint{Addresses: addrs})
|
||||||
|
}
|
||||||
|
// Use the targetResolverState for its service config and attributes
|
||||||
|
// contents. The state update is only sent after both the target and proxy
|
||||||
|
// resolvers have sent their updates, and curState has been updated with
|
||||||
|
// the combined addresses.
|
||||||
|
curState.Addresses = addresses
|
||||||
|
curState.Endpoints = endpoints
|
||||||
|
return r.cc.UpdateState(curState)
|
||||||
|
}
|
||||||
|
|
||||||
|
// updateProxyResolverState updates the proxy resolver state by storing proxy
|
||||||
|
// addresses and endpoints, marking the resolver as ready, and triggering a
|
||||||
|
// state update if both proxy and target resolvers are ready. If the ClientConn
|
||||||
|
// returns a non-nil error, it calls `ResolveNow()` on the target resolver. It
|
||||||
|
// is a StateListener function of wrappingClientConn passed to the proxy resolver.
|
||||||
|
func (r *delegatingResolver) updateProxyResolverState(state resolver.State) error {
|
||||||
|
r.mu.Lock()
|
||||||
|
defer r.mu.Unlock()
|
||||||
|
if logger.V(2) {
|
||||||
|
logger.Infof("Addresses received from proxy resolver: %s", state.Addresses)
|
||||||
|
}
|
||||||
|
if len(state.Endpoints) > 0 {
|
||||||
|
// We expect exactly one address per endpoint because the proxy
|
||||||
|
// resolver uses "dns" resolution.
|
||||||
|
r.proxyAddrs = make([]resolver.Address, 0, len(state.Endpoints))
|
||||||
|
for _, endpoint := range state.Endpoints {
|
||||||
|
r.proxyAddrs = append(r.proxyAddrs, endpoint.Addresses...)
|
||||||
|
}
|
||||||
|
} else if state.Addresses != nil {
|
||||||
|
r.proxyAddrs = state.Addresses
|
||||||
|
} else {
|
||||||
|
r.proxyAddrs = []resolver.Address{} // ensure proxyAddrs is non-nil to indicate an update has been received
|
||||||
|
}
|
||||||
|
err := r.updateClientConnStateLocked()
|
||||||
|
// Another possible approach was to block until updates are received from
|
||||||
|
// both resolvers. But this is not used because calling `New()` triggers
|
||||||
|
// `Build()` for the first resolver, which calls `UpdateState()`. And the
|
||||||
|
// second resolver hasn't sent an update yet, so it would cause `New()` to
|
||||||
|
// block indefinitely.
|
||||||
|
if err != nil {
|
||||||
|
r.targetResolver.ResolveNow(resolver.ResolveNowOptions{})
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// updateTargetResolverState updates the target resolver state by storing target
|
||||||
|
// addresses, endpoints, and service config, marking the resolver as ready, and
|
||||||
|
// triggering a state update if both resolvers are ready. If the ClientConn
|
||||||
|
// returns a non-nil error, it calls `ResolveNow()` on the proxy resolver. It
|
||||||
|
// is a StateListener function of wrappingClientConn passed to the target resolver.
|
||||||
|
func (r *delegatingResolver) updateTargetResolverState(state resolver.State) error {
|
||||||
|
r.mu.Lock()
|
||||||
|
defer r.mu.Unlock()
|
||||||
|
|
||||||
|
if logger.V(2) {
|
||||||
|
logger.Infof("Addresses received from target resolver: %v", state.Addresses)
|
||||||
|
}
|
||||||
|
r.targetResolverState = &state
|
||||||
|
err := r.updateClientConnStateLocked()
|
||||||
|
if err != nil {
|
||||||
|
r.proxyResolver.ResolveNow(resolver.ResolveNowOptions{})
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// wrappingClientConn serves as an intermediary between the parent ClientConn
|
||||||
|
// and the child resolvers created here. It implements the resolver.ClientConn
|
||||||
|
// interface and is passed in that capacity to the child resolvers.
|
||||||
|
type wrappingClientConn struct {
|
||||||
|
// Callback to deliver resolver state updates
|
||||||
|
stateListener func(state resolver.State) error
|
||||||
|
parent *delegatingResolver
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateState receives resolver state updates and forwards them to the
|
||||||
|
// appropriate listener function (either for the proxy or target resolver).
|
||||||
|
func (wcc *wrappingClientConn) UpdateState(state resolver.State) error {
|
||||||
|
return wcc.stateListener(state)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReportError intercepts errors from the child resolvers and passes them to ClientConn.
|
||||||
|
func (wcc *wrappingClientConn) ReportError(err error) {
|
||||||
|
wcc.parent.cc.ReportError(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewAddress intercepts the new resolved address from the child resolvers and
|
||||||
|
// passes them to ClientConn.
|
||||||
|
func (wcc *wrappingClientConn) NewAddress(addrs []resolver.Address) {
|
||||||
|
wcc.UpdateState(resolver.State{Addresses: addrs})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseServiceConfig parses the provided service config and returns an
|
||||||
|
// object that provides the parsed config.
|
||||||
|
func (wcc *wrappingClientConn) ParseServiceConfig(serviceConfigJSON string) *serviceconfig.ParseResult {
|
||||||
|
return wcc.parent.cc.ParseServiceConfig(serviceConfigJSON)
|
||||||
|
}
|
||||||
9
vendor/google.golang.org/grpc/internal/transport/http2_client.go
generated
vendored
9
vendor/google.golang.org/grpc/internal/transport/http2_client.go
generated
vendored
@ -43,6 +43,7 @@ import (
|
|||||||
"google.golang.org/grpc/internal/grpcsync"
|
"google.golang.org/grpc/internal/grpcsync"
|
||||||
"google.golang.org/grpc/internal/grpcutil"
|
"google.golang.org/grpc/internal/grpcutil"
|
||||||
imetadata "google.golang.org/grpc/internal/metadata"
|
imetadata "google.golang.org/grpc/internal/metadata"
|
||||||
|
"google.golang.org/grpc/internal/proxyattributes"
|
||||||
istatus "google.golang.org/grpc/internal/status"
|
istatus "google.golang.org/grpc/internal/status"
|
||||||
isyscall "google.golang.org/grpc/internal/syscall"
|
isyscall "google.golang.org/grpc/internal/syscall"
|
||||||
"google.golang.org/grpc/internal/transport/networktype"
|
"google.golang.org/grpc/internal/transport/networktype"
|
||||||
@ -153,7 +154,7 @@ type http2Client struct {
|
|||||||
logger *grpclog.PrefixLogger
|
logger *grpclog.PrefixLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr resolver.Address, useProxy bool, grpcUA string) (net.Conn, error) {
|
func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr resolver.Address, grpcUA string) (net.Conn, error) {
|
||||||
address := addr.Addr
|
address := addr.Addr
|
||||||
networkType, ok := networktype.Get(addr)
|
networkType, ok := networktype.Get(addr)
|
||||||
if fn != nil {
|
if fn != nil {
|
||||||
@ -177,8 +178,8 @@ func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error
|
|||||||
if !ok {
|
if !ok {
|
||||||
networkType, address = parseDialTarget(address)
|
networkType, address = parseDialTarget(address)
|
||||||
}
|
}
|
||||||
if networkType == "tcp" && useProxy {
|
if opts, present := proxyattributes.Get(addr); present {
|
||||||
return proxyDial(ctx, address, grpcUA)
|
return proxyDial(ctx, addr, grpcUA, opts)
|
||||||
}
|
}
|
||||||
return internal.NetDialerWithTCPKeepalive().DialContext(ctx, networkType, address)
|
return internal.NetDialerWithTCPKeepalive().DialContext(ctx, networkType, address)
|
||||||
}
|
}
|
||||||
@ -217,7 +218,7 @@ func NewHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts
|
|||||||
// address specific arbitrary data to reach custom dialers and credential handshakers.
|
// address specific arbitrary data to reach custom dialers and credential handshakers.
|
||||||
connectCtx = icredentials.NewClientHandshakeInfoContext(connectCtx, credentials.ClientHandshakeInfo{Attributes: addr.Attributes})
|
connectCtx = icredentials.NewClientHandshakeInfoContext(connectCtx, credentials.ClientHandshakeInfo{Attributes: addr.Attributes})
|
||||||
|
|
||||||
conn, err := dial(connectCtx, opts.Dialer, addr, opts.UseProxy, opts.UserAgent)
|
conn, err := dial(connectCtx, opts.Dialer, addr, opts.UserAgent)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if opts.FailOnNonTempDialError {
|
if opts.FailOnNonTempDialError {
|
||||||
return nil, connectionErrorf(isTemporary(err), err, "transport: error while dialing: %v", err)
|
return nil, connectionErrorf(isTemporary(err), err, "transport: error while dialing: %v", err)
|
||||||
|
|||||||
62
vendor/google.golang.org/grpc/internal/transport/proxy.go
generated
vendored
62
vendor/google.golang.org/grpc/internal/transport/proxy.go
generated
vendored
@ -30,34 +30,16 @@ import (
|
|||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"google.golang.org/grpc/internal"
|
"google.golang.org/grpc/internal"
|
||||||
|
"google.golang.org/grpc/internal/proxyattributes"
|
||||||
|
"google.golang.org/grpc/resolver"
|
||||||
)
|
)
|
||||||
|
|
||||||
const proxyAuthHeaderKey = "Proxy-Authorization"
|
const proxyAuthHeaderKey = "Proxy-Authorization"
|
||||||
|
|
||||||
var (
|
|
||||||
// The following variable will be overwritten in the tests.
|
|
||||||
httpProxyFromEnvironment = http.ProxyFromEnvironment
|
|
||||||
)
|
|
||||||
|
|
||||||
func mapAddress(address string) (*url.URL, error) {
|
|
||||||
req := &http.Request{
|
|
||||||
URL: &url.URL{
|
|
||||||
Scheme: "https",
|
|
||||||
Host: address,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
url, err := httpProxyFromEnvironment(req)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return url, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// To read a response from a net.Conn, http.ReadResponse() takes a bufio.Reader.
|
// To read a response from a net.Conn, http.ReadResponse() takes a bufio.Reader.
|
||||||
// It's possible that this reader reads more than what's need for the response and stores
|
// It's possible that this reader reads more than what's need for the response
|
||||||
// those bytes in the buffer.
|
// and stores those bytes in the buffer. bufConn wraps the original net.Conn
|
||||||
// bufConn wraps the original net.Conn and the bufio.Reader to make sure we don't lose the
|
// and the bufio.Reader to make sure we don't lose the bytes in the buffer.
|
||||||
// bytes in the buffer.
|
|
||||||
type bufConn struct {
|
type bufConn struct {
|
||||||
net.Conn
|
net.Conn
|
||||||
r io.Reader
|
r io.Reader
|
||||||
@ -72,7 +54,7 @@ func basicAuth(username, password string) string {
|
|||||||
return base64.StdEncoding.EncodeToString([]byte(auth))
|
return base64.StdEncoding.EncodeToString([]byte(auth))
|
||||||
}
|
}
|
||||||
|
|
||||||
func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr string, proxyURL *url.URL, grpcUA string) (_ net.Conn, err error) {
|
func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, grpcUA string, opts proxyattributes.Options) (_ net.Conn, err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
conn.Close()
|
conn.Close()
|
||||||
@ -81,15 +63,14 @@ func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr stri
|
|||||||
|
|
||||||
req := &http.Request{
|
req := &http.Request{
|
||||||
Method: http.MethodConnect,
|
Method: http.MethodConnect,
|
||||||
URL: &url.URL{Host: backendAddr},
|
URL: &url.URL{Host: opts.ConnectAddr},
|
||||||
Header: map[string][]string{"User-Agent": {grpcUA}},
|
Header: map[string][]string{"User-Agent": {grpcUA}},
|
||||||
}
|
}
|
||||||
if t := proxyURL.User; t != nil {
|
if user := opts.User; user != nil {
|
||||||
u := t.Username()
|
u := user.Username()
|
||||||
p, _ := t.Password()
|
p, _ := user.Password()
|
||||||
req.Header.Add(proxyAuthHeaderKey, "Basic "+basicAuth(u, p))
|
req.Header.Add(proxyAuthHeaderKey, "Basic "+basicAuth(u, p))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := sendHTTPRequest(ctx, req, conn); err != nil {
|
if err := sendHTTPRequest(ctx, req, conn); err != nil {
|
||||||
return nil, fmt.Errorf("failed to write the HTTP request: %v", err)
|
return nil, fmt.Errorf("failed to write the HTTP request: %v", err)
|
||||||
}
|
}
|
||||||
@ -117,28 +98,13 @@ func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr stri
|
|||||||
return conn, nil
|
return conn, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// proxyDial dials, connecting to a proxy first if necessary. Checks if a proxy
|
// proxyDial establishes a TCP connection to the specified address and performs an HTTP CONNECT handshake.
|
||||||
// is necessary, dials, does the HTTP CONNECT handshake, and returns the
|
func proxyDial(ctx context.Context, addr resolver.Address, grpcUA string, opts proxyattributes.Options) (net.Conn, error) {
|
||||||
// connection.
|
conn, err := internal.NetDialerWithTCPKeepalive().DialContext(ctx, "tcp", addr.Addr)
|
||||||
func proxyDial(ctx context.Context, addr string, grpcUA string) (net.Conn, error) {
|
|
||||||
newAddr := addr
|
|
||||||
proxyURL, err := mapAddress(addr)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if proxyURL != nil {
|
return doHTTPConnectHandshake(ctx, conn, grpcUA, opts)
|
||||||
newAddr = proxyURL.Host
|
|
||||||
}
|
|
||||||
|
|
||||||
conn, err := internal.NetDialerWithTCPKeepalive().DialContext(ctx, "tcp", newAddr)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if proxyURL == nil {
|
|
||||||
// proxy is disabled if proxyURL is nil.
|
|
||||||
return conn, err
|
|
||||||
}
|
|
||||||
return doHTTPConnectHandshake(ctx, conn, addr, proxyURL, grpcUA)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendHTTPRequest(ctx context.Context, req *http.Request, conn net.Conn) error {
|
func sendHTTPRequest(ctx context.Context, req *http.Request, conn net.Conn) error {
|
||||||
|
|||||||
2
vendor/google.golang.org/grpc/internal/transport/transport.go
generated
vendored
2
vendor/google.golang.org/grpc/internal/transport/transport.go
generated
vendored
@ -502,8 +502,6 @@ type ConnectOptions struct {
|
|||||||
ChannelzParent *channelz.SubChannel
|
ChannelzParent *channelz.SubChannel
|
||||||
// MaxHeaderListSize sets the max (uncompressed) size of header list that is prepared to be received.
|
// MaxHeaderListSize sets the max (uncompressed) size of header list that is prepared to be received.
|
||||||
MaxHeaderListSize *uint32
|
MaxHeaderListSize *uint32
|
||||||
// UseProxy specifies if a proxy should be used.
|
|
||||||
UseProxy bool
|
|
||||||
// The mem.BufferPool to use when reading/writing to the wire.
|
// The mem.BufferPool to use when reading/writing to the wire.
|
||||||
BufferPool mem.BufferPool
|
BufferPool mem.BufferPool
|
||||||
}
|
}
|
||||||
|
|||||||
2
vendor/google.golang.org/grpc/picker_wrapper.go
generated
vendored
2
vendor/google.golang.org/grpc/picker_wrapper.go
generated
vendored
@ -123,7 +123,7 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.
|
|||||||
if lastPickErr != nil {
|
if lastPickErr != nil {
|
||||||
errStr = "latest balancer error: " + lastPickErr.Error()
|
errStr = "latest balancer error: " + lastPickErr.Error()
|
||||||
} else {
|
} else {
|
||||||
errStr = fmt.Sprintf("received context error while waiting for new LB policy update: %s", ctx.Err().Error())
|
errStr = fmt.Sprintf("%v while waiting for connections to become ready", ctx.Err())
|
||||||
}
|
}
|
||||||
switch ctx.Err() {
|
switch ctx.Err() {
|
||||||
case context.DeadlineExceeded:
|
case context.DeadlineExceeded:
|
||||||
|
|||||||
3
vendor/google.golang.org/grpc/resolver/resolver.go
generated
vendored
3
vendor/google.golang.org/grpc/resolver/resolver.go
generated
vendored
@ -30,6 +30,7 @@ import (
|
|||||||
|
|
||||||
"google.golang.org/grpc/attributes"
|
"google.golang.org/grpc/attributes"
|
||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
|
"google.golang.org/grpc/experimental/stats"
|
||||||
"google.golang.org/grpc/internal"
|
"google.golang.org/grpc/internal"
|
||||||
"google.golang.org/grpc/serviceconfig"
|
"google.golang.org/grpc/serviceconfig"
|
||||||
)
|
)
|
||||||
@ -175,6 +176,8 @@ type BuildOptions struct {
|
|||||||
// Authority is the effective authority of the clientconn for which the
|
// Authority is the effective authority of the clientconn for which the
|
||||||
// resolver is built.
|
// resolver is built.
|
||||||
Authority string
|
Authority string
|
||||||
|
// MetricsRecorder is the metrics recorder to do recording.
|
||||||
|
MetricsRecorder stats.MetricsRecorder
|
||||||
}
|
}
|
||||||
|
|
||||||
// An Endpoint is one network endpoint, or server, which may have multiple
|
// An Endpoint is one network endpoint, or server, which may have multiple
|
||||||
|
|||||||
13
vendor/google.golang.org/grpc/resolver_wrapper.go
generated
vendored
13
vendor/google.golang.org/grpc/resolver_wrapper.go
generated
vendored
@ -26,6 +26,7 @@ import (
|
|||||||
"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/internal/pretty"
|
"google.golang.org/grpc/internal/pretty"
|
||||||
|
"google.golang.org/grpc/internal/resolver/delegatingresolver"
|
||||||
"google.golang.org/grpc/resolver"
|
"google.golang.org/grpc/resolver"
|
||||||
"google.golang.org/grpc/serviceconfig"
|
"google.golang.org/grpc/serviceconfig"
|
||||||
)
|
)
|
||||||
@ -76,9 +77,19 @@ func (ccr *ccResolverWrapper) start() error {
|
|||||||
CredsBundle: ccr.cc.dopts.copts.CredsBundle,
|
CredsBundle: ccr.cc.dopts.copts.CredsBundle,
|
||||||
Dialer: ccr.cc.dopts.copts.Dialer,
|
Dialer: ccr.cc.dopts.copts.Dialer,
|
||||||
Authority: ccr.cc.authority,
|
Authority: ccr.cc.authority,
|
||||||
|
MetricsRecorder: ccr.cc.metricsRecorderList,
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
ccr.resolver, err = ccr.cc.resolverBuilder.Build(ccr.cc.parsedTarget, ccr, opts)
|
// The delegating resolver is used unless:
|
||||||
|
// - A custom dialer is provided via WithContextDialer dialoption or
|
||||||
|
// - Proxy usage is disabled through WithNoProxy dialoption.
|
||||||
|
// In these cases, the resolver is built based on the scheme of target,
|
||||||
|
// using the appropriate resolver builder.
|
||||||
|
if ccr.cc.dopts.copts.Dialer != nil || !ccr.cc.dopts.useProxy {
|
||||||
|
ccr.resolver, err = ccr.cc.resolverBuilder.Build(ccr.cc.parsedTarget, ccr, opts)
|
||||||
|
} else {
|
||||||
|
ccr.resolver, err = delegatingresolver.New(ccr.cc.parsedTarget, ccr, opts, ccr.cc.resolverBuilder, ccr.cc.dopts.enableLocalDNSResolution)
|
||||||
|
}
|
||||||
errCh <- err
|
errCh <- err
|
||||||
})
|
})
|
||||||
return <-errCh
|
return <-errCh
|
||||||
|
|||||||
83
vendor/google.golang.org/grpc/rpc_util.go
generated
vendored
83
vendor/google.golang.org/grpc/rpc_util.go
generated
vendored
@ -151,7 +151,7 @@ func (d *gzipDecompressor) Type() string {
|
|||||||
|
|
||||||
// callInfo contains all related configuration and information about an RPC.
|
// callInfo contains all related configuration and information about an RPC.
|
||||||
type callInfo struct {
|
type callInfo struct {
|
||||||
compressorType string
|
compressorName string
|
||||||
failFast bool
|
failFast bool
|
||||||
maxReceiveMessageSize *int
|
maxReceiveMessageSize *int
|
||||||
maxSendMessageSize *int
|
maxSendMessageSize *int
|
||||||
@ -222,7 +222,7 @@ type HeaderCallOption struct {
|
|||||||
|
|
||||||
func (o HeaderCallOption) before(*callInfo) error { return nil }
|
func (o HeaderCallOption) before(*callInfo) error { return nil }
|
||||||
func (o HeaderCallOption) after(_ *callInfo, attempt *csAttempt) {
|
func (o HeaderCallOption) after(_ *callInfo, attempt *csAttempt) {
|
||||||
*o.HeaderAddr, _ = attempt.s.Header()
|
*o.HeaderAddr, _ = attempt.transportStream.Header()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trailer returns a CallOptions that retrieves the trailer metadata
|
// Trailer returns a CallOptions that retrieves the trailer metadata
|
||||||
@ -244,7 +244,7 @@ type TrailerCallOption struct {
|
|||||||
|
|
||||||
func (o TrailerCallOption) before(*callInfo) error { return nil }
|
func (o TrailerCallOption) before(*callInfo) error { return nil }
|
||||||
func (o TrailerCallOption) after(_ *callInfo, attempt *csAttempt) {
|
func (o TrailerCallOption) after(_ *callInfo, attempt *csAttempt) {
|
||||||
*o.TrailerAddr = attempt.s.Trailer()
|
*o.TrailerAddr = attempt.transportStream.Trailer()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Peer returns a CallOption that retrieves peer information for a unary RPC.
|
// Peer returns a CallOption that retrieves peer information for a unary RPC.
|
||||||
@ -266,7 +266,7 @@ type PeerCallOption struct {
|
|||||||
|
|
||||||
func (o PeerCallOption) before(*callInfo) error { return nil }
|
func (o PeerCallOption) before(*callInfo) error { return nil }
|
||||||
func (o PeerCallOption) after(_ *callInfo, attempt *csAttempt) {
|
func (o PeerCallOption) after(_ *callInfo, attempt *csAttempt) {
|
||||||
if x, ok := peer.FromContext(attempt.s.Context()); ok {
|
if x, ok := peer.FromContext(attempt.transportStream.Context()); ok {
|
||||||
*o.PeerAddr = *x
|
*o.PeerAddr = *x
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -435,7 +435,7 @@ type CompressorCallOption struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (o CompressorCallOption) before(c *callInfo) error {
|
func (o CompressorCallOption) before(c *callInfo) error {
|
||||||
c.compressorType = o.CompressorType
|
c.compressorName = o.CompressorType
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (o CompressorCallOption) after(*callInfo, *csAttempt) {}
|
func (o CompressorCallOption) after(*callInfo, *csAttempt) {}
|
||||||
@ -692,9 +692,9 @@ func encode(c baseCodec, msg any) (mem.BufferSlice, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "grpc: error while marshaling: %v", err.Error())
|
return nil, status.Errorf(codes.Internal, "grpc: error while marshaling: %v", err.Error())
|
||||||
}
|
}
|
||||||
if uint(b.Len()) > math.MaxUint32 {
|
if bufSize := uint(b.Len()); bufSize > math.MaxUint32 {
|
||||||
b.Free()
|
b.Free()
|
||||||
return nil, status.Errorf(codes.ResourceExhausted, "grpc: message too large (%d bytes)", len(b))
|
return nil, status.Errorf(codes.ResourceExhausted, "grpc: message too large (%d bytes)", bufSize)
|
||||||
}
|
}
|
||||||
return b, nil
|
return b, nil
|
||||||
}
|
}
|
||||||
@ -828,30 +828,13 @@ func recvAndDecompress(p *parser, s recvCompressor, dc Decompressor, maxReceiveM
|
|||||||
return nil, st.Err()
|
return nil, st.Err()
|
||||||
}
|
}
|
||||||
|
|
||||||
var size int
|
|
||||||
if pf.isCompressed() {
|
if pf.isCompressed() {
|
||||||
defer compressed.Free()
|
defer compressed.Free()
|
||||||
|
|
||||||
// To match legacy behavior, if the decompressor is set by WithDecompressor or RPCDecompressor,
|
// To match legacy behavior, if the decompressor is set by WithDecompressor or RPCDecompressor,
|
||||||
// use this decompressor as the default.
|
// use this decompressor as the default.
|
||||||
if dc != nil {
|
out, err = decompress(compressor, compressed, dc, maxReceiveMessageSize, p.bufferPool)
|
||||||
var uncompressedBuf []byte
|
|
||||||
uncompressedBuf, err = dc.Do(compressed.Reader())
|
|
||||||
if err == nil {
|
|
||||||
out = mem.BufferSlice{mem.SliceBuffer(uncompressedBuf)}
|
|
||||||
}
|
|
||||||
size = len(uncompressedBuf)
|
|
||||||
} else {
|
|
||||||
out, size, err = decompress(compressor, compressed, maxReceiveMessageSize, p.bufferPool)
|
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", err)
|
return nil, err
|
||||||
}
|
|
||||||
if size > maxReceiveMessageSize {
|
|
||||||
out.Free()
|
|
||||||
// TODO: Revisit the error code. Currently keep it consistent with java
|
|
||||||
// implementation.
|
|
||||||
return nil, status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max (%d vs. %d)", size, maxReceiveMessageSize)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
out = compressed
|
out = compressed
|
||||||
@ -866,20 +849,46 @@ func recvAndDecompress(p *parser, s recvCompressor, dc Decompressor, maxReceiveM
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Using compressor, decompress d, returning data and size.
|
// decompress processes the given data by decompressing it using either a custom decompressor or a standard compressor.
|
||||||
// Optionally, if data will be over maxReceiveMessageSize, just return the size.
|
// If a custom decompressor is provided, it takes precedence. The function validates that the decompressed data
|
||||||
func decompress(compressor encoding.Compressor, d mem.BufferSlice, maxReceiveMessageSize int, pool mem.BufferPool) (mem.BufferSlice, int, error) {
|
// does not exceed the specified maximum size and returns an error if this limit is exceeded.
|
||||||
dcReader, err := compressor.Decompress(d.Reader())
|
// On success, it returns the decompressed data. Otherwise, it returns an error if decompression fails or the data exceeds the size limit.
|
||||||
if err != nil {
|
func decompress(compressor encoding.Compressor, d mem.BufferSlice, dc Decompressor, maxReceiveMessageSize int, pool mem.BufferPool) (mem.BufferSlice, error) {
|
||||||
return nil, 0, err
|
if dc != nil {
|
||||||
|
uncompressed, err := dc.Do(d.Reader())
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", err)
|
||||||
|
}
|
||||||
|
if len(uncompressed) > maxReceiveMessageSize {
|
||||||
|
return nil, status.Errorf(codes.ResourceExhausted, "grpc: message after decompression larger than max (%d vs. %d)", len(uncompressed), maxReceiveMessageSize)
|
||||||
|
}
|
||||||
|
return mem.BufferSlice{mem.SliceBuffer(uncompressed)}, nil
|
||||||
}
|
}
|
||||||
|
if compressor != nil {
|
||||||
|
dcReader, err := compressor.Decompress(d.Reader())
|
||||||
|
if err != nil {
|
||||||
|
return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the message: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
out, err := mem.ReadAll(io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1), pool)
|
out, err := mem.ReadAll(io.LimitReader(dcReader, int64(maxReceiveMessageSize)), pool)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
out.Free()
|
out.Free()
|
||||||
return nil, 0, err
|
return nil, status.Errorf(codes.Internal, "grpc: failed to read decompressed data: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if out.Len() == maxReceiveMessageSize && !atEOF(dcReader) {
|
||||||
|
out.Free()
|
||||||
|
return nil, status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max %d", maxReceiveMessageSize)
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
}
|
}
|
||||||
return out, out.Len(), nil
|
return nil, status.Errorf(codes.Internal, "grpc: no decompressor available for compressed payload")
|
||||||
|
}
|
||||||
|
|
||||||
|
// atEOF reads data from r and returns true if zero bytes could be read and r.Read returns EOF.
|
||||||
|
func atEOF(dcReader io.Reader) bool {
|
||||||
|
n, err := dcReader.Read(make([]byte, 1))
|
||||||
|
return n == 0 && err == io.EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
type recvCompressor interface {
|
type recvCompressor interface {
|
||||||
|
|||||||
23
vendor/google.golang.org/grpc/server.go
generated
vendored
23
vendor/google.golang.org/grpc/server.go
generated
vendored
@ -37,12 +37,14 @@ import (
|
|||||||
"google.golang.org/grpc/credentials"
|
"google.golang.org/grpc/credentials"
|
||||||
"google.golang.org/grpc/encoding"
|
"google.golang.org/grpc/encoding"
|
||||||
"google.golang.org/grpc/encoding/proto"
|
"google.golang.org/grpc/encoding/proto"
|
||||||
|
estats "google.golang.org/grpc/experimental/stats"
|
||||||
"google.golang.org/grpc/grpclog"
|
"google.golang.org/grpc/grpclog"
|
||||||
"google.golang.org/grpc/internal"
|
"google.golang.org/grpc/internal"
|
||||||
"google.golang.org/grpc/internal/binarylog"
|
"google.golang.org/grpc/internal/binarylog"
|
||||||
"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/internal/grpcutil"
|
"google.golang.org/grpc/internal/grpcutil"
|
||||||
|
istats "google.golang.org/grpc/internal/stats"
|
||||||
"google.golang.org/grpc/internal/transport"
|
"google.golang.org/grpc/internal/transport"
|
||||||
"google.golang.org/grpc/keepalive"
|
"google.golang.org/grpc/keepalive"
|
||||||
"google.golang.org/grpc/mem"
|
"google.golang.org/grpc/mem"
|
||||||
@ -82,6 +84,9 @@ func init() {
|
|||||||
internal.BinaryLogger = binaryLogger
|
internal.BinaryLogger = binaryLogger
|
||||||
internal.JoinServerOptions = newJoinServerOption
|
internal.JoinServerOptions = newJoinServerOption
|
||||||
internal.BufferPool = bufferPool
|
internal.BufferPool = bufferPool
|
||||||
|
internal.MetricsRecorderForServer = func(srv *Server) estats.MetricsRecorder {
|
||||||
|
return istats.NewMetricsRecorderList(srv.opts.statsHandlers)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var statusOK = status.New(codes.OK, "")
|
var statusOK = status.New(codes.OK, "")
|
||||||
@ -643,7 +648,7 @@ func (s *Server) serverWorker() {
|
|||||||
// connections to reduce the time spent overall on runtime.morestack.
|
// connections to reduce the time spent overall on runtime.morestack.
|
||||||
func (s *Server) initServerWorkers() {
|
func (s *Server) initServerWorkers() {
|
||||||
s.serverWorkerChannel = make(chan func())
|
s.serverWorkerChannel = make(chan func())
|
||||||
s.serverWorkerChannelClose = grpcsync.OnceFunc(func() {
|
s.serverWorkerChannelClose = sync.OnceFunc(func() {
|
||||||
close(s.serverWorkerChannel)
|
close(s.serverWorkerChannel)
|
||||||
})
|
})
|
||||||
for i := uint32(0); i < s.opts.numServerWorkers; i++ {
|
for i := uint32(0); i < s.opts.numServerWorkers; i++ {
|
||||||
@ -1645,10 +1650,10 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv
|
|||||||
// If dc is set and matches the stream's compression, use it. Otherwise, try
|
// If dc is set and matches the stream's compression, use it. Otherwise, try
|
||||||
// to find a matching registered compressor for decomp.
|
// to find a matching registered compressor for decomp.
|
||||||
if rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc {
|
if rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc {
|
||||||
ss.dc = s.opts.dc
|
ss.decompressorV0 = s.opts.dc
|
||||||
} else if rc != "" && rc != encoding.Identity {
|
} else if rc != "" && rc != encoding.Identity {
|
||||||
ss.decomp = encoding.GetCompressor(rc)
|
ss.decompressorV1 = encoding.GetCompressor(rc)
|
||||||
if ss.decomp == nil {
|
if ss.decompressorV1 == nil {
|
||||||
st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc)
|
st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc)
|
||||||
ss.s.WriteStatus(st)
|
ss.s.WriteStatus(st)
|
||||||
return st.Err()
|
return st.Err()
|
||||||
@ -1660,12 +1665,12 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv
|
|||||||
//
|
//
|
||||||
// NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686.
|
// NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686.
|
||||||
if s.opts.cp != nil {
|
if s.opts.cp != nil {
|
||||||
ss.cp = s.opts.cp
|
ss.compressorV0 = s.opts.cp
|
||||||
ss.sendCompressorName = s.opts.cp.Type()
|
ss.sendCompressorName = s.opts.cp.Type()
|
||||||
} else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity {
|
} else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity {
|
||||||
// Legacy compressor not specified; attempt to respond with same encoding.
|
// Legacy compressor not specified; attempt to respond with same encoding.
|
||||||
ss.comp = encoding.GetCompressor(rc)
|
ss.compressorV1 = encoding.GetCompressor(rc)
|
||||||
if ss.comp != nil {
|
if ss.compressorV1 != nil {
|
||||||
ss.sendCompressorName = rc
|
ss.sendCompressorName = rc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1676,7 +1681,7 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ss.ctx = newContextWithRPCInfo(ss.ctx, false, ss.codec, ss.cp, ss.comp)
|
ss.ctx = newContextWithRPCInfo(ss.ctx, false, ss.codec, ss.compressorV0, ss.compressorV1)
|
||||||
|
|
||||||
if trInfo != nil {
|
if trInfo != nil {
|
||||||
trInfo.tr.LazyLog(&trInfo.firstLine, false)
|
trInfo.tr.LazyLog(&trInfo.firstLine, false)
|
||||||
@ -1930,7 +1935,7 @@ func (s *Server) stop(graceful bool) {
|
|||||||
s.conns = nil
|
s.conns = nil
|
||||||
|
|
||||||
if s.opts.numServerWorkers > 0 {
|
if s.opts.numServerWorkers > 0 {
|
||||||
// Closing the channel (only once, via grpcsync.OnceFunc) after all the
|
// Closing the channel (only once, via sync.OnceFunc) after all the
|
||||||
// connections have been closed above ensures that there are no
|
// connections have been closed above ensures that there are no
|
||||||
// goroutines executing the callback passed to st.HandleStreams (where
|
// goroutines executing the callback passed to st.HandleStreams (where
|
||||||
// the channel is written to).
|
// the channel is written to).
|
||||||
|
|||||||
294
vendor/google.golang.org/grpc/stream.go
generated
vendored
294
vendor/google.golang.org/grpc/stream.go
generated
vendored
@ -258,9 +258,9 @@ func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, mc serviceconfig.MethodConfig, onCommit, doneFunc func(), opts ...CallOption) (_ iresolver.ClientStream, err error) {
|
func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, mc serviceconfig.MethodConfig, onCommit, doneFunc func(), opts ...CallOption) (_ iresolver.ClientStream, err error) {
|
||||||
c := defaultCallInfo()
|
callInfo := defaultCallInfo()
|
||||||
if mc.WaitForReady != nil {
|
if mc.WaitForReady != nil {
|
||||||
c.failFast = !*mc.WaitForReady
|
callInfo.failFast = !*mc.WaitForReady
|
||||||
}
|
}
|
||||||
|
|
||||||
// Possible context leak:
|
// Possible context leak:
|
||||||
@ -281,20 +281,20 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
if err := o.before(c); err != nil {
|
if err := o.before(callInfo); err != nil {
|
||||||
return nil, toRPCErr(err)
|
return nil, toRPCErr(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
c.maxSendMessageSize = getMaxSize(mc.MaxReqSize, c.maxSendMessageSize, defaultClientMaxSendMessageSize)
|
callInfo.maxSendMessageSize = getMaxSize(mc.MaxReqSize, callInfo.maxSendMessageSize, defaultClientMaxSendMessageSize)
|
||||||
c.maxReceiveMessageSize = getMaxSize(mc.MaxRespSize, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize)
|
callInfo.maxReceiveMessageSize = getMaxSize(mc.MaxRespSize, callInfo.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize)
|
||||||
if err := setCallInfoCodec(c); err != nil {
|
if err := setCallInfoCodec(callInfo); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
callHdr := &transport.CallHdr{
|
callHdr := &transport.CallHdr{
|
||||||
Host: cc.authority,
|
Host: cc.authority,
|
||||||
Method: method,
|
Method: method,
|
||||||
ContentSubtype: c.contentSubtype,
|
ContentSubtype: callInfo.contentSubtype,
|
||||||
DoneFunc: doneFunc,
|
DoneFunc: doneFunc,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,22 +302,22 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client
|
|||||||
// set. In that case, also find the compressor from the encoding package.
|
// set. In that case, also find the compressor from the encoding package.
|
||||||
// Otherwise, use the compressor configured by the WithCompressor DialOption,
|
// Otherwise, use the compressor configured by the WithCompressor DialOption,
|
||||||
// if set.
|
// if set.
|
||||||
var cp Compressor
|
var compressorV0 Compressor
|
||||||
var comp encoding.Compressor
|
var compressorV1 encoding.Compressor
|
||||||
if ct := c.compressorType; ct != "" {
|
if ct := callInfo.compressorName; ct != "" {
|
||||||
callHdr.SendCompress = ct
|
callHdr.SendCompress = ct
|
||||||
if ct != encoding.Identity {
|
if ct != encoding.Identity {
|
||||||
comp = encoding.GetCompressor(ct)
|
compressorV1 = encoding.GetCompressor(ct)
|
||||||
if comp == nil {
|
if compressorV1 == nil {
|
||||||
return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct)
|
return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if cc.dopts.cp != nil {
|
} else if cc.dopts.compressorV0 != nil {
|
||||||
callHdr.SendCompress = cc.dopts.cp.Type()
|
callHdr.SendCompress = cc.dopts.compressorV0.Type()
|
||||||
cp = cc.dopts.cp
|
compressorV0 = cc.dopts.compressorV0
|
||||||
}
|
}
|
||||||
if c.creds != nil {
|
if callInfo.creds != nil {
|
||||||
callHdr.Creds = c.creds
|
callHdr.Creds = callInfo.creds
|
||||||
}
|
}
|
||||||
|
|
||||||
cs := &clientStream{
|
cs := &clientStream{
|
||||||
@ -325,12 +325,12 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client
|
|||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
methodConfig: &mc,
|
methodConfig: &mc,
|
||||||
opts: opts,
|
opts: opts,
|
||||||
callInfo: c,
|
callInfo: callInfo,
|
||||||
cc: cc,
|
cc: cc,
|
||||||
desc: desc,
|
desc: desc,
|
||||||
codec: c.codec,
|
codec: callInfo.codec,
|
||||||
cp: cp,
|
compressorV0: compressorV0,
|
||||||
comp: comp,
|
compressorV1: compressorV1,
|
||||||
cancel: cancel,
|
cancel: cancel,
|
||||||
firstAttempt: true,
|
firstAttempt: true,
|
||||||
onCommit: onCommit,
|
onCommit: onCommit,
|
||||||
@ -412,7 +412,7 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error)
|
|||||||
return nil, ErrClientConnClosing
|
return nil, ErrClientConnClosing
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx := newContextWithRPCInfo(cs.ctx, cs.callInfo.failFast, cs.callInfo.codec, cs.cp, cs.comp)
|
ctx := newContextWithRPCInfo(cs.ctx, cs.callInfo.failFast, cs.callInfo.codec, cs.compressorV0, cs.compressorV1)
|
||||||
method := cs.callHdr.Method
|
method := cs.callHdr.Method
|
||||||
var beginTime time.Time
|
var beginTime time.Time
|
||||||
shs := cs.cc.dopts.copts.StatsHandlers
|
shs := cs.cc.dopts.copts.StatsHandlers
|
||||||
@ -454,12 +454,12 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &csAttempt{
|
return &csAttempt{
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
beginTime: beginTime,
|
beginTime: beginTime,
|
||||||
cs: cs,
|
cs: cs,
|
||||||
dc: cs.cc.dopts.dc,
|
decompressorV0: cs.cc.dopts.dc,
|
||||||
statsHandlers: shs,
|
statsHandlers: shs,
|
||||||
trInfo: trInfo,
|
trInfo: trInfo,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -467,7 +467,7 @@ func (a *csAttempt) getTransport() error {
|
|||||||
cs := a.cs
|
cs := a.cs
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
a.t, a.pickResult, err = cs.cc.getTransport(a.ctx, cs.callInfo.failFast, cs.callHdr.Method)
|
a.transport, a.pickResult, err = cs.cc.getTransport(a.ctx, cs.callInfo.failFast, cs.callHdr.Method)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if de, ok := err.(dropError); ok {
|
if de, ok := err.(dropError); ok {
|
||||||
err = de.error
|
err = de.error
|
||||||
@ -476,7 +476,7 @@ func (a *csAttempt) getTransport() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if a.trInfo != nil {
|
if a.trInfo != nil {
|
||||||
a.trInfo.firstLine.SetRemoteAddr(a.t.RemoteAddr())
|
a.trInfo.firstLine.SetRemoteAddr(a.transport.RemoteAddr())
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -503,7 +503,7 @@ func (a *csAttempt) newStream() error {
|
|||||||
a.ctx = metadata.NewOutgoingContext(a.ctx, md)
|
a.ctx = metadata.NewOutgoingContext(a.ctx, md)
|
||||||
}
|
}
|
||||||
|
|
||||||
s, err := a.t.NewStream(a.ctx, cs.callHdr)
|
s, err := a.transport.NewStream(a.ctx, cs.callHdr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
nse, ok := err.(*transport.NewStreamError)
|
nse, ok := err.(*transport.NewStreamError)
|
||||||
if !ok {
|
if !ok {
|
||||||
@ -518,9 +518,9 @@ func (a *csAttempt) newStream() error {
|
|||||||
// Unwrap and convert error.
|
// Unwrap and convert error.
|
||||||
return toRPCErr(nse.Err)
|
return toRPCErr(nse.Err)
|
||||||
}
|
}
|
||||||
a.s = s
|
a.transportStream = s
|
||||||
a.ctx = s.Context()
|
a.ctx = s.Context()
|
||||||
a.p = &parser{r: s, bufferPool: a.cs.cc.dopts.copts.BufferPool}
|
a.parser = &parser{r: s, bufferPool: a.cs.cc.dopts.copts.BufferPool}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -532,9 +532,9 @@ type clientStream struct {
|
|||||||
cc *ClientConn
|
cc *ClientConn
|
||||||
desc *StreamDesc
|
desc *StreamDesc
|
||||||
|
|
||||||
codec baseCodec
|
codec baseCodec
|
||||||
cp Compressor
|
compressorV0 Compressor
|
||||||
comp encoding.Compressor
|
compressorV1 encoding.Compressor
|
||||||
|
|
||||||
cancel context.CancelFunc // cancels all attempts
|
cancel context.CancelFunc // cancels all attempts
|
||||||
|
|
||||||
@ -583,17 +583,17 @@ type replayOp struct {
|
|||||||
// csAttempt implements a single transport stream attempt within a
|
// csAttempt implements a single transport stream attempt within a
|
||||||
// clientStream.
|
// clientStream.
|
||||||
type csAttempt struct {
|
type csAttempt struct {
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cs *clientStream
|
cs *clientStream
|
||||||
t transport.ClientTransport
|
transport transport.ClientTransport
|
||||||
s *transport.ClientStream
|
transportStream *transport.ClientStream
|
||||||
p *parser
|
parser *parser
|
||||||
pickResult balancer.PickResult
|
pickResult balancer.PickResult
|
||||||
|
|
||||||
finished bool
|
finished bool
|
||||||
dc Decompressor
|
decompressorV0 Decompressor
|
||||||
decomp encoding.Compressor
|
decompressorV1 encoding.Compressor
|
||||||
decompSet bool
|
decompressorSet bool
|
||||||
|
|
||||||
mu sync.Mutex // guards trInfo.tr
|
mu sync.Mutex // guards trInfo.tr
|
||||||
// trInfo may be nil (if EnableTracing is false).
|
// trInfo may be nil (if EnableTracing is false).
|
||||||
@ -639,14 +639,14 @@ func (a *csAttempt) shouldRetry(err error) (bool, error) {
|
|||||||
// RPC is finished or committed or was dropped by the picker; cannot retry.
|
// RPC is finished or committed or was dropped by the picker; cannot retry.
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if a.s == nil && a.allowTransparentRetry {
|
if a.transportStream == nil && a.allowTransparentRetry {
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
// Wait for the trailers.
|
// Wait for the trailers.
|
||||||
unprocessed := false
|
unprocessed := false
|
||||||
if a.s != nil {
|
if a.transportStream != nil {
|
||||||
<-a.s.Done()
|
<-a.transportStream.Done()
|
||||||
unprocessed = a.s.Unprocessed()
|
unprocessed = a.transportStream.Unprocessed()
|
||||||
}
|
}
|
||||||
if cs.firstAttempt && unprocessed {
|
if cs.firstAttempt && unprocessed {
|
||||||
// First attempt, stream unprocessed: transparently retry.
|
// First attempt, stream unprocessed: transparently retry.
|
||||||
@ -658,14 +658,14 @@ func (a *csAttempt) shouldRetry(err error) (bool, error) {
|
|||||||
|
|
||||||
pushback := 0
|
pushback := 0
|
||||||
hasPushback := false
|
hasPushback := false
|
||||||
if a.s != nil {
|
if a.transportStream != nil {
|
||||||
if !a.s.TrailersOnly() {
|
if !a.transportStream.TrailersOnly() {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(retry): Move down if the spec changes to not check server pushback
|
// TODO(retry): Move down if the spec changes to not check server pushback
|
||||||
// before considering this a failure for throttling.
|
// before considering this a failure for throttling.
|
||||||
sps := a.s.Trailer()["grpc-retry-pushback-ms"]
|
sps := a.transportStream.Trailer()["grpc-retry-pushback-ms"]
|
||||||
if len(sps) == 1 {
|
if len(sps) == 1 {
|
||||||
var e error
|
var e error
|
||||||
if pushback, e = strconv.Atoi(sps[0]); e != nil || pushback < 0 {
|
if pushback, e = strconv.Atoi(sps[0]); e != nil || pushback < 0 {
|
||||||
@ -682,8 +682,8 @@ func (a *csAttempt) shouldRetry(err error) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var code codes.Code
|
var code codes.Code
|
||||||
if a.s != nil {
|
if a.transportStream != nil {
|
||||||
code = a.s.Status().Code()
|
code = a.transportStream.Status().Code()
|
||||||
} else {
|
} else {
|
||||||
code = status.Code(err)
|
code = status.Code(err)
|
||||||
}
|
}
|
||||||
@ -756,8 +756,8 @@ func (cs *clientStream) Context() context.Context {
|
|||||||
cs.commitAttempt()
|
cs.commitAttempt()
|
||||||
// No need to lock before using attempt, since we know it is committed and
|
// No need to lock before using attempt, since we know it is committed and
|
||||||
// cannot change.
|
// cannot change.
|
||||||
if cs.attempt.s != nil {
|
if cs.attempt.transportStream != nil {
|
||||||
return cs.attempt.s.Context()
|
return cs.attempt.transportStream.Context()
|
||||||
}
|
}
|
||||||
return cs.ctx
|
return cs.ctx
|
||||||
}
|
}
|
||||||
@ -794,9 +794,9 @@ func (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func())
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
<-a.s.Done()
|
<-a.transportStream.Done()
|
||||||
}
|
}
|
||||||
if err == nil || (err == io.EOF && a.s.Status().Code() == codes.OK) {
|
if err == nil || (err == io.EOF && a.transportStream.Status().Code() == codes.OK) {
|
||||||
onSuccess()
|
onSuccess()
|
||||||
cs.mu.Unlock()
|
cs.mu.Unlock()
|
||||||
return err
|
return err
|
||||||
@ -812,7 +812,7 @@ func (cs *clientStream) Header() (metadata.MD, error) {
|
|||||||
var m metadata.MD
|
var m metadata.MD
|
||||||
err := cs.withRetry(func(a *csAttempt) error {
|
err := cs.withRetry(func(a *csAttempt) error {
|
||||||
var err error
|
var err error
|
||||||
m, err = a.s.Header()
|
m, err = a.transportStream.Header()
|
||||||
return toRPCErr(err)
|
return toRPCErr(err)
|
||||||
}, cs.commitAttemptLocked)
|
}, cs.commitAttemptLocked)
|
||||||
|
|
||||||
@ -856,10 +856,10 @@ func (cs *clientStream) Trailer() metadata.MD {
|
|||||||
// directions -- it will prevent races and should not meaningfully impact
|
// directions -- it will prevent races and should not meaningfully impact
|
||||||
// performance.
|
// performance.
|
||||||
cs.commitAttempt()
|
cs.commitAttempt()
|
||||||
if cs.attempt.s == nil {
|
if cs.attempt.transportStream == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return cs.attempt.s.Trailer()
|
return cs.attempt.transportStream.Trailer()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cs *clientStream) replayBufferLocked(attempt *csAttempt) error {
|
func (cs *clientStream) replayBufferLocked(attempt *csAttempt) error {
|
||||||
@ -904,7 +904,7 @@ func (cs *clientStream) SendMsg(m any) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// load hdr, payload, data
|
// load hdr, payload, data
|
||||||
hdr, data, payload, pf, err := prepareMsg(m, cs.codec, cs.cp, cs.comp, cs.cc.dopts.copts.BufferPool)
|
hdr, data, payload, pf, err := prepareMsg(m, cs.codec, cs.compressorV0, cs.compressorV1, cs.cc.dopts.copts.BufferPool)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -992,7 +992,7 @@ func (cs *clientStream) CloseSend() error {
|
|||||||
}
|
}
|
||||||
cs.sentLast = true
|
cs.sentLast = true
|
||||||
op := func(a *csAttempt) error {
|
op := func(a *csAttempt) error {
|
||||||
a.s.Write(nil, nil, &transport.WriteOptions{Last: true})
|
a.transportStream.Write(nil, nil, &transport.WriteOptions{Last: true})
|
||||||
// Always return nil; io.EOF is the only error that might make sense
|
// Always return nil; io.EOF is the only error that might make sense
|
||||||
// instead, but there is no need to signal the client to call RecvMsg
|
// instead, but there is no need to signal the client to call RecvMsg
|
||||||
// as the only use left for the stream after CloseSend is to call
|
// as the only use left for the stream after CloseSend is to call
|
||||||
@ -1030,7 +1030,7 @@ func (cs *clientStream) finish(err error) {
|
|||||||
if cs.attempt != nil {
|
if cs.attempt != nil {
|
||||||
cs.attempt.finish(err)
|
cs.attempt.finish(err)
|
||||||
// after functions all rely upon having a stream.
|
// after functions all rely upon having a stream.
|
||||||
if cs.attempt.s != nil {
|
if cs.attempt.transportStream != nil {
|
||||||
for _, o := range cs.opts {
|
for _, o := range cs.opts {
|
||||||
o.after(cs.callInfo, cs.attempt)
|
o.after(cs.callInfo, cs.attempt)
|
||||||
}
|
}
|
||||||
@ -1084,7 +1084,7 @@ func (a *csAttempt) sendMsg(m any, hdr []byte, payld mem.BufferSlice, dataLength
|
|||||||
}
|
}
|
||||||
a.mu.Unlock()
|
a.mu.Unlock()
|
||||||
}
|
}
|
||||||
if err := a.s.Write(hdr, payld, &transport.WriteOptions{Last: !cs.desc.ClientStreams}); err != nil {
|
if err := a.transportStream.Write(hdr, payld, &transport.WriteOptions{Last: !cs.desc.ClientStreams}); err != nil {
|
||||||
if !cs.desc.ClientStreams {
|
if !cs.desc.ClientStreams {
|
||||||
// For non-client-streaming RPCs, we return nil instead of EOF on error
|
// For non-client-streaming RPCs, we return nil instead of EOF on error
|
||||||
// because the generated code requires it. finish is not called; RecvMsg()
|
// because the generated code requires it. finish is not called; RecvMsg()
|
||||||
@ -1108,25 +1108,25 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) {
|
|||||||
defer payInfo.free()
|
defer payInfo.free()
|
||||||
}
|
}
|
||||||
|
|
||||||
if !a.decompSet {
|
if !a.decompressorSet {
|
||||||
// Block until we receive headers containing received message encoding.
|
// Block until we receive headers containing received message encoding.
|
||||||
if ct := a.s.RecvCompress(); ct != "" && ct != encoding.Identity {
|
if ct := a.transportStream.RecvCompress(); ct != "" && ct != encoding.Identity {
|
||||||
if a.dc == nil || a.dc.Type() != ct {
|
if a.decompressorV0 == nil || a.decompressorV0.Type() != ct {
|
||||||
// No configured decompressor, or it does not match the incoming
|
// No configured decompressor, or it does not match the incoming
|
||||||
// message encoding; attempt to find a registered compressor that does.
|
// message encoding; attempt to find a registered compressor that does.
|
||||||
a.dc = nil
|
a.decompressorV0 = nil
|
||||||
a.decomp = encoding.GetCompressor(ct)
|
a.decompressorV1 = encoding.GetCompressor(ct)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// No compression is used; disable our decompressor.
|
// No compression is used; disable our decompressor.
|
||||||
a.dc = nil
|
a.decompressorV0 = nil
|
||||||
}
|
}
|
||||||
// Only initialize this state once per stream.
|
// Only initialize this state once per stream.
|
||||||
a.decompSet = true
|
a.decompressorSet = true
|
||||||
}
|
}
|
||||||
if err := recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decomp, false); err != nil {
|
if err := recv(a.parser, cs.codec, a.transportStream, a.decompressorV0, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decompressorV1, false); err != nil {
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
if statusErr := a.s.Status().Err(); statusErr != nil {
|
if statusErr := a.transportStream.Status().Err(); statusErr != nil {
|
||||||
return statusErr
|
return statusErr
|
||||||
}
|
}
|
||||||
return io.EOF // indicates successful end of stream.
|
return io.EOF // indicates successful end of stream.
|
||||||
@ -1157,8 +1157,8 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) {
|
|||||||
}
|
}
|
||||||
// Special handling for non-server-stream rpcs.
|
// Special handling for non-server-stream rpcs.
|
||||||
// This recv expects EOF or errors, so we don't collect inPayload.
|
// This recv expects EOF or errors, so we don't collect inPayload.
|
||||||
if err := recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decomp, false); err == io.EOF {
|
if err := recv(a.parser, cs.codec, a.transportStream, a.decompressorV0, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decompressorV1, false); err == io.EOF {
|
||||||
return a.s.Status().Err() // non-server streaming Recv returns nil on success
|
return a.transportStream.Status().Err() // non-server streaming Recv returns nil on success
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return toRPCErr(err)
|
return toRPCErr(err)
|
||||||
}
|
}
|
||||||
@ -1177,20 +1177,20 @@ func (a *csAttempt) finish(err error) {
|
|||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
var tr metadata.MD
|
var tr metadata.MD
|
||||||
if a.s != nil {
|
if a.transportStream != nil {
|
||||||
a.s.Close(err)
|
a.transportStream.Close(err)
|
||||||
tr = a.s.Trailer()
|
tr = a.transportStream.Trailer()
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.pickResult.Done != nil {
|
if a.pickResult.Done != nil {
|
||||||
br := false
|
br := false
|
||||||
if a.s != nil {
|
if a.transportStream != nil {
|
||||||
br = a.s.BytesReceived()
|
br = a.transportStream.BytesReceived()
|
||||||
}
|
}
|
||||||
a.pickResult.Done(balancer.DoneInfo{
|
a.pickResult.Done(balancer.DoneInfo{
|
||||||
Err: err,
|
Err: err,
|
||||||
Trailer: tr,
|
Trailer: tr,
|
||||||
BytesSent: a.s != nil,
|
BytesSent: a.transportStream != nil,
|
||||||
BytesReceived: br,
|
BytesReceived: br,
|
||||||
ServerLoad: balancerload.Parse(tr),
|
ServerLoad: balancerload.Parse(tr),
|
||||||
})
|
})
|
||||||
@ -1272,7 +1272,7 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin
|
|||||||
// if set.
|
// if set.
|
||||||
var cp Compressor
|
var cp Compressor
|
||||||
var comp encoding.Compressor
|
var comp encoding.Compressor
|
||||||
if ct := c.compressorType; ct != "" {
|
if ct := c.compressorName; ct != "" {
|
||||||
callHdr.SendCompress = ct
|
callHdr.SendCompress = ct
|
||||||
if ct != encoding.Identity {
|
if ct != encoding.Identity {
|
||||||
comp = encoding.GetCompressor(ct)
|
comp = encoding.GetCompressor(ct)
|
||||||
@ -1280,9 +1280,9 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin
|
|||||||
return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct)
|
return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ac.cc.dopts.cp != nil {
|
} else if ac.cc.dopts.compressorV0 != nil {
|
||||||
callHdr.SendCompress = ac.cc.dopts.cp.Type()
|
callHdr.SendCompress = ac.cc.dopts.compressorV0.Type()
|
||||||
cp = ac.cc.dopts.cp
|
cp = ac.cc.dopts.compressorV0
|
||||||
}
|
}
|
||||||
if c.creds != nil {
|
if c.creds != nil {
|
||||||
callHdr.Creds = c.creds
|
callHdr.Creds = c.creds
|
||||||
@ -1290,26 +1290,26 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin
|
|||||||
|
|
||||||
// Use a special addrConnStream to avoid retry.
|
// Use a special addrConnStream to avoid retry.
|
||||||
as := &addrConnStream{
|
as := &addrConnStream{
|
||||||
callHdr: callHdr,
|
callHdr: callHdr,
|
||||||
ac: ac,
|
ac: ac,
|
||||||
ctx: ctx,
|
ctx: ctx,
|
||||||
cancel: cancel,
|
cancel: cancel,
|
||||||
opts: opts,
|
opts: opts,
|
||||||
callInfo: c,
|
callInfo: c,
|
||||||
desc: desc,
|
desc: desc,
|
||||||
codec: c.codec,
|
codec: c.codec,
|
||||||
cp: cp,
|
sendCompressorV0: cp,
|
||||||
comp: comp,
|
sendCompressorV1: comp,
|
||||||
t: t,
|
transport: t,
|
||||||
}
|
}
|
||||||
|
|
||||||
s, err := as.t.NewStream(as.ctx, as.callHdr)
|
s, err := as.transport.NewStream(as.ctx, as.callHdr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = toRPCErr(err)
|
err = toRPCErr(err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
as.s = s
|
as.transportStream = s
|
||||||
as.p = &parser{r: s, bufferPool: ac.dopts.copts.BufferPool}
|
as.parser = &parser{r: s, bufferPool: ac.dopts.copts.BufferPool}
|
||||||
ac.incrCallsStarted()
|
ac.incrCallsStarted()
|
||||||
if desc != unaryStreamDesc {
|
if desc != unaryStreamDesc {
|
||||||
// Listen on stream context to cleanup when the stream context is
|
// Listen on stream context to cleanup when the stream context is
|
||||||
@ -1335,29 +1335,31 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
type addrConnStream struct {
|
type addrConnStream struct {
|
||||||
s *transport.ClientStream
|
transportStream *transport.ClientStream
|
||||||
ac *addrConn
|
ac *addrConn
|
||||||
callHdr *transport.CallHdr
|
callHdr *transport.CallHdr
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
opts []CallOption
|
opts []CallOption
|
||||||
callInfo *callInfo
|
callInfo *callInfo
|
||||||
t transport.ClientTransport
|
transport transport.ClientTransport
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
sentLast bool
|
sentLast bool
|
||||||
desc *StreamDesc
|
desc *StreamDesc
|
||||||
codec baseCodec
|
codec baseCodec
|
||||||
cp Compressor
|
sendCompressorV0 Compressor
|
||||||
comp encoding.Compressor
|
sendCompressorV1 encoding.Compressor
|
||||||
decompSet bool
|
decompressorSet bool
|
||||||
dc Decompressor
|
decompressorV0 Decompressor
|
||||||
decomp encoding.Compressor
|
decompressorV1 encoding.Compressor
|
||||||
p *parser
|
parser *parser
|
||||||
mu sync.Mutex
|
|
||||||
finished bool
|
// mu guards finished and is held for the entire finish method.
|
||||||
|
mu sync.Mutex
|
||||||
|
finished bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (as *addrConnStream) Header() (metadata.MD, error) {
|
func (as *addrConnStream) Header() (metadata.MD, error) {
|
||||||
m, err := as.s.Header()
|
m, err := as.transportStream.Header()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
as.finish(toRPCErr(err))
|
as.finish(toRPCErr(err))
|
||||||
}
|
}
|
||||||
@ -1365,7 +1367,7 @@ func (as *addrConnStream) Header() (metadata.MD, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (as *addrConnStream) Trailer() metadata.MD {
|
func (as *addrConnStream) Trailer() metadata.MD {
|
||||||
return as.s.Trailer()
|
return as.transportStream.Trailer()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (as *addrConnStream) CloseSend() error {
|
func (as *addrConnStream) CloseSend() error {
|
||||||
@ -1375,7 +1377,7 @@ func (as *addrConnStream) CloseSend() error {
|
|||||||
}
|
}
|
||||||
as.sentLast = true
|
as.sentLast = true
|
||||||
|
|
||||||
as.s.Write(nil, nil, &transport.WriteOptions{Last: true})
|
as.transportStream.Write(nil, nil, &transport.WriteOptions{Last: true})
|
||||||
// Always return nil; io.EOF is the only error that might make sense
|
// Always return nil; io.EOF is the only error that might make sense
|
||||||
// instead, but there is no need to signal the client to call RecvMsg
|
// instead, but there is no need to signal the client to call RecvMsg
|
||||||
// as the only use left for the stream after CloseSend is to call
|
// as the only use left for the stream after CloseSend is to call
|
||||||
@ -1384,7 +1386,7 @@ func (as *addrConnStream) CloseSend() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (as *addrConnStream) Context() context.Context {
|
func (as *addrConnStream) Context() context.Context {
|
||||||
return as.s.Context()
|
return as.transportStream.Context()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (as *addrConnStream) SendMsg(m any) (err error) {
|
func (as *addrConnStream) SendMsg(m any) (err error) {
|
||||||
@ -1406,7 +1408,7 @@ func (as *addrConnStream) SendMsg(m any) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// load hdr, payload, data
|
// load hdr, payload, data
|
||||||
hdr, data, payload, pf, err := prepareMsg(m, as.codec, as.cp, as.comp, as.ac.dopts.copts.BufferPool)
|
hdr, data, payload, pf, err := prepareMsg(m, as.codec, as.sendCompressorV0, as.sendCompressorV1, as.ac.dopts.copts.BufferPool)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1425,7 +1427,7 @@ func (as *addrConnStream) SendMsg(m any) (err error) {
|
|||||||
return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", payload.Len(), *as.callInfo.maxSendMessageSize)
|
return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", payload.Len(), *as.callInfo.maxSendMessageSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := as.s.Write(hdr, payload, &transport.WriteOptions{Last: !as.desc.ClientStreams}); err != nil {
|
if err := as.transportStream.Write(hdr, payload, &transport.WriteOptions{Last: !as.desc.ClientStreams}); err != nil {
|
||||||
if !as.desc.ClientStreams {
|
if !as.desc.ClientStreams {
|
||||||
// For non-client-streaming RPCs, we return nil instead of EOF on error
|
// For non-client-streaming RPCs, we return nil instead of EOF on error
|
||||||
// because the generated code requires it. finish is not called; RecvMsg()
|
// because the generated code requires it. finish is not called; RecvMsg()
|
||||||
@ -1446,25 +1448,25 @@ func (as *addrConnStream) RecvMsg(m any) (err error) {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if !as.decompSet {
|
if !as.decompressorSet {
|
||||||
// Block until we receive headers containing received message encoding.
|
// Block until we receive headers containing received message encoding.
|
||||||
if ct := as.s.RecvCompress(); ct != "" && ct != encoding.Identity {
|
if ct := as.transportStream.RecvCompress(); ct != "" && ct != encoding.Identity {
|
||||||
if as.dc == nil || as.dc.Type() != ct {
|
if as.decompressorV0 == nil || as.decompressorV0.Type() != ct {
|
||||||
// No configured decompressor, or it does not match the incoming
|
// No configured decompressor, or it does not match the incoming
|
||||||
// message encoding; attempt to find a registered compressor that does.
|
// message encoding; attempt to find a registered compressor that does.
|
||||||
as.dc = nil
|
as.decompressorV0 = nil
|
||||||
as.decomp = encoding.GetCompressor(ct)
|
as.decompressorV1 = encoding.GetCompressor(ct)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// No compression is used; disable our decompressor.
|
// No compression is used; disable our decompressor.
|
||||||
as.dc = nil
|
as.decompressorV0 = nil
|
||||||
}
|
}
|
||||||
// Only initialize this state once per stream.
|
// Only initialize this state once per stream.
|
||||||
as.decompSet = true
|
as.decompressorSet = true
|
||||||
}
|
}
|
||||||
if err := recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp, false); err != nil {
|
if err := recv(as.parser, as.codec, as.transportStream, as.decompressorV0, m, *as.callInfo.maxReceiveMessageSize, nil, as.decompressorV1, false); err != nil {
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
if statusErr := as.s.Status().Err(); statusErr != nil {
|
if statusErr := as.transportStream.Status().Err(); statusErr != nil {
|
||||||
return statusErr
|
return statusErr
|
||||||
}
|
}
|
||||||
return io.EOF // indicates successful end of stream.
|
return io.EOF // indicates successful end of stream.
|
||||||
@ -1479,8 +1481,8 @@ func (as *addrConnStream) RecvMsg(m any) (err error) {
|
|||||||
|
|
||||||
// Special handling for non-server-stream rpcs.
|
// Special handling for non-server-stream rpcs.
|
||||||
// This recv expects EOF or errors, so we don't collect inPayload.
|
// This recv expects EOF or errors, so we don't collect inPayload.
|
||||||
if err := recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp, false); err == io.EOF {
|
if err := recv(as.parser, as.codec, as.transportStream, as.decompressorV0, m, *as.callInfo.maxReceiveMessageSize, nil, as.decompressorV1, false); err == io.EOF {
|
||||||
return as.s.Status().Err() // non-server streaming Recv returns nil on success
|
return as.transportStream.Status().Err() // non-server streaming Recv returns nil on success
|
||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return toRPCErr(err)
|
return toRPCErr(err)
|
||||||
}
|
}
|
||||||
@ -1498,8 +1500,8 @@ func (as *addrConnStream) finish(err error) {
|
|||||||
// Ending a stream with EOF indicates a success.
|
// Ending a stream with EOF indicates a success.
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
if as.s != nil {
|
if as.transportStream != nil {
|
||||||
as.s.Close(err)
|
as.transportStream.Close(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1570,10 +1572,10 @@ type serverStream struct {
|
|||||||
p *parser
|
p *parser
|
||||||
codec baseCodec
|
codec baseCodec
|
||||||
|
|
||||||
cp Compressor
|
compressorV0 Compressor
|
||||||
dc Decompressor
|
compressorV1 encoding.Compressor
|
||||||
comp encoding.Compressor
|
decompressorV0 Decompressor
|
||||||
decomp encoding.Compressor
|
decompressorV1 encoding.Compressor
|
||||||
|
|
||||||
sendCompressorName string
|
sendCompressorName string
|
||||||
|
|
||||||
@ -1669,12 +1671,12 @@ func (ss *serverStream) SendMsg(m any) (err error) {
|
|||||||
// Server handler could have set new compressor by calling SetSendCompressor.
|
// Server handler could have set new compressor by calling SetSendCompressor.
|
||||||
// In case it is set, we need to use it for compressing outbound message.
|
// In case it is set, we need to use it for compressing outbound message.
|
||||||
if sendCompressorsName := ss.s.SendCompress(); sendCompressorsName != ss.sendCompressorName {
|
if sendCompressorsName := ss.s.SendCompress(); sendCompressorsName != ss.sendCompressorName {
|
||||||
ss.comp = encoding.GetCompressor(sendCompressorsName)
|
ss.compressorV1 = encoding.GetCompressor(sendCompressorsName)
|
||||||
ss.sendCompressorName = sendCompressorsName
|
ss.sendCompressorName = sendCompressorsName
|
||||||
}
|
}
|
||||||
|
|
||||||
// load hdr, payload, data
|
// load hdr, payload, data
|
||||||
hdr, data, payload, pf, err := prepareMsg(m, ss.codec, ss.cp, ss.comp, ss.p.bufferPool)
|
hdr, data, payload, pf, err := prepareMsg(m, ss.codec, ss.compressorV0, ss.compressorV1, ss.p.bufferPool)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1755,7 +1757,7 @@ func (ss *serverStream) RecvMsg(m any) (err error) {
|
|||||||
payInfo = &payloadInfo{}
|
payInfo = &payloadInfo{}
|
||||||
defer payInfo.free()
|
defer payInfo.free()
|
||||||
}
|
}
|
||||||
if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxReceiveMessageSize, payInfo, ss.decomp, true); err != nil {
|
if err := recv(ss.p, ss.codec, ss.s, ss.decompressorV0, m, ss.maxReceiveMessageSize, payInfo, ss.decompressorV1, true); err != nil {
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
if len(ss.binlogs) != 0 {
|
if len(ss.binlogs) != 0 {
|
||||||
chc := &binarylog.ClientHalfClose{}
|
chc := &binarylog.ClientHalfClose{}
|
||||||
|
|||||||
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.70.0"
|
const Version = "1.71.0"
|
||||||
|
|||||||
37
vendor/modules.txt
vendored
37
vendor/modules.txt
vendored
@ -291,6 +291,10 @@ go.etcd.io/etcd/client/v3
|
|||||||
go.etcd.io/etcd/client/v3/credentials
|
go.etcd.io/etcd/client/v3/credentials
|
||||||
go.etcd.io/etcd/client/v3/internal/endpoint
|
go.etcd.io/etcd/client/v3/internal/endpoint
|
||||||
go.etcd.io/etcd/client/v3/internal/resolver
|
go.etcd.io/etcd/client/v3/internal/resolver
|
||||||
|
# go.opentelemetry.io/auto/sdk v1.1.0
|
||||||
|
## explicit; go 1.22.0
|
||||||
|
go.opentelemetry.io/auto/sdk
|
||||||
|
go.opentelemetry.io/auto/sdk/internal/telemetry
|
||||||
# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0
|
# go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc
|
||||||
@ -299,8 +303,8 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc/inte
|
|||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
|
||||||
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil
|
||||||
# go.opentelemetry.io/otel v1.32.0
|
# go.opentelemetry.io/otel v1.34.0
|
||||||
## explicit; go 1.22
|
## explicit; go 1.22.0
|
||||||
go.opentelemetry.io/otel
|
go.opentelemetry.io/otel
|
||||||
go.opentelemetry.io/otel/attribute
|
go.opentelemetry.io/otel/attribute
|
||||||
go.opentelemetry.io/otel/baggage
|
go.opentelemetry.io/otel/baggage
|
||||||
@ -325,20 +329,20 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal
|
|||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/envconfig
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/envconfig
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/otlpconfig
|
||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry
|
||||||
# go.opentelemetry.io/otel/metric v1.32.0
|
# go.opentelemetry.io/otel/metric v1.34.0
|
||||||
## explicit; go 1.22
|
## explicit; go 1.22.0
|
||||||
go.opentelemetry.io/otel/metric
|
go.opentelemetry.io/otel/metric
|
||||||
go.opentelemetry.io/otel/metric/embedded
|
go.opentelemetry.io/otel/metric/embedded
|
||||||
# go.opentelemetry.io/otel/sdk v1.32.0
|
# go.opentelemetry.io/otel/sdk v1.34.0
|
||||||
## explicit; go 1.22
|
## explicit; go 1.22.0
|
||||||
go.opentelemetry.io/otel/sdk
|
go.opentelemetry.io/otel/sdk
|
||||||
go.opentelemetry.io/otel/sdk/instrumentation
|
go.opentelemetry.io/otel/sdk/instrumentation
|
||||||
go.opentelemetry.io/otel/sdk/internal/env
|
go.opentelemetry.io/otel/sdk/internal/env
|
||||||
go.opentelemetry.io/otel/sdk/internal/x
|
go.opentelemetry.io/otel/sdk/internal/x
|
||||||
go.opentelemetry.io/otel/sdk/resource
|
go.opentelemetry.io/otel/sdk/resource
|
||||||
go.opentelemetry.io/otel/sdk/trace
|
go.opentelemetry.io/otel/sdk/trace
|
||||||
# go.opentelemetry.io/otel/trace v1.32.0
|
# go.opentelemetry.io/otel/trace v1.34.0
|
||||||
## explicit; go 1.22
|
## explicit; go 1.22.0
|
||||||
go.opentelemetry.io/otel/trace
|
go.opentelemetry.io/otel/trace
|
||||||
go.opentelemetry.io/otel/trace/embedded
|
go.opentelemetry.io/otel/trace/embedded
|
||||||
go.opentelemetry.io/otel/trace/noop
|
go.opentelemetry.io/otel/trace/noop
|
||||||
@ -400,7 +404,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.24.0
|
# golang.org/x/oauth2 v0.25.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
|
||||||
@ -457,23 +461,24 @@ golang.org/x/tools/cover
|
|||||||
golang.org/x/tools/go/ast/inspector
|
golang.org/x/tools/go/ast/inspector
|
||||||
# google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de
|
# google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
# google.golang.org/genproto/googleapis/api v0.0.0-20241202173237-19429a94021a
|
# google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422
|
||||||
## explicit; go 1.21
|
## explicit; go 1.22
|
||||||
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-20241202173237-19429a94021a
|
# google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f
|
||||||
## explicit; go 1.21
|
## explicit; go 1.22
|
||||||
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.70.0
|
# google.golang.org/grpc v1.71.0
|
||||||
## explicit; go 1.22
|
## explicit; go 1.22.0
|
||||||
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
|
||||||
google.golang.org/grpc/balancer
|
google.golang.org/grpc/balancer
|
||||||
google.golang.org/grpc/balancer/base
|
google.golang.org/grpc/balancer/base
|
||||||
|
google.golang.org/grpc/balancer/endpointsharding
|
||||||
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/internal
|
||||||
@ -507,7 +512,9 @@ google.golang.org/grpc/internal/grpcutil
|
|||||||
google.golang.org/grpc/internal/idle
|
google.golang.org/grpc/internal/idle
|
||||||
google.golang.org/grpc/internal/metadata
|
google.golang.org/grpc/internal/metadata
|
||||||
google.golang.org/grpc/internal/pretty
|
google.golang.org/grpc/internal/pretty
|
||||||
|
google.golang.org/grpc/internal/proxyattributes
|
||||||
google.golang.org/grpc/internal/resolver
|
google.golang.org/grpc/internal/resolver
|
||||||
|
google.golang.org/grpc/internal/resolver/delegatingresolver
|
||||||
google.golang.org/grpc/internal/resolver/dns
|
google.golang.org/grpc/internal/resolver/dns
|
||||||
google.golang.org/grpc/internal/resolver/dns/internal
|
google.golang.org/grpc/internal/resolver/dns/internal
|
||||||
google.golang.org/grpc/internal/resolver/passthrough
|
google.golang.org/grpc/internal/resolver/passthrough
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user