mirror of https://github.com/knative/client.git
upgrade to latest dependencies (#1944)
bumping google.golang.org/grpc d32e66c...fa274d7:
> fa274d7 Change version to 1.64.0 (# 7218)
> 6b413c8 xds: Surround two `Infof` calls that use `pretty.ToJSON` with `V(2)` checks (# 7216)
> 2dbbcef resolver/dns: Add docstring to SetMinResolutionInterval (# 7217)
> 070d9c7 codes: replace %q to %d in error string when invalid code is an integer (# 7188)
> 5d24ee2 xds: store server config for LRS server in xdsresource.ClusterUpdate (# 7191)
> c76f686 advancedTLS: Rename get root certs related pieces (# 7207)
> f591e3b codec: remove option to suppress setting supported compressors in headers (# 7203)
> b4f7947 github: remove dependabot (# 7208)
> 0561c78 client: add user-friendly error message of LB policy update timed out (# 7206)
> 9d9c1fb peer: remove change detector test (# 7204)
> 9d9a96f peer and metadata: Implement the Stringer interface for Peer and Metadata (# 7137)
> 911d549 advancedTLS: Combine `ClientOptions` and `ServerOptions` to just `Options` (# 7202)
> 4879d51 advancedTLS: Swap to DenyUndetermined from AllowUndetermined in revocation settings (# 7179)
> befc29d advancedTLS: Rename {Min/Max}Version to {Min/Max}TLSVersion (# 7173)
> f2d6421 test/kokoro: simplify PSM Interop Kokoro buildscripts (# 7171)
> 9199290 xds: Move bootstrap config to internal/xds (# 7182)
> f167ad6 test: fix possible leaked goroutine in TestDetailedConnectionCloseErrorPropagatesToRpcError (# 7183)
> bb9882e Add an optional implementation of streams using generics (# 7057)
> a87e923 channelz: fix missing Target on SubChannel type (# 7189)
> 273fe14 *: fix typos (# 7178)
> c7c8aa8 xds/internal: Replace calls to `Debugf` with `V(2)` checks and `Infof` (# 7180)
> 796c615 grpc: update clientStreamAttempt context with transport context (# 7096)
> e4a6ce3 Add atollena to MAINTAINERS.md (# 7126)
> b433b94 advancedtls: Rename RevocationConfig (# 7151)
> 5ab1c1a advancedtls: Add notes about required vs. optional for FileWatcherOptions (# 7165)
> 1e8b9b7 stats/opentelemetry: Add OpenTelemetry instrumentation component (# 7166)
> dd953fd examples: fix the quickstart link in the routeguide example (# 7162)
> 750e1de examples: improve grammar in the interceptor example (# 7163)
> 4e8f9d4 advancedtls: fix docstring for VerificationResults (# 7168)
> 5a24fc1 xds/internal/xdsclient/xdsresource: Preallocate VirtualHost slice correctly (# 7157)
> cb9c22d vet: run staticcheck for all sub modules (# 7155)
> d75b5e2 advancedtls: Rename custom verification function APIs (# 7140)
> 34de5cf stats/opencensus: Handle PickerUpdated to avoid "Received unexpected stats" error (# 7153)
> 34c7675 chore: fix function names in comment (# 7117)
> 5fe2e74 advancedtls: Rename VType (# 7149)
> 09e6fdd Update docs and examples and tests to use NewClient instead of Dial (# 7068)
> 9cf408e *: fix regenerate.sh (# 7139)
> 5e0fa76 transport: make nextID accessed inside t.mu only (# 7148)
> 54e0a13 transport: misc cleanups (# 7147)
> 81d3f06 xds/internal/xdsclient/xdslbregistry: remove unused call to type url (# 7130)
> f268126 Send GOAWAY to server on Client Transport Shutdown (# 7015)
> 431436d examples: Add custom load balancer example (# 6691)
> fc8da03 advancedtls: unexport parts of API not meant to be public (# 7118)
> 006e2ba client: Drop two calls to `pretty.ToJSON` and move code outside of lock (# 7132)
> a2f8e61 cmd/protoc-gen-go-grpc: reuse route_guide_grpc.pb.go as golden file (# 7134)
> 0c6d80c chore: fix lint (# 7133)
> b37cd81 xds: Process telemetry labels from CDS in xDS Balancers (# 7116)
> a4afd4d deps: remove dependency of github.com/golang/protobuf from main module (# 7122)
> afaa301 pb.go: regenerate (# 7123)
> 664e852 stats: mark InPayload.Data and OutPayload.Data for deletion (experimental) (# 7121)
> adf976b xds: remove -v when running xds e2e tests (# 7120)
> 308dbc4 xds/internal/xdsclient: Process string metadata in CDS for com.google.csm.telemetry_labels (# 7085)
> 554f107 Makefile: perfect PHONY (# 7076)
> 0baa668 test/kokoro: Migrate PSM Interop to Artifact Registry (# 7102)
> ec257b4 channelz: pass parent pointer instead of parent ID to RegisterSubChannel (# 7101)
> 6fbcd8a cmd/protoc-gen-go-grpc: add change detector test (# 7072)
> eb4e411 vet: split vet-proto from vet.sh (# 7099)
> 28cccf3 pb.go: regenerate (# 7098)
> 879414f deps: move from github.com/golang/protobuf to google.golang.org/protobuf/proto (# 7059)
> 8444ae0 resolver/dns: Add SetMinResolutionInterval Option (# 6962)
> 59be823 grpc: Deprecate WithBlock, WithReturnConnectionError, FailOnNonTempDialError (# 7097)
> c31cec3 Fix: error message using correct keepalive config value (# 7038)
> f1cf6bf *: update http2 dependency (# 7081)
> b7346ae channelz: fix race accessing channelMap without lock (# 7079)
> 4ec8307 cmd/protoc-gen-go-grpc: replace usages of deprecated API (# 7071)
> feb968b build(deps): bump the github-actions group with 2 updates (# 7069)
> 17d1039 grpc: Export header list sizes in DialOption and ServerOption (# 7033)
> ba1bf9e deps: update dependencies for all modules (# 7061)
> 57e4391 googlec2p: use the bootstrap parsing code to generate parsed bootstrap config instead of handcrafting it (# 7040)
> fc3f327 channelz: refactor to move proto API to a separate package (# 7065)
> b78c0eb examples: Update features/encryption/README.md file (# 7045)
> c003fdf channelz: add LocalAddr to listen sockets and test (# 7062)
> a975978 cmd/protoc-gen-go-grpc: don't emit const blocks for services with no methods (# 7055)
> eb5828b protoc: Change protoc to include generated call option (# 6960)
> cce1632 Change version to 1.64.0-dev (# 7052)
bumping knative.dev/eventing 1572967...0e14da4:
> 0e14da4 fix(test): the attribute filter transform test correctly compares slices now (# 7931)
> 5355171 Fix trust bundle propagation (# 7924)
> 15be248 CrossNamespace: Data Plane Changes for Broker Filter (# 7913)
> 34f9e43 CrossNamespace: Control Plane Changes for Trigger (# 7889)
> 308e6b6 SubjectAccessReviews resources correction (# 7925)
> 9cdc7ba CrossNamespace: Update knsubscribe permissions (# 7926)
> dbaaedc [main] Update actions (# 7923)
> 3ea1900 [main] Upgrade to latest dependencies (# 7922)
> 3189fc2 Add attribute filter transform function (# 7909)
> 3541408 Make transport-encryption a Beta feature (# 7915)
> 884f0da Adding uname name mapping for x86_64 in hack/install.sh (# 7917)
> 6b6f6d1 Sequence and Parallel: announce correct OIDC identities in authstatus (# 7902)
> 58d7920 Fix IMC metrics for transport encryption (# 7904)
> 4358574 CrossNamespace: Testing Code Style (# 7918)
> 4951b74 [main] Upgrade to latest dependencies (# 7920)
bumping knative.dev/networking 25012a4...1d0137a:
> 1d0137a upgrade to latest dependencies (# 984)
> 507209b Update actions (# 982)
> 4e598f4 upgrade to latest dependencies (# 981)
> b31855c upgrade to latest dependencies (# 980)
bumping google.golang.org/api 6feeaaf...4b79cc4:
> 4b79cc4 chore(main): release 0.181.0 (# 2582)
> c3f4828 feat(all): auto-regenerate discovery clients (# 2589)
> 7d13175 chore: update min version to 1.20 (# 2588)
> 86c9521 feat(all): auto-regenerate discovery clients (# 2587)
> afc4685 feat(all): auto-regenerate discovery clients (# 2586)
> 4177d21 chore(all): update all (# 2584)
> e35f76f feat(all): auto-regenerate discovery clients (# 2585)
> 7b18e5d feat(all): auto-regenerate discovery clients (# 2583)
> 6923ec8 feat(all): auto-regenerate discovery clients (# 2581)
bumping knative.dev/client-pkg dfb0087...2d1c4c8:
> 2d1c4c8 Update actions (# 184)
bumping google.golang.org/genproto/googleapis/rpc 8cf5692...0867130:
> 0867130 chore(all): auto-regenerate .pb.go files (# 1125)
> 024948a chore(all): update all (# 1126)
> 6275950 chore(all): auto-regenerate .pb.go files (# 1124)
> b8a5c65 chore(all): update all (# 1123)
bumping google.golang.org/genproto/googleapis/api 8c6c420...b8a5c65:
> b8a5c65 chore(all): update all (# 1123)
> 8cf5692 chore(all): update all (# 1122)
bumping knative.dev/pkg b1fd04d...99e1685:
> 99e1685 Bump google.golang.org/api from 0.180.0 to 0.181.0 (# 3041)
> b5507d9 Bump google.golang.org/grpc from 1.63.2 to 1.64.0 (# 3040)
> a6bf0be Bump cloud.google.com/go/storage from 1.40.0 to 1.41.0 (# 3039)
> 4a9c38d Update actions (# 3037)
> 11a3d46 Add composite ConfigStore to combine multiple ConfigStore (# 3027)
bumping knative.dev/serving 3789ff9...a0a1ac7:
> a0a1ac7 Update net-gateway-api nightly (# 15228)
> 93c3c79 upgrade to latest dependencies (# 15224)
> 3aa9210 Update net-kourier nightly (# 15219)
> 0d0d1e0 Update net-gateway-api nightly (# 15218)
> c9b17b2 Update net-istio nightly (# 15220)
> 639f7aa Update net-istio nightly (# 15213)
> 3b35f54 change private K8s service to be a headless service (# 15170)
> f2c7238 Update actions (# 15215)
> 985cf2b Update net-gateway-api nightly (# 15214)
> 38e22f9 Update net-kourier nightly (# 15212)
> 11792fc Update net-kourier nightly (# 15206)
> 0c301bb upgrade to latest dependencies (# 15209)
> 36d41ca Update net-gateway-api nightly (# 15205)
> 5624a46 Update net-istio nightly (# 15207)
> 40088e3 upgrade to latest dependencies (# 15201)
> ac5e504 Add e2e test for Contour when CORS policy is enabled (# 15188)
Signed-off-by: Knative Automation <automation@knative.team>
This commit is contained in:
parent
c33efaa4ec
commit
db1088227e
18
go.mod
18
go.mod
|
|
@ -20,12 +20,12 @@ require (
|
|||
k8s.io/cli-runtime v0.29.2
|
||||
k8s.io/client-go v0.29.2
|
||||
k8s.io/code-generator v0.29.2
|
||||
knative.dev/client-pkg v0.0.0-20240507014237-dfb0087247ac
|
||||
knative.dev/eventing v0.41.1-0.20240510202101-157296784e29
|
||||
knative.dev/client-pkg v0.0.0-20240516132600-2d1c4c811240
|
||||
knative.dev/eventing v0.41.1-0.20240521145106-0e14da444476
|
||||
knative.dev/hack v0.0.0-20240507013718-68e3bfb39d11
|
||||
knative.dev/networking v0.0.0-20240508055612-25012a498278
|
||||
knative.dev/pkg v0.0.0-20240513091600-b1fd04d5c458
|
||||
knative.dev/serving v0.41.1-0.20240509134134-3789ff9cc0f0
|
||||
knative.dev/networking v0.0.0-20240521183848-1d0137a18a68
|
||||
knative.dev/pkg v0.0.0-20240521083825-99e1685a7997
|
||||
knative.dev/serving v0.41.1-0.20240522123807-a0a1ac776600
|
||||
sigs.k8s.io/yaml v1.4.0
|
||||
)
|
||||
|
||||
|
|
@ -112,10 +112,10 @@ require (
|
|||
golang.org/x/time v0.5.0 // indirect
|
||||
golang.org/x/tools v0.21.0 // indirect
|
||||
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
|
||||
google.golang.org/api v0.180.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240415180920-8c6c420018be // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 // indirect
|
||||
google.golang.org/grpc v1.63.2 // indirect
|
||||
google.golang.org/api v0.181.0 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 // indirect
|
||||
google.golang.org/grpc v1.64.0 // indirect
|
||||
google.golang.org/protobuf v1.34.1 // indirect
|
||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
|
|
|
|||
36
go.sum
36
go.sum
|
|
@ -689,8 +689,8 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513
|
|||
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
|
||||
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
|
||||
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
|
||||
google.golang.org/api v0.180.0 h1:M2D87Yo0rGBPWpo1orwfCLehUUL6E7/TYe5gvMQWDh4=
|
||||
google.golang.org/api v0.180.0/go.mod h1:51AiyoEg1MJPSZ9zvklA8VnRILPXxn1iVen9v25XHAE=
|
||||
google.golang.org/api v0.181.0 h1:rPdjwnWgiPPOJx3IcSAQ2III5aX5tCer6wMpa/xmZi4=
|
||||
google.golang.org/api v0.181.0/go.mod h1:MnQ+M0CFsfUwA5beZ+g/vCBCPXvtmZwRz2qzZk8ih1k=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
|
|
@ -736,10 +736,10 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D
|
|||
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240415180920-8c6c420018be h1:Zz7rLWqp0ApfsR/l7+zSHhY3PMiH2xqgxlfYfAfNpoU=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240415180920-8c6c420018be/go.mod h1:dvdCTIoAGbkWbcIKBniID56/7XHTt6WfxXNMxuziJ+w=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 h1:DujSIu+2tC9Ht0aPNA7jgj23Iq8Ewi5sgkQ++wdvonE=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae h1:AH34z6WAGVNkllnKs5raNq3yRq93VnjBG6rpfub/jYk=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae/go.mod h1:FfiGhwUm6CJviekPrc0oJ+7h29e+DmWU6UtjX0ZvI7Y=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8 h1:mxSlqyb8ZAHsYDCfiXN1EDdNTdvjUJSLY+OnAUtYNYA=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8/go.mod h1:I7Y+G38R2bu5j1aLzfFmQfTcU/WnFuqDwLZAbvKTKpM=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
|
|
@ -756,8 +756,8 @@ google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM
|
|||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
|
||||
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
|
||||
google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
|
||||
google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
|
||||
google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY=
|
||||
google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
|
|
@ -828,18 +828,18 @@ k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/A
|
|||
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
|
||||
k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
|
||||
k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||
knative.dev/client-pkg v0.0.0-20240507014237-dfb0087247ac h1:op3G2Ovj0bVF+pEKHTeUr42MQtftXe5jJ9j2QlN0d9U=
|
||||
knative.dev/client-pkg v0.0.0-20240507014237-dfb0087247ac/go.mod h1:KK2I9/U/k24Y7l4OwmluGEtV5CWoccjewRauaTJLOr4=
|
||||
knative.dev/eventing v0.41.1-0.20240510202101-157296784e29 h1:vRw4IL0C9wFo8IhOxGh+Fc0AnFX+MkCRl0P3k5voCNU=
|
||||
knative.dev/eventing v0.41.1-0.20240510202101-157296784e29/go.mod h1:Sstqyyuh67wF2tnbIR9gQ+lkTQmQpcLUw6tCNz/24gU=
|
||||
knative.dev/client-pkg v0.0.0-20240516132600-2d1c4c811240 h1:es51YNw0mjgN/q0hRlE0BCaVZD3WMQ5dWipuS6OvmpM=
|
||||
knative.dev/client-pkg v0.0.0-20240516132600-2d1c4c811240/go.mod h1:KK2I9/U/k24Y7l4OwmluGEtV5CWoccjewRauaTJLOr4=
|
||||
knative.dev/eventing v0.41.1-0.20240521145106-0e14da444476 h1:JHwf/QA0kLFOSdFZhjqugr69SK3snXmfr5A/veSJcIk=
|
||||
knative.dev/eventing v0.41.1-0.20240521145106-0e14da444476/go.mod h1:bVJEkZeKJwCTFn/fh01DpaYknn8JsxeaDSQ/htciKKs=
|
||||
knative.dev/hack v0.0.0-20240507013718-68e3bfb39d11 h1:CYoD72R8/R35REjeY2nnWfBak+Q3f+NxXwEfwcID1eU=
|
||||
knative.dev/hack v0.0.0-20240507013718-68e3bfb39d11/go.mod h1:yk2OjGDsbEnQjfxdm0/HJKS2WqTLEFg/N6nUs6Rqx3Q=
|
||||
knative.dev/networking v0.0.0-20240508055612-25012a498278 h1:uToI/YqBS1oQ0XIgcNXpAJ0qdeghBN/rREPYN/nwtNs=
|
||||
knative.dev/networking v0.0.0-20240508055612-25012a498278/go.mod h1:ySd8prgXDd7V5wEE80T800yeBOfVncAWp3nFTbZl34I=
|
||||
knative.dev/pkg v0.0.0-20240513091600-b1fd04d5c458 h1:ESofRToj3xFQfKd5rlwd3EHd7G/CbVpchrUsw1HzI1w=
|
||||
knative.dev/pkg v0.0.0-20240513091600-b1fd04d5c458/go.mod h1:fkgcK/71v1QSJza7pCOxtuk7zSsWYPQ7eiuX8M2wXxs=
|
||||
knative.dev/serving v0.41.1-0.20240509134134-3789ff9cc0f0 h1:0CKFqFj8/7LZC4TX/VCbrT3d3J7BJKRIay3jt49D+UE=
|
||||
knative.dev/serving v0.41.1-0.20240509134134-3789ff9cc0f0/go.mod h1:5E+DXwl+tmCpfKVV6Qmn3n6O9q5FPeTHtY5BP0P5Oes=
|
||||
knative.dev/networking v0.0.0-20240521183848-1d0137a18a68 h1:Piy1jJ5r3pet0cJV5An69hMTKUfXmiQgfEFThaAfQlA=
|
||||
knative.dev/networking v0.0.0-20240521183848-1d0137a18a68/go.mod h1:LFhDu22ymaEZFnFBUoSoo4Y4l+KWXujH5yQQNOaEwBc=
|
||||
knative.dev/pkg v0.0.0-20240521083825-99e1685a7997 h1:MN/u8ivos957WdihUjKfFw1Qv9HZ3+pe4TOwdYQiB2Q=
|
||||
knative.dev/pkg v0.0.0-20240521083825-99e1685a7997/go.mod h1:GHFUP1wtD/bR/c02QADqaAK3odDJh1ddBMvXhq/goy8=
|
||||
knative.dev/serving v0.41.1-0.20240522123807-a0a1ac776600 h1:rUqIiBuGn69JqCmXmoMCGuEWLhbbAgFhxC0ovGe9qQc=
|
||||
knative.dev/serving v0.41.1-0.20240522123807-a0a1ac776600/go.mod h1:O9ZmWNdd2yzvLW//zfMgcD0jz9FzL4B+CRxf+DXNM08=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// Copyright 2022 Google LLC
|
||||
// Copyright 2024 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.26.0
|
||||
// protoc v3.21.9
|
||||
// protoc v4.24.4
|
||||
// source: google/rpc/status.proto
|
||||
|
||||
package status
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ How to get your contributions merged smoothly and quickly.
|
|||
- **All tests need to be passing** before your change can be merged. We
|
||||
recommend you **run tests locally** before creating your PR to catch breakages
|
||||
early on.
|
||||
- `VET_SKIP_PROTO=1 ./vet.sh` to catch vet errors
|
||||
- `./scripts/vet.sh` to catch vet errors
|
||||
- `go test -cpu 1,4 -timeout 7m ./...` to run the tests
|
||||
- `go test -race -cpu 1,4 -timeout 7m ./...` to run tests in race mode
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ for general contribution guidelines.
|
|||
|
||||
## Maintainers (in alphabetical order)
|
||||
|
||||
- [atollena](https://github.com/atollena), Datadog, Inc.
|
||||
- [cesarghali](https://github.com/cesarghali), Google LLC
|
||||
- [dfawley](https://github.com/dfawley), Google LLC
|
||||
- [easwars](https://github.com/easwars), Google LLC
|
||||
|
|
|
|||
|
|
@ -30,17 +30,20 @@ testdeps:
|
|||
GO111MODULE=on go get -d -v -t google.golang.org/grpc/...
|
||||
|
||||
vet: vetdeps
|
||||
./vet.sh
|
||||
./scripts/vet.sh
|
||||
|
||||
vetdeps:
|
||||
./vet.sh -install
|
||||
./scripts/vet.sh -install
|
||||
|
||||
.PHONY: \
|
||||
all \
|
||||
build \
|
||||
clean \
|
||||
deps \
|
||||
proto \
|
||||
test \
|
||||
testsubmodule \
|
||||
testrace \
|
||||
testdeps \
|
||||
vet \
|
||||
vetdeps
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.32.0
|
||||
// protoc-gen-go v1.33.0
|
||||
// protoc v4.25.2
|
||||
// source: grpc/binlog/v1/binarylog.proto
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,6 @@ import (
|
|||
"google.golang.org/grpc/internal/channelz"
|
||||
"google.golang.org/grpc/internal/grpcsync"
|
||||
"google.golang.org/grpc/internal/idle"
|
||||
"google.golang.org/grpc/internal/pretty"
|
||||
iresolver "google.golang.org/grpc/internal/resolver"
|
||||
"google.golang.org/grpc/internal/transport"
|
||||
"google.golang.org/grpc/keepalive"
|
||||
|
|
@ -121,8 +120,9 @@ func (dcs *defaultConfigSelector) SelectConfig(rpcInfo iresolver.RPCInfo) (*ires
|
|||
// https://github.com/grpc/grpc/blob/master/doc/naming.md. e.g. to use dns
|
||||
// resolver, a "dns:///" prefix should be applied to the target.
|
||||
//
|
||||
// The DialOptions returned by WithBlock, WithTimeout, and
|
||||
// WithReturnConnectionError are ignored by this function.
|
||||
// The DialOptions returned by WithBlock, WithTimeout,
|
||||
// WithReturnConnectionError, and FailOnNonTempDialError are ignored by this
|
||||
// function.
|
||||
func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error) {
|
||||
cc := &ClientConn{
|
||||
target: target,
|
||||
|
|
@ -196,6 +196,8 @@ func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error)
|
|||
}
|
||||
|
||||
// Dial calls DialContext(context.Background(), target, opts...).
|
||||
//
|
||||
// Deprecated: use NewClient instead. Will be supported throughout 1.x.
|
||||
func Dial(target string, opts ...DialOption) (*ClientConn, error) {
|
||||
return DialContext(context.Background(), target, opts...)
|
||||
}
|
||||
|
|
@ -209,6 +211,8 @@ func Dial(target string, opts ...DialOption) (*ClientConn, error) {
|
|||
// "passthrough" for backward compatibility. This distinction should not matter
|
||||
// to most users, but could matter to legacy users that specify a custom dialer
|
||||
// and expect it to receive the target string directly.
|
||||
//
|
||||
// Deprecated: use NewClient instead. Will be supported throughout 1.x.
|
||||
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
|
||||
// waiting for the first rpc.
|
||||
|
|
@ -838,6 +842,9 @@ func (cc *ClientConn) newAddrConnLocked(addrs []resolver.Address, opts balancer.
|
|||
stateChan: make(chan struct{}),
|
||||
}
|
||||
ac.ctx, ac.cancel = context.WithCancel(cc.ctx)
|
||||
// Start with our address set to the first address; this may be updated if
|
||||
// we connect to different addresses.
|
||||
ac.channelz.ChannelMetrics.Target.Store(&addrs[0].Addr)
|
||||
|
||||
channelz.AddTraceEvent(logger, ac.channelz, 0, &channelz.TraceEvent{
|
||||
Desc: "Subchannel created",
|
||||
|
|
@ -929,10 +936,14 @@ func equalAddresses(a, b []resolver.Address) bool {
|
|||
// updateAddrs updates ac.addrs with the new addresses list and handles active
|
||||
// connections or connection attempts.
|
||||
func (ac *addrConn) updateAddrs(addrs []resolver.Address) {
|
||||
ac.mu.Lock()
|
||||
channelz.Infof(logger, ac.channelz, "addrConn: updateAddrs curAddr: %v, addrs: %v", pretty.ToJSON(ac.curAddr), pretty.ToJSON(addrs))
|
||||
|
||||
addrs = copyAddressesWithoutBalancerAttributes(addrs)
|
||||
limit := len(addrs)
|
||||
if limit > 5 {
|
||||
limit = 5
|
||||
}
|
||||
channelz.Infof(logger, ac.channelz, "addrConn: updateAddrs addrs (%d of %d): %v", limit, len(addrs), addrs[:limit])
|
||||
|
||||
ac.mu.Lock()
|
||||
if equalAddresses(ac.addrs, addrs) {
|
||||
ac.mu.Unlock()
|
||||
return
|
||||
|
|
@ -1167,6 +1178,10 @@ type addrConn struct {
|
|||
// is received, transport is closed, ac has been torn down).
|
||||
transport transport.ClientTransport // The current transport.
|
||||
|
||||
// This mutex is used on the RPC path, so its usage should be minimized as
|
||||
// much as possible.
|
||||
// TODO: Find a lock-free way to retrieve the transport and state from the
|
||||
// addrConn.
|
||||
mu sync.Mutex
|
||||
curAddr resolver.Address // The current address.
|
||||
addrs []resolver.Address // All addresses that the resolver resolved to.
|
||||
|
|
@ -1292,6 +1307,7 @@ func (ac *addrConn) resetTransport() {
|
|||
func (ac *addrConn) tryAllAddrs(ctx context.Context, addrs []resolver.Address, connectDeadline time.Time) error {
|
||||
var firstConnErr error
|
||||
for _, addr := range addrs {
|
||||
ac.channelz.ChannelMetrics.Target.Store(&addr.Addr)
|
||||
if ctx.Err() != nil {
|
||||
return errConnClosing
|
||||
}
|
||||
|
|
@ -1739,7 +1755,7 @@ func encodeAuthority(authority string) string {
|
|||
return false
|
||||
case '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=': // Subdelim characters
|
||||
return false
|
||||
case ':', '[', ']', '@': // Authority related delimeters
|
||||
case ':', '[', ']', '@': // Authority related delimiters
|
||||
return false
|
||||
}
|
||||
// Everything else must be escaped.
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This script serves as an example to demonstrate how to generate the gRPC-Go
|
||||
# interface and the related messages from .proto file.
|
||||
#
|
||||
# It assumes the installation of i) Google proto buffer compiler at
|
||||
# https://github.com/google/protobuf (after v2.6.1) and ii) the Go codegen
|
||||
# plugin at https://github.com/golang/protobuf (after 2015-02-20). If you have
|
||||
# not, please install them first.
|
||||
#
|
||||
# We recommend running this script at $GOPATH/src.
|
||||
#
|
||||
# If this is not what you need, feel free to make your own scripts. Again, this
|
||||
# script is for demonstration purpose.
|
||||
#
|
||||
proto=$1
|
||||
protoc --go_out=plugins=grpc:. $proto
|
||||
|
|
@ -235,7 +235,7 @@ func (c *Code) UnmarshalJSON(b []byte) error {
|
|||
|
||||
if ci, err := strconv.ParseUint(string(b), 10, 32); err == nil {
|
||||
if ci >= _maxCode {
|
||||
return fmt.Errorf("invalid code: %q", ci)
|
||||
return fmt.Errorf("invalid code: %d", ci)
|
||||
}
|
||||
|
||||
*c = Code(ci)
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ import (
|
|||
|
||||
"google.golang.org/grpc/attributes"
|
||||
icredentials "google.golang.org/grpc/internal/credentials"
|
||||
"google.golang.org/protobuf/protoadapt"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// PerRPCCredentials defines the common interface for the credentials which need to
|
||||
|
|
@ -237,7 +237,7 @@ func ClientHandshakeInfoFromContext(ctx context.Context) ClientHandshakeInfo {
|
|||
}
|
||||
|
||||
// CheckSecurityLevel checks if a connection's security level is greater than or equal to the specified one.
|
||||
// It returns success if 1) the condition is satisified or 2) AuthInfo struct does not implement GetCommonAuthInfo() method
|
||||
// It returns success if 1) the condition is satisfied or 2) AuthInfo struct does not implement GetCommonAuthInfo() method
|
||||
// or 3) CommonAuthInfo.SecurityLevel has an invalid zero value. For 2) and 3), it is for the purpose of backward-compatibility.
|
||||
//
|
||||
// This API is experimental.
|
||||
|
|
@ -287,5 +287,5 @@ type ChannelzSecurityValue interface {
|
|||
type OtherChannelzSecurityValue struct {
|
||||
ChannelzSecurityValue
|
||||
Name string
|
||||
Value protoadapt.MessageV1
|
||||
Value proto.Message
|
||||
}
|
||||
|
|
|
|||
|
|
@ -300,6 +300,9 @@ func withBackoff(bs internalbackoff.Strategy) DialOption {
|
|||
//
|
||||
// Use of this feature is not recommended. For more information, please see:
|
||||
// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md
|
||||
//
|
||||
// Deprecated: this DialOption is not supported by NewClient.
|
||||
// Will be supported throughout 1.x.
|
||||
func WithBlock() DialOption {
|
||||
return newFuncDialOption(func(o *dialOptions) {
|
||||
o.block = true
|
||||
|
|
@ -314,10 +317,8 @@ func WithBlock() DialOption {
|
|||
// Use of this feature is not recommended. For more information, please see:
|
||||
// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md
|
||||
//
|
||||
// # Experimental
|
||||
//
|
||||
// Notice: This API is EXPERIMENTAL and may be changed or removed in a
|
||||
// later release.
|
||||
// Deprecated: this DialOption is not supported by NewClient.
|
||||
// Will be supported throughout 1.x.
|
||||
func WithReturnConnectionError() DialOption {
|
||||
return newFuncDialOption(func(o *dialOptions) {
|
||||
o.block = true
|
||||
|
|
@ -387,8 +388,8 @@ func WithCredentialsBundle(b credentials.Bundle) DialOption {
|
|||
// WithTimeout returns a DialOption that configures a timeout for dialing a
|
||||
// ClientConn initially. This is valid if and only if WithBlock() is present.
|
||||
//
|
||||
// Deprecated: use DialContext instead of Dial and context.WithTimeout
|
||||
// instead. Will be supported throughout 1.x.
|
||||
// Deprecated: this DialOption is not supported by NewClient.
|
||||
// Will be supported throughout 1.x.
|
||||
func WithTimeout(d time.Duration) DialOption {
|
||||
return newFuncDialOption(func(o *dialOptions) {
|
||||
o.timeout = d
|
||||
|
|
@ -470,9 +471,8 @@ func withBinaryLogger(bl binarylog.Logger) DialOption {
|
|||
// Use of this feature is not recommended. For more information, please see:
|
||||
// https://github.com/grpc/grpc-go/blob/master/Documentation/anti-patterns.md
|
||||
//
|
||||
// # Experimental
|
||||
//
|
||||
// Notice: This API is EXPERIMENTAL and may be changed or removed in a
|
||||
// Deprecated: this DialOption is not supported by NewClient.
|
||||
// This API may be changed or removed in a
|
||||
// later release.
|
||||
func FailOnNonTempDialError(f bool) DialOption {
|
||||
return newFuncDialOption(func(o *dialOptions) {
|
||||
|
|
@ -601,12 +601,22 @@ func WithDisableRetry() DialOption {
|
|||
})
|
||||
}
|
||||
|
||||
// MaxHeaderListSizeDialOption is a DialOption that specifies the maximum
|
||||
// (uncompressed) size of header list that the client is prepared to accept.
|
||||
type MaxHeaderListSizeDialOption struct {
|
||||
MaxHeaderListSize uint32
|
||||
}
|
||||
|
||||
func (o MaxHeaderListSizeDialOption) apply(do *dialOptions) {
|
||||
do.copts.MaxHeaderListSize = &o.MaxHeaderListSize
|
||||
}
|
||||
|
||||
// WithMaxHeaderListSize returns a DialOption that specifies the maximum
|
||||
// (uncompressed) size of header list that the client is prepared to accept.
|
||||
func WithMaxHeaderListSize(s uint32) DialOption {
|
||||
return newFuncDialOption(func(o *dialOptions) {
|
||||
o.copts.MaxHeaderListSize = &s
|
||||
})
|
||||
return MaxHeaderListSizeDialOption{
|
||||
MaxHeaderListSize: s,
|
||||
}
|
||||
}
|
||||
|
||||
// WithDisableHealthCheck disables the LB channel health checking for all
|
||||
|
|
@ -648,7 +658,7 @@ func defaultDialOptions() dialOptions {
|
|||
}
|
||||
}
|
||||
|
||||
// withGetMinConnectDeadline specifies the function that clientconn uses to
|
||||
// withMinConnectDeadline specifies the function that clientconn uses to
|
||||
// get minConnectDeadline. This can be used to make connection attempts happen
|
||||
// faster/slower.
|
||||
//
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.32.0
|
||||
// protoc-gen-go v1.33.0
|
||||
// protoc v4.25.2
|
||||
// source: grpc/health/v1/health.proto
|
||||
|
||||
|
|
|
|||
|
|
@ -32,8 +32,8 @@ import (
|
|||
|
||||
// This is a compile-time assertion to ensure that this generated file
|
||||
// is compatible with the grpc package it is being compiled against.
|
||||
// Requires gRPC-Go v1.32.0 or later.
|
||||
const _ = grpc.SupportPackageIsVersion7
|
||||
// Requires gRPC-Go v1.62.0 or later.
|
||||
const _ = grpc.SupportPackageIsVersion8
|
||||
|
||||
const (
|
||||
Health_Check_FullMethodName = "/grpc.health.v1.Health/Check"
|
||||
|
|
@ -81,8 +81,9 @@ func NewHealthClient(cc grpc.ClientConnInterface) HealthClient {
|
|||
}
|
||||
|
||||
func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) {
|
||||
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||
out := new(HealthCheckResponse)
|
||||
err := c.cc.Invoke(ctx, Health_Check_FullMethodName, in, out, opts...)
|
||||
err := c.cc.Invoke(ctx, Health_Check_FullMethodName, in, out, cOpts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -90,11 +91,12 @@ func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts .
|
|||
}
|
||||
|
||||
func (c *healthClient) Watch(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (Health_WatchClient, error) {
|
||||
stream, err := c.cc.NewStream(ctx, &Health_ServiceDesc.Streams[0], Health_Watch_FullMethodName, opts...)
|
||||
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||
stream, err := c.cc.NewStream(ctx, &Health_ServiceDesc.Streams[0], Health_Watch_FullMethodName, cOpts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
x := &healthWatchClient{stream}
|
||||
x := &healthWatchClient{ClientStream: stream}
|
||||
if err := x.ClientStream.SendMsg(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -198,7 +200,7 @@ func _Health_Watch_Handler(srv interface{}, stream grpc.ServerStream) error {
|
|||
if err := stream.RecvMsg(m); err != nil {
|
||||
return err
|
||||
}
|
||||
return srv.(HealthServer).Watch(m, &healthWatchServer{stream})
|
||||
return srv.(HealthServer).Watch(m, &healthWatchServer{ServerStream: stream})
|
||||
}
|
||||
|
||||
type Health_WatchServer interface {
|
||||
|
|
|
|||
|
|
@ -75,7 +75,6 @@ func ParseConfig(cfg json.RawMessage) (serviceconfig.LoadBalancingConfig, error)
|
|||
if err != nil {
|
||||
return nil, fmt.Errorf("error parsing config for policy %q: %v", name, err)
|
||||
}
|
||||
|
||||
return &lbConfig{childBuilder: builder, childConfig: cfg}, nil
|
||||
}
|
||||
|
||||
|
|
|
|||
1
vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
generated
vendored
1
vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
generated
vendored
|
|
@ -169,7 +169,6 @@ func (gsb *Balancer) latestBalancer() *balancerWrapper {
|
|||
func (gsb *Balancer) UpdateClientConnState(state balancer.ClientConnState) error {
|
||||
// The resolver data is only relevant to the most recent LB Policy.
|
||||
balToUpdate := gsb.latestBalancer()
|
||||
|
||||
gsbCfg, ok := state.BalancerConfig.(*lbConfig)
|
||||
if ok {
|
||||
// Switch to the child in the config unless it is already active.
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ type TruncatingMethodLogger struct {
|
|||
callID uint64
|
||||
idWithinCallGen *callIDGenerator
|
||||
|
||||
sink Sink // TODO(blog): make this plugable.
|
||||
sink Sink // TODO(blog): make this pluggable.
|
||||
}
|
||||
|
||||
// NewTruncatingMethodLogger returns a new truncating method logger.
|
||||
|
|
@ -80,7 +80,7 @@ func NewTruncatingMethodLogger(h, m uint64) *TruncatingMethodLogger {
|
|||
callID: idGen.next(),
|
||||
idWithinCallGen: &callIDGenerator{},
|
||||
|
||||
sink: DefaultSink, // TODO(blog): make it plugable.
|
||||
sink: DefaultSink, // TODO(blog): make it pluggable.
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -397,7 +397,7 @@ func metadataKeyOmit(key string) bool {
|
|||
switch key {
|
||||
case "lb-token", ":path", ":authority", "content-encoding", "content-type", "user-agent", "te":
|
||||
return true
|
||||
case "grpc-trace-bin": // grpc-trace-bin is special because it's visiable to users.
|
||||
case "grpc-trace-bin": // grpc-trace-bin is special because it's visible to users.
|
||||
return false
|
||||
}
|
||||
return strings.HasPrefix(key, "grpc-")
|
||||
|
|
|
|||
|
|
@ -28,9 +28,6 @@ import (
|
|||
var (
|
||||
// TXTErrIgnore is set if TXT errors should be ignored ("GRPC_GO_IGNORE_TXT_ERRORS" is not "false").
|
||||
TXTErrIgnore = boolFromEnv("GRPC_GO_IGNORE_TXT_ERRORS", true)
|
||||
// AdvertiseCompressors is set if registered compressor should be advertised
|
||||
// ("GRPC_GO_ADVERTISE_COMPRESSORS" is not "false").
|
||||
AdvertiseCompressors = boolFromEnv("GRPC_GO_ADVERTISE_COMPRESSORS", true)
|
||||
// RingHashCap indicates the maximum ring size which defaults to 4096
|
||||
// entries but may be overridden by setting the environment variable
|
||||
// "GRPC_RING_HASH_CAP". This does not override the default bounds
|
||||
|
|
|
|||
|
|
@ -20,8 +20,6 @@ package grpcutil
|
|||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"google.golang.org/grpc/internal/envconfig"
|
||||
)
|
||||
|
||||
// RegisteredCompressorNames holds names of the registered compressors.
|
||||
|
|
@ -40,8 +38,5 @@ func IsCompressorNameRegistered(name string) bool {
|
|||
// RegisteredCompressors returns a string of registered compressor names
|
||||
// separated by comma.
|
||||
func RegisteredCompressors() string {
|
||||
if !envconfig.AdvertiseCompressors {
|
||||
return ""
|
||||
}
|
||||
return strings.Join(RegisteredCompressorNames, ",")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,18 +41,24 @@ import (
|
|||
"google.golang.org/grpc/serviceconfig"
|
||||
)
|
||||
|
||||
// EnableSRVLookups controls whether the DNS resolver attempts to fetch gRPCLB
|
||||
// addresses from SRV records. Must not be changed after init time.
|
||||
var EnableSRVLookups = false
|
||||
var (
|
||||
// EnableSRVLookups controls whether the DNS resolver attempts to fetch gRPCLB
|
||||
// addresses from SRV records. Must not be changed after init time.
|
||||
EnableSRVLookups = false
|
||||
|
||||
// ResolvingTimeout specifies the maximum duration for a DNS resolution request.
|
||||
// If the timeout expires before a response is received, the request will be canceled.
|
||||
//
|
||||
// It is recommended to set this value at application startup. Avoid modifying this variable
|
||||
// after initialization as it's not thread-safe for concurrent modification.
|
||||
var ResolvingTimeout = 30 * time.Second
|
||||
// MinResolutionInterval is the minimum interval at which re-resolutions are
|
||||
// allowed. This helps to prevent excessive re-resolution.
|
||||
MinResolutionInterval = 30 * time.Second
|
||||
|
||||
var logger = grpclog.Component("dns")
|
||||
// ResolvingTimeout specifies the maximum duration for a DNS resolution request.
|
||||
// If the timeout expires before a response is received, the request will be canceled.
|
||||
//
|
||||
// It is recommended to set this value at application startup. Avoid modifying this variable
|
||||
// after initialization as it's not thread-safe for concurrent modification.
|
||||
ResolvingTimeout = 30 * time.Second
|
||||
|
||||
logger = grpclog.Component("dns")
|
||||
)
|
||||
|
||||
func init() {
|
||||
resolver.Register(NewBuilder())
|
||||
|
|
@ -208,7 +214,7 @@ func (d *dnsResolver) watcher() {
|
|||
// Success resolving, wait for the next ResolveNow. However, also wait 30
|
||||
// seconds at the very least to prevent constantly re-resolving.
|
||||
backoffIndex = 1
|
||||
waitTime = internal.MinResolutionRate
|
||||
waitTime = MinResolutionInterval
|
||||
select {
|
||||
case <-d.ctx.Done():
|
||||
return
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ import (
|
|||
|
||||
// NetResolver groups the methods on net.Resolver that are used by the DNS
|
||||
// resolver implementation. This allows the default net.Resolver instance to be
|
||||
// overidden from tests.
|
||||
// overridden from tests.
|
||||
type NetResolver interface {
|
||||
LookupHost(ctx context.Context, host string) (addrs []string, err error)
|
||||
LookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*net.SRV, err error)
|
||||
|
|
@ -50,10 +50,6 @@ var (
|
|||
|
||||
// The following vars are overridden from tests.
|
||||
var (
|
||||
// MinResolutionRate is the minimum rate at which re-resolutions are
|
||||
// allowed. This helps to prevent excessive re-resolution.
|
||||
MinResolutionRate = 30 * time.Second
|
||||
|
||||
// TimeAfterFunc is used by the DNS resolver to wait for the given duration
|
||||
// to elapse. In non-test code, this is implemented by time.After. In test
|
||||
// code, this can be used to control the amount of time the resolver is
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ type goAway struct {
|
|||
code http2.ErrCode
|
||||
debugData []byte
|
||||
headsUp bool
|
||||
closeConn error // if set, loopyWriter will exit, resulting in conn closure
|
||||
closeConn error // if set, loopyWriter will exit with this error
|
||||
}
|
||||
|
||||
func (*goAway) isTransportResponseFrame() bool { return false }
|
||||
|
|
@ -336,7 +336,7 @@ func (c *controlBuffer) put(it cbItem) error {
|
|||
return err
|
||||
}
|
||||
|
||||
func (c *controlBuffer) executeAndPut(f func(it any) bool, it cbItem) (bool, error) {
|
||||
func (c *controlBuffer) executeAndPut(f func() bool, it cbItem) (bool, error) {
|
||||
var wakeUp bool
|
||||
c.mu.Lock()
|
||||
if c.err != nil {
|
||||
|
|
@ -344,7 +344,7 @@ func (c *controlBuffer) executeAndPut(f func(it any) bool, it cbItem) (bool, err
|
|||
return false, c.err
|
||||
}
|
||||
if f != nil {
|
||||
if !f(it) { // f wasn't successful
|
||||
if !f() { // f wasn't successful
|
||||
c.mu.Unlock()
|
||||
return false, nil
|
||||
}
|
||||
|
|
@ -495,21 +495,22 @@ type loopyWriter struct {
|
|||
ssGoAwayHandler func(*goAway) (bool, error)
|
||||
}
|
||||
|
||||
func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator, conn net.Conn, logger *grpclog.PrefixLogger) *loopyWriter {
|
||||
func newLoopyWriter(s side, fr *framer, cbuf *controlBuffer, bdpEst *bdpEstimator, conn net.Conn, logger *grpclog.PrefixLogger, goAwayHandler func(*goAway) (bool, error)) *loopyWriter {
|
||||
var buf bytes.Buffer
|
||||
l := &loopyWriter{
|
||||
side: s,
|
||||
cbuf: cbuf,
|
||||
sendQuota: defaultWindowSize,
|
||||
oiws: defaultWindowSize,
|
||||
estdStreams: make(map[uint32]*outStream),
|
||||
activeStreams: newOutStreamList(),
|
||||
framer: fr,
|
||||
hBuf: &buf,
|
||||
hEnc: hpack.NewEncoder(&buf),
|
||||
bdpEst: bdpEst,
|
||||
conn: conn,
|
||||
logger: logger,
|
||||
side: s,
|
||||
cbuf: cbuf,
|
||||
sendQuota: defaultWindowSize,
|
||||
oiws: defaultWindowSize,
|
||||
estdStreams: make(map[uint32]*outStream),
|
||||
activeStreams: newOutStreamList(),
|
||||
framer: fr,
|
||||
hBuf: &buf,
|
||||
hEnc: hpack.NewEncoder(&buf),
|
||||
bdpEst: bdpEst,
|
||||
conn: conn,
|
||||
logger: logger,
|
||||
ssGoAwayHandler: goAwayHandler,
|
||||
}
|
||||
return l
|
||||
}
|
||||
|
|
|
|||
|
|
@ -114,11 +114,11 @@ type http2Client struct {
|
|||
streamQuota int64
|
||||
streamsQuotaAvailable chan struct{}
|
||||
waitingStreams uint32
|
||||
nextID uint32
|
||||
registeredCompressors string
|
||||
|
||||
// Do not access controlBuf with mu held.
|
||||
mu sync.Mutex // guard the following variables
|
||||
nextID uint32
|
||||
state transportState
|
||||
activeStreams map[uint32]*Stream
|
||||
// prevGoAway ID records the Last-Stream-ID in the previous GOAway frame.
|
||||
|
|
@ -408,10 +408,10 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts
|
|||
readerErrCh := make(chan error, 1)
|
||||
go t.reader(readerErrCh)
|
||||
defer func() {
|
||||
if err == nil {
|
||||
err = <-readerErrCh
|
||||
}
|
||||
if err != nil {
|
||||
// writerDone should be closed since the loopy goroutine
|
||||
// wouldn't have started in the case this function returns an error.
|
||||
close(t.writerDone)
|
||||
t.Close(err)
|
||||
}
|
||||
}()
|
||||
|
|
@ -458,8 +458,12 @@ func newHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts
|
|||
if err := t.framer.writer.Flush(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Block until the server preface is received successfully or an error occurs.
|
||||
if err = <-readerErrCh; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
go func() {
|
||||
t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger)
|
||||
t.loopy = newLoopyWriter(clientSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger, t.outgoingGoAwayHandler)
|
||||
if err := t.loopy.run(); !isIOError(err) {
|
||||
// Immediately close the connection, as the loopy writer returns
|
||||
// when there are no more active streams and we were draining (the
|
||||
|
|
@ -517,6 +521,17 @@ func (t *http2Client) getPeer() *peer.Peer {
|
|||
}
|
||||
}
|
||||
|
||||
// OutgoingGoAwayHandler writes a GOAWAY to the connection. Always returns (false, err) as we want the GoAway
|
||||
// to be the last frame loopy writes to the transport.
|
||||
func (t *http2Client) outgoingGoAwayHandler(g *goAway) (bool, error) {
|
||||
t.mu.Lock()
|
||||
defer t.mu.Unlock()
|
||||
if err := t.framer.fr.WriteGoAway(t.nextID-2, http2.ErrCodeNo, g.debugData); err != nil {
|
||||
return false, err
|
||||
}
|
||||
return false, g.closeConn
|
||||
}
|
||||
|
||||
func (t *http2Client) createHeaderFields(ctx context.Context, callHdr *CallHdr) ([]hpack.HeaderField, error) {
|
||||
aud := t.createAudience(callHdr)
|
||||
ri := credentials.RequestInfo{
|
||||
|
|
@ -781,7 +796,7 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream,
|
|||
firstTry := true
|
||||
var ch chan struct{}
|
||||
transportDrainRequired := false
|
||||
checkForStreamQuota := func(it any) bool {
|
||||
checkForStreamQuota := func() bool {
|
||||
if t.streamQuota <= 0 { // Can go negative if server decreases it.
|
||||
if firstTry {
|
||||
t.waitingStreams++
|
||||
|
|
@ -793,23 +808,24 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream,
|
|||
t.waitingStreams--
|
||||
}
|
||||
t.streamQuota--
|
||||
h := it.(*headerFrame)
|
||||
h.streamID = t.nextID
|
||||
t.nextID += 2
|
||||
|
||||
// Drain client transport if nextID > MaxStreamID which signals gRPC that
|
||||
// the connection is closed and a new one must be created for subsequent RPCs.
|
||||
transportDrainRequired = t.nextID > MaxStreamID
|
||||
|
||||
s.id = h.streamID
|
||||
s.fc = &inFlow{limit: uint32(t.initialWindowSize)}
|
||||
t.mu.Lock()
|
||||
if t.state == draining || t.activeStreams == nil { // Can be niled from Close().
|
||||
t.mu.Unlock()
|
||||
return false // Don't create a stream if the transport is already closed.
|
||||
}
|
||||
|
||||
hdr.streamID = t.nextID
|
||||
t.nextID += 2
|
||||
// Drain client transport if nextID > MaxStreamID which signals gRPC that
|
||||
// the connection is closed and a new one must be created for subsequent RPCs.
|
||||
transportDrainRequired = t.nextID > MaxStreamID
|
||||
|
||||
s.id = hdr.streamID
|
||||
s.fc = &inFlow{limit: uint32(t.initialWindowSize)}
|
||||
t.activeStreams[s.id] = s
|
||||
t.mu.Unlock()
|
||||
|
||||
if t.streamQuota > 0 && t.waitingStreams > 0 {
|
||||
select {
|
||||
case t.streamsQuotaAvailable <- struct{}{}:
|
||||
|
|
@ -819,13 +835,12 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream,
|
|||
return true
|
||||
}
|
||||
var hdrListSizeErr error
|
||||
checkForHeaderListSize := func(it any) bool {
|
||||
checkForHeaderListSize := func() bool {
|
||||
if t.maxSendHeaderListSize == nil {
|
||||
return true
|
||||
}
|
||||
hdrFrame := it.(*headerFrame)
|
||||
var sz int64
|
||||
for _, f := range hdrFrame.hf {
|
||||
for _, f := range hdr.hf {
|
||||
if sz += int64(f.Size()); sz > int64(*t.maxSendHeaderListSize) {
|
||||
hdrListSizeErr = status.Errorf(codes.Internal, "header list size to send violates the maximum size (%d bytes) set by server", *t.maxSendHeaderListSize)
|
||||
return false
|
||||
|
|
@ -834,8 +849,8 @@ func (t *http2Client) NewStream(ctx context.Context, callHdr *CallHdr) (*Stream,
|
|||
return true
|
||||
}
|
||||
for {
|
||||
success, err := t.controlBuf.executeAndPut(func(it any) bool {
|
||||
return checkForHeaderListSize(it) && checkForStreamQuota(it)
|
||||
success, err := t.controlBuf.executeAndPut(func() bool {
|
||||
return checkForHeaderListSize() && checkForStreamQuota()
|
||||
}, hdr)
|
||||
if err != nil {
|
||||
// Connection closed.
|
||||
|
|
@ -946,7 +961,7 @@ func (t *http2Client) closeStream(s *Stream, err error, rst bool, rstCode http2.
|
|||
rst: rst,
|
||||
rstCode: rstCode,
|
||||
}
|
||||
addBackStreamQuota := func(any) bool {
|
||||
addBackStreamQuota := func() bool {
|
||||
t.streamQuota++
|
||||
if t.streamQuota > 0 && t.waitingStreams > 0 {
|
||||
select {
|
||||
|
|
@ -966,7 +981,7 @@ func (t *http2Client) closeStream(s *Stream, err error, rst bool, rstCode http2.
|
|||
|
||||
// Close kicks off the shutdown process of the transport. This should be called
|
||||
// only once on a transport. Once it is called, the transport should not be
|
||||
// accessed any more.
|
||||
// accessed anymore.
|
||||
func (t *http2Client) Close(err error) {
|
||||
t.mu.Lock()
|
||||
// Make sure we only close once.
|
||||
|
|
@ -991,7 +1006,10 @@ func (t *http2Client) Close(err error) {
|
|||
t.kpDormancyCond.Signal()
|
||||
}
|
||||
t.mu.Unlock()
|
||||
t.controlBuf.finish()
|
||||
// Per HTTP/2 spec, a GOAWAY frame must be sent before closing the
|
||||
// connection. See https://httpwg.org/specs/rfc7540.html#GOAWAY.
|
||||
t.controlBuf.put(&goAway{code: http2.ErrCodeNo, debugData: []byte("client transport shutdown"), closeConn: err})
|
||||
<-t.writerDone
|
||||
t.cancel()
|
||||
t.conn.Close()
|
||||
channelz.RemoveEntry(t.channelz.ID)
|
||||
|
|
@ -1099,7 +1117,7 @@ func (t *http2Client) updateWindow(s *Stream, n uint32) {
|
|||
// for the transport and the stream based on the current bdp
|
||||
// estimation.
|
||||
func (t *http2Client) updateFlowControl(n uint32) {
|
||||
updateIWS := func(any) bool {
|
||||
updateIWS := func() bool {
|
||||
t.initialWindowSize = int32(n)
|
||||
t.mu.Lock()
|
||||
for _, s := range t.activeStreams {
|
||||
|
|
@ -1252,7 +1270,7 @@ func (t *http2Client) handleSettings(f *http2.SettingsFrame, isFirst bool) {
|
|||
}
|
||||
updateFuncs = append(updateFuncs, updateStreamQuota)
|
||||
}
|
||||
t.controlBuf.executeAndPut(func(any) bool {
|
||||
t.controlBuf.executeAndPut(func() bool {
|
||||
for _, f := range updateFuncs {
|
||||
f()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -330,8 +330,7 @@ func NewServerTransport(conn net.Conn, config *ServerConfig) (_ ServerTransport,
|
|||
t.handleSettings(sf)
|
||||
|
||||
go func() {
|
||||
t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger)
|
||||
t.loopy.ssGoAwayHandler = t.outgoingGoAwayHandler
|
||||
t.loopy = newLoopyWriter(serverSide, t.framer, t.controlBuf, t.bdpEst, t.conn, t.logger, t.outgoingGoAwayHandler)
|
||||
err := t.loopy.run()
|
||||
close(t.loopyWriterDone)
|
||||
if !isIOError(err) {
|
||||
|
|
@ -860,7 +859,7 @@ func (t *http2Server) handleSettings(f *http2.SettingsFrame) {
|
|||
}
|
||||
return nil
|
||||
})
|
||||
t.controlBuf.executeAndPut(func(any) bool {
|
||||
t.controlBuf.executeAndPut(func() bool {
|
||||
for _, f := range updateFuncs {
|
||||
f()
|
||||
}
|
||||
|
|
@ -1014,12 +1013,13 @@ func (t *http2Server) writeHeaderLocked(s *Stream) error {
|
|||
headerFields = append(headerFields, hpack.HeaderField{Name: "grpc-encoding", Value: s.sendCompress})
|
||||
}
|
||||
headerFields = appendHeaderFieldsFromMD(headerFields, s.header)
|
||||
success, err := t.controlBuf.executeAndPut(t.checkForHeaderListSize, &headerFrame{
|
||||
hf := &headerFrame{
|
||||
streamID: s.id,
|
||||
hf: headerFields,
|
||||
endStream: false,
|
||||
onWrite: t.setResetPingStrikes,
|
||||
})
|
||||
}
|
||||
success, err := t.controlBuf.executeAndPut(func() bool { return t.checkForHeaderListSize(hf) }, hf)
|
||||
if !success {
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -1208,7 +1208,7 @@ func (t *http2Server) keepalive() {
|
|||
continue
|
||||
}
|
||||
if outstandingPing && kpTimeoutLeft <= 0 {
|
||||
t.Close(fmt.Errorf("keepalive ping not acked within timeout %s", t.kp.Time))
|
||||
t.Close(fmt.Errorf("keepalive ping not acked within timeout %s", t.kp.Timeout))
|
||||
return
|
||||
}
|
||||
if !outstandingPing {
|
||||
|
|
|
|||
|
|
@ -304,7 +304,7 @@ func (s *Stream) isHeaderSent() bool {
|
|||
}
|
||||
|
||||
// updateHeaderSent updates headerSent and returns true
|
||||
// if it was alreay set. It is valid only on server-side.
|
||||
// if it was already set. It is valid only on server-side.
|
||||
func (s *Stream) updateHeaderSent() bool {
|
||||
return atomic.SwapUint32(&s.headerSent, 1) == 1
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,6 +90,21 @@ func Pairs(kv ...string) MD {
|
|||
return md
|
||||
}
|
||||
|
||||
// String implements the Stringer interface for pretty-printing a MD.
|
||||
// Ordering of the values is non-deterministic as it ranges over a map.
|
||||
func (md MD) String() string {
|
||||
var sb strings.Builder
|
||||
fmt.Fprintf(&sb, "MD{")
|
||||
for k, v := range md {
|
||||
if sb.Len() > 3 {
|
||||
fmt.Fprintf(&sb, ", ")
|
||||
}
|
||||
fmt.Fprintf(&sb, "%s=[%s]", k, strings.Join(v, ", "))
|
||||
}
|
||||
fmt.Fprintf(&sb, "}")
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
// Len returns the number of items in md.
|
||||
func (md MD) Len() int {
|
||||
return len(md)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,9 @@ package peer
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net"
|
||||
"strings"
|
||||
|
||||
"google.golang.org/grpc/credentials"
|
||||
)
|
||||
|
|
@ -39,6 +41,34 @@ type Peer struct {
|
|||
AuthInfo credentials.AuthInfo
|
||||
}
|
||||
|
||||
// String ensures the Peer types implements the Stringer interface in order to
|
||||
// allow to print a context with a peerKey value effectively.
|
||||
func (p *Peer) String() string {
|
||||
if p == nil {
|
||||
return "Peer<nil>"
|
||||
}
|
||||
sb := &strings.Builder{}
|
||||
sb.WriteString("Peer{")
|
||||
if p.Addr != nil {
|
||||
fmt.Fprintf(sb, "Addr: '%s', ", p.Addr.String())
|
||||
} else {
|
||||
fmt.Fprintf(sb, "Addr: <nil>, ")
|
||||
}
|
||||
if p.LocalAddr != nil {
|
||||
fmt.Fprintf(sb, "LocalAddr: '%s', ", p.LocalAddr.String())
|
||||
} else {
|
||||
fmt.Fprintf(sb, "LocalAddr: <nil>, ")
|
||||
}
|
||||
if p.AuthInfo != nil {
|
||||
fmt.Fprintf(sb, "AuthInfo: '%s'", p.AuthInfo.AuthType())
|
||||
} else {
|
||||
fmt.Fprintf(sb, "AuthInfo: <nil>")
|
||||
}
|
||||
sb.WriteString("}")
|
||||
|
||||
return sb.String()
|
||||
}
|
||||
|
||||
type peerKey struct{}
|
||||
|
||||
// NewContext creates a new context with peer information attached.
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ package grpc
|
|||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"sync"
|
||||
|
||||
|
|
@ -117,7 +118,7 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer.
|
|||
if lastPickErr != nil {
|
||||
errStr = "latest balancer error: " + lastPickErr.Error()
|
||||
} else {
|
||||
errStr = ctx.Err().Error()
|
||||
errStr = fmt.Sprintf("received context error while waiting for new LB policy update: %s", ctx.Err().Error())
|
||||
}
|
||||
switch ctx.Err() {
|
||||
case context.DeadlineExceeded:
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ type pfConfig struct {
|
|||
serviceconfig.LoadBalancingConfig `json:"-"`
|
||||
|
||||
// If set to true, instructs the LB policy to shuffle the order of the list
|
||||
// of addresses received from the name resolver before attempting to
|
||||
// of endpoints received from the name resolver before attempting to
|
||||
// connect to them.
|
||||
ShuffleAddressList bool `json:"shuffleAddressList"`
|
||||
}
|
||||
|
|
@ -94,8 +94,7 @@ func (b *pickfirstBalancer) ResolverError(err error) {
|
|||
}
|
||||
|
||||
func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState) error {
|
||||
addrs := state.ResolverState.Addresses
|
||||
if len(addrs) == 0 {
|
||||
if len(state.ResolverState.Addresses) == 0 && len(state.ResolverState.Endpoints) == 0 {
|
||||
// The resolver reported an empty address list. Treat it like an error by
|
||||
// calling b.ResolverError.
|
||||
if b.subConn != nil {
|
||||
|
|
@ -107,22 +106,49 @@ func (b *pickfirstBalancer) UpdateClientConnState(state balancer.ClientConnState
|
|||
b.ResolverError(errors.New("produced zero addresses"))
|
||||
return balancer.ErrBadResolverState
|
||||
}
|
||||
|
||||
// We don't have to guard this block with the env var because ParseConfig
|
||||
// already does so.
|
||||
cfg, ok := state.BalancerConfig.(pfConfig)
|
||||
if state.BalancerConfig != nil && !ok {
|
||||
return fmt.Errorf("pickfirst: received illegal BalancerConfig (type %T): %v", state.BalancerConfig, state.BalancerConfig)
|
||||
}
|
||||
if cfg.ShuffleAddressList {
|
||||
addrs = append([]resolver.Address{}, addrs...)
|
||||
grpcrand.Shuffle(len(addrs), func(i, j int) { addrs[i], addrs[j] = addrs[j], addrs[i] })
|
||||
}
|
||||
|
||||
if b.logger.V(2) {
|
||||
b.logger.Infof("Received new config %s, resolver state %s", pretty.ToJSON(cfg), pretty.ToJSON(state.ResolverState))
|
||||
}
|
||||
|
||||
var addrs []resolver.Address
|
||||
if endpoints := state.ResolverState.Endpoints; len(endpoints) != 0 {
|
||||
// Perform the optional shuffling described in gRFC A62. The shuffling will
|
||||
// change the order of endpoints but not touch the order of the addresses
|
||||
// within each endpoint. - A61
|
||||
if cfg.ShuffleAddressList {
|
||||
endpoints = append([]resolver.Endpoint{}, endpoints...)
|
||||
grpcrand.Shuffle(len(endpoints), func(i, j int) { endpoints[i], endpoints[j] = endpoints[j], endpoints[i] })
|
||||
}
|
||||
|
||||
// "Flatten the list by concatenating the ordered list of addresses for each
|
||||
// of the endpoints, in order." - A61
|
||||
for _, endpoint := range endpoints {
|
||||
// "In the flattened list, interleave addresses from the two address
|
||||
// families, as per RFC-8304 section 4." - A61
|
||||
// TODO: support the above language.
|
||||
addrs = append(addrs, endpoint.Addresses...)
|
||||
}
|
||||
} else {
|
||||
// Endpoints not set, process addresses until we migrate resolver
|
||||
// emissions fully to Endpoints. The top channel does wrap emitted
|
||||
// addresses with endpoints, however some balancers such as weighted
|
||||
// target do not forwarrd the corresponding correct endpoints down/split
|
||||
// endpoints properly. Once all balancers correctly forward endpoints
|
||||
// down, can delete this else conditional.
|
||||
addrs = state.ResolverState.Addresses
|
||||
if cfg.ShuffleAddressList {
|
||||
addrs = append([]resolver.Address{}, addrs...)
|
||||
grpcrand.Shuffle(len(addrs), func(i, j int) { addrs[i], addrs[j] = addrs[j], addrs[i] })
|
||||
}
|
||||
}
|
||||
|
||||
if b.subConn != nil {
|
||||
b.cc.UpdateAddresses(b.subConn, addrs)
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ LEGACY_SOURCES=(
|
|||
|
||||
# Generates only the new gRPC Service symbols
|
||||
SOURCES=(
|
||||
$(git ls-files --exclude-standard --cached --others "*.proto" | grep -v '^\(profiling/proto/service.proto\|reflection/grpc_reflection_v1alpha/reflection.proto\)$')
|
||||
$(git ls-files --exclude-standard --cached --others "*.proto" | grep -v '^profiling/proto/service.proto$')
|
||||
${WORKDIR}/grpc-proto/grpc/gcp/altscontext.proto
|
||||
${WORKDIR}/grpc-proto/grpc/gcp/handshaker.proto
|
||||
${WORKDIR}/grpc-proto/grpc/gcp/transport_security_common.proto
|
||||
|
|
@ -93,7 +93,7 @@ Mgrpc/testing/empty.proto=google.golang.org/grpc/interop/grpc_testing
|
|||
|
||||
for src in ${SOURCES[@]}; do
|
||||
echo "protoc ${src}"
|
||||
protoc --go_out=${OPTS}:${WORKDIR}/out --go-grpc_out=${OPTS}:${WORKDIR}/out \
|
||||
protoc --go_out=${OPTS}:${WORKDIR}/out --go-grpc_out=${OPTS},use_generic_streams_experimental=true:${WORKDIR}/out \
|
||||
-I"." \
|
||||
-I${WORKDIR}/grpc-proto \
|
||||
-I${WORKDIR}/googleapis \
|
||||
|
|
@ -118,6 +118,6 @@ mv ${WORKDIR}/out/google.golang.org/grpc/lookup/grpc_lookup_v1/* ${WORKDIR}/out/
|
|||
|
||||
# grpc_testing_not_regenerate/*.pb.go are not re-generated,
|
||||
# see grpc_testing_not_regenerate/README.md for details.
|
||||
rm ${WORKDIR}/out/google.golang.org/grpc/reflection/grpc_testing_not_regenerate/*.pb.go
|
||||
rm ${WORKDIR}/out/google.golang.org/grpc/reflection/test/grpc_testing_not_regenerate/*.pb.go
|
||||
|
||||
cp -R ${WORKDIR}/out/google.golang.org/grpc/* .
|
||||
|
|
|
|||
|
|
@ -18,9 +18,6 @@
|
|||
|
||||
// Package dns implements a dns resolver to be installed as the default resolver
|
||||
// in grpc.
|
||||
//
|
||||
// Deprecated: this package is imported by grpc and should not need to be
|
||||
// imported directly by users.
|
||||
package dns
|
||||
|
||||
import (
|
||||
|
|
@ -52,3 +49,12 @@ func SetResolvingTimeout(timeout time.Duration) {
|
|||
func NewBuilder() resolver.Builder {
|
||||
return dns.NewBuilder()
|
||||
}
|
||||
|
||||
// SetMinResolutionInterval sets the default minimum interval at which DNS
|
||||
// re-resolutions are allowed. This helps to prevent excessive re-resolution.
|
||||
//
|
||||
// It must be called only at application startup, before any gRPC calls are
|
||||
// made. Modifying this value after initialization is not thread-safe.
|
||||
func SetMinResolutionInterval(d time.Duration) {
|
||||
dns.MinResolutionInterval = d
|
||||
}
|
||||
|
|
|
|||
|
|
@ -964,7 +964,7 @@ func setCallInfoCodec(c *callInfo) error {
|
|||
|
||||
// The SupportPackageIsVersion variables are referenced from generated protocol
|
||||
// buffer files to ensure compatibility with the gRPC version used. The latest
|
||||
// support package version is 7.
|
||||
// support package version is 9.
|
||||
//
|
||||
// Older versions are kept for compatibility.
|
||||
//
|
||||
|
|
@ -976,6 +976,7 @@ const (
|
|||
SupportPackageIsVersion6 = true
|
||||
SupportPackageIsVersion7 = true
|
||||
SupportPackageIsVersion8 = true
|
||||
SupportPackageIsVersion9 = true
|
||||
)
|
||||
|
||||
const grpcUA = "grpc-go/" + Version
|
||||
|
|
|
|||
|
|
@ -527,12 +527,22 @@ func ConnectionTimeout(d time.Duration) ServerOption {
|
|||
})
|
||||
}
|
||||
|
||||
// MaxHeaderListSizeServerOption is a ServerOption that sets the max
|
||||
// (uncompressed) size of header list that the server is prepared to accept.
|
||||
type MaxHeaderListSizeServerOption struct {
|
||||
MaxHeaderListSize uint32
|
||||
}
|
||||
|
||||
func (o MaxHeaderListSizeServerOption) apply(so *serverOptions) {
|
||||
so.maxHeaderListSize = &o.MaxHeaderListSize
|
||||
}
|
||||
|
||||
// MaxHeaderListSize returns a ServerOption that sets the max (uncompressed) size
|
||||
// of header list that the server is prepared to accept.
|
||||
func MaxHeaderListSize(s uint32) ServerOption {
|
||||
return newFuncServerOption(func(o *serverOptions) {
|
||||
o.maxHeaderListSize = &s
|
||||
})
|
||||
return MaxHeaderListSizeServerOption{
|
||||
MaxHeaderListSize: s,
|
||||
}
|
||||
}
|
||||
|
||||
// HeaderTableSize returns a ServerOption that sets the size of dynamic
|
||||
|
|
|
|||
|
|
@ -172,7 +172,7 @@ func parseServiceConfig(js string) *serviceconfig.ParseResult {
|
|||
var rsc jsonSC
|
||||
err := json.Unmarshal([]byte(js), &rsc)
|
||||
if err != nil {
|
||||
logger.Warningf("grpc: unmarshaling service config %s: %v", js, err)
|
||||
logger.Warningf("grpc: unmarshalling service config %s: %v", js, err)
|
||||
return &serviceconfig.ParseResult{Err: err}
|
||||
}
|
||||
sc := ServiceConfig{
|
||||
|
|
@ -219,7 +219,7 @@ func parseServiceConfig(js string) *serviceconfig.ParseResult {
|
|||
Timeout: (*time.Duration)(m.Timeout),
|
||||
}
|
||||
if mc.RetryPolicy, err = convertRetryPolicy(m.RetryPolicy); err != nil {
|
||||
logger.Warningf("grpc: unmarshaling service config %s: %v", js, err)
|
||||
logger.Warningf("grpc: unmarshalling service config %s: %v", js, err)
|
||||
return &serviceconfig.ParseResult{Err: err}
|
||||
}
|
||||
if m.MaxRequestMessageBytes != nil {
|
||||
|
|
@ -239,13 +239,13 @@ func parseServiceConfig(js string) *serviceconfig.ParseResult {
|
|||
for i, n := range *m.Name {
|
||||
path, err := n.generatePath()
|
||||
if err != nil {
|
||||
logger.Warningf("grpc: error unmarshaling service config %s due to methodConfig[%d]: %v", js, i, err)
|
||||
logger.Warningf("grpc: error unmarshalling service config %s due to methodConfig[%d]: %v", js, i, err)
|
||||
return &serviceconfig.ParseResult{Err: err}
|
||||
}
|
||||
|
||||
if _, ok := paths[path]; ok {
|
||||
err = errDuplicatedName
|
||||
logger.Warningf("grpc: error unmarshaling service config %s due to methodConfig[%d]: %v", js, i, err)
|
||||
logger.Warningf("grpc: error unmarshalling service config %s due to methodConfig[%d]: %v", js, i, err)
|
||||
return &serviceconfig.ParseResult{Err: err}
|
||||
}
|
||||
paths[path] = struct{}{}
|
||||
|
|
|
|||
|
|
@ -73,9 +73,12 @@ func (*PickerUpdated) isRPCStats() {}
|
|||
type InPayload struct {
|
||||
// Client is true if this InPayload is from client side.
|
||||
Client bool
|
||||
// Payload is the payload with original type.
|
||||
// Payload is the payload with original type. This may be modified after
|
||||
// the call to HandleRPC which provides the InPayload returns and must be
|
||||
// copied if needed later.
|
||||
Payload any
|
||||
// Data is the serialized message payload.
|
||||
// Deprecated: Data will be removed in the next release.
|
||||
Data []byte
|
||||
|
||||
// Length is the size of the uncompressed payload data. Does not include any
|
||||
|
|
@ -143,9 +146,12 @@ func (s *InTrailer) isRPCStats() {}
|
|||
type OutPayload struct {
|
||||
// Client is true if this OutPayload is from client side.
|
||||
Client bool
|
||||
// Payload is the payload with original type.
|
||||
// Payload is the payload with original type. This may be modified after
|
||||
// the call to HandleRPC which provides the OutPayload returns and must be
|
||||
// copied if needed later.
|
||||
Payload any
|
||||
// Data is the serialized message payload.
|
||||
// Deprecated: Data will be removed in the next release.
|
||||
Data []byte
|
||||
// Length is the size of the uncompressed payload data. Does not include any
|
||||
// framing (gRPC or HTTP/2).
|
||||
|
|
|
|||
|
|
@ -516,6 +516,7 @@ func (a *csAttempt) newStream() error {
|
|||
return toRPCErr(nse.Err)
|
||||
}
|
||||
a.s = s
|
||||
a.ctx = s.Context()
|
||||
a.p = &parser{r: s, recvBufferPool: a.cs.cc.dopts.recvBufferPool}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,152 @@
|
|||
/*
|
||||
*
|
||||
* 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 grpc
|
||||
|
||||
// ServerStreamingClient represents the client side of a server-streaming (one
|
||||
// request, many responses) RPC. It is generic over the type of the response
|
||||
// message. It is used in generated code.
|
||||
type ServerStreamingClient[Res any] interface {
|
||||
Recv() (*Res, error)
|
||||
ClientStream
|
||||
}
|
||||
|
||||
// ServerStreamingServer represents the server side of a server-streaming (one
|
||||
// request, many responses) RPC. It is generic over the type of the response
|
||||
// message. It is used in generated code.
|
||||
type ServerStreamingServer[Res any] interface {
|
||||
Send(*Res) error
|
||||
ServerStream
|
||||
}
|
||||
|
||||
// ClientStreamingClient represents the client side of a client-streaming (many
|
||||
// requests, one response) RPC. It is generic over both the type of the request
|
||||
// message stream and the type of the unary response message. It is used in
|
||||
// generated code.
|
||||
type ClientStreamingClient[Req any, Res any] interface {
|
||||
Send(*Req) error
|
||||
CloseAndRecv() (*Res, error)
|
||||
ClientStream
|
||||
}
|
||||
|
||||
// ClientStreamingServer represents the server side of a client-streaming (many
|
||||
// requests, one response) RPC. It is generic over both the type of the request
|
||||
// message stream and the type of the unary response message. It is used in
|
||||
// generated code.
|
||||
type ClientStreamingServer[Req any, Res any] interface {
|
||||
Recv() (*Req, error)
|
||||
SendAndClose(*Res) error
|
||||
ServerStream
|
||||
}
|
||||
|
||||
// BidiStreamingClient represents the client side of a bidirectional-streaming
|
||||
// (many requests, many responses) RPC. It is generic over both the type of the
|
||||
// request message stream and the type of the response message stream. It is
|
||||
// used in generated code.
|
||||
type BidiStreamingClient[Req any, Res any] interface {
|
||||
Send(*Req) error
|
||||
Recv() (*Res, error)
|
||||
ClientStream
|
||||
}
|
||||
|
||||
// BidiStreamingServer represents the server side of a bidirectional-streaming
|
||||
// (many requests, many responses) RPC. It is generic over both the type of the
|
||||
// request message stream and the type of the response message stream. It is
|
||||
// used in generated code.
|
||||
type BidiStreamingServer[Req any, Res any] interface {
|
||||
Recv() (*Req, error)
|
||||
Send(*Res) error
|
||||
ServerStream
|
||||
}
|
||||
|
||||
// GenericClientStream implements the ServerStreamingClient, ClientStreamingClient,
|
||||
// and BidiStreamingClient interfaces. It is used in generated code.
|
||||
type GenericClientStream[Req any, Res any] struct {
|
||||
ClientStream
|
||||
}
|
||||
|
||||
var _ ServerStreamingClient[string] = (*GenericClientStream[int, string])(nil)
|
||||
var _ ClientStreamingClient[int, string] = (*GenericClientStream[int, string])(nil)
|
||||
var _ BidiStreamingClient[int, string] = (*GenericClientStream[int, string])(nil)
|
||||
|
||||
// Send pushes one message into the stream of requests to be consumed by the
|
||||
// server. The type of message which can be sent is determined by the Req type
|
||||
// parameter of the GenericClientStream receiver.
|
||||
func (x *GenericClientStream[Req, Res]) Send(m *Req) error {
|
||||
return x.ClientStream.SendMsg(m)
|
||||
}
|
||||
|
||||
// Recv reads one message from the stream of responses generated by the server.
|
||||
// The type of the message returned is determined by the Res type parameter
|
||||
// of the GenericClientStream receiver.
|
||||
func (x *GenericClientStream[Req, Res]) Recv() (*Res, error) {
|
||||
m := new(Res)
|
||||
if err := x.ClientStream.RecvMsg(m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// CloseAndRecv closes the sending side of the stream, then receives the unary
|
||||
// response from the server. The type of message which it returns is determined
|
||||
// by the Res type parameter of the GenericClientStream receiver.
|
||||
func (x *GenericClientStream[Req, Res]) CloseAndRecv() (*Res, error) {
|
||||
if err := x.ClientStream.CloseSend(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
m := new(Res)
|
||||
if err := x.ClientStream.RecvMsg(m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// GenericServerStream implements the ServerStreamingServer, ClientStreamingServer,
|
||||
// and BidiStreamingServer interfaces. It is used in generated code.
|
||||
type GenericServerStream[Req any, Res any] struct {
|
||||
ServerStream
|
||||
}
|
||||
|
||||
var _ ServerStreamingServer[string] = (*GenericServerStream[int, string])(nil)
|
||||
var _ ClientStreamingServer[int, string] = (*GenericServerStream[int, string])(nil)
|
||||
var _ BidiStreamingServer[int, string] = (*GenericServerStream[int, string])(nil)
|
||||
|
||||
// Send pushes one message into the stream of responses to be consumed by the
|
||||
// client. The type of message which can be sent is determined by the Res
|
||||
// type parameter of the serverStreamServer receiver.
|
||||
func (x *GenericServerStream[Req, Res]) Send(m *Res) error {
|
||||
return x.ServerStream.SendMsg(m)
|
||||
}
|
||||
|
||||
// SendAndClose pushes the unary response to the client. The type of message
|
||||
// which can be sent is determined by the Res type parameter of the
|
||||
// clientStreamServer receiver.
|
||||
func (x *GenericServerStream[Req, Res]) SendAndClose(m *Res) error {
|
||||
return x.ServerStream.SendMsg(m)
|
||||
}
|
||||
|
||||
// Recv reads one message from the stream of requests generated by the client.
|
||||
// The type of the message returned is determined by the Req type parameter
|
||||
// of the clientStreamServer receiver.
|
||||
func (x *GenericServerStream[Req, Res]) Recv() (*Req, error) {
|
||||
m := new(Req)
|
||||
if err := x.ServerStream.RecvMsg(m); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m, nil
|
||||
}
|
||||
|
|
@ -19,4 +19,4 @@
|
|||
package grpc
|
||||
|
||||
// Version is the current grpc version.
|
||||
const Version = "1.63.2"
|
||||
const Version = "1.64.0"
|
||||
|
|
|
|||
|
|
@ -1,195 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -ex # Exit on error; debugging enabled.
|
||||
set -o pipefail # Fail a pipe if any sub-command fails.
|
||||
|
||||
# not makes sure the command passed to it does not exit with a return code of 0.
|
||||
not() {
|
||||
# This is required instead of the earlier (! $COMMAND) because subshells and
|
||||
# pipefail don't work the same on Darwin as in Linux.
|
||||
! "$@"
|
||||
}
|
||||
|
||||
die() {
|
||||
echo "$@" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
fail_on_output() {
|
||||
tee /dev/stderr | not read
|
||||
}
|
||||
|
||||
# Check to make sure it's safe to modify the user's git repo.
|
||||
git status --porcelain | fail_on_output
|
||||
|
||||
# Undo any edits made by this script.
|
||||
cleanup() {
|
||||
git reset --hard HEAD
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
PATH="${HOME}/go/bin:${GOROOT}/bin:${PATH}"
|
||||
go version
|
||||
|
||||
if [[ "$1" = "-install" ]]; then
|
||||
# Install the pinned versions as defined in module tools.
|
||||
pushd ./test/tools
|
||||
go install \
|
||||
golang.org/x/tools/cmd/goimports \
|
||||
honnef.co/go/tools/cmd/staticcheck \
|
||||
github.com/client9/misspell/cmd/misspell
|
||||
popd
|
||||
if [[ -z "${VET_SKIP_PROTO}" ]]; then
|
||||
if [[ "${GITHUB_ACTIONS}" = "true" ]]; then
|
||||
PROTOBUF_VERSION=25.2 # a.k.a. v4.22.0 in pb.go files.
|
||||
PROTOC_FILENAME=protoc-${PROTOBUF_VERSION}-linux-x86_64.zip
|
||||
pushd /home/runner/go
|
||||
wget https://github.com/google/protobuf/releases/download/v${PROTOBUF_VERSION}/${PROTOC_FILENAME}
|
||||
unzip ${PROTOC_FILENAME}
|
||||
bin/protoc --version
|
||||
popd
|
||||
elif not which protoc > /dev/null; then
|
||||
die "Please install protoc into your path"
|
||||
fi
|
||||
fi
|
||||
exit 0
|
||||
elif [[ "$#" -ne 0 ]]; then
|
||||
die "Unknown argument(s): $*"
|
||||
fi
|
||||
|
||||
# - Check that generated proto files are up to date.
|
||||
if [[ -z "${VET_SKIP_PROTO}" ]]; then
|
||||
make proto && git status --porcelain 2>&1 | fail_on_output || \
|
||||
(git status; git --no-pager diff; exit 1)
|
||||
fi
|
||||
|
||||
if [[ -n "${VET_ONLY_PROTO}" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# - Ensure all source files contain a copyright message.
|
||||
# (Done in two parts because Darwin "git grep" has broken support for compound
|
||||
# exclusion matches.)
|
||||
(grep -L "DO NOT EDIT" $(git grep -L "\(Copyright [0-9]\{4,\} gRPC authors\)" -- '*.go') || true) | fail_on_output
|
||||
|
||||
# - Make sure all tests in grpc and grpc/test use leakcheck via Teardown.
|
||||
not grep 'func Test[^(]' *_test.go
|
||||
not grep 'func Test[^(]' test/*.go
|
||||
|
||||
# - Check for typos in test function names
|
||||
git grep 'func (s) ' -- "*_test.go" | not grep -v 'func (s) Test'
|
||||
git grep 'func [A-Z]' -- "*_test.go" | not grep -v 'func Test\|Benchmark\|Example'
|
||||
|
||||
# - Do not import x/net/context.
|
||||
not git grep -l 'x/net/context' -- "*.go"
|
||||
|
||||
# - Do not use time.After except in tests. It has the potential to leak the
|
||||
# timer since there is no way to stop it early.
|
||||
git grep -l 'time.After(' -- "*.go" | not grep -v '_test.go\|test_utils\|testutils'
|
||||
|
||||
# - Do not import math/rand for real library code. Use internal/grpcrand for
|
||||
# thread safety.
|
||||
git grep -l '"math/rand"' -- "*.go" 2>&1 | not grep -v '^examples\|^interop/stress\|grpcrand\|^benchmark\|wrr_test'
|
||||
|
||||
# - Do not use "interface{}"; use "any" instead.
|
||||
git grep -l 'interface{}' -- "*.go" 2>&1 | not grep -v '\.pb\.go\|protoc-gen-go-grpc\|grpc_testing_not_regenerate'
|
||||
|
||||
# - Do not call grpclog directly. Use grpclog.Component instead.
|
||||
git grep -l -e 'grpclog.I' --or -e 'grpclog.W' --or -e 'grpclog.E' --or -e 'grpclog.F' --or -e 'grpclog.V' -- "*.go" | not grep -v '^grpclog/component.go\|^internal/grpctest/tlogger_test.go'
|
||||
|
||||
# - Ensure all ptypes proto packages are renamed when importing.
|
||||
not git grep "\(import \|^\s*\)\"github.com/golang/protobuf/ptypes/" -- "*.go"
|
||||
|
||||
# - Ensure all usages of grpc_testing package are renamed when importing.
|
||||
not git grep "\(import \|^\s*\)\"google.golang.org/grpc/interop/grpc_testing" -- "*.go"
|
||||
|
||||
# - Ensure all xds proto imports are renamed to *pb or *grpc.
|
||||
git grep '"github.com/envoyproxy/go-control-plane/envoy' -- '*.go' ':(exclude)*.pb.go' | not grep -v 'pb "\|grpc "'
|
||||
|
||||
misspell -error .
|
||||
|
||||
# - gofmt, goimports, go vet, go mod tidy.
|
||||
# Perform these checks on each module inside gRPC.
|
||||
for MOD_FILE in $(find . -name 'go.mod'); do
|
||||
MOD_DIR=$(dirname ${MOD_FILE})
|
||||
pushd ${MOD_DIR}
|
||||
go vet -all ./... | fail_on_output
|
||||
gofmt -s -d -l . 2>&1 | fail_on_output
|
||||
goimports -l . 2>&1 | not grep -vE "\.pb\.go"
|
||||
|
||||
go mod tidy -compat=1.19
|
||||
git status --porcelain 2>&1 | fail_on_output || \
|
||||
(git status; git --no-pager diff; exit 1)
|
||||
popd
|
||||
done
|
||||
|
||||
# - Collection of static analysis checks
|
||||
SC_OUT="$(mktemp)"
|
||||
staticcheck -go 1.19 -checks 'all' ./... > "${SC_OUT}" || true
|
||||
|
||||
# Error for anything other than checks that need exclusions.
|
||||
grep -v "(ST1000)" "${SC_OUT}" | grep -v "(SA1019)" | grep -v "(ST1003)" | not grep -v "(ST1019)\|\(other import of\)"
|
||||
|
||||
# Exclude underscore checks for generated code.
|
||||
grep "(ST1003)" "${SC_OUT}" | not grep -v '\(.pb.go:\)\|\(code_string_test.go:\)\|\(grpc_testing_not_regenerate\)'
|
||||
|
||||
# Error for duplicate imports not including grpc protos.
|
||||
grep "(ST1019)\|\(other import of\)" "${SC_OUT}" | not grep -Fv 'XXXXX PleaseIgnoreUnused
|
||||
channelz/grpc_channelz_v1"
|
||||
go-control-plane/envoy
|
||||
grpclb/grpc_lb_v1"
|
||||
health/grpc_health_v1"
|
||||
interop/grpc_testing"
|
||||
orca/v3"
|
||||
proto/grpc_gcp"
|
||||
proto/grpc_lookup_v1"
|
||||
reflection/grpc_reflection_v1"
|
||||
reflection/grpc_reflection_v1alpha"
|
||||
XXXXX PleaseIgnoreUnused'
|
||||
|
||||
# Error for any package comments not in generated code.
|
||||
grep "(ST1000)" "${SC_OUT}" | not grep -v "\.pb\.go:"
|
||||
|
||||
# Only ignore the following deprecated types/fields/functions and exclude
|
||||
# generated code.
|
||||
grep "(SA1019)" "${SC_OUT}" | not grep -Fv 'XXXXX PleaseIgnoreUnused
|
||||
XXXXX Protobuf related deprecation errors:
|
||||
"github.com/golang/protobuf
|
||||
.pb.go:
|
||||
grpc_testing_not_regenerate
|
||||
: ptypes.
|
||||
proto.RegisterType
|
||||
XXXXX gRPC internal usage deprecation errors:
|
||||
"google.golang.org/grpc
|
||||
: grpc.
|
||||
: v1alpha.
|
||||
: v1alphareflectionpb.
|
||||
BalancerAttributes is deprecated:
|
||||
CredsBundle is deprecated:
|
||||
Metadata is deprecated: use Attributes instead.
|
||||
NewSubConn is deprecated:
|
||||
OverrideServerName is deprecated:
|
||||
RemoveSubConn is deprecated:
|
||||
SecurityVersion is deprecated:
|
||||
Target is deprecated: Use the Target field in the BuildOptions instead.
|
||||
UpdateAddresses is deprecated:
|
||||
UpdateSubConnState is deprecated:
|
||||
balancer.ErrTransientFailure is deprecated:
|
||||
grpc/reflection/v1alpha/reflection.proto
|
||||
SwitchTo is deprecated:
|
||||
XXXXX xDS deprecated fields we support
|
||||
.ExactMatch
|
||||
.PrefixMatch
|
||||
.SafeRegexMatch
|
||||
.SuffixMatch
|
||||
GetContainsMatch
|
||||
GetExactMatch
|
||||
GetMatchSubjectAltNames
|
||||
GetPrefixMatch
|
||||
GetSafeRegexMatch
|
||||
GetSuffixMatch
|
||||
GetTlsCertificateCertificateProviderInstance
|
||||
GetValidationContextCertificateProviderInstance
|
||||
XXXXX PleaseIgnoreUnused'
|
||||
|
||||
echo SUCCESS
|
||||
|
|
@ -84,6 +84,11 @@ const (
|
|||
// annotation key used to specify the name of the channel for
|
||||
// the triggers to subscribe to.
|
||||
BrokerChannelNameStatusAnnotationKey = "knative.dev/channelName"
|
||||
|
||||
// BrokerChannelNamespaceStatusAnnotationKey is the broker status
|
||||
// annotation key used to specify the namespace of the channel for
|
||||
// the triggers to subscribe to.
|
||||
BrokerChannelNamespaceStatusAnnotationKey = "knative.dev/channelNamespace"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ import (
|
|||
pkgduckv1 "knative.dev/pkg/apis/duck/v1"
|
||||
)
|
||||
|
||||
var pCondSet = apis.NewLivingConditionSet(ParallelConditionReady, ParallelConditionChannelsReady, ParallelConditionSubscriptionsReady, ParallelConditionAddressable, ParallelConditionOIDCIdentityCreated)
|
||||
var pCondSet = apis.NewLivingConditionSet(ParallelConditionReady, ParallelConditionChannelsReady, ParallelConditionSubscriptionsReady, ParallelConditionAddressable)
|
||||
|
||||
const (
|
||||
// ParallelConditionReady has status True when all subconditions below have been set to True.
|
||||
|
|
@ -41,8 +41,7 @@ const (
|
|||
|
||||
// ParallelConditionAddressable has status true when this Parallel meets
|
||||
// the Addressable contract and has a non-empty hostname.
|
||||
ParallelConditionAddressable apis.ConditionType = "Addressable"
|
||||
ParallelConditionOIDCIdentityCreated apis.ConditionType = "OIDCIdentityCreated"
|
||||
ParallelConditionAddressable apis.ConditionType = "Addressable"
|
||||
)
|
||||
|
||||
// GetConditionSet retrieves the condition set for this resource. Implements the KRShaped interface.
|
||||
|
|
@ -81,6 +80,7 @@ func (ps *ParallelStatus) PropagateSubscriptionStatuses(filterSubscriptions []*m
|
|||
if ps.BranchStatuses == nil || len(subscriptions) != len(ps.BranchStatuses) {
|
||||
ps.BranchStatuses = make([]ParallelBranchStatus, len(subscriptions))
|
||||
}
|
||||
ps.Auth = nil
|
||||
allReady := true
|
||||
// If there are no subscriptions, treat that as a False branch. Could go either way, but this seems right.
|
||||
if len(subscriptions) == 0 {
|
||||
|
|
@ -126,6 +126,19 @@ func (ps *ParallelStatus) PropagateSubscriptionStatuses(filterSubscriptions []*m
|
|||
allReady = false
|
||||
}
|
||||
|
||||
if fs.Status.Auth != nil && fs.Status.Auth.ServiceAccountName != nil {
|
||||
if ps.Auth == nil {
|
||||
ps.Auth = &pkgduckv1.AuthStatus{}
|
||||
}
|
||||
ps.Auth.ServiceAccountNames = append(ps.Auth.ServiceAccountNames, *fs.Status.Auth.ServiceAccountName)
|
||||
}
|
||||
|
||||
if s.Status.Auth != nil && s.Status.Auth.ServiceAccountName != nil {
|
||||
if ps.Auth == nil {
|
||||
ps.Auth = &pkgduckv1.AuthStatus{}
|
||||
}
|
||||
ps.Auth.ServiceAccountNames = append(ps.Auth.ServiceAccountNames, *s.Status.Auth.ServiceAccountName)
|
||||
}
|
||||
}
|
||||
if allReady {
|
||||
pCondSet.Manage(ps).MarkTrue(ParallelConditionSubscriptionsReady)
|
||||
|
|
@ -196,22 +209,6 @@ func (ps *ParallelStatus) MarkAddressableNotReady(reason, messageFormat string,
|
|||
pCondSet.Manage(ps).MarkFalse(ParallelConditionAddressable, reason, messageFormat, messageA...)
|
||||
}
|
||||
|
||||
func (ps *ParallelStatus) MarkOIDCIdentityCreatedSucceeded() {
|
||||
pCondSet.Manage(ps).MarkTrue(ParallelConditionOIDCIdentityCreated)
|
||||
}
|
||||
|
||||
func (ps *ParallelStatus) MarkOIDCIdentityCreatedSucceededWithReason(reason, messageFormat string, messageA ...interface{}) {
|
||||
pCondSet.Manage(ps).MarkTrueWithReason(ParallelConditionOIDCIdentityCreated, reason, messageFormat, messageA...)
|
||||
}
|
||||
|
||||
func (ps *ParallelStatus) MarkOIDCIdentityCreatedFailed(reason, messageFormat string, messageA ...interface{}) {
|
||||
pCondSet.Manage(ps).MarkFalse(ParallelConditionOIDCIdentityCreated, reason, messageFormat, messageA...)
|
||||
}
|
||||
|
||||
func (ps *ParallelStatus) MarkOIDCIdentityCreatedUnknown(reason, messageFormat string, messageA ...interface{}) {
|
||||
pCondSet.Manage(ps).MarkUnknown(ParallelConditionOIDCIdentityCreated, reason, messageFormat, messageA...)
|
||||
}
|
||||
|
||||
func (ps *ParallelStatus) setAddress(address *pkgduckv1.Addressable) {
|
||||
ps.Address = address
|
||||
if address == nil {
|
||||
|
|
|
|||
|
|
@ -28,8 +28,7 @@ import (
|
|||
duckv1 "knative.dev/pkg/apis/duck/v1"
|
||||
)
|
||||
|
||||
var sCondSet = apis.NewLivingConditionSet(SequenceConditionReady, SequenceConditionChannelsReady, SequenceConditionSubscriptionsReady, SequenceConditionAddressable,
|
||||
SequenceConditionOIDCIdentityCreated)
|
||||
var sCondSet = apis.NewLivingConditionSet(SequenceConditionReady, SequenceConditionChannelsReady, SequenceConditionSubscriptionsReady, SequenceConditionAddressable)
|
||||
|
||||
const (
|
||||
// SequenceConditionReady has status True when all subconditions below have been set to True.
|
||||
|
|
@ -46,10 +45,6 @@ const (
|
|||
// SequenceConditionAddressable has status true when this Sequence meets
|
||||
// the Addressable contract and has a non-empty hostname.
|
||||
SequenceConditionAddressable apis.ConditionType = "Addressable"
|
||||
|
||||
// SequenceConditionOIDCIdentityCreated has status True when the OIDCIdentity has been created.
|
||||
// This condition is only relevant if the OIDC feature is enabled.
|
||||
SequenceConditionOIDCIdentityCreated apis.ConditionType = "OIDCIdentityCreated"
|
||||
)
|
||||
|
||||
// GetConditionSet retrieves the condition set for this resource. Implements the KRShaped interface.
|
||||
|
|
@ -86,12 +81,13 @@ func (ss *SequenceStatus) InitializeConditions() {
|
|||
// the status of the incoming subscriptions.
|
||||
func (ss *SequenceStatus) PropagateSubscriptionStatuses(subscriptions []*messagingv1.Subscription) {
|
||||
ss.SubscriptionStatuses = make([]SequenceSubscriptionStatus, len(subscriptions))
|
||||
ss.Auth = nil
|
||||
allReady := true
|
||||
// If there are no subscriptions, treat that as a False case. Could go either way, but this seems right.
|
||||
if len(subscriptions) == 0 {
|
||||
allReady = false
|
||||
|
||||
}
|
||||
|
||||
for i, s := range subscriptions {
|
||||
ss.SubscriptionStatuses[i] = SequenceSubscriptionStatus{
|
||||
Subscription: corev1.ObjectReference{
|
||||
|
|
@ -118,6 +114,13 @@ func (ss *SequenceStatus) PropagateSubscriptionStatuses(subscriptions []*messagi
|
|||
allReady = false
|
||||
}
|
||||
|
||||
if s.Status.Auth != nil && s.Status.Auth.ServiceAccountName != nil {
|
||||
if ss.Auth == nil {
|
||||
ss.Auth = &duckv1.AuthStatus{}
|
||||
}
|
||||
|
||||
ss.Auth.ServiceAccountNames = append(ss.Auth.ServiceAccountNames, *s.Status.Auth.ServiceAccountName)
|
||||
}
|
||||
}
|
||||
if allReady {
|
||||
sCondSet.Manage(ss).MarkTrue(SequenceConditionSubscriptionsReady)
|
||||
|
|
@ -199,23 +202,3 @@ func (ss *SequenceStatus) setAddress(address *duckv1.Addressable) {
|
|||
sCondSet.Manage(ss).MarkTrue(SequenceConditionAddressable)
|
||||
}
|
||||
}
|
||||
|
||||
// MarkOIDCIdentityCreatedSucceeded marks the OIDCIdentityCreated condition as true.
|
||||
func (ss *SequenceStatus) MarkOIDCIdentityCreatedSucceeded() {
|
||||
sCondSet.Manage(ss).MarkTrue(SequenceConditionOIDCIdentityCreated)
|
||||
}
|
||||
|
||||
// MarkOIDCIdentityCreatedSucceededWithReason marks the OIDCIdentityCreated condition as true with the given reason.
|
||||
func (ss *SequenceStatus) MarkOIDCIdentityCreatedSucceededWithReason(reason, messageFormat string, messageA ...interface{}) {
|
||||
sCondSet.Manage(ss).MarkTrueWithReason(SequenceConditionOIDCIdentityCreated, reason, messageFormat, messageA...)
|
||||
}
|
||||
|
||||
// MarkOIDCIdentityCreatedFailed marks the OIDCIdentityCreated condition as false with the given reason.
|
||||
func (ss *SequenceStatus) MarkOIDCIdentityCreatedFailed(reason, messageFormat string, messageA ...interface{}) {
|
||||
sCondSet.Manage(ss).MarkFalse(SequenceConditionOIDCIdentityCreated, reason, messageFormat, messageA...)
|
||||
}
|
||||
|
||||
// MarkOIDCIdentityCreatedUnknown marks the OIDCIdentityCreated condition as unknown with the given reason.
|
||||
func (ss *SequenceStatus) MarkOIDCIdentityCreatedUnknown(reason, messageFormat string, messageA ...interface{}) {
|
||||
sCondSet.Manage(ss).MarkUnknown(SequenceConditionOIDCIdentityCreated, reason, messageFormat, messageA...)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,6 +49,9 @@ func CheckNamespace(ctx context.Context, r ResourceInfo) *apis.FieldError {
|
|||
return nil
|
||||
}
|
||||
|
||||
// convert the kind (Broker or Channel) into a resource (brokers or channels)
|
||||
targetResource := strings.ToLower(targetKind) + "s"
|
||||
|
||||
// GetUserInfo accesses the UserInfo attached to the webhook context.
|
||||
userInfo := apis.GetUserInfo(ctx)
|
||||
if userInfo == nil {
|
||||
|
|
@ -66,7 +69,7 @@ func CheckNamespace(ctx context.Context, r ResourceInfo) *apis.FieldError {
|
|||
Namespace: targetNamespace,
|
||||
Verb: "knsubscribe",
|
||||
Group: targetGroup,
|
||||
Resource: targetKind,
|
||||
Resource: targetResource,
|
||||
}
|
||||
|
||||
// Create the SubjectAccessReview
|
||||
|
|
|
|||
|
|
@ -79,10 +79,10 @@ func PropagateTrustBundles(ctx context.Context, k8s kubernetes.Interface, trustB
|
|||
for _, cm := range systemNamespaceBundles {
|
||||
name := userCMName(cm.Name)
|
||||
if p, ok := state[name]; !ok {
|
||||
state[name] = Pair{sysCM: cm}
|
||||
state[name] = Pair{sysCM: cm.DeepCopy()}
|
||||
} else {
|
||||
state[name] = Pair{
|
||||
sysCM: cm,
|
||||
sysCM: cm.DeepCopy(),
|
||||
userCm: p.userCm,
|
||||
}
|
||||
}
|
||||
|
|
@ -90,11 +90,11 @@ func PropagateTrustBundles(ctx context.Context, k8s kubernetes.Interface, trustB
|
|||
|
||||
for _, cm := range userNamespaceBundles {
|
||||
if p, ok := state[cm.Name]; !ok {
|
||||
state[cm.Name] = Pair{userCm: cm}
|
||||
state[cm.Name] = Pair{userCm: cm.DeepCopy()}
|
||||
} else {
|
||||
state[cm.Name] = Pair{
|
||||
sysCM: p.sysCM,
|
||||
userCm: cm,
|
||||
userCm: cm.DeepCopy(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -107,26 +107,26 @@ func PropagateTrustBundles(ctx context.Context, k8s kubernetes.Interface, trustB
|
|||
APIVersion: gvk.GroupVersion().String(),
|
||||
Kind: gvk.Kind,
|
||||
Name: obj.GetName(),
|
||||
UID: obj.GetUID(),
|
||||
}
|
||||
|
||||
for _, or := range p.userCm.OwnerReferences {
|
||||
// Only delete the ConfigMap if the object owns it
|
||||
if equality.Semantic.DeepDerivative(expectedOr, or) {
|
||||
if err := deleteConfigMap(ctx, k8s, obj, p.userCm); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
expected := &corev1.ConfigMap{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: userCMName(p.sysCM.Name),
|
||||
Namespace: obj.GetNamespace(),
|
||||
Labels: map[string]string{
|
||||
TrustBundleLabelKey: TrustBundleLabelValue,
|
||||
},
|
||||
Name: userCMName(p.sysCM.Name),
|
||||
Namespace: obj.GetNamespace(),
|
||||
Labels: p.sysCM.Labels,
|
||||
Annotations: p.sysCM.Annotations,
|
||||
},
|
||||
Data: p.sysCM.Data,
|
||||
BinaryData: p.sysCM.BinaryData,
|
||||
|
|
@ -135,32 +135,14 @@ func PropagateTrustBundles(ctx context.Context, k8s kubernetes.Interface, trustB
|
|||
if p.userCm == nil {
|
||||
// Update owner references
|
||||
expected.OwnerReferences = withOwnerReferences(obj, gvk, []metav1.OwnerReference{})
|
||||
err := createConfigMap(ctx, k8s, expected)
|
||||
if err != nil && !apierrors.IsAlreadyExists(err) {
|
||||
if err := createConfigMap(ctx, k8s, expected); err != nil {
|
||||
return err
|
||||
}
|
||||
if apierrors.IsAlreadyExists(err) {
|
||||
// Update existing ConfigMap
|
||||
cm, getErr := k8s.CoreV1().
|
||||
ConfigMaps(obj.GetNamespace()).
|
||||
Get(ctx, userCMName(p.sysCM.Name), metav1.GetOptions{})
|
||||
if getErr != nil {
|
||||
return err // return original error
|
||||
}
|
||||
|
||||
cm.ObjectMeta.DeepCopyInto(&expected.ObjectMeta)
|
||||
expected.OwnerReferences = withOwnerReferences(obj, gvk, cm.OwnerReferences)
|
||||
|
||||
if !equality.Semantic.DeepDerivative(expected, cm) {
|
||||
if err := updateConfigMap(ctx, k8s, expected); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
continue
|
||||
}
|
||||
|
||||
p.userCm.ObjectMeta.DeepCopyInto(&expected.ObjectMeta)
|
||||
expected.Generation = p.userCm.Generation
|
||||
expected.ResourceVersion = p.userCm.ResourceVersion
|
||||
// Update owner references
|
||||
expected.OwnerReferences = withOwnerReferences(obj, gvk, p.userCm.OwnerReferences)
|
||||
|
||||
|
|
@ -277,26 +259,15 @@ func withOwnerReferences(sb kmeta.Accessor, gvk schema.GroupVersionKind, referen
|
|||
}
|
||||
|
||||
func deleteConfigMap(ctx context.Context, k8s kubernetes.Interface, sb kmeta.Accessor, cm *corev1.ConfigMap) error {
|
||||
expectedOr := metav1.OwnerReference{
|
||||
APIVersion: sb.GroupVersionKind().GroupVersion().String(),
|
||||
Kind: sb.GroupVersionKind().Kind,
|
||||
Name: sb.GetName(),
|
||||
}
|
||||
// Only delete the ConfigMap if the object owns it
|
||||
for _, or := range cm.OwnerReferences {
|
||||
if equality.Semantic.DeepDerivative(expectedOr, or) {
|
||||
err := k8s.CoreV1().ConfigMaps(sb.GetNamespace()).Delete(ctx, cm.Name, metav1.DeleteOptions{
|
||||
TypeMeta: metav1.TypeMeta{},
|
||||
Preconditions: &metav1.Preconditions{
|
||||
UID: &cm.UID,
|
||||
},
|
||||
})
|
||||
if err != nil && !apierrors.IsNotFound(err) {
|
||||
return fmt.Errorf("failed to delete ConfigMap %s/%s: %w", cm.Namespace, cm.Name, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
err := k8s.CoreV1().ConfigMaps(sb.GetNamespace()).Delete(ctx, cm.Name, metav1.DeleteOptions{
|
||||
TypeMeta: metav1.TypeMeta{},
|
||||
Preconditions: &metav1.Preconditions{
|
||||
UID: &cm.UID,
|
||||
ResourceVersion: &cm.ResourceVersion,
|
||||
},
|
||||
})
|
||||
if err != nil && !apierrors.IsNotFound(err) {
|
||||
return fmt.Errorf("failed to delete ConfigMap %s/%s: %w", cm.Namespace, cm.Name, err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -20,6 +20,20 @@ import "context"
|
|||
|
||||
// ConfigStore is used to attach the frozen configuration to the context.
|
||||
type ConfigStore interface {
|
||||
// ConfigStore is used to attach the frozen configuration to the context.
|
||||
// ToContext is used to attach the frozen configuration to the context.
|
||||
ToContext(ctx context.Context) context.Context
|
||||
}
|
||||
|
||||
// ConfigStores is used to combine multiple ConfigStore and attach multiple frozen configurations
|
||||
// to the context.
|
||||
type ConfigStores []ConfigStore
|
||||
|
||||
// ConfigStores implements ConfigStore interface.
|
||||
var _ ConfigStore = ConfigStores{}
|
||||
|
||||
func (stores ConfigStores) ToContext(ctx context.Context) context.Context {
|
||||
for _, s := range stores {
|
||||
ctx = s.ToContext(ctx)
|
||||
}
|
||||
return ctx
|
||||
}
|
||||
|
|
|
|||
|
|
@ -115,6 +115,13 @@ immediate_gc
|
|||
go_test_e2e -timeout=2m ./test/e2e/gc ${E2E_TEST_FLAGS} || failed=1
|
||||
kubectl replace cm "config-gc" -n ${SYSTEM_NAMESPACE} -f "${TMP_DIR}"/config-gc.yaml
|
||||
|
||||
# Run tests with CORS policy enabled for Contour
|
||||
if [[ "${INGRESS_CLASS}" == *"contour"* ]]; then
|
||||
toggle_feature cors-policy "allowOrigin:\n - '*'\nallowMethods:\n - GET\n - OPTIONS\n" config-contour || fail_test
|
||||
go_test_e2e -timeout=2m ./test/e2e/corspolicy ${E2E_TEST_FLAGS} || failed=1
|
||||
toggle_feature cors-policy "" config-contour || fail_test
|
||||
fi
|
||||
|
||||
# Run scale tests.
|
||||
# Note that we use a very high -parallel because each ksvc is run as its own
|
||||
# sub-test. If this is not larger than the maximum scale tested then the test
|
||||
|
|
|
|||
|
|
@ -410,16 +410,16 @@ golang.org/x/tools/internal/stdlib
|
|||
# gomodules.xyz/jsonpatch/v2 v2.4.0
|
||||
## explicit; go 1.20
|
||||
gomodules.xyz/jsonpatch/v2
|
||||
# google.golang.org/api v0.180.0
|
||||
## explicit; go 1.19
|
||||
# google.golang.org/api v0.181.0
|
||||
## explicit; go 1.20
|
||||
google.golang.org/api/support/bundler
|
||||
# google.golang.org/genproto/googleapis/api v0.0.0-20240415180920-8c6c420018be
|
||||
# google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae
|
||||
## explicit; go 1.19
|
||||
google.golang.org/genproto/googleapis/api/httpbody
|
||||
# google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6
|
||||
# google.golang.org/genproto/googleapis/rpc v0.0.0-20240513163218-0867130af1f8
|
||||
## explicit; go 1.19
|
||||
google.golang.org/genproto/googleapis/rpc/status
|
||||
# google.golang.org/grpc v1.63.2
|
||||
# google.golang.org/grpc v1.64.0
|
||||
## explicit; go 1.19
|
||||
google.golang.org/grpc
|
||||
google.golang.org/grpc/attributes
|
||||
|
|
@ -952,10 +952,10 @@ k8s.io/utils/pointer
|
|||
k8s.io/utils/ptr
|
||||
k8s.io/utils/strings/slices
|
||||
k8s.io/utils/trace
|
||||
# knative.dev/client-pkg v0.0.0-20240507014237-dfb0087247ac
|
||||
# knative.dev/client-pkg v0.0.0-20240516132600-2d1c4c811240
|
||||
## explicit; go 1.21
|
||||
knative.dev/client-pkg/pkg/plugin
|
||||
# knative.dev/eventing v0.41.1-0.20240510202101-157296784e29
|
||||
# knative.dev/eventing v0.41.1-0.20240521145106-0e14da444476
|
||||
## explicit; go 1.21
|
||||
knative.dev/eventing/pkg/apis/config
|
||||
knative.dev/eventing/pkg/apis/duck
|
||||
|
|
@ -990,7 +990,7 @@ knative.dev/eventing/pkg/eventingtls
|
|||
# knative.dev/hack v0.0.0-20240507013718-68e3bfb39d11
|
||||
## explicit; go 1.18
|
||||
knative.dev/hack
|
||||
# knative.dev/networking v0.0.0-20240508055612-25012a498278
|
||||
# knative.dev/networking v0.0.0-20240521183848-1d0137a18a68
|
||||
## explicit; go 1.21
|
||||
knative.dev/networking/pkg
|
||||
knative.dev/networking/pkg/apis/networking
|
||||
|
|
@ -1006,7 +1006,7 @@ knative.dev/networking/pkg/http/proxy
|
|||
knative.dev/networking/pkg/http/stats
|
||||
knative.dev/networking/pkg/ingress
|
||||
knative.dev/networking/pkg/k8s
|
||||
# knative.dev/pkg v0.0.0-20240513091600-b1fd04d5c458
|
||||
# knative.dev/pkg v0.0.0-20240521083825-99e1685a7997
|
||||
## explicit; go 1.21
|
||||
knative.dev/pkg/apis
|
||||
knative.dev/pkg/apis/duck
|
||||
|
|
@ -1057,7 +1057,7 @@ knative.dev/pkg/tracing/config
|
|||
knative.dev/pkg/tracing/propagation
|
||||
knative.dev/pkg/tracing/propagation/tracecontextb3
|
||||
knative.dev/pkg/tracker
|
||||
# knative.dev/serving v0.41.1-0.20240509134134-3789ff9cc0f0
|
||||
# knative.dev/serving v0.41.1-0.20240522123807-a0a1ac776600
|
||||
## explicit; go 1.21
|
||||
knative.dev/serving/pkg/apis/autoscaling
|
||||
knative.dev/serving/pkg/apis/autoscaling/v1alpha1
|
||||
|
|
|
|||
Loading…
Reference in New Issue