diff --git a/ci/resources/stemcell-version-bump/go.mod b/ci/resources/stemcell-version-bump/go.mod index a21dbaca2..1ddea4c4e 100644 --- a/ci/resources/stemcell-version-bump/go.mod +++ b/ci/resources/stemcell-version-bump/go.mod @@ -3,15 +3,15 @@ module stemcell-version-bump go 1.26.0 require ( - cloud.google.com/go/storage v1.69.0 + cloud.google.com/go/storage v1.70.0 github.com/stretchr/testify v1.12.1 - google.golang.org/api v0.300.0 + google.golang.org/api v0.307.0 ) require ( cel.dev/expr v0.25.2 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.24.0 // indirect + cloud.google.com/go/auth v0.24.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.3.0 // indirect cloud.google.com/go/compute/metadata v0.10.0 // indirect cloud.google.com/go/iam v1.12.0 // indirect @@ -27,9 +27,9 @@ require ( github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-logr/logr v1.4.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/google/s2a-go v0.1.10 // indirect + github.com/google/s2a-go v0.1.11 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.22 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.23 // indirect github.com/googleapis/gax-go/v2 v2.26.2 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/spiffe/go-spiffe/v2 v2.8.1 // indirect @@ -43,16 +43,16 @@ require ( go.opentelemetry.io/otel/sdk/metric v1.45.0 // indirect go.opentelemetry.io/otel/trace v1.45.0 // indirect go.yaml.in/yaml/v3 v3.0.5 // indirect - golang.org/x/crypto v0.57.0 // indirect - golang.org/x/net v0.59.0 // indirect + golang.org/x/crypto v0.58.0 // indirect + golang.org/x/net v0.61.0 // indirect golang.org/x/oauth2 v0.37.0 // indirect - golang.org/x/sync v0.23.0 // indirect - golang.org/x/sys v0.48.0 // indirect - golang.org/x/text v0.42.0 // indirect + golang.org/x/sync v0.24.0 // indirect + golang.org/x/sys v0.49.0 // indirect + golang.org/x/text v0.43.0 // indirect golang.org/x/time v0.16.0 // indirect google.golang.org/genproto v0.0.0-20260715232425-e75dac1f907d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260715232425-e75dac1f907d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260921155816-b14227669459 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20261019180522-ce908d29299b // indirect google.golang.org/grpc v1.84.0 // indirect google.golang.org/protobuf v1.36.12 // indirect ) diff --git a/ci/resources/stemcell-version-bump/go.sum b/ci/resources/stemcell-version-bump/go.sum index 4a13023f5..7fdaaafcd 100644 --- a/ci/resources/stemcell-version-bump/go.sum +++ b/ci/resources/stemcell-version-bump/go.sum @@ -2,8 +2,8 @@ cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs= cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.24.0 h1:UYMbF8otPZnLAkNJ5/LYQYOq0ARcJS1P4JqTeMKbCYU= -cloud.google.com/go/auth v0.24.0/go.mod h1:IFG/AMA1VWfuTrdbieEsB2GcpJyJV/phGAvogkOoPR4= +cloud.google.com/go/auth v0.24.1 h1:NTmd2iJb4DsGIav0KiqFMYI88nMshA2wnFMBatRmoCs= +cloud.google.com/go/auth v0.24.1/go.mod h1:1dmBXa9xfBvBr39ZnDUDkaaA91ccq9CcqENDgJA4d7c= cloud.google.com/go/auth/oauth2adapt v0.3.0 h1:FY8oSZpCYoUNv6QxVODuMjQz4IlSOVeiQtZ08vLPz88= cloud.google.com/go/auth/oauth2adapt v0.3.0/go.mod h1:7+2uCm7++XFO+/lN06c2HXpDXb/NMNn2/UwyBPbTnkk= cloud.google.com/go/compute/metadata v0.10.0 h1:pyKMUQSwchgkIBBJGdILqQbs/BNJXqwSA7Ej6LAvvtY= @@ -16,8 +16,8 @@ cloud.google.com/go/longrunning v1.2.0 h1:WjYH3YHBGCxGJP9M4dWGHBfXr/cFIjMkNgWcJj cloud.google.com/go/longrunning v1.2.0/go.mod h1:5KMQALFGOCtFoi2xSOA1u3H7WKlhmckgiyFw7+LGQp0= cloud.google.com/go/monitoring v1.30.0 h1:r/d+JUbyKmJ8b07iznuKfzVzrIXTWxHQ3lBRm3x2LlY= cloud.google.com/go/monitoring v1.30.0/go.mod h1:htlUR0QWVMrjFzZmN4LGnMAve9xB/eduwjmINxVZ8RM= -cloud.google.com/go/storage v1.69.0 h1:jAAMC1411HEh78nKsU0Zns+eFj3TnhjAWIhg5Ud/XBM= -cloud.google.com/go/storage v1.69.0/go.mod h1:PELYsxTYm2peE4mwLEC1+mS1dA/kUSRUxNv56rOy44g= +cloud.google.com/go/storage v1.70.0 h1:LQNHn0rRF94jVFfF3e416IzdQqIufa5GfF6HilQxb80= +cloud.google.com/go/storage v1.70.0/go.mod h1:W84cNa070TZIegvTW67CBY+f5rxux8EJMb7YyiHdrls= cloud.google.com/go/trace v1.16.0 h1:GmQovzFc5F0CNfl0VLgL64aoTtu7xsM0YajW2GlG9+E= cloud.google.com/go/trace v1.16.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.35.0 h1:bN1gA3of5bXtbnLsRPrwfmbbe7A5UWFlcTHseujLnpc= @@ -55,12 +55,12 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= -github.com/google/s2a-go v0.1.10 h1:EMp+aOuXN6l8cE/gjF5Bt+vyZxsUuyCWe9chDWR/+uU= -github.com/google/s2a-go v0.1.10/go.mod h1:pz4tyvwXvJLLbyrkh6FW1eS2zPUXMaTmyNhYtyP2tNw= +github.com/google/s2a-go v0.1.11 h1:7v1V1TraNGP63WptsAkNqr2w8jgm4vM6A6qx6Lsw9iM= +github.com/google/s2a-go v0.1.11/go.mod h1:pz4tyvwXvJLLbyrkh6FW1eS2zPUXMaTmyNhYtyP2tNw= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.22 h1:NU4XpII6jD+Dxcot94fqjE+AfJoE/lQP9q3faYGzC/c= -github.com/googleapis/enterprise-certificate-proxy v0.3.22/go.mod h1:L3D/IQExI6LqEjBdXcZQ1WluSgigQmSwBboFstVPM4w= +github.com/googleapis/enterprise-certificate-proxy v0.3.23 h1:J+VGF1wjAM2dU2kKUXZxJdDppRLReWP7KWcclfngQhc= +github.com/googleapis/enterprise-certificate-proxy v0.3.23/go.mod h1:Y8NO/15GNLkrXI3OR5xOFmeU3XLX1sLSdtlXgJ0zmIw= github.com/googleapis/gax-go/v2 v2.26.2 h1:ydkmNXxj7bEmmeK5AihkKnWxyOyBR9TDebvp5L5izk8= github.com/googleapis/gax-go/v2 v2.26.2/go.mod h1:sMKqnMesnKH+3wiRJROcttA+cJoZoGbZl1vDQ8XYtGk= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= @@ -93,30 +93,30 @@ go.opentelemetry.io/otel/trace v1.45.0 h1:l/mP6Uv7oNO7/TblbhpbgMidxhq1uO/rPsikOy go.opentelemetry.io/otel/trace v1.45.0/go.mod h1:qoJJA2xNMnxRrdISU/kLtfUH2wNeQbiv+jhs/CxI8bc= go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= -golang.org/x/crypto v0.57.0 h1:3ZVCjf8Ggz7zneR/EHRVx68Ctf+2pmIMP2UFhh9cC6M= -golang.org/x/crypto v0.57.0/go.mod h1:Fdz0i5U6CoizGwLda9DttjSk6qlZo25zYNtR+ycvuZA= -golang.org/x/net v0.59.0 h1:5zfYln+w5XCxwrnMMJPufRgNoXEaGxl0wo5GqPXyues= -golang.org/x/net v0.59.0/go.mod h1:2DA/G1UfVbCpQPeWTmMPGY7Cs2PkBkwu743bVX5PIVg= +golang.org/x/crypto v0.58.0 h1:COkYLr4k7nDI4r6QtMML2AfzeIswWHAJthLS6K/M/54= +golang.org/x/crypto v0.58.0/go.mod h1:Xh+kl5A+M0gMiWDytH2Hhr5Z7WbNCpv/eB/EFgfSk+w= +golang.org/x/net v0.61.0 h1:RR+6j/BTBCrggOLugxa+66R8FvoN6MHlzDlZIbN9YFw= +golang.org/x/net v0.61.0/go.mod h1:WgDCOTH8iwtB66T4/GfI94AHo/hhdb7Hah9NDseQfiI= golang.org/x/oauth2 v0.37.0 h1:JUlcxA8oAtauLfiH8FX2/FkAWHAdi0QtGCGc+hofE98= golang.org/x/oauth2 v0.37.0/go.mod h1:IxwZNxUULJmpBFf9K/9NTMSIfZZuvuTy1gGxhigP/58= -golang.org/x/sync v0.23.0 h1:KameEIfc1IkluZyXWLn39Wd4tURc6GbCiISGiZm2bQk= -golang.org/x/sync v0.23.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= -golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo= -golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= -golang.org/x/text v0.42.0 h1:JbOZXgfeCPU9gacVtYliJqOhD+zhrEqK4LfdpmlUZqI= -golang.org/x/text v0.42.0/go.mod h1:ojzP1Z+2QtioaF8DTtO8K5q7JWVVYwZKenzujK0Zd0E= +golang.org/x/sync v0.24.0 h1:iqiDrGoDgyuvAKrhLQthUEzU/R378N78gXbBjxed7oA= +golang.org/x/sync v0.24.0/go.mod h1:sUUOizhqBxiL6pEWpqNLUiaJn1ShEbZ6BBqskPbjZm0= +golang.org/x/sys v0.49.0 h1:XbzkgYJHdqh/8m2Uu0W/dQv8nktxx4BFHp1M0gROTXA= +golang.org/x/sys v0.49.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og= +golang.org/x/text v0.43.0 h1:1QivrlhwAsnMOcqgOdl9my7s9OyZl8O5/UGUTJVXoWc= +golang.org/x/text v0.43.0/go.mod h1:hbSIYA/amXcRXTFSZqh8tWHEoqRvvbKPJ2uz/KU+a+s= golang.org/x/time v0.16.0 h1:vMb6ptszcQMkcwiRTAuNNU50gom6++Q/6gY2hDM6VDE= golang.org/x/time v0.16.0/go.mod h1:rVKOqvZeKvrDKTQiAHJ7wmwP0RzleSphoEA9RcdLA0s= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.300.0 h1:2rvPV2bqnPuHOaF4gGOBiT1IIc6JVXYyHCkZeqdzjNk= -google.golang.org/api v0.300.0/go.mod h1:tKfTSDfK+0FlOVl8N30VL5fU5TuaEkJjvdyTIKNwzPg= +google.golang.org/api v0.307.0 h1:KJJv1V/cOeCUrgKFippAhSg98QlR2IZFqubQKf7gQdg= +google.golang.org/api v0.307.0/go.mod h1:4XMH+b/ZEfuTbK7FnrFRY9c4xfFHVflGTKuy/i5wUmE= google.golang.org/genproto v0.0.0-20260715232425-e75dac1f907d h1:C9v1o0/4quuhOAfmRXA2j+we0PqZIp8traLdeogF3Ms= google.golang.org/genproto v0.0.0-20260715232425-e75dac1f907d/go.mod h1:Wz2wFJntZFmLGo7pLDXZ3wYk5hyc0Mb+SkHhDDXT+lU= google.golang.org/genproto/googleapis/api v0.0.0-20260715232425-e75dac1f907d h1:QwnJwPte4XXAkhPu26LTDIahnsMSUV0kK8HkxbC+Pc4= google.golang.org/genproto/googleapis/api v0.0.0-20260715232425-e75dac1f907d/go.mod h1:WRrQ7/7N19PypuT0fxLOL5Lq0waoiRri4FbtHDEKrGE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260921155816-b14227669459 h1:b0xCahf3FK2m2Cv0p4vTozGPWncCvLfwV86UNg8xWU8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260921155816-b14227669459/go.mod h1:OaIUM3+LpYcK2GXM4FTmhWoIq371Owdr+Cc7/BsYHHc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20261019180522-ce908d29299b h1:6WNWHZk91dp4gZ25642OALkuG1UVNZbwENJD19DnB8k= +google.golang.org/genproto/googleapis/rpc v0.0.0-20261019180522-ce908d29299b/go.mod h1:OaIUM3+LpYcK2GXM4FTmhWoIq371Owdr+Cc7/BsYHHc= google.golang.org/grpc v1.84.0 h1:soMyaPJ8pAak5PIQ0DGBUir0XRo2fRoMqhNWMLlLxO0= google.golang.org/grpc v1.84.0/go.mod h1:ljCht0DrxQrXBDRTZp52Qxh3Ffk8CdYm2sj4O2QN2C0= google.golang.org/protobuf v1.36.12 h1:pJOKDDOyeXErUroCihFAd5LQuwXBSpVnKGrj5o/fwxc= diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/CHANGES.md b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/CHANGES.md index a194a7ba5..df93da326 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/CHANGES.md +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/CHANGES.md @@ -1,5 +1,12 @@ # Changes +## [0.24.1](https://github.com/googleapis/google-cloud-go/compare/auth/v0.24.0...auth/v0.24.1) (2026-10-08) + + +### Bug Fixes + +* **auth:** Return empty tls.Certificate on secureconnect helper failure ([#20632](https://github.com/googleapis/google-cloud-go/issues/20632)) ([1cdb61a](https://github.com/googleapis/google-cloud-go/commit/1cdb61a25ffb7ac5d0c859191d485621c4f7aed7)), refs [#20593](https://github.com/googleapis/google-cloud-go/issues/20593) + ## [0.24.0](https://github.com/googleapis/google-cloud-go/compare/auth/v0.23.3...auth/v0.24.0) (2026-09-23) diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/grpctransport/directpath.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/grpctransport/directpath.go index c405e9f8e..3d155346e 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/grpctransport/directpath.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/grpctransport/directpath.go @@ -17,28 +17,127 @@ package grpctransport import ( "context" "net" + "net/url" "os" + "sort" "strconv" "strings" "time" "cloud.google.com/go/auth" "cloud.google.com/go/auth/credentials" + "cloud.google.com/go/auth/internal" "cloud.google.com/go/auth/internal/compute" "golang.org/x/time/rate" "google.golang.org/grpc" grpcgoogle "google.golang.org/grpc/credentials/google" ) +const directPathInterconnectInfix = "-direct." + var logRateLimiter = rate.Sometimes{Interval: 1 * time.Second} +func parseTarget(endpoint string) (host string, query url.Values, err error) { + raw := endpoint + if !strings.Contains(raw, "://") { + raw = "//" + raw + } + u, err := url.Parse(raw) + if err != nil { + return "", nil, err + } + target := u.Host + if target == "" { + target = strings.TrimPrefix(u.Path, "/") + } + if slashIdx := strings.Index(target, "/"); slashIdx != -1 { + target = target[:slashIdx] + } + if h, _, err := net.SplitHostPort(target); err == nil { + host = h + } else { + host = target + } + return host, u.Query(), nil +} + +func encodeQuery(v url.Values) string { + if len(v) == 0 { + return "" + } + var buf strings.Builder + keys := make([]string, 0, len(v)) + for k := range v { + keys = append(keys, k) + } + sort.Strings(keys) + for _, k := range keys { + vs := v[k] + keyEscaped := url.QueryEscape(k) + if len(vs) == 0 { + if buf.Len() > 0 { + buf.WriteByte('&') + } + buf.WriteString(keyEscaped) + continue + } + for _, val := range vs { + if buf.Len() > 0 { + buf.WriteByte('&') + } + buf.WriteString(keyEscaped) + if val != "" { + buf.WriteByte('=') + buf.WriteString(url.QueryEscape(val)) + } + } + } + return buf.String() +} + +func isDirectPathXdsOverInterconnectUsed(endpoint string, o *Options) bool { + if valStr, ok := os.LookupEnv(enableDirectPathXdsOverInterconnectEnvVar); ok { + if b, err := strconv.ParseBool(valStr); err == nil { + return b + } + } + if o != nil && o.InternalOptions != nil && o.InternalOptions.EnableDirectPathXdsOverInterconnect { + return true + } + if strings.Contains(endpoint, directPathInterconnectInfix) || strings.Contains(endpoint, "force-xds") { + return true + } + return false +} + +func hasUniverseDomainHost(endpoint, universeDomain string) bool { + host, _, err := parseTarget(endpoint) + if err != nil { + return false + } + return host == universeDomain || strings.HasSuffix(host, "."+universeDomain) +} + +func canUseDirectPathWithUniverseDomain(endpoint string, opts *Options) bool { + if opts != nil && opts.clientUniverseDomain() != internal.DefaultUniverseDomain { + return false + } + if isDirectPathXdsOverInterconnectUsed(endpoint, opts) && strings.Contains(endpoint, ".") { + return hasUniverseDomainHost(endpoint, internal.DefaultUniverseDomain) + } + return true +} + func isDirectPathEnabled(endpoint string, opts *Options) bool { - if opts.InternalOptions != nil && !opts.InternalOptions.EnableDirectPath { + if opts == nil || opts.InternalOptions == nil || !opts.InternalOptions.EnableDirectPath { return false } if !checkDirectPathEndPoint(endpoint) { return false } + if !canUseDirectPathWithUniverseDomain(endpoint, opts) { + return false + } if b, _ := strconv.ParseBool(os.Getenv(disableDirectPathEnvVar)); b { return false } @@ -46,10 +145,10 @@ func isDirectPathEnabled(endpoint string, opts *Options) bool { } func checkDirectPathEndPoint(endpoint string) bool { - // Only [dns:///]host[:port] is supported, not other schemes (e.g., "tcp://" or "unix://"). - // Also don't try direct path if the user has chosen an alternate name resolver - // (i.e., via ":///" prefix). - if strings.Contains(endpoint, "://") && !strings.HasPrefix(endpoint, "dns:///") { + // Only [dns:///]host[:port] or google-c2p:/// is supported, not other schemes (e.g., "tcp://" or "unix://"). + if strings.Contains(endpoint, "://") && + !strings.HasPrefix(endpoint, "dns:///") && + !strings.HasPrefix(endpoint, "google-c2p:///") { return false } @@ -84,7 +183,7 @@ func isTokenProviderDirectPathCompatible(tp auth.TokenProvider, o *Options) bool if tp == nil { return false } - if o.InternalOptions != nil && o.InternalOptions.EnableNonDefaultSAForDirectPath { + if o != nil && o.InternalOptions != nil && o.InternalOptions.EnableNonDefaultSAForDirectPath { return true } return isTokenProviderComputeEngine(tp) @@ -96,13 +195,16 @@ func isDirectPathXdsUsed(o *Options) bool { return true } // Method 2: Enable DirectPath xDS by option; - if o.InternalOptions != nil && o.InternalOptions.EnableDirectPathXds { + if o != nil && o.InternalOptions != nil && o.InternalOptions.EnableDirectPathXds { return true } return false } func isDirectPathBoundTokenEnabled(opts *InternalOptions) bool { + if opts == nil { + return false + } for _, ev := range opts.AllowHardBoundTokens { if ev == "ALTS" { return true @@ -111,17 +213,42 @@ func isDirectPathBoundTokenEnabled(opts *InternalOptions) bool { return false } +func canUseDirectPath(endpoint string, opts *Options, creds *auth.Credentials) bool { + if !isDirectPathEnabled(endpoint, opts) { + return false + } + interconnect := isDirectPathXdsOverInterconnectUsed(endpoint, opts) + if !compute.OnComputeEngine() && !interconnect { + return false + } + if interconnect { + return creds != nil && creds.TokenProvider != nil + } + return isTokenProviderDirectPathCompatible(creds, opts) +} + // configureDirectPath returns some dial options and an endpoint to use if the // configuration allows the use of direct path. If it does not the provided // grpcOpts and endpoint are returned. -func configureDirectPath(grpcOpts []grpc.DialOption, opts *Options, endpoint string, creds *auth.Credentials) ([]grpc.DialOption, string, error) { +func configureDirectPath(grpcOpts []grpc.DialOption, opts *Options, endpoint string, creds *auth.Credentials, metadata map[string]string) ([]grpc.DialOption, string, error) { logRateLimiter.Do(func() { logDirectPathMisconfig(endpoint, creds, opts) }) - if isDirectPathEnabled(endpoint, opts) && compute.OnComputeEngine() && isTokenProviderDirectPathCompatible(creds, opts) { + if canUseDirectPath(endpoint, opts, creds) { + interconnect := isDirectPathXdsOverInterconnectUsed(endpoint, opts) // Overwrite all of the previously specific DialOptions, DirectPath uses its own set of credentials and certificates. - defaultCredetialsOptions := grpcgoogle.DefaultCredentialsOptions{PerRPCCreds: &grpcCredentialsProvider{creds: creds, endpoint: endpoint}} - if isDirectPathBoundTokenEnabled(opts.InternalOptions) && isTokenProviderComputeEngine(creds) { + perRPCCreds := &grpcCredentialsProvider{ + creds: creds, + endpoint: endpoint, + metadata: metadata, + } + if opts != nil { + perRPCCreds.clientUniverseDomain = opts.UniverseDomain + } + defaultCredetialsOptions := grpcgoogle.DefaultCredentialsOptions{ + PerRPCCreds: perRPCCreds, + } + if !interconnect && opts != nil && isDirectPathBoundTokenEnabled(opts.InternalOptions) && isTokenProviderComputeEngine(creds) { optsClone := opts.resolveDetectOptions() optsClone.TokenBindingType = credentials.ALTSHardBinding altsCreds, err := credentials.DetectDefault(optsClone) @@ -135,13 +262,35 @@ func configureDirectPath(grpcOpts []grpc.DialOption, opts *Options, endpoint str if timeoutDialerOption != nil { grpcOpts = append(grpcOpts, timeoutDialerOption) } + cleanAddr, query, err := parseTarget(endpoint) + if err != nil { + return nil, "", err + } + if interconnect { + if strings.HasSuffix(cleanAddr, ".googleapis.com") && !strings.Contains(cleanAddr, directPathInterconnectInfix) { + authority := cleanAddr + cleanAddr = strings.TrimSuffix(cleanAddr, ".googleapis.com") + directPathInterconnectInfix + "googleapis.com" + grpcOpts = append(grpcOpts, grpc.WithAuthority(authority)) + } else if strings.Contains(cleanAddr, directPathInterconnectInfix) { + authority := strings.Replace(cleanAddr, directPathInterconnectInfix, ".", 1) + grpcOpts = append(grpcOpts, grpc.WithAuthority(authority)) + } + } // Check if google-c2p resolver is enabled for DirectPath - if isDirectPathXdsUsed(opts) { - // google-c2p resolver target must not have a port number - if addr, _, err := net.SplitHostPort(endpoint); err == nil { - endpoint = "google-c2p:///" + addr - } else { - endpoint = "google-c2p:///" + endpoint + if strings.HasPrefix(endpoint, "google-c2p:///") { + if interconnect { + if !query.Has("force-xds") { + query["force-xds"] = nil + } + } + endpoint = "google-c2p:///" + cleanAddr + if q := encodeQuery(query); q != "" { + endpoint += "?" + q + } + } else if isDirectPathXdsUsed(opts) || interconnect { + endpoint = "google-c2p:///" + cleanAddr + if interconnect { + endpoint += "?force-xds" } } else { if !strings.HasPrefix(endpoint, "dns:///") { @@ -160,17 +309,31 @@ func configureDirectPath(grpcOpts []grpc.DialOption, opts *Options, endpoint str } func logDirectPathMisconfig(endpoint string, creds *auth.Credentials, o *Options) { + if o == nil { + return + } + if isDirectPathXdsOverInterconnectUsed(endpoint, o) { + if !canUseDirectPathWithUniverseDomain(endpoint, o) { + o.logger().Warn("DirectPath over Interconnect is disabled. Non-default universe domain is not supported.") + } else if creds == nil || creds.TokenProvider == nil { + o.logger().Warn("DirectPath over Interconnect is disabled. Valid credentials are required.") + } else if !isDirectPathEnabled(endpoint, o) { + o.logger().Warn("DirectPath is disabled. To enable, please set the EnableDirectPath option along with the EnableDirectPathXds option.") + } + return + } // Case 1: does not enable DirectPath if !isDirectPathEnabled(endpoint, o) { o.logger().Warn("DirectPath is disabled. To enable, please set the EnableDirectPath option along with the EnableDirectPathXds option.") } else { + interconnect := isDirectPathXdsOverInterconnectUsed(endpoint, o) // Case 2: credential is not correctly set - if !isTokenProviderDirectPathCompatible(creds, o) { + if !interconnect && !isTokenProviderDirectPathCompatible(creds, o) { o.logger().Warn("DirectPath is disabled. Please make sure the token source is fetched from GCE metadata server and the default service account is used.") } // Case 3: not running on GCE - if !compute.OnComputeEngine() { + if !interconnect && !compute.OnComputeEngine() { o.logger().Warn("DirectPath is disabled. DirectPath is only available in a GCE environment.") } } diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go index f76091b63..cfdc41c07 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/grpctransport/grpctransport.go @@ -52,6 +52,9 @@ const ( // Check env to decide if using google-c2p resolver for DirectPath traffic. enableDirectPathXdsEnvVar = "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS" + // Check env to decide if using DirectPath over Interconnect (on-premises xDS). + enableDirectPathXdsOverInterconnectEnvVar = "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS_OVER_INTERCONNECT" + quotaProjectHeaderKey = "X-goog-user-project" ) @@ -152,6 +155,16 @@ func (o *Options) logger() *slog.Logger { return internallog.New(o.Logger) } +func (o *Options) clientUniverseDomain() string { + if o != nil && o.UniverseDomain != "" { + return o.UniverseDomain + } + if envUD := os.Getenv(internal.UniverseDomainEnvVar); envUD != "" { + return envUD + } + return internal.DefaultUniverseDomain +} + func (o *Options) validate() error { if o == nil { return errors.New("grpctransport: opts required to be non-nil") @@ -212,6 +225,9 @@ type InternalOptions struct { // EnableDirectPathXds overrides the default DirectPath type. It is only // valid when DirectPath is enabled. EnableDirectPathXds bool + // EnableDirectPathXdsOverInterconnect enables DirectPath over Google Cloud + // Interconnect (on-premises xDS name resolution via google-c2p with force-xds). + EnableDirectPathXdsOverInterconnect bool // EnableJWTWithScope specifies if scope can be used with self-signed JWT. EnableJWTWithScope bool // AllowHardBoundTokens allows libraries to request a hard-bound token. @@ -284,6 +300,7 @@ func dial(ctx context.Context, secure bool, opts *Options) (*grpc.ClientConn, er tOpts.DefaultMTLSEndpoint = io.DefaultMTLSEndpoint tOpts.EnableDirectPath = io.EnableDirectPath tOpts.EnableDirectPathXds = io.EnableDirectPathXds + tOpts.EnableDirectPathXdsOverInterconnect = io.EnableDirectPathXdsOverInterconnect } transportCreds, err := transport.GetGRPCTransportCredsAndEndpoint(tOpts) if err != nil { @@ -362,7 +379,7 @@ func dial(ctx context.Context, secure bool, opts *Options) (*grpc.ClientConn, er }), ) // Attempt Direct Path - grpcOpts, transportCreds.Endpoint, err = configureDirectPath(grpcOpts, opts, transportCreds.Endpoint, creds) + grpcOpts, transportCreds.Endpoint, err = configureDirectPath(grpcOpts, opts, transportCreds.Endpoint, creds, metadata) if err != nil { return nil, err } @@ -507,6 +524,9 @@ func extractHostPort(target string) (string, int) { target = target[slashIdx+1:] } } + if qIdx := strings.Index(target, "?"); qIdx != -1 { + target = target[:qIdx] + } host, portStr, err := net.SplitHostPort(target) if err != nil { return target, 0 diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/cba.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/cba.go index 14bca966e..ebce7db51 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/cba.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/cba.go @@ -65,15 +65,16 @@ const ( // transport packages in order to avoid cyclic deps. It correlates 1:1 with // fields on httptransport.Options and grpctransport.Options. type Options struct { - Endpoint string - DefaultEndpointTemplate string - DefaultMTLSEndpoint string - ClientCertProvider cert.Provider - Client *http.Client - UniverseDomain string - EnableDirectPath bool - EnableDirectPathXds bool - Logger *slog.Logger + Endpoint string + DefaultEndpointTemplate string + DefaultMTLSEndpoint string + ClientCertProvider cert.Provider + Client *http.Client + UniverseDomain string + EnableDirectPath bool + EnableDirectPathXds bool + EnableDirectPathXdsOverInterconnect bool + Logger *slog.Logger } // getUniverseDomain returns the default service domain for a given Cloud diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go index 206317404..ecb2448b8 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/cert/secureconnect_cert.go @@ -79,13 +79,13 @@ func NewSecureConnectProvider(configFilePath string) (Provider, error) { source := &secureConnectSource{ metadata: metadata, } - cert, err := source.getClientCertificate(nil) + _, err = source.getClientCertificate(nil) + if errors.Is(err, errSourceUnavailable) { + return nil, errSourceUnavailable + } if err != nil { return nil, err } - if cert == nil { - return nil, errSourceUnavailable - } return source.getClientCertificate, nil } @@ -109,9 +109,10 @@ func (s *secureConnectSource) getClientCertificate(info *tls.CertificateRequestI command := s.metadata.Cmd data, err := exec.Command(command[0], command[1:]...).Output() if err != nil { - // Intentionally return nil, nil when the helper fails so the probe in - // NewSecureConnectProvider can recognize the source as unavailable. - return nil, nil + // Return errSourceUnavailable so the probe in NewSecureConnectProvider + // can recognize the source as unavailable, and so crypto/tls aborts + // the handshake with a clear error if it fails at runtime. + return nil, fmt.Errorf("%w: %v", errSourceUnavailable, err) } cert, err := tls.X509KeyPair(data, data) if err != nil { diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/s2a.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/s2a.go index a63309956..7e74590dd 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/s2a.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/transport/s2a.go @@ -126,7 +126,7 @@ func shouldUseS2A(clientCertSource cert.Provider, opts *Options) bool { return false } // If directPath is enabled, skip S2A. - return !opts.EnableDirectPath && !opts.EnableDirectPathXds + return !opts.EnableDirectPath && !opts.EnableDirectPathXds && !opts.EnableDirectPathXdsOverInterconnect } func isGoogleS2AEnabled() bool { diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/version.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/version.go index eda0ad9f8..39e24f21c 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/version.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/auth/internal/version.go @@ -17,4 +17,4 @@ package internal // Version is the current tagged release of the library. -const Version = "0.24.0" +const Version = "0.24.1" diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/.repo-metadata-full.json b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/.repo-metadata-full.json deleted file mode 100644 index 134d3771e..000000000 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/.repo-metadata-full.json +++ /dev/null @@ -1,3482 +0,0 @@ -{ - "cloud.google.com/go/accessapproval/apiv1": { - "api_shortname": "accessapproval", - "distribution_name": "cloud.google.com/go/accessapproval/apiv1", - "description": "Access Approval API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/accessapproval/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/accesscontextmanager/apiv1": { - "api_shortname": "accesscontextmanager", - "distribution_name": "cloud.google.com/go/accesscontextmanager/apiv1", - "description": "Access Context Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/accesscontextmanager/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/advisorynotifications/apiv1": { - "api_shortname": "advisorynotifications", - "distribution_name": "cloud.google.com/go/advisorynotifications/apiv1", - "description": "Advisory Notifications API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/advisorynotifications/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/ai/generativelanguage/apiv1": { - "api_shortname": "generativelanguage", - "distribution_name": "cloud.google.com/go/ai/generativelanguage/apiv1", - "description": "Generative Language API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/ai/latest/generativelanguage/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/ai/generativelanguage/apiv1alpha": { - "api_shortname": "generativelanguage", - "distribution_name": "cloud.google.com/go/ai/generativelanguage/apiv1alpha", - "description": "Generative Language API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/ai/latest/generativelanguage/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/ai/generativelanguage/apiv1beta": { - "api_shortname": "generativelanguage", - "distribution_name": "cloud.google.com/go/ai/generativelanguage/apiv1beta", - "description": "Generative Language API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/ai/latest/generativelanguage/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/ai/generativelanguage/apiv1beta2": { - "api_shortname": "generativelanguage", - "distribution_name": "cloud.google.com/go/ai/generativelanguage/apiv1beta2", - "description": "Generative Language API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/ai/latest/generativelanguage/apiv1beta2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/aiplatform/apiv1": { - "api_shortname": "aiplatform", - "distribution_name": "cloud.google.com/go/aiplatform/apiv1", - "description": "Vertex AI API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/aiplatform/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/aiplatform/apiv1beta1": { - "api_shortname": "aiplatform", - "distribution_name": "cloud.google.com/go/aiplatform/apiv1beta1", - "description": "Vertex AI API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/aiplatform/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/alloydb/apiv1": { - "api_shortname": "alloydb", - "distribution_name": "cloud.google.com/go/alloydb/apiv1", - "description": "AlloyDB API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/alloydb/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/alloydb/apiv1alpha": { - "api_shortname": "alloydb", - "distribution_name": "cloud.google.com/go/alloydb/apiv1alpha", - "description": "AlloyDB API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/alloydb/latest/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/alloydb/apiv1beta": { - "api_shortname": "alloydb", - "distribution_name": "cloud.google.com/go/alloydb/apiv1beta", - "description": "AlloyDB API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/alloydb/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/alloydb/connectors/apiv1": { - "api_shortname": "connectors", - "distribution_name": "cloud.google.com/go/alloydb/connectors/apiv1", - "description": "AlloyDB connectors", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/alloydb/latest/connectors/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/alloydb/connectors/apiv1alpha": { - "api_shortname": "connectors", - "distribution_name": "cloud.google.com/go/alloydb/connectors/apiv1alpha", - "description": "AlloyDB connectors", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/alloydb/latest/connectors/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/alloydb/connectors/apiv1beta": { - "api_shortname": "connectors", - "distribution_name": "cloud.google.com/go/alloydb/connectors/apiv1beta", - "description": "AlloyDB connectors", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/alloydb/latest/connectors/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/analytics/admin/apiv1alpha": { - "api_shortname": "analyticsadmin", - "distribution_name": "cloud.google.com/go/analytics/admin/apiv1alpha", - "description": "Google Analytics Admin API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/analytics/latest/admin/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apigateway/apiv1": { - "api_shortname": "apigateway", - "distribution_name": "cloud.google.com/go/apigateway/apiv1", - "description": "API Gateway API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apigateway/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apigeeconnect/apiv1": { - "api_shortname": "apigeeconnect", - "distribution_name": "cloud.google.com/go/apigeeconnect/apiv1", - "description": "Apigee Connect API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apigeeconnect/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apigeeregistry/apiv1": { - "api_shortname": "apigeeregistry", - "distribution_name": "cloud.google.com/go/apigeeregistry/apiv1", - "description": "Apigee Registry API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apigeeregistry/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apihub/apiv1": { - "api_shortname": "apihub", - "distribution_name": "cloud.google.com/go/apihub/apiv1", - "description": "API hub API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apihub/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apikeys/apiv2": { - "api_shortname": "apikeys", - "distribution_name": "cloud.google.com/go/apikeys/apiv2", - "description": "API Keys API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apikeys/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/appengine/apiv1": { - "api_shortname": "appengine", - "distribution_name": "cloud.google.com/go/appengine/apiv1", - "description": "App Engine Admin API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/appengine/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apphub/apiv1": { - "api_shortname": "apphub", - "distribution_name": "cloud.google.com/go/apphub/apiv1", - "description": "App Hub API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apphub/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apps/events/subscriptions/apiv1": { - "api_shortname": "workspaceevents", - "distribution_name": "cloud.google.com/go/apps/events/subscriptions/apiv1", - "description": "Google Workspace Events API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apps/latest/events/subscriptions/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apps/events/subscriptions/apiv1beta": { - "api_shortname": "workspaceevents", - "distribution_name": "cloud.google.com/go/apps/events/subscriptions/apiv1beta", - "description": "Google Workspace Events API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apps/latest/events/subscriptions/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apps/meet/apiv2": { - "api_shortname": "meet", - "distribution_name": "cloud.google.com/go/apps/meet/apiv2", - "description": "Google Meet API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apps/latest/meet/apiv2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/apps/meet/apiv2beta": { - "api_shortname": "meet", - "distribution_name": "cloud.google.com/go/apps/meet/apiv2beta", - "description": "Google Meet API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/apps/latest/meet/apiv2beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/area120/tables/apiv1alpha1": { - "api_shortname": "area120tables", - "distribution_name": "cloud.google.com/go/area120/tables/apiv1alpha1", - "description": "Area120 Tables API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/area120/latest/tables/apiv1alpha1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/artifactregistry/apiv1": { - "api_shortname": "artifactregistry", - "distribution_name": "cloud.google.com/go/artifactregistry/apiv1", - "description": "Artifact Registry API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/artifactregistry/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/artifactregistry/apiv1beta2": { - "api_shortname": "artifactregistry", - "distribution_name": "cloud.google.com/go/artifactregistry/apiv1beta2", - "description": "Artifact Registry API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/artifactregistry/latest/apiv1beta2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/asset/apiv1": { - "api_shortname": "cloudasset", - "distribution_name": "cloud.google.com/go/asset/apiv1", - "description": "Cloud Asset API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/asset/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/asset/apiv1p2beta1": { - "api_shortname": "cloudasset", - "distribution_name": "cloud.google.com/go/asset/apiv1p2beta1", - "description": "Cloud Asset API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/asset/latest/apiv1p2beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/asset/apiv1p5beta1": { - "api_shortname": "cloudasset", - "distribution_name": "cloud.google.com/go/asset/apiv1p5beta1", - "description": "Cloud Asset API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/asset/latest/apiv1p5beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/assuredworkloads/apiv1": { - "api_shortname": "assuredworkloads", - "distribution_name": "cloud.google.com/go/assuredworkloads/apiv1", - "description": "Assured Workloads API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/assuredworkloads/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/assuredworkloads/apiv1beta1": { - "api_shortname": "assuredworkloads", - "distribution_name": "cloud.google.com/go/assuredworkloads/apiv1beta1", - "description": "Assured Workloads API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/assuredworkloads/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/automl/apiv1": { - "api_shortname": "automl", - "distribution_name": "cloud.google.com/go/automl/apiv1", - "description": "Cloud AutoML API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/automl/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/automl/apiv1beta1": { - "api_shortname": "automl", - "distribution_name": "cloud.google.com/go/automl/apiv1beta1", - "description": "Cloud AutoML API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/automl/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/backupdr/apiv1": { - "api_shortname": "backupdr", - "distribution_name": "cloud.google.com/go/backupdr/apiv1", - "description": "Backup and DR Service API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/backupdr/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/baremetalsolution/apiv2": { - "api_shortname": "baremetalsolution", - "distribution_name": "cloud.google.com/go/baremetalsolution/apiv2", - "description": "Bare Metal Solution API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/baremetalsolution/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/batch/apiv1": { - "api_shortname": "batch", - "distribution_name": "cloud.google.com/go/batch/apiv1", - "description": "Batch API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/batch/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/beyondcorp/appconnections/apiv1": { - "api_shortname": "beyondcorp", - "distribution_name": "cloud.google.com/go/beyondcorp/appconnections/apiv1", - "description": "BeyondCorp API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/appconnections/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/beyondcorp/appconnectors/apiv1": { - "api_shortname": "beyondcorp", - "distribution_name": "cloud.google.com/go/beyondcorp/appconnectors/apiv1", - "description": "BeyondCorp API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/appconnectors/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/beyondcorp/appgateways/apiv1": { - "api_shortname": "beyondcorp", - "distribution_name": "cloud.google.com/go/beyondcorp/appgateways/apiv1", - "description": "BeyondCorp API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/appgateways/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/beyondcorp/clientconnectorservices/apiv1": { - "api_shortname": "beyondcorp", - "distribution_name": "cloud.google.com/go/beyondcorp/clientconnectorservices/apiv1", - "description": "BeyondCorp API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/clientconnectorservices/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/beyondcorp/clientgateways/apiv1": { - "api_shortname": "beyondcorp", - "distribution_name": "cloud.google.com/go/beyondcorp/clientgateways/apiv1", - "description": "BeyondCorp API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/beyondcorp/latest/clientgateways/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery": { - "api_shortname": "bigquery", - "distribution_name": "cloud.google.com/go/bigquery", - "description": "BigQuery", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest", - "release_level": "stable", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/bigquery/analyticshub/apiv1": { - "api_shortname": "analyticshub", - "distribution_name": "cloud.google.com/go/bigquery/analyticshub/apiv1", - "description": "Analytics Hub API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/analyticshub/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/biglake/apiv1": { - "api_shortname": "biglake", - "distribution_name": "cloud.google.com/go/bigquery/biglake/apiv1", - "description": "BigLake API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/biglake/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/biglake/apiv1alpha1": { - "api_shortname": "biglake", - "distribution_name": "cloud.google.com/go/bigquery/biglake/apiv1alpha1", - "description": "BigLake API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/biglake/apiv1alpha1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/connection/apiv1": { - "api_shortname": "bigqueryconnection", - "distribution_name": "cloud.google.com/go/bigquery/connection/apiv1", - "description": "BigQuery Connection API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/connection/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/connection/apiv1beta1": { - "api_shortname": "bigqueryconnection", - "distribution_name": "cloud.google.com/go/bigquery/connection/apiv1beta1", - "description": "BigQuery Connection API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/connection/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/dataexchange/apiv1beta1": { - "api_shortname": "analyticshub", - "distribution_name": "cloud.google.com/go/bigquery/dataexchange/apiv1beta1", - "description": "Analytics Hub API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/dataexchange/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/datapolicies/apiv1": { - "api_shortname": "bigquerydatapolicy", - "distribution_name": "cloud.google.com/go/bigquery/datapolicies/apiv1", - "description": "BigQuery Data Policy API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/datapolicies/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/datapolicies/apiv1beta1": { - "api_shortname": "bigquerydatapolicy", - "distribution_name": "cloud.google.com/go/bigquery/datapolicies/apiv1beta1", - "description": "BigQuery Data Policy API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/datapolicies/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/datapolicies/apiv2": { - "api_shortname": "bigquerydatapolicy", - "distribution_name": "cloud.google.com/go/bigquery/datapolicies/apiv2", - "description": "BigQuery Data Policy API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/datapolicies/apiv2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/datapolicies/apiv2beta1": { - "api_shortname": "bigquerydatapolicy", - "distribution_name": "cloud.google.com/go/bigquery/datapolicies/apiv2beta1", - "description": "BigQuery Data Policy API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/datapolicies/apiv2beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/datatransfer/apiv1": { - "api_shortname": "bigquerydatatransfer", - "distribution_name": "cloud.google.com/go/bigquery/datatransfer/apiv1", - "description": "BigQuery Data Transfer API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/datatransfer/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/migration/apiv2": { - "api_shortname": "bigquerymigration", - "distribution_name": "cloud.google.com/go/bigquery/migration/apiv2", - "description": "BigQuery Migration API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/migration/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/migration/apiv2alpha": { - "api_shortname": "bigquerymigration", - "distribution_name": "cloud.google.com/go/bigquery/migration/apiv2alpha", - "description": "BigQuery Migration API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/migration/apiv2alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/reservation/apiv1": { - "api_shortname": "bigqueryreservation", - "distribution_name": "cloud.google.com/go/bigquery/reservation/apiv1", - "description": "BigQuery Reservation API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/reservation/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/storage/apiv1": { - "api_shortname": "bigquerystorage", - "distribution_name": "cloud.google.com/go/bigquery/storage/apiv1", - "description": "BigQuery Storage API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/storage/apiv1alpha": { - "api_shortname": "bigquerystorage", - "distribution_name": "cloud.google.com/go/bigquery/storage/apiv1alpha", - "description": "BigQuery Storage API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/storage/apiv1beta": { - "api_shortname": "bigquerystorage", - "distribution_name": "cloud.google.com/go/bigquery/storage/apiv1beta", - "description": "BigQuery Storage API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/storage/apiv1beta1": { - "api_shortname": "bigquerystorage", - "distribution_name": "cloud.google.com/go/bigquery/storage/apiv1beta1", - "description": "BigQuery Storage API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/storage/apiv1beta2": { - "api_shortname": "bigquerystorage", - "distribution_name": "cloud.google.com/go/bigquery/storage/apiv1beta2", - "description": "BigQuery Storage API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/latest/storage/apiv1beta2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigquery/v2/apiv2": { - "api_shortname": "bigquery", - "distribution_name": "cloud.google.com/go/bigquery/v2/apiv2", - "description": "BigQuery API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigquery/v2/latest/apiv2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigtable": { - "api_shortname": "bigtable", - "distribution_name": "cloud.google.com/go/bigtable", - "description": "Cloud BigTable", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigtable/latest", - "release_level": "stable", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/bigtable/admin/apiv2": { - "api_shortname": "bigtableadmin", - "distribution_name": "cloud.google.com/go/bigtable/admin/apiv2", - "description": "Cloud Bigtable Admin API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigtable/latest/admin/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/bigtable/apiv2": { - "api_shortname": "bigtable", - "distribution_name": "cloud.google.com/go/bigtable/apiv2", - "description": "Cloud Bigtable API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/bigtable/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/billing/apiv1": { - "api_shortname": "cloudbilling", - "distribution_name": "cloud.google.com/go/billing/apiv1", - "description": "Cloud Billing API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/billing/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/billing/budgets/apiv1": { - "api_shortname": "billingbudgets", - "distribution_name": "cloud.google.com/go/billing/budgets/apiv1", - "description": "Cloud Billing Budget API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/billing/latest/budgets/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/billing/budgets/apiv1beta1": { - "api_shortname": "billingbudgets", - "distribution_name": "cloud.google.com/go/billing/budgets/apiv1beta1", - "description": "Cloud Billing Budget API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/billing/latest/budgets/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/binaryauthorization/apiv1": { - "api_shortname": "binaryauthorization", - "distribution_name": "cloud.google.com/go/binaryauthorization/apiv1", - "description": "Binary Authorization API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/binaryauthorization/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/binaryauthorization/apiv1beta1": { - "api_shortname": "binaryauthorization", - "distribution_name": "cloud.google.com/go/binaryauthorization/apiv1beta1", - "description": "Binary Authorization API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/binaryauthorization/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/capacityplanner/apiv1beta": { - "api_shortname": "capacityplanner", - "distribution_name": "cloud.google.com/go/capacityplanner/apiv1beta", - "description": "Capacity Planner API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/capacityplanner/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/certificatemanager/apiv1": { - "api_shortname": "certificatemanager", - "distribution_name": "cloud.google.com/go/certificatemanager/apiv1", - "description": "Certificate Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/certificatemanager/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/channel/apiv1": { - "api_shortname": "cloudchannel", - "distribution_name": "cloud.google.com/go/channel/apiv1", - "description": "Cloud Channel API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/channel/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/chat/apiv1": { - "api_shortname": "chat", - "distribution_name": "cloud.google.com/go/chat/apiv1", - "description": "Google Chat API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/chat/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/chronicle/apiv1": { - "api_shortname": "chronicle", - "distribution_name": "cloud.google.com/go/chronicle/apiv1", - "description": "Chronicle API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/chronicle/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudbuild/apiv1/v2": { - "api_shortname": "cloudbuild", - "distribution_name": "cloud.google.com/go/cloudbuild/apiv1/v2", - "description": "Cloud Build API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudbuild/latest/apiv1/v2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudbuild/apiv2": { - "api_shortname": "cloudbuild", - "distribution_name": "cloud.google.com/go/cloudbuild/apiv2", - "description": "Cloud Build API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudbuild/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudcontrolspartner/apiv1": { - "api_shortname": "cloudcontrolspartner", - "distribution_name": "cloud.google.com/go/cloudcontrolspartner/apiv1", - "description": "Cloud Controls Partner API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudcontrolspartner/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudcontrolspartner/apiv1beta": { - "api_shortname": "cloudcontrolspartner", - "distribution_name": "cloud.google.com/go/cloudcontrolspartner/apiv1beta", - "description": "Cloud Controls Partner API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudcontrolspartner/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/clouddms/apiv1": { - "api_shortname": "datamigration", - "distribution_name": "cloud.google.com/go/clouddms/apiv1", - "description": "Database Migration API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/clouddms/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudprofiler/apiv2": { - "api_shortname": "cloudprofiler", - "distribution_name": "cloud.google.com/go/cloudprofiler/apiv2", - "description": "Cloud Profiler API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudprofiler/latest/apiv2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudquotas/apiv1": { - "api_shortname": "cloudquotas", - "distribution_name": "cloud.google.com/go/cloudquotas/apiv1", - "description": "Cloud Quotas API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudquotas/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudquotas/apiv1beta": { - "api_shortname": "cloudquotas", - "distribution_name": "cloud.google.com/go/cloudquotas/apiv1beta", - "description": "Cloud Quotas API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudquotas/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudtasks/apiv2": { - "api_shortname": "cloudtasks", - "distribution_name": "cloud.google.com/go/cloudtasks/apiv2", - "description": "Cloud Tasks API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudtasks/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudtasks/apiv2beta2": { - "api_shortname": "cloudtasks", - "distribution_name": "cloud.google.com/go/cloudtasks/apiv2beta2", - "description": "Cloud Tasks API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudtasks/latest/apiv2beta2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/cloudtasks/apiv2beta3": { - "api_shortname": "cloudtasks", - "distribution_name": "cloud.google.com/go/cloudtasks/apiv2beta3", - "description": "Cloud Tasks API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/cloudtasks/latest/apiv2beta3", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/commerce/consumer/procurement/apiv1": { - "api_shortname": "cloudcommerceconsumerprocurement", - "distribution_name": "cloud.google.com/go/commerce/consumer/procurement/apiv1", - "description": "Cloud Commerce Consumer Procurement API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/commerce/latest/consumer/procurement/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/compute/apiv1": { - "api_shortname": "compute", - "distribution_name": "cloud.google.com/go/compute/apiv1", - "description": "Google Compute Engine API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/compute/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/compute/apiv1beta": { - "api_shortname": "compute", - "distribution_name": "cloud.google.com/go/compute/apiv1beta", - "description": "Google Compute Engine API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/compute/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/compute/metadata": { - "api_shortname": "compute-metadata", - "distribution_name": "cloud.google.com/go/compute/metadata", - "description": "Service Metadata API", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/compute/latest/metadata", - "release_level": "stable", - "library_type": "CORE" - }, - "cloud.google.com/go/confidentialcomputing/apiv1": { - "api_shortname": "confidentialcomputing", - "distribution_name": "cloud.google.com/go/confidentialcomputing/apiv1", - "description": "Confidential Computing API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/confidentialcomputing/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/confidentialcomputing/apiv1alpha1": { - "api_shortname": "confidentialcomputing", - "distribution_name": "cloud.google.com/go/confidentialcomputing/apiv1alpha1", - "description": "Confidential Computing API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/confidentialcomputing/latest/apiv1alpha1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/config/apiv1": { - "api_shortname": "config", - "distribution_name": "cloud.google.com/go/config/apiv1", - "description": "Infrastructure Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/config/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/configdelivery/apiv1": { - "api_shortname": "configdelivery", - "distribution_name": "cloud.google.com/go/configdelivery/apiv1", - "description": "Config Delivery API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/configdelivery/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/configdelivery/apiv1beta": { - "api_shortname": "configdelivery", - "distribution_name": "cloud.google.com/go/configdelivery/apiv1beta", - "description": "Config Delivery API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/configdelivery/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/contactcenterinsights/apiv1": { - "api_shortname": "contactcenterinsights", - "distribution_name": "cloud.google.com/go/contactcenterinsights/apiv1", - "description": "Contact Center AI Insights API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/contactcenterinsights/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/container/apiv1": { - "api_shortname": "container", - "distribution_name": "cloud.google.com/go/container/apiv1", - "description": "Kubernetes Engine API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/container/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/containeranalysis/apiv1beta1": { - "api_shortname": "containeranalysis", - "distribution_name": "cloud.google.com/go/containeranalysis/apiv1beta1", - "description": "Container Analysis API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/containeranalysis/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/datacatalog/apiv1": { - "api_shortname": "datacatalog", - "distribution_name": "cloud.google.com/go/datacatalog/apiv1", - "description": "Google Cloud Data Catalog API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datacatalog/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/datacatalog/apiv1beta1": { - "api_shortname": "datacatalog", - "distribution_name": "cloud.google.com/go/datacatalog/apiv1beta1", - "description": "Google Cloud Data Catalog API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datacatalog/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/datacatalog/lineage/apiv1": { - "api_shortname": "datalineage", - "distribution_name": "cloud.google.com/go/datacatalog/lineage/apiv1", - "description": "Data Lineage API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datacatalog/latest/lineage/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dataflow/apiv1beta3": { - "api_shortname": "dataflow", - "distribution_name": "cloud.google.com/go/dataflow/apiv1beta3", - "description": "Dataflow API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataflow/latest/apiv1beta3", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dataform/apiv1": { - "api_shortname": "dataform", - "distribution_name": "cloud.google.com/go/dataform/apiv1", - "description": "Dataform API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataform/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dataform/apiv1beta1": { - "api_shortname": "dataform", - "distribution_name": "cloud.google.com/go/dataform/apiv1beta1", - "description": "Dataform API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataform/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/datafusion/apiv1": { - "api_shortname": "datafusion", - "distribution_name": "cloud.google.com/go/datafusion/apiv1", - "description": "Cloud Data Fusion API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datafusion/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/datalabeling/apiv1beta1": { - "api_shortname": "datalabeling", - "distribution_name": "cloud.google.com/go/datalabeling/apiv1beta1", - "description": "Data Labeling API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datalabeling/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dataplex/apiv1": { - "api_shortname": "dataplex", - "distribution_name": "cloud.google.com/go/dataplex/apiv1", - "description": "Cloud Dataplex API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataplex/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dataproc/v2/apiv1": { - "api_shortname": "dataproc", - "distribution_name": "cloud.google.com/go/dataproc/v2/apiv1", - "description": "Cloud Dataproc API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataproc/v2/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dataqna/apiv1alpha": { - "api_shortname": "dataqna", - "distribution_name": "cloud.google.com/go/dataqna/apiv1alpha", - "description": "Data QnA API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dataqna/latest/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/datastore": { - "api_shortname": "datastore", - "distribution_name": "cloud.google.com/go/datastore", - "description": "Cloud Datastore", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datastore/latest", - "release_level": "stable", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/datastore/admin/apiv1": { - "api_shortname": "datastore", - "distribution_name": "cloud.google.com/go/datastore/admin/apiv1", - "description": "Cloud Datastore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datastore/latest/admin/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/datastore/apiv1": { - "api_shortname": "datastore", - "distribution_name": "cloud.google.com/go/datastore/apiv1", - "description": "Cloud Datastore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datastore/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/datastream/apiv1": { - "api_shortname": "datastream", - "distribution_name": "cloud.google.com/go/datastream/apiv1", - "description": "Datastream API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datastream/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/datastream/apiv1alpha1": { - "api_shortname": "datastream", - "distribution_name": "cloud.google.com/go/datastream/apiv1alpha1", - "description": "Datastream API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/datastream/latest/apiv1alpha1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/deploy/apiv1": { - "api_shortname": "clouddeploy", - "distribution_name": "cloud.google.com/go/deploy/apiv1", - "description": "Cloud Deploy API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/deploy/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/developerconnect/apiv1": { - "api_shortname": "developerconnect", - "distribution_name": "cloud.google.com/go/developerconnect/apiv1", - "description": "Developer Connect API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/developerconnect/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/devicestreaming/apiv1": { - "api_shortname": "devicestreaming", - "distribution_name": "cloud.google.com/go/devicestreaming/apiv1", - "description": "Device Streaming API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/devicestreaming/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dialogflow/apiv2": { - "api_shortname": "dialogflow", - "distribution_name": "cloud.google.com/go/dialogflow/apiv2", - "description": "Dialogflow API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dialogflow/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dialogflow/apiv2beta1": { - "api_shortname": "dialogflow", - "distribution_name": "cloud.google.com/go/dialogflow/apiv2beta1", - "description": "Dialogflow API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dialogflow/latest/apiv2beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dialogflow/cx/apiv3": { - "api_shortname": "dialogflow", - "distribution_name": "cloud.google.com/go/dialogflow/cx/apiv3", - "description": "Dialogflow API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dialogflow/latest/cx/apiv3", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/dialogflow/cx/apiv3beta1": { - "api_shortname": "dialogflow", - "distribution_name": "cloud.google.com/go/dialogflow/cx/apiv3beta1", - "description": "Dialogflow API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/dialogflow/latest/cx/apiv3beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/discoveryengine/apiv1": { - "api_shortname": "discoveryengine", - "distribution_name": "cloud.google.com/go/discoveryengine/apiv1", - "description": "Discovery Engine API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/discoveryengine/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/discoveryengine/apiv1alpha": { - "api_shortname": "discoveryengine", - "distribution_name": "cloud.google.com/go/discoveryengine/apiv1alpha", - "description": "Discovery Engine API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/discoveryengine/latest/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/discoveryengine/apiv1beta": { - "api_shortname": "discoveryengine", - "distribution_name": "cloud.google.com/go/discoveryengine/apiv1beta", - "description": "Discovery Engine API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/discoveryengine/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/documentai/apiv1": { - "api_shortname": "documentai", - "distribution_name": "cloud.google.com/go/documentai/apiv1", - "description": "Cloud Document AI API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/documentai/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/documentai/apiv1beta3": { - "api_shortname": "documentai", - "distribution_name": "cloud.google.com/go/documentai/apiv1beta3", - "description": "Cloud Document AI API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/documentai/latest/apiv1beta3", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/domains/apiv1beta1": { - "api_shortname": "domains", - "distribution_name": "cloud.google.com/go/domains/apiv1beta1", - "description": "Cloud Domains API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/domains/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/edgecontainer/apiv1": { - "api_shortname": "edgecontainer", - "distribution_name": "cloud.google.com/go/edgecontainer/apiv1", - "description": "Distributed Cloud Edge Container API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/edgecontainer/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/edgenetwork/apiv1": { - "api_shortname": "edgenetwork", - "distribution_name": "cloud.google.com/go/edgenetwork/apiv1", - "description": "Distributed Cloud Edge Network API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/edgenetwork/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/errorreporting": { - "api_shortname": "clouderrorreporting", - "distribution_name": "cloud.google.com/go/errorreporting", - "description": "Cloud Error Reporting API", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/errorreporting/latest", - "release_level": "preview", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/errorreporting/apiv1beta1": { - "api_shortname": "clouderrorreporting", - "distribution_name": "cloud.google.com/go/errorreporting/apiv1beta1", - "description": "Error Reporting API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/errorreporting/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/essentialcontacts/apiv1": { - "api_shortname": "essentialcontacts", - "distribution_name": "cloud.google.com/go/essentialcontacts/apiv1", - "description": "Essential Contacts API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/essentialcontacts/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/eventarc/apiv1": { - "api_shortname": "eventarc", - "distribution_name": "cloud.google.com/go/eventarc/apiv1", - "description": "Eventarc API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/eventarc/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/eventarc/publishing/apiv1": { - "api_shortname": "eventarcpublishing", - "distribution_name": "cloud.google.com/go/eventarc/publishing/apiv1", - "description": "Eventarc Publishing API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/eventarc/latest/publishing/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/filestore/apiv1": { - "api_shortname": "file", - "distribution_name": "cloud.google.com/go/filestore/apiv1", - "description": "Cloud Filestore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/filestore/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/financialservices/apiv1": { - "api_shortname": "financialservices", - "distribution_name": "cloud.google.com/go/financialservices/apiv1", - "description": "Financial Services API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/financialservices/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/firestore": { - "api_shortname": "firestore", - "distribution_name": "cloud.google.com/go/firestore", - "description": "Cloud Firestore API", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest", - "release_level": "stable", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/firestore/apiv1": { - "api_shortname": "firestore", - "distribution_name": "cloud.google.com/go/firestore/apiv1", - "description": "Cloud Firestore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/firestore/apiv1/admin": { - "api_shortname": "firestore", - "distribution_name": "cloud.google.com/go/firestore/apiv1/admin", - "description": "Cloud Firestore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/firestore/latest/apiv1/admin", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/functions/apiv1": { - "api_shortname": "cloudfunctions", - "distribution_name": "cloud.google.com/go/functions/apiv1", - "description": "Cloud Functions API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/functions/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/functions/apiv2": { - "api_shortname": "cloudfunctions", - "distribution_name": "cloud.google.com/go/functions/apiv2", - "description": "Cloud Functions API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/functions/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/functions/apiv2beta": { - "api_shortname": "cloudfunctions", - "distribution_name": "cloud.google.com/go/functions/apiv2beta", - "description": "Cloud Functions API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/functions/latest/apiv2beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/functions/metadata": { - "api_shortname": "firestore-metadata", - "distribution_name": "cloud.google.com/go/functions/metadata", - "description": "Cloud Functions", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/functions/latest/metadata", - "release_level": "preview", - "library_type": "CORE" - }, - "cloud.google.com/go/geminidataanalytics/apiv1beta": { - "api_shortname": "geminidataanalytics", - "distribution_name": "cloud.google.com/go/geminidataanalytics/apiv1beta", - "description": "Data Analytics API with Gemini", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/geminidataanalytics/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/gkebackup/apiv1": { - "api_shortname": "gkebackup", - "distribution_name": "cloud.google.com/go/gkebackup/apiv1", - "description": "Backup for GKE API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gkebackup/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/gkeconnect/gateway/apiv1": { - "api_shortname": "connectgateway", - "distribution_name": "cloud.google.com/go/gkeconnect/gateway/apiv1", - "description": "Connect Gateway API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gkeconnect/latest/gateway/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/gkeconnect/gateway/apiv1beta1": { - "api_shortname": "connectgateway", - "distribution_name": "cloud.google.com/go/gkeconnect/gateway/apiv1beta1", - "description": "Connect Gateway API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gkeconnect/latest/gateway/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/gkehub/apiv1beta1": { - "api_shortname": "gkehub", - "distribution_name": "cloud.google.com/go/gkehub/apiv1beta1", - "description": "GKE Hub API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gkehub/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/gkemulticloud/apiv1": { - "api_shortname": "gkemulticloud", - "distribution_name": "cloud.google.com/go/gkemulticloud/apiv1", - "description": "GKE Multi-Cloud API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gkemulticloud/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/gsuiteaddons/apiv1": { - "api_shortname": "gsuiteaddons", - "distribution_name": "cloud.google.com/go/gsuiteaddons/apiv1", - "description": "Google Workspace add-ons API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/gsuiteaddons/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/iam": { - "api_shortname": "iam", - "distribution_name": "cloud.google.com/go/iam", - "description": "Cloud IAM", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iam/latest", - "release_level": "stable", - "library_type": "CORE" - }, - "cloud.google.com/go/iam/apiv1": { - "api_shortname": "iam-meta-api", - "distribution_name": "cloud.google.com/go/iam/apiv1", - "description": "IAM Meta API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iam/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/iam/apiv2": { - "api_shortname": "iam", - "distribution_name": "cloud.google.com/go/iam/apiv2", - "description": "Identity and Access Management (IAM) API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iam/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/iam/apiv3": { - "api_shortname": "iam", - "distribution_name": "cloud.google.com/go/iam/apiv3", - "description": "Identity and Access Management (IAM) API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iam/latest/apiv3", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/iam/apiv3beta": { - "api_shortname": "iam", - "distribution_name": "cloud.google.com/go/iam/apiv3beta", - "description": "Identity and Access Management (IAM) API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iam/latest/apiv3beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/iam/credentials/apiv1": { - "api_shortname": "iamcredentials", - "distribution_name": "cloud.google.com/go/iam/credentials/apiv1", - "description": "IAM Service Account Credentials API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iam/latest/credentials/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/iap/apiv1": { - "api_shortname": "iap", - "distribution_name": "cloud.google.com/go/iap/apiv1", - "description": "Cloud Identity-Aware Proxy API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iap/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/identitytoolkit/apiv2": { - "api_shortname": "identitytoolkit", - "distribution_name": "cloud.google.com/go/identitytoolkit/apiv2", - "description": "Identity Toolkit API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/identitytoolkit/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/ids/apiv1": { - "api_shortname": "ids", - "distribution_name": "cloud.google.com/go/ids/apiv1", - "description": "Cloud IDS API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/ids/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/iot/apiv1": { - "api_shortname": "cloudiot", - "distribution_name": "cloud.google.com/go/iot/apiv1", - "description": "Cloud IoT API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/iot/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/kms/apiv1": { - "api_shortname": "cloudkms", - "distribution_name": "cloud.google.com/go/kms/apiv1", - "description": "Cloud Key Management Service (KMS) API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/kms/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/kms/inventory/apiv1": { - "api_shortname": "kmsinventory", - "distribution_name": "cloud.google.com/go/kms/inventory/apiv1", - "description": "KMS Inventory API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/kms/latest/inventory/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/language/apiv1": { - "api_shortname": "language", - "distribution_name": "cloud.google.com/go/language/apiv1", - "description": "Cloud Natural Language API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/language/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/language/apiv1beta2": { - "api_shortname": "language", - "distribution_name": "cloud.google.com/go/language/apiv1beta2", - "description": "Cloud Natural Language API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/language/latest/apiv1beta2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/language/apiv2": { - "api_shortname": "language", - "distribution_name": "cloud.google.com/go/language/apiv2", - "description": "Cloud Natural Language API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/language/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/licensemanager/apiv1": { - "api_shortname": "licensemanager", - "distribution_name": "cloud.google.com/go/licensemanager/apiv1", - "description": "License Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/licensemanager/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/lifesciences/apiv2beta": { - "api_shortname": "lifesciences", - "distribution_name": "cloud.google.com/go/lifesciences/apiv2beta", - "description": "Cloud Life Sciences API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/lifesciences/latest/apiv2beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/locationfinder/apiv1": { - "api_shortname": "cloudlocationfinder", - "distribution_name": "cloud.google.com/go/locationfinder/apiv1", - "description": "Cloud Location Finder API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/locationfinder/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/logging": { - "api_shortname": "logging", - "distribution_name": "cloud.google.com/go/logging", - "description": "Cloud Logging API", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/logging/latest", - "release_level": "stable", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/logging/apiv2": { - "api_shortname": "logging", - "distribution_name": "cloud.google.com/go/logging/apiv2", - "description": "Cloud Logging API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/logging/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/longrunning/autogen": { - "api_shortname": "longrunning", - "distribution_name": "cloud.google.com/go/longrunning/autogen", - "description": "Long Running Operations API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/longrunning/latest/autogen", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/lustre/apiv1": { - "api_shortname": "lustre", - "distribution_name": "cloud.google.com/go/lustre/apiv1", - "description": "Google Cloud Managed Lustre API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/lustre/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/maintenance/api/apiv1beta": { - "api_shortname": "maintenance", - "distribution_name": "cloud.google.com/go/maintenance/api/apiv1beta", - "description": "Maintenance API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maintenance/latest/api/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/managedidentities/apiv1": { - "api_shortname": "managedidentities", - "distribution_name": "cloud.google.com/go/managedidentities/apiv1", - "description": "Managed Service for Microsoft Active Directory API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/managedidentities/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/managedkafka/apiv1": { - "api_shortname": "managedkafka", - "distribution_name": "cloud.google.com/go/managedkafka/apiv1", - "description": "Managed Service for Apache Kafka API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/managedkafka/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/managedkafka/schemaregistry/apiv1": { - "api_shortname": "managedkafka", - "distribution_name": "cloud.google.com/go/managedkafka/schemaregistry/apiv1", - "description": "Managed Service for Apache Kafka API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/managedkafka/latest/schemaregistry/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/maps/addressvalidation/apiv1": { - "api_shortname": "addressvalidation", - "distribution_name": "cloud.google.com/go/maps/addressvalidation/apiv1", - "description": "Address Validation API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/addressvalidation/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/maps/areainsights/apiv1": { - "api_shortname": "areainsights", - "distribution_name": "cloud.google.com/go/maps/areainsights/apiv1", - "description": "Places Aggregate API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/areainsights/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/maps/fleetengine/apiv1": { - "api_shortname": "fleetengine", - "distribution_name": "cloud.google.com/go/maps/fleetengine/apiv1", - "description": "Local Rides and Deliveries API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/fleetengine/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/maps/fleetengine/delivery/apiv1": { - "api_shortname": "fleetengine", - "distribution_name": "cloud.google.com/go/maps/fleetengine/delivery/apiv1", - "description": "Last Mile Fleet Solution Delivery API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/fleetengine/delivery/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/maps/places/apiv1": { - "api_shortname": "places", - "distribution_name": "cloud.google.com/go/maps/places/apiv1", - "description": "Places API (New)", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/places/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/maps/routeoptimization/apiv1": { - "api_shortname": "routeoptimization", - "distribution_name": "cloud.google.com/go/maps/routeoptimization/apiv1", - "description": "Route Optimization API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/routeoptimization/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/maps/routing/apiv2": { - "api_shortname": "routes", - "distribution_name": "cloud.google.com/go/maps/routing/apiv2", - "description": "Routes API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/routing/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/maps/solar/apiv1": { - "api_shortname": "solar", - "distribution_name": "cloud.google.com/go/maps/solar/apiv1", - "description": "Solar API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/maps/latest/solar/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/mediatranslation/apiv1beta1": { - "api_shortname": "mediatranslation", - "distribution_name": "cloud.google.com/go/mediatranslation/apiv1beta1", - "description": "Media Translation API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/mediatranslation/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/memcache/apiv1": { - "api_shortname": "memcache", - "distribution_name": "cloud.google.com/go/memcache/apiv1", - "description": "Cloud Memorystore for Memcached API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/memcache/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/memcache/apiv1beta2": { - "api_shortname": "memcache", - "distribution_name": "cloud.google.com/go/memcache/apiv1beta2", - "description": "Cloud Memorystore for Memcached API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/memcache/latest/apiv1beta2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/memorystore/apiv1": { - "api_shortname": "memorystore", - "distribution_name": "cloud.google.com/go/memorystore/apiv1", - "description": "Memorystore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/memorystore/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/memorystore/apiv1beta": { - "api_shortname": "memorystore", - "distribution_name": "cloud.google.com/go/memorystore/apiv1beta", - "description": "Memorystore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/memorystore/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/metastore/apiv1": { - "api_shortname": "metastore", - "distribution_name": "cloud.google.com/go/metastore/apiv1", - "description": "Dataproc Metastore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/metastore/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/metastore/apiv1alpha": { - "api_shortname": "metastore", - "distribution_name": "cloud.google.com/go/metastore/apiv1alpha", - "description": "Dataproc Metastore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/metastore/latest/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/metastore/apiv1beta": { - "api_shortname": "metastore", - "distribution_name": "cloud.google.com/go/metastore/apiv1beta", - "description": "Dataproc Metastore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/metastore/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/migrationcenter/apiv1": { - "api_shortname": "migrationcenter", - "distribution_name": "cloud.google.com/go/migrationcenter/apiv1", - "description": "Migration Center API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/migrationcenter/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/modelarmor/apiv1": { - "api_shortname": "modelarmor", - "distribution_name": "cloud.google.com/go/modelarmor/apiv1", - "description": "Model Armor API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/modelarmor/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/modelarmor/apiv1beta": { - "api_shortname": "modelarmor", - "distribution_name": "cloud.google.com/go/modelarmor/apiv1beta", - "description": "Model Armor API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/modelarmor/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/monitoring/apiv3/v2": { - "api_shortname": "monitoring", - "distribution_name": "cloud.google.com/go/monitoring/apiv3/v2", - "description": "Cloud Monitoring API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/monitoring/latest/apiv3/v2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/monitoring/dashboard/apiv1": { - "api_shortname": "monitoring", - "distribution_name": "cloud.google.com/go/monitoring/dashboard/apiv1", - "description": "Cloud Monitoring API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/monitoring/latest/dashboard/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/monitoring/metricsscope/apiv1": { - "api_shortname": "monitoring", - "distribution_name": "cloud.google.com/go/monitoring/metricsscope/apiv1", - "description": "Cloud Monitoring API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/monitoring/latest/metricsscope/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/netapp/apiv1": { - "api_shortname": "netapp", - "distribution_name": "cloud.google.com/go/netapp/apiv1", - "description": "NetApp API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/netapp/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/networkconnectivity/apiv1": { - "api_shortname": "networkconnectivity", - "distribution_name": "cloud.google.com/go/networkconnectivity/apiv1", - "description": "Network Connectivity API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/networkconnectivity/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/networkconnectivity/apiv1alpha1": { - "api_shortname": "networkconnectivity", - "distribution_name": "cloud.google.com/go/networkconnectivity/apiv1alpha1", - "description": "Network Connectivity API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/networkconnectivity/latest/apiv1alpha1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/networkmanagement/apiv1": { - "api_shortname": "networkmanagement", - "distribution_name": "cloud.google.com/go/networkmanagement/apiv1", - "description": "Network Management API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/networkmanagement/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/networksecurity/apiv1beta1": { - "api_shortname": "networksecurity", - "distribution_name": "cloud.google.com/go/networksecurity/apiv1beta1", - "description": "Network Security API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/networksecurity/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/networkservices/apiv1": { - "api_shortname": "networkservices", - "distribution_name": "cloud.google.com/go/networkservices/apiv1", - "description": "Network Services API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/networkservices/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/notebooks/apiv1": { - "api_shortname": "notebooks", - "distribution_name": "cloud.google.com/go/notebooks/apiv1", - "description": "Notebooks API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/notebooks/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/notebooks/apiv1beta1": { - "api_shortname": "notebooks", - "distribution_name": "cloud.google.com/go/notebooks/apiv1beta1", - "description": "Notebooks API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/notebooks/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/notebooks/apiv2": { - "api_shortname": "notebooks", - "distribution_name": "cloud.google.com/go/notebooks/apiv2", - "description": "Notebooks API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/notebooks/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/optimization/apiv1": { - "api_shortname": "cloudoptimization", - "distribution_name": "cloud.google.com/go/optimization/apiv1", - "description": "Cloud Optimization API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/optimization/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/oracledatabase/apiv1": { - "api_shortname": "oracledatabase", - "distribution_name": "cloud.google.com/go/oracledatabase/apiv1", - "description": "Oracle Database@Google Cloud API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/oracledatabase/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/orchestration/airflow/service/apiv1": { - "api_shortname": "composer", - "distribution_name": "cloud.google.com/go/orchestration/airflow/service/apiv1", - "description": "Cloud Composer API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/orchestration/latest/airflow/service/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/orgpolicy/apiv2": { - "api_shortname": "orgpolicy", - "distribution_name": "cloud.google.com/go/orgpolicy/apiv2", - "description": "Organization Policy API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/orgpolicy/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/osconfig/agentendpoint/apiv1": { - "api_shortname": "osconfig", - "distribution_name": "cloud.google.com/go/osconfig/agentendpoint/apiv1", - "description": "OS Config API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/agentendpoint/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/osconfig/agentendpoint/apiv1beta": { - "api_shortname": "osconfig", - "distribution_name": "cloud.google.com/go/osconfig/agentendpoint/apiv1beta", - "description": "OS Config API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/agentendpoint/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/osconfig/apiv1": { - "api_shortname": "osconfig", - "distribution_name": "cloud.google.com/go/osconfig/apiv1", - "description": "OS Config API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/osconfig/apiv1alpha": { - "api_shortname": "osconfig", - "distribution_name": "cloud.google.com/go/osconfig/apiv1alpha", - "description": "OS Config API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/osconfig/apiv1beta": { - "api_shortname": "osconfig", - "distribution_name": "cloud.google.com/go/osconfig/apiv1beta", - "description": "OS Config API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/osconfig/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/oslogin/apiv1": { - "api_shortname": "oslogin", - "distribution_name": "cloud.google.com/go/oslogin/apiv1", - "description": "Cloud OS Login API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/oslogin/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/oslogin/apiv1beta": { - "api_shortname": "oslogin", - "distribution_name": "cloud.google.com/go/oslogin/apiv1beta", - "description": "Cloud OS Login API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/oslogin/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/parallelstore/apiv1": { - "api_shortname": "parallelstore", - "distribution_name": "cloud.google.com/go/parallelstore/apiv1", - "description": "Parallelstore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/parallelstore/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/parallelstore/apiv1beta": { - "api_shortname": "parallelstore", - "distribution_name": "cloud.google.com/go/parallelstore/apiv1beta", - "description": "Parallelstore API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/parallelstore/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/parametermanager/apiv1": { - "api_shortname": "parametermanager", - "distribution_name": "cloud.google.com/go/parametermanager/apiv1", - "description": "Parameter Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/parametermanager/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/phishingprotection/apiv1beta1": { - "api_shortname": "phishingprotection", - "distribution_name": "cloud.google.com/go/phishingprotection/apiv1beta1", - "description": "Phishing Protection API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/phishingprotection/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/policysimulator/apiv1": { - "api_shortname": "policysimulator", - "distribution_name": "cloud.google.com/go/policysimulator/apiv1", - "description": "Policy Simulator API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/policysimulator/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/policytroubleshooter/apiv1": { - "api_shortname": "policytroubleshooter", - "distribution_name": "cloud.google.com/go/policytroubleshooter/apiv1", - "description": "Policy Troubleshooter API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/policytroubleshooter/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/policytroubleshooter/iam/apiv3": { - "api_shortname": "policytroubleshooter", - "distribution_name": "cloud.google.com/go/policytroubleshooter/iam/apiv3", - "description": "Policy Troubleshooter API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/policytroubleshooter/latest/iam/apiv3", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/privatecatalog/apiv1beta1": { - "api_shortname": "cloudprivatecatalog", - "distribution_name": "cloud.google.com/go/privatecatalog/apiv1beta1", - "description": "Cloud Private Catalog API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/privatecatalog/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/privilegedaccessmanager/apiv1": { - "api_shortname": "privilegedaccessmanager", - "distribution_name": "cloud.google.com/go/privilegedaccessmanager/apiv1", - "description": "Privileged Access Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/privilegedaccessmanager/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/profiler": { - "api_shortname": "cloudprofiler", - "distribution_name": "cloud.google.com/go/profiler", - "description": "Cloud Profiler", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/profiler/latest", - "release_level": "stable", - "library_type": "AGENT" - }, - "cloud.google.com/go/pubsub": { - "api_shortname": "pubsub", - "distribution_name": "cloud.google.com/go/pubsub", - "description": "Cloud PubSub", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/pubsub/latest", - "release_level": "stable", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/pubsub/v2/apiv1": { - "api_shortname": "pubsub", - "distribution_name": "cloud.google.com/go/pubsub/v2/apiv1", - "description": "Cloud Pub/Sub API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/pubsub/v2/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/pubsublite": { - "api_shortname": "pubsublite", - "distribution_name": "cloud.google.com/go/pubsublite", - "description": "Cloud PubSub Lite", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/pubsublite/latest", - "release_level": "stable", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/pubsublite/apiv1": { - "api_shortname": "pubsublite", - "distribution_name": "cloud.google.com/go/pubsublite/apiv1", - "description": "Pub/Sub Lite API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/pubsublite/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/rapidmigrationassessment/apiv1": { - "api_shortname": "rapidmigrationassessment", - "distribution_name": "cloud.google.com/go/rapidmigrationassessment/apiv1", - "description": "Rapid Migration Assessment API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/rapidmigrationassessment/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/recaptchaenterprise/v2/apiv1": { - "api_shortname": "recaptchaenterprise", - "distribution_name": "cloud.google.com/go/recaptchaenterprise/v2/apiv1", - "description": "reCAPTCHA Enterprise API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recaptchaenterprise/v2/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/recaptchaenterprise/v2/apiv1beta1": { - "api_shortname": "recaptchaenterprise", - "distribution_name": "cloud.google.com/go/recaptchaenterprise/v2/apiv1beta1", - "description": "reCAPTCHA Enterprise API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recaptchaenterprise/v2/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/recommendationengine/apiv1beta1": { - "api_shortname": "recommendationengine", - "distribution_name": "cloud.google.com/go/recommendationengine/apiv1beta1", - "description": "Recommendations AI", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recommendationengine/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/recommender/apiv1": { - "api_shortname": "recommender", - "distribution_name": "cloud.google.com/go/recommender/apiv1", - "description": "Recommender API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recommender/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/recommender/apiv1beta1": { - "api_shortname": "recommender", - "distribution_name": "cloud.google.com/go/recommender/apiv1beta1", - "description": "Recommender API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/recommender/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/redis/apiv1": { - "api_shortname": "redis", - "distribution_name": "cloud.google.com/go/redis/apiv1", - "description": "Google Cloud Memorystore for Redis API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/redis/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/redis/apiv1beta1": { - "api_shortname": "redis", - "distribution_name": "cloud.google.com/go/redis/apiv1beta1", - "description": "Google Cloud Memorystore for Redis API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/redis/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/redis/cluster/apiv1": { - "api_shortname": "redis", - "distribution_name": "cloud.google.com/go/redis/cluster/apiv1", - "description": "Google Cloud Memorystore for Redis API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/redis/latest/cluster/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/resourcemanager/apiv2": { - "api_shortname": "cloudresourcemanager", - "distribution_name": "cloud.google.com/go/resourcemanager/apiv2", - "description": "Cloud Resource Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/resourcemanager/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/resourcemanager/apiv3": { - "api_shortname": "cloudresourcemanager", - "distribution_name": "cloud.google.com/go/resourcemanager/apiv3", - "description": "Cloud Resource Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/resourcemanager/latest/apiv3", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/retail/apiv2": { - "api_shortname": "retail", - "distribution_name": "cloud.google.com/go/retail/apiv2", - "description": "Vertex AI Search for commerce API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/retail/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/retail/apiv2alpha": { - "api_shortname": "retail", - "distribution_name": "cloud.google.com/go/retail/apiv2alpha", - "description": "Vertex AI Search for commerce API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/retail/latest/apiv2alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/retail/apiv2beta": { - "api_shortname": "retail", - "distribution_name": "cloud.google.com/go/retail/apiv2beta", - "description": "Vertex AI Search for commerce API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/retail/latest/apiv2beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/rpcreplay": { - "api_shortname": "rpcreplay", - "distribution_name": "cloud.google.com/go/rpcreplay", - "description": "RPC Replay", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/latest/rpcreplay", - "release_level": "stable", - "library_type": "OTHER" - }, - "cloud.google.com/go/run/apiv2": { - "api_shortname": "run", - "distribution_name": "cloud.google.com/go/run/apiv2", - "description": "Cloud Run Admin API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/run/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/scheduler/apiv1": { - "api_shortname": "cloudscheduler", - "distribution_name": "cloud.google.com/go/scheduler/apiv1", - "description": "Cloud Scheduler API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/scheduler/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/scheduler/apiv1beta1": { - "api_shortname": "cloudscheduler", - "distribution_name": "cloud.google.com/go/scheduler/apiv1beta1", - "description": "Cloud Scheduler API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/scheduler/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/secretmanager/apiv1": { - "api_shortname": "secretmanager", - "distribution_name": "cloud.google.com/go/secretmanager/apiv1", - "description": "Secret Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/secretmanager/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/secretmanager/apiv1beta2": { - "api_shortname": "secretmanager", - "distribution_name": "cloud.google.com/go/secretmanager/apiv1beta2", - "description": "Secret Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/secretmanager/latest/apiv1beta2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/securesourcemanager/apiv1": { - "api_shortname": "securesourcemanager", - "distribution_name": "cloud.google.com/go/securesourcemanager/apiv1", - "description": "Secure Source Manager API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securesourcemanager/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/security/privateca/apiv1": { - "api_shortname": "privateca", - "distribution_name": "cloud.google.com/go/security/privateca/apiv1", - "description": "Certificate Authority API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/security/latest/privateca/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/security/publicca/apiv1": { - "api_shortname": "publicca", - "distribution_name": "cloud.google.com/go/security/publicca/apiv1", - "description": "Public Certificate Authority API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/security/latest/publicca/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/security/publicca/apiv1beta1": { - "api_shortname": "publicca", - "distribution_name": "cloud.google.com/go/security/publicca/apiv1beta1", - "description": "Public Certificate Authority API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/security/latest/publicca/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/securitycenter/apiv1": { - "api_shortname": "securitycenter", - "distribution_name": "cloud.google.com/go/securitycenter/apiv1", - "description": "Security Command Center API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/securitycenter/apiv1beta1": { - "api_shortname": "securitycenter", - "distribution_name": "cloud.google.com/go/securitycenter/apiv1beta1", - "description": "Security Command Center API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/securitycenter/apiv1p1beta1": { - "api_shortname": "securitycenter", - "distribution_name": "cloud.google.com/go/securitycenter/apiv1p1beta1", - "description": "Security Command Center API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv1p1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/securitycenter/apiv2": { - "api_shortname": "securitycenter", - "distribution_name": "cloud.google.com/go/securitycenter/apiv2", - "description": "Security Command Center API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/apiv2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/securitycenter/settings/apiv1beta1": { - "api_shortname": "securitycenter", - "distribution_name": "cloud.google.com/go/securitycenter/settings/apiv1beta1", - "description": "Cloud Security Command Center API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycenter/latest/settings/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/securitycentermanagement/apiv1": { - "api_shortname": "securitycentermanagement", - "distribution_name": "cloud.google.com/go/securitycentermanagement/apiv1", - "description": "Security Command Center Management API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securitycentermanagement/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/securityposture/apiv1": { - "api_shortname": "securityposture", - "distribution_name": "cloud.google.com/go/securityposture/apiv1", - "description": "Security Posture API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/securityposture/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/servicecontrol/apiv1": { - "api_shortname": "servicecontrol", - "distribution_name": "cloud.google.com/go/servicecontrol/apiv1", - "description": "Service Control API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/servicecontrol/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/servicedirectory/apiv1": { - "api_shortname": "servicedirectory", - "distribution_name": "cloud.google.com/go/servicedirectory/apiv1", - "description": "Service Directory API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/servicedirectory/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/servicedirectory/apiv1beta1": { - "api_shortname": "servicedirectory", - "distribution_name": "cloud.google.com/go/servicedirectory/apiv1beta1", - "description": "Service Directory API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/servicedirectory/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/servicehealth/apiv1": { - "api_shortname": "servicehealth", - "distribution_name": "cloud.google.com/go/servicehealth/apiv1", - "description": "Service Health API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/servicehealth/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/servicemanagement/apiv1": { - "api_shortname": "servicemanagement", - "distribution_name": "cloud.google.com/go/servicemanagement/apiv1", - "description": "Service Management API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/servicemanagement/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/serviceusage/apiv1": { - "api_shortname": "serviceusage", - "distribution_name": "cloud.google.com/go/serviceusage/apiv1", - "description": "Service Usage API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/serviceusage/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shell/apiv1": { - "api_shortname": "cloudshell", - "distribution_name": "cloud.google.com/go/shell/apiv1", - "description": "Cloud Shell API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shell/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/css/apiv1": { - "api_shortname": "css", - "distribution_name": "cloud.google.com/go/shopping/css/apiv1", - "description": "CSS API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/css/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/accounts/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/accounts/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/accounts/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/accounts/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/accounts/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/accounts/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/conversions/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/conversions/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/conversions/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/conversions/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/conversions/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/conversions/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/datasources/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/datasources/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/datasources/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/datasources/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/datasources/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/datasources/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/inventories/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/inventories/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/inventories/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/inventories/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/inventories/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/inventories/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/issueresolution/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/issueresolution/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/issueresolution/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/issueresolution/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/issueresolution/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/issueresolution/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/lfp/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/lfp/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/lfp/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/lfp/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/lfp/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/lfp/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/notifications/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/notifications/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/notifications/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/notifications/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/notifications/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/notifications/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/ordertracking/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/ordertracking/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/ordertracking/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/ordertracking/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/ordertracking/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/ordertracking/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/products/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/products/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/products/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/products/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/products/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/products/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/productstudio/apiv1alpha": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/productstudio/apiv1alpha", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/productstudio/apiv1alpha", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/promotions/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/promotions/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/promotions/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/promotions/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/promotions/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/promotions/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/quota/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/quota/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/quota/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/quota/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/quota/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/quota/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/reports/apiv1": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/reports/apiv1", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/reports/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/reports/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/reports/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/reports/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/shopping/merchant/reviews/apiv1beta": { - "api_shortname": "merchantapi", - "distribution_name": "cloud.google.com/go/shopping/merchant/reviews/apiv1beta", - "description": "Merchant API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/shopping/latest/merchant/reviews/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/spanner": { - "api_shortname": "spanner", - "distribution_name": "cloud.google.com/go/spanner", - "description": "Cloud Spanner", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest", - "release_level": "stable", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/spanner/adapter/apiv1": { - "api_shortname": "spanner", - "distribution_name": "cloud.google.com/go/spanner/adapter/apiv1", - "description": "Cloud Spanner API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/adapter/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/spanner/admin/database/apiv1": { - "api_shortname": "spanner", - "distribution_name": "cloud.google.com/go/spanner/admin/database/apiv1", - "description": "Cloud Spanner API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/admin/database/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/spanner/admin/instance/apiv1": { - "api_shortname": "spanner", - "distribution_name": "cloud.google.com/go/spanner/admin/instance/apiv1", - "description": "Cloud Spanner API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/admin/instance/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/spanner/apiv1": { - "api_shortname": "spanner", - "distribution_name": "cloud.google.com/go/spanner/apiv1", - "description": "Cloud Spanner API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/spanner/executor/apiv1": { - "api_shortname": "spanner-cloud-executor", - "distribution_name": "cloud.google.com/go/spanner/executor/apiv1", - "description": "Cloud Spanner Executor test API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/spanner/latest/executor/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/speech/apiv1": { - "api_shortname": "speech", - "distribution_name": "cloud.google.com/go/speech/apiv1", - "description": "Cloud Speech-to-Text API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/speech/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/speech/apiv1p1beta1": { - "api_shortname": "speech", - "distribution_name": "cloud.google.com/go/speech/apiv1p1beta1", - "description": "Cloud Speech-to-Text API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/speech/latest/apiv1p1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/speech/apiv2": { - "api_shortname": "speech", - "distribution_name": "cloud.google.com/go/speech/apiv2", - "description": "Cloud Speech-to-Text API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/speech/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/storage": { - "api_shortname": "storage", - "distribution_name": "cloud.google.com/go/storage", - "description": "Cloud Storage (GCS)", - "language": "go", - "client_library_type": "manual", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storage/latest", - "release_level": "stable", - "library_type": "GAPIC_MANUAL" - }, - "cloud.google.com/go/storage/control/apiv2": { - "api_shortname": "storage", - "distribution_name": "cloud.google.com/go/storage/control/apiv2", - "description": "Storage Control API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storage/latest/control/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/storage/internal/apiv2": { - "api_shortname": "storage", - "distribution_name": "cloud.google.com/go/storage/internal/apiv2", - "description": "Cloud Storage API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storage/latest/internal/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/storagebatchoperations/apiv1": { - "api_shortname": "storagebatchoperations", - "distribution_name": "cloud.google.com/go/storagebatchoperations/apiv1", - "description": "Storage Batch Operations API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storagebatchoperations/latest/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/storageinsights/apiv1": { - "api_shortname": "storageinsights", - "distribution_name": "cloud.google.com/go/storageinsights/apiv1", - "description": "Storage Insights API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storageinsights/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/storagetransfer/apiv1": { - "api_shortname": "storagetransfer", - "distribution_name": "cloud.google.com/go/storagetransfer/apiv1", - "description": "Storage Transfer API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/storagetransfer/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/streetview/publish/apiv1": { - "api_shortname": "streetviewpublish", - "distribution_name": "cloud.google.com/go/streetview/publish/apiv1", - "description": "Street View Publish API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/streetview/latest/publish/apiv1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/support/apiv2": { - "api_shortname": "cloudsupport", - "distribution_name": "cloud.google.com/go/support/apiv2", - "description": "Google Cloud Support API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/support/latest/apiv2", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/support/apiv2beta": { - "api_shortname": "cloudsupport", - "distribution_name": "cloud.google.com/go/support/apiv2beta", - "description": "Google Cloud Support API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/support/latest/apiv2beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/talent/apiv4": { - "api_shortname": "jobs", - "distribution_name": "cloud.google.com/go/talent/apiv4", - "description": "Cloud Talent Solution API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/talent/latest/apiv4", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/talent/apiv4beta1": { - "api_shortname": "jobs", - "distribution_name": "cloud.google.com/go/talent/apiv4beta1", - "description": "Cloud Talent Solution API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/talent/latest/apiv4beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/telcoautomation/apiv1": { - "api_shortname": "telcoautomation", - "distribution_name": "cloud.google.com/go/telcoautomation/apiv1", - "description": "Telco Automation API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/telcoautomation/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/texttospeech/apiv1": { - "api_shortname": "texttospeech", - "distribution_name": "cloud.google.com/go/texttospeech/apiv1", - "description": "Cloud Text-to-Speech API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/texttospeech/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/tpu/apiv1": { - "api_shortname": "tpu", - "distribution_name": "cloud.google.com/go/tpu/apiv1", - "description": "Cloud TPU API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/tpu/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/trace/apiv1": { - "api_shortname": "cloudtrace", - "distribution_name": "cloud.google.com/go/trace/apiv1", - "description": "Stackdriver Trace API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/trace/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/trace/apiv2": { - "api_shortname": "cloudtrace", - "distribution_name": "cloud.google.com/go/trace/apiv2", - "description": "Stackdriver Trace API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/trace/latest/apiv2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/translate/apiv3": { - "api_shortname": "translate", - "distribution_name": "cloud.google.com/go/translate/apiv3", - "description": "Cloud Translation API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/translate/latest/apiv3", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/video/livestream/apiv1": { - "api_shortname": "livestream", - "distribution_name": "cloud.google.com/go/video/livestream/apiv1", - "description": "Live Stream API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/video/latest/livestream/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/video/stitcher/apiv1": { - "api_shortname": "videostitcher", - "distribution_name": "cloud.google.com/go/video/stitcher/apiv1", - "description": "Video Stitcher API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/video/latest/stitcher/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/video/transcoder/apiv1": { - "api_shortname": "transcoder", - "distribution_name": "cloud.google.com/go/video/transcoder/apiv1", - "description": "Transcoder API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/video/latest/transcoder/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/videointelligence/apiv1": { - "api_shortname": "videointelligence", - "distribution_name": "cloud.google.com/go/videointelligence/apiv1", - "description": "Cloud Video Intelligence API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/videointelligence/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/videointelligence/apiv1beta2": { - "api_shortname": "videointelligence", - "distribution_name": "cloud.google.com/go/videointelligence/apiv1beta2", - "description": "Google Cloud Video Intelligence API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/videointelligence/latest/apiv1beta2", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/videointelligence/apiv1p3beta1": { - "api_shortname": "videointelligence", - "distribution_name": "cloud.google.com/go/videointelligence/apiv1p3beta1", - "description": "Cloud Video Intelligence API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/videointelligence/latest/apiv1p3beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/vision/v2/apiv1": { - "api_shortname": "vision", - "distribution_name": "cloud.google.com/go/vision/v2/apiv1", - "description": "Cloud Vision API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vision/v2/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/vision/v2/apiv1p1beta1": { - "api_shortname": "vision", - "distribution_name": "cloud.google.com/go/vision/v2/apiv1p1beta1", - "description": "Cloud Vision API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vision/v2/latest/apiv1p1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/visionai/apiv1": { - "api_shortname": "visionai", - "distribution_name": "cloud.google.com/go/visionai/apiv1", - "description": "Vision AI API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/visionai/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/vmmigration/apiv1": { - "api_shortname": "vmmigration", - "distribution_name": "cloud.google.com/go/vmmigration/apiv1", - "description": "VM Migration API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vmmigration/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/vmwareengine/apiv1": { - "api_shortname": "vmwareengine", - "distribution_name": "cloud.google.com/go/vmwareengine/apiv1", - "description": "VMware Engine API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vmwareengine/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/vpcaccess/apiv1": { - "api_shortname": "vpcaccess", - "distribution_name": "cloud.google.com/go/vpcaccess/apiv1", - "description": "Serverless VPC Access API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/vpcaccess/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/webrisk/apiv1": { - "api_shortname": "webrisk", - "distribution_name": "cloud.google.com/go/webrisk/apiv1", - "description": "Web Risk API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/webrisk/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/webrisk/apiv1beta1": { - "api_shortname": "webrisk", - "distribution_name": "cloud.google.com/go/webrisk/apiv1beta1", - "description": "Web Risk API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/webrisk/latest/apiv1beta1", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/websecurityscanner/apiv1": { - "api_shortname": "websecurityscanner", - "distribution_name": "cloud.google.com/go/websecurityscanner/apiv1", - "description": "Web Security Scanner API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/websecurityscanner/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/workflows/apiv1": { - "api_shortname": "workflows", - "distribution_name": "cloud.google.com/go/workflows/apiv1", - "description": "Workflows API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workflows/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/workflows/apiv1beta": { - "api_shortname": "workflows", - "distribution_name": "cloud.google.com/go/workflows/apiv1beta", - "description": "Workflows API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workflows/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/workflows/executions/apiv1": { - "api_shortname": "workflowexecutions", - "distribution_name": "cloud.google.com/go/workflows/executions/apiv1", - "description": "Workflow Executions API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workflows/latest/executions/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/workflows/executions/apiv1beta": { - "api_shortname": "workflowexecutions", - "distribution_name": "cloud.google.com/go/workflows/executions/apiv1beta", - "description": "Workflow Executions API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workflows/latest/executions/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/workstations/apiv1": { - "api_shortname": "workstations", - "distribution_name": "cloud.google.com/go/workstations/apiv1", - "description": "Cloud Workstations API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workstations/latest/apiv1", - "release_level": "stable", - "library_type": "GAPIC_AUTO" - }, - "cloud.google.com/go/workstations/apiv1beta": { - "api_shortname": "workstations", - "distribution_name": "cloud.google.com/go/workstations/apiv1beta", - "description": "Cloud Workstations API", - "language": "go", - "client_library_type": "generated", - "client_documentation": "https://cloud.google.com/go/docs/reference/cloud.google.com/go/workstations/latest/apiv1beta", - "release_level": "preview", - "library_type": "GAPIC_AUTO" - } -} diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/README.md b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/README.md deleted file mode 100644 index 972857e9d..000000000 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Internal - -This directory contains internal code for cloud.google.com/go packages. - -## .repo-metadata-full.json - -`.repo-metadata-full.json` contains metadata about the packages in this repo. It -is generated by `internal/gapicgen/generator`. It's processed by external tools -to build lists of all of the packages. - -Don't make breaking changes to the format without consulting with the external -tools. - -One day, we may want to create individual `.repo-metadata.json` files next to -each package, which is the pattern followed by some other languages. External -tools would then talk to pkg.go.dev or some other service to get the overall -list of packages and use the `.repo-metadata.json` files to get the additional -metadata required. For now, `.repo-metadata-full.json` includes everything. - -### Updating OwlBot SHA - -You may want to manually update the which version of the post-processor will be -used -- to do this you need to update the SHA in the OwlBot lock file. - -See the [postprocessor/README](postprocessor/README.md) for detailed -instructions. - -*Note*: OwlBot will eventually open a pull request to update this value if it -discovers a new version of the container. diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/annotate.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/annotate.go deleted file mode 100644 index 30d7bcf77..000000000 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/annotate.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2017 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package internal - -import ( - "fmt" - - "google.golang.org/api/googleapi" - "google.golang.org/grpc/status" -) - -// Annotate prepends msg to the error message in err, attempting -// to preserve other information in err, like an error code. -// -// Annotate panics if err is nil. -// -// Annotate knows about these error types: -// - "google.golang.org/grpc/status".Status -// - "google.golang.org/api/googleapi".Error -// If the error is not one of these types, Annotate behaves -// like -// -// fmt.Errorf("%s: %v", msg, err) -func Annotate(err error, msg string) error { - if err == nil { - panic("Annotate called with nil") - } - if s, ok := status.FromError(err); ok { - p := s.Proto() - p.Message = msg + ": " + p.Message - return status.ErrorProto(p) - } - if g, ok := err.(*googleapi.Error); ok { - g.Message = msg + ": " + g.Message - return g - } - return fmt.Errorf("%s: %v", msg, err) -} - -// Annotatef uses format and args to format a string, then calls Annotate. -func Annotatef(err error, format string, args ...interface{}) error { - return Annotate(err, fmt.Sprintf(format, args...)) -} diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/gen_info.sh b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/gen_info.sh deleted file mode 100644 index 59c190653..000000000 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/gen_info.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/bin/sh - -# Script to generate info.go files with methods for all clients. - -if [[ $# != 2 ]]; then - echo >&2 "usage: $0 DIR PACKAGE" - exit 1 -fi - -outfile=info.go - -cd $1 - -cat <<'EOF' > $outfile -// Copyright 2023 Google LLC -// -// 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. - -// SetGoogleClientInfo sets the name and version of the application in -// the `x-goog-api-client` header passed on each request. Also passes any -// provided key-value pairs. Intended for use by Google-written clients. -// -// Internal use only. - -EOF - -echo -e >> $outfile "package $2\n" - - -awk '/^func \(c \*[A-Z].*\) setGoogleClientInfo/ { - printf("func (c %s SetGoogleClientInfo(keyval ...string) {\n", $3); - printf(" c.setGoogleClientInfo(keyval...)\n"); - printf("}\n\n"); -}' *_client.go >> $outfile - -gofmt -w $outfile diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/retry.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/retry.go deleted file mode 100644 index 4c9220e0d..000000000 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/internal/retry.go +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2016 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package internal - -import ( - "context" - "fmt" - "time" - - gax "github.com/googleapis/gax-go/v2" -) - -// Retry calls the supplied function f repeatedly according to the provided -// backoff parameters. It returns when one of the following occurs: -// When f's first return value is true, Retry immediately returns with f's second -// return value. -// When the provided context is done, Retry returns with an error that -// includes both ctx.Error() and the last error returned by f. -func Retry(ctx context.Context, bo gax.Backoff, f func() (stop bool, err error)) error { - return retry(ctx, bo, f, gax.Sleep) -} - -func retry(ctx context.Context, bo gax.Backoff, f func() (stop bool, err error), - sleep func(context.Context, time.Duration) error) error { - var lastErr error - for { - stop, err := f() - if stop { - return err - } - // Remember the last "real" error from f. - if err != nil && err != context.Canceled && err != context.DeadlineExceeded { - lastErr = err - } - p := bo.Pause() - if ctxErr := sleep(ctx, p); ctxErr != nil { - if lastErr != nil { - return wrappedCallErr{ctxErr: ctxErr, wrappedErr: lastErr} - } - return ctxErr - } - } -} - -// Use this error type to return an error which allows introspection of both -// the context error and the error from the service. -type wrappedCallErr struct { - ctxErr error - wrappedErr error -} - -func (e wrappedCallErr) Error() string { - return fmt.Sprintf("retry failed with %v; last error: %v", e.ctxErr, e.wrappedErr) -} - -func (e wrappedCallErr) Unwrap() error { - return e.wrappedErr -} - -// Is allows errors.Is to match the error from the call as well as context -// sentinel errors. -func (e wrappedCallErr) Is(err error) bool { - return e.ctxErr == err || e.wrappedErr == err -} diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/CHANGES.md b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/CHANGES.md index 8d0d7793a..0dcd10a88 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/CHANGES.md +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/CHANGES.md @@ -1,6 +1,29 @@ # Changes +## [1.70.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.69.0...storage/v1.70.0) (2026-10-22) + + +### Features + +* **storage:** Add gcp.client.service attribute to trace spans ([#20686](https://github.com/googleapis/google-cloud-go/issues/20686)) ([7b77906](https://github.com/googleapis/google-cloud-go/commit/7b77906de93ca3d2784f122e25fe93c9d9807c16)) +* **storage:** Honor ChunkTransferTimeout in the gRPC Writer ([#20634](https://github.com/googleapis/google-cloud-go/issues/20634)) ([df47d64](https://github.com/googleapis/google-cloud-go/commit/df47d64a291c6060846d456a9b72d91a1ed207c0)) +* **storage:** Plumb ChunkTransferTimeout and stall timeout error into gRPC Writer ([#20613](https://github.com/googleapis/google-cloud-go/issues/20613)) ([82bb5c9](https://github.com/googleapis/google-cloud-go/commit/82bb5c956b9988ffa95ad556f30e0c8f882a6415)) +* **storage:** Support DirectPath over Interconnect in GCS gRPC ([#20561](https://github.com/googleapis/google-cloud-go/issues/20561)) ([c0d53be](https://github.com/googleapis/google-cloud-go/commit/c0d53be9b70709ce0ab8df9d6438be8c642cdc01)) +* Update API sources and regenerate ([#20728](https://github.com/googleapis/google-cloud-go/issues/20728)) ([ab1da9d](https://github.com/googleapis/google-cloud-go/commit/ab1da9d200416594ae18fa7a2944961f1c92c928)) + + +### Bug Fixes + +* **storage:** Allow mid-stream retries once gRPC upload session is established ([#20612](https://github.com/googleapis/google-cloud-go/issues/20612)) ([c74aee1](https://github.com/googleapis/google-cloud-go/commit/c74aee178dbb81948810ec48d8f2a2d73c1b5384)) +* **storage:** Correct remaining bytes for gRPC bidi range reads ([#20619](https://github.com/googleapis/google-cloud-go/issues/20619)) ([f9eec5d](https://github.com/googleapis/google-cloud-go/commit/f9eec5d653b0faf5ea541d2574b47251365a627a)) +* **storage:** Surface the last transport error from the gRPC Writer's ChunkRetryDeadline error ([#20637](https://github.com/googleapis/google-cloud-go/issues/20637)) ([8f964fb](https://github.com/googleapis/google-cloud-go/commit/8f964fba8c1b37e63c6a3b7fcfdf1fd08eb0b22b)) + + +### Performance Improvements + +* **storage:** Rotate slow resumable BidiWriteObject streams using dynamicDelay ([#20662](https://github.com/googleapis/google-cloud-go/issues/20662)) ([e366326](https://github.com/googleapis/google-cloud-go/commit/e3663264d9eea1eecee538337962693e99e0d28b)) + ## [1.69.0](https://github.com/googleapis/google-cloud-go/compare/storage/v1.68.0...storage/v1.69.0) (2026-10-01) diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/bucket_metadata_cache.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/bucket_metadata_cache.go index 6e612c8aa..a0e97dc5b 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/bucket_metadata_cache.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/bucket_metadata_cache.go @@ -30,13 +30,6 @@ import ( const ( defaultBucketMetadataCacheLimit = 10000 fetchBackgroundTimeout = 10 * time.Second - - // storageResourceNamePrefix is prepended to the bucket resource name emitted - // in the gcp.resource.destination.id span attribute. Cloud Trace's App Hub - // extractor only accepts full resource names of the form - // "//{service}/{path}"; a bare "projects/.../buckets/..." path is rejected - // as malformed and the span is silently dropped from App Hub enrichment. - storageResourceNamePrefix = "//storage.googleapis.com/" ) type bucketMetadataFetcher interface { @@ -135,7 +128,7 @@ func (c *bucketMetadataCache) fetchBackground(ctx context.Context, bucket string } else { if !hit { c.lru.put(bucket, bucketMetadata{ - resource: fmt.Sprintf("%sprojects/_/buckets/%s", storageResourceNamePrefix, bucket), + resource: fmt.Sprintf("projects/_/buckets/%s", bucket), location: "global", placeholder: true, }) @@ -160,11 +153,11 @@ func getMetadataFromAttrs(location, locationType, project, bucket string) (strin finalLocation = strings.ToLower(location) } if strings.HasPrefix(project, "projects/") { - return storageResourceNamePrefix + project + "/buckets/" + bucket, finalLocation + return project + "/buckets/" + bucket, finalLocation } finalProject := "_" if project != "0" && project != "" { finalProject = project } - return fmt.Sprintf("%sprojects/%s/buckets/%s", storageResourceNamePrefix, finalProject, bucket), finalLocation + return fmt.Sprintf("projects/%s/buckets/%s", finalProject, bucket), finalLocation } diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/client.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/client.go index 32036843b..1d8eec49b 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/client.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/client.go @@ -241,7 +241,9 @@ type openWriterParams struct { chunkSize int // chunkRetryDeadline - see `Writer.ChunkRetryDeadline`. // Optional. - chunkRetryDeadline time.Duration + chunkRetryDeadline time.Duration + // chunkTransferTimeout - see `Writer.ChunkTransferTimeout`. + // Optional. chunkTransferTimeout time.Duration // Object/request properties diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/dynamic_delay.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/dynamic_delay.go index e3332bca6..bdeb850ca 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/dynamic_delay.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/dynamic_delay.go @@ -32,6 +32,8 @@ type dynamicDelay struct { minDelay time.Duration maxDelay time.Duration value time.Duration + baseline time.Duration + warmedUp bool // Guards the value mu *sync.RWMutex @@ -299,3 +301,81 @@ func executeWithReadStallTimeout( } return innerErr } + +const ( + defaultWriteChunkDelayTargetPercentile = 0.99 + defaultWriteChunkDelayIncreaseRate = 10.0 + writeChunkEWMAAlpha = 0.2 + writeChunkTriggerMultiple = 2.0 + baseWriteChunkMinDelay = 50 * time.Millisecond + perMiBWriteChunkMinDelay = 10 * time.Millisecond +) + +func newWriteChunkDelay(chunkSize int, chunkTransferTimeout time.Duration) *dynamicDelay { + if chunkTransferTimeout <= 0 { + return nil + } + chunkMiB := float64(chunkSize) / float64(1024*1024) + minDelay := baseWriteChunkMinDelay + time.Duration(chunkMiB*float64(perMiBWriteChunkMinDelay)) + if halfTimeout := chunkTransferTimeout / 2; minDelay > halfTimeout { + minDelay = halfTimeout + } + if minDelay <= 0 { + minDelay = time.Millisecond + } + maxDelay := chunkTransferTimeout + if maxDelay <= minDelay { + maxDelay = minDelay + time.Millisecond + } + return newDynamicDelay( + defaultWriteChunkDelayTargetPercentile, + defaultWriteChunkDelayIncreaseRate, + minDelay, + minDelay, + maxDelay, + ) +} + +// resetWarmUp marks the current stream as warming up so the next sample +// updates the baseline without triggering rotation in exceeds or recordLatency. +// Safe to call on a nil receiver. +func (d *dynamicDelay) resetWarmUp() { + if d == nil { + return + } + d.mu.Lock() + defer d.mu.Unlock() + d.warmedUp = false +} + +// recordLatency updates d with latency using an EWMA baseline and reports +// whether latency exceeded the threshold before the update. The first sample +// after construction or resetWarmUp updates the baseline without triggering +// rotation. Safe to call on a nil receiver. +func (d *dynamicDelay) recordLatency(latency time.Duration) bool { + if d == nil { + return false + } + d.mu.Lock() + defer d.mu.Unlock() + exceeded := d.warmedUp && latency > d.value + if d.baseline == 0 { + d.baseline = latency + } else { + d.baseline = time.Duration(writeChunkEWMAAlpha*float64(latency) + (1-writeChunkEWMAAlpha)*float64(d.baseline)) + } + d.value = min(max(time.Duration(writeChunkTriggerMultiple*float64(d.baseline)), d.minDelay), d.maxDelay) + d.warmedUp = true + return exceeded +} + +// exceeds reports whether latency is strictly greater than d's current +// threshold after warm-up. Safe to call on a nil receiver. +func (d *dynamicDelay) exceeds(latency time.Duration) bool { + if d == nil { + return false + } + d.mu.RLock() + defer d.mu.RUnlock() + return d.warmedUp && latency > d.value +} diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/experimental/buffer_pool.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/experimental/buffer_pool.go index 5c02617d8..05c0bbc14 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/experimental/buffer_pool.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/experimental/buffer_pool.go @@ -14,23 +14,18 @@ package experimental -import ( - "context" -) - // BufferPool is not supported at the moment. type BufferPool interface { - // Get retrieves a single chunk of memory. It returns a slice that is - // optimally sized by the pool, guaranteeing that len(buf) <= maxSize. - // It blocks until the request is satisfied. - // It returns an error if the context is cancelled (e.g., context.Canceled) - // or if the underlying allocation encounters a fatal failure. - Get(ctx context.Context, maxSize int) ([]byte, error) + // Get retrieves a chunk of memory up to maxSize bytes, regardless of any + // pool constraints. It is non-blocking and returns an error only if + // allocation fails. Callers should use Get for the first buffer of each + // upload to guarantee progress. + Get(maxSize int) ([]byte, error) - // TryGet retrieves a chunk of memory up to maxSize bytes. - // It is non-blocking and either returns a memory chunk or fails instantly - // by throwing an error. - TryGet(maxSize int) ([]byte, error) + // TryGet retrieves a chunk of memory up to maxSize bytes, subject to the + // pool's constraints. It is non-blocking. It returns false if a buffer + // cannot be provided at this time, and an error if allocation fails. + TryGet(maxSize int) ([]byte, bool, error) // Put returns a previously acquired buffer to the pool. // After calling Put, the caller must not retain, read, or write to the buffer. diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/experimental/experimental.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/experimental/experimental.go index 7a818b5b3..925b46078 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/experimental/experimental.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/experimental/experimental.go @@ -89,6 +89,25 @@ func WithDirectConnectivityEnforced() option.ClientOption { return internal.WithDirectConnectivityEnforced.(func() option.ClientOption)() } +// WithDirectPathXdsOverInterconnect provides an [option.ClientOption] that may be passed to +// [cloud.google.com/go/storage.NewGRPCClient]. +// +// It instructs the client to attempt DirectPath over Google Cloud Interconnect in on-premises +// or hybrid environments without requiring GCE VM residency. +// +// Behavior and Constraints: +// - The GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS_OVER_INTERCONNECT environment variable overrides +// this option in both directions (e.g. "true"/"1" to enable, "false"/"0" to disable); +// unparseable values are ignored. +// - Requirements: default universe domain (googleapis.com), valid credentials, and that +// DirectPath is not disabled via GOOGLE_CLOUD_DISABLE_DIRECT_PATH. +// - This option is supported exclusively for gRPC clients. +// - Has no effect when using a custom grpc.ClientConn, with the storage emulator, or when +// the new auth library is disabled (GOOGLE_API_GO_EXPERIMENTAL_DISABLE_NEW_AUTH_LIB). +func WithDirectPathXdsOverInterconnect() option.ClientOption { + return internal.WithDirectPathXdsOverInterconnect.(func() option.ClientOption)() +} + // WithOtelMetrics provides an [option.ClientOption] that may be passed to // [cloud.google.com/go/storage.NewClient] or [cloud.google.com/go/storage.NewGRPCClient]. // It enables client-side OpenTelemetry metrics. @@ -111,3 +130,63 @@ func WithOtelDebugMetrics() option.ClientOption { func WithBufferPool(pool BufferPool) option.ClientOption { return internal.WithBufferPool.(func(BufferPool) option.ClientOption)(pool) } + +// WithGRPCKeepalive provides an [option.ClientOption] that may be passed to +// [storage.NewGRPCClient] to configure HTTP/2 keepalive pings on the client's +// gRPC connections. +// +// Use this option when long-running or streaming RPCs (such as object reads and +// writes) may encounter silent network blackholes, dead NAT/firewall mappings, +// or ungraceful peer failures where no TCP FIN or RST is delivered. Without +// keepalive, a stalled connection can hang until the OS TCP retransmission +// timeout expires (typically 15+ minutes on Linux). +// +// When enabled, if an active connection with at least one in-flight RPC receives +// no data or control frames from the peer for [GRPCKeepaliveConfig.Time], the +// client sends an HTTP/2 PING frame and waits up to +// [GRPCKeepaliveConfig.Timeout] for a PING acknowledgement. If no acknowledgement +// arrives in time, the client closes the connection and fails all in-flight RPCs +// on that connection with [google.golang.org/grpc/codes.Unavailable], allowing +// retryable operations to reconnect on a healthy connection within roughly +// Time + Timeout. +// +// Keepalive is disabled by default. Pings are only sent while at least one RPC +// is in flight (PermitWithoutStream is always false) so idle connections do not +// consume the server's ping budget. Because gRPC enforces a minimum Time of 10 +// seconds and servers may close connections that ping too frequently, a +// reasonable starting point is Time: 30 * time.Second, Timeout: 20 * time.Second. +// +// Example usage: +// +// client, err := storage.NewGRPCClient(ctx, experimental.WithGRPCKeepalive( +// experimental.GRPCKeepaliveConfig{ +// Time: 30 * time.Second, +// Timeout: 20 * time.Second, +// }, +// )) +// +// This option is only supported for gRPC clients ([storage.NewGRPCClient]) and +// is ignored by HTTP clients ([storage.NewClient]). It takes precedence over +// keepalive parameters passed via [option.WithGRPCDialOption]. +func WithGRPCKeepalive(cfg GRPCKeepaliveConfig) option.ClientOption { + return internal.WithGRPCKeepalive.(func(GRPCKeepaliveConfig) option.ClientOption)(cfg) +} + +// GRPCKeepaliveConfig configures client-side HTTP/2 keepalive pings for gRPC +// connections, mirroring the Time and Timeout fields of +// [google.golang.org/grpc/keepalive.ClientParameters]. See [WithGRPCKeepalive]. +type GRPCKeepaliveConfig struct { + // Time is the duration of inactivity (with no frames received on a + // connection that has an in-flight RPC) after which the client sends an + // HTTP/2 keepalive ping to check whether the peer transport is still alive. + // + // A duration smaller than 10 seconds cannot be set: gRPC enforces a hard + // minimum ping interval of 10 seconds, and any value less than 10 seconds + // (including 0) is automatically clamped to 10 seconds by gRPC. + Time time.Duration + + // Timeout is the duration the client waits for a keepalive ping + // acknowledgement after sending a ping before closing the connection and + // failing in-flight RPCs. If 0, gRPC's default of 20 seconds is used. + Timeout time.Duration +} diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_client.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_client.go index b216ded0d..f46b4309c 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_client.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_client.go @@ -40,6 +40,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/encoding" + "google.golang.org/grpc/keepalive" "google.golang.org/grpc/mem" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" @@ -169,6 +170,18 @@ func newGRPCStorageClient(ctx context.Context, opts ...storageOption) (client *g return nil, errors.New("storage: GRPC is incompatible with any option that specifies an API for reads") } + if config.grpcKeepalive != nil { + // Pings are only sent while at least one RPC is in flight + // (PermitWithoutStream is intentionally left false): idle connections + // have no work to protect and pinging them would only consume the + // server's ping budget. + s.clientOption = append(s.clientOption, + option.WithGRPCDialOption(grpc.WithKeepaliveParams(keepalive.ClientParameters{ + Time: config.grpcKeepalive.Time, + Timeout: config.grpcKeepalive.Timeout, + }))) + } + if !config.disableClientMetrics { // Do not fail client creation if enabling metrics fails. if metricsContext, err := enableClientMetrics(ctx, s, config); err == nil { @@ -1483,15 +1496,7 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange wantCRC = checksums.GetCrc32C() } - // The remaining bytes are the lesser of the requested range and all bytes - // after params.offset. - length := params.length - if params.length > size || params.length < 0 { - // if params.length < 0 (or larger than object size), - // all remaining bytes were requested. - length = size - } - remain := length - startOffset + remain := rangeReaderRemain(size, startOffset, params.length) var chunkCRC uint32 var chunkCRCPresent bool @@ -1551,6 +1556,22 @@ func (c *grpcStorageClient) NewRangeReader(ctx context.Context, params *newRange return r, nil } +// rangeReaderRemain returns the number of bytes a range read is expected to +// return: the lesser of the requested length and the bytes available in an +// object of the given size after startOffset. A negative length means the +// rest of the object was requested. startOffset must already be resolved to a +// non-negative absolute offset. +func rangeReaderRemain(size, startOffset, length int64) int64 { + remain := size - startOffset + if remain < 0 { + return 0 + } + if length >= 0 && length < remain { + return length + } + return remain +} + // IAM methods. func (c *grpcStorageClient) GetIamPolicy(ctx context.Context, resource string, version int32, opts ...storageOption) (*iampb.Policy, error) { diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_dp_diag.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_dp_diag.go index 21333c504..b33649d53 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_dp_diag.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_dp_diag.go @@ -17,6 +17,7 @@ package storage import ( "context" "os" + "strconv" "strings" "cloud.google.com/go/compute/metadata" @@ -41,12 +42,16 @@ const ( reasonUndetermined = "undetermined" reasonInternalError = "internal_error" - directPathDisableEnvVar = "GOOGLE_CLOUD_DISABLE_DIRECT_PATH" + directPathDisableEnvVar = "GOOGLE_CLOUD_DISABLE_DIRECT_PATH" + enableDirectPathXdsOverInterconnectEnvVar = "GOOGLE_CLOUD_ENABLE_DIRECT_PATH_XDS_OVER_INTERCONNECT" + directPathInterconnectInfix = "-direct." defaultKey = "default" serviceAccountTokenKey = "instance/service-accounts/default/token" ) +var onGCE = metadata.OnGCE + // directPathDiagnostic evaluates the provided options and environment to determine // why gRPC DirectPath (high-throughput VPC routing) is not being utilized. func directPathDiagnostic(ctx context.Context, opts ...option.ClientOption) string { @@ -84,40 +89,61 @@ func directPathDiagnostic(ctx context.Context, opts ...option.ClientOption) stri return reasonCustomHTTPClient } - if !metadata.OnGCE() { + if reason := credsDiagnostic(res); reason != "" { + return reason + } + if interconnectRequested(res, endpoint) { + return reasonUndetermined + } + if !onGCE() { return reasonNotOnGCE } - - return authDiagnostic(res) + return gceAuthDiagnostic() } -func authDiagnostic(res *internaloption.UnsafeResolver) string { +func credsDiagnostic(res *internaloption.UnsafeResolver) string { if res.ResolvedWithoutAuthentication() { return reasonNoAuth } if res.ResolvedWithAPIKeyIsCustom() { return reasonAPIKey } + return "" +} - // Verify that a default service account is attached. +func gceAuthDiagnostic() string { if _, err := metadata.Email(defaultKey); err != nil { return reasonNotDefaultServiceAccount } - - // Verify that a token can be fetched. if _, err := metadata.Get(serviceAccountTokenKey); err != nil { return reasonTokenFetchError } - return reasonUndetermined } +// interconnectRequested mirrors auth/grpctransport.isDirectPathXdsOverInterconnectUsed +// so the diagnostic matches the transport's decision. Keep the two in sync. +func interconnectRequested(res *internaloption.UnsafeResolver, endpoint string) bool { + if v, ok := os.LookupEnv(enableDirectPathXdsOverInterconnectEnvVar); ok { + if b, err := strconv.ParseBool(v); err == nil { + return b + } + } + return res.ResolvedEnableDirectPathXdsOverInterconnect() || + strings.Contains(endpoint, directPathInterconnectInfix) || + strings.Contains(endpoint, "force-xds") +} + func isDirectPathCompatible(endpoint string) bool { if endpoint == "" { return false } - // DirectPath requires no scheme or the dns:/// scheme specifically. - if strings.Contains(endpoint, "://") && !strings.HasPrefix(endpoint, "dns:///") { + // DirectPath requires no scheme, dns:///, or google-c2p:///. + // Note: prepareDirectPathMetadata only attaches diagnostics when the target does not + // start with google-c2p:///, but we permit it here for consistency with auth.checkDirectPathEndPoint. + if strings.Contains(endpoint, "://") && + !strings.HasPrefix(endpoint, "dns:///") && + !strings.HasPrefix(endpoint, directPathEndpointPrefix) { return false } return true diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_reader.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_reader.go index d4ee140fe..677c24b4e 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_reader.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_reader.go @@ -265,7 +265,9 @@ func (c *grpcStorageClient) NewRangeReaderReadObject(ctx context.Context, params r.Attrs.StartOffset = cr.GetStart() r.remain = cr.GetEnd() - cr.GetStart() } else { - r.remain = size + // Without a content range, derive the expected byte count from the + // request rather than assuming the whole object is returned. + r.remain = rangeReaderRemain(size, startOffset, params.length) } // For a zero-length request, explicitly close the stream and set remaining diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_writer.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_writer.go index 42f8aa4b6..b02ae394d 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_writer.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/grpc_writer.go @@ -24,6 +24,7 @@ import ( "net/url" "strings" "sync" + "sync/atomic" "time" gapic "cloud.google.com/go/storage/internal/apiv2" @@ -39,6 +40,10 @@ const ( // defaultWriteChunkRetryDeadline is the default deadline for the upload // of a single chunk. It can be overwritten by Writer.ChunkRetryDeadline. defaultWriteChunkRetryDeadline = 32 * time.Second + // defaultWriteRetryInitialBackoff is the initial retry backoff for writes + // when none is configured. It matches the HTTP writer, whose resumable + // uploads default to this value. + defaultWriteRetryInitialBackoff = 100 * time.Millisecond // maxPerMessageWriteSize is the maximum amount of content that can be sent // per WriteObjectRequest message. A buffer reaching this amount will // precipitate a flush of the buffer. It is only used by the gRPC Writer @@ -46,6 +51,42 @@ const ( maxPerMessageWriteSize int = int(storagepb.ServiceConstants_MAX_WRITE_CHUNK_BYTES) ) +// errStallTimeout is returned when a gRPC write stream or handshake call +// exceeds Writer.ChunkTransferTimeout without server acknowledgement. +var errStallTimeout = errors.New("storage: chunk transfer timeout") + +// RPCs a gRPC write stall can occur in. They name the stage in +// stallTimeoutError and the rpc.method attribute of the stall metric. +const ( + rpcStartResumableWrite = "StartResumableWrite" + rpcQueryWriteStatus = "QueryWriteStatus" + rpcBidiWriteObject = "BidiWriteObject" +) + +type stallTimeoutError struct { + timeout time.Duration + stage string +} + +func (e *stallTimeoutError) Error() string { + if e.stage != "" { + return fmt.Sprintf("%s (%s exceeded %s)", errStallTimeout.Error(), e.stage, e.timeout) + } + return fmt.Sprintf("%s (exceeded %s)", errStallTimeout.Error(), e.timeout) +} + +func (e *stallTimeoutError) Unwrap() error { + return errStallTimeout +} + +func (e *stallTimeoutError) Temporary() bool { + return true +} + +func (e *stallTimeoutError) Timeout() bool { + return true +} + func (w *gRPCWriter) Write(p []byte) (n int, err error) { done := make(chan struct{}) cmd := &gRPCWriterCommandWrite{p: p, done: done} @@ -135,9 +176,6 @@ func (c *grpcStorageClient) OpenWriter(params *openWriterParams, opts ...storage if s.retry == nil { s.retry = defaultRetry.clone() } - if params.append { - s.retry = withBidiWriteObjectRedirectionErrorRetries(s) - } chunkRetryDeadline := defaultWriteChunkRetryDeadline if params.chunkRetryDeadline != 0 { @@ -199,14 +237,17 @@ func (c *grpcStorageClient) OpenWriter(params *openWriterParams, opts ...storage lastSegmentStart: lastSegmentStart, sendableUnits: sendableUnits, bufUnsentIdx: 0, - bufFlushedIdx: -1, // Handle flushes to length 0 + bufFlushedIdx: 0, bufBaseOffset: 0, + awaitingFirstAck: true, - chunkRetryDeadline: chunkRetryDeadline, - abandonRetriesTime: time.Time{}, - attempts: 0, - lastErr: nil, - streamSender: nil, + budget: chunkRetryBudget{ + deadline: chunkRetryDeadline, + now: time.Now, + }, + chunkTransferTimeout: params.chunkTransferTimeout, + lastErr: nil, + streamSender: nil, writesChan: make(chan gRPCWriterCommand, 1), currentCommand: nil, @@ -226,19 +267,11 @@ func (c *grpcStorageClient) OpenWriter(params *openWriterParams, opts ...storage w.spec.Resource.ContentType = w.detectContentType() } w.streamSender = w.pickBufferSender() - - // Writer does not use maxRetryDuration from retryConfig to maintain - // consistency with HTTP client behavior. Writers should use - // ChunkRetryDeadline for per-chunk timeouts and context for overall timeouts. - writerRetry := w.settings.retry - if writerRetry != nil { - writerRetry = writerRetry.clone() - writerRetry.maxRetryDuration = 0 - } + writerRetry := w.writerRetryConfig() w.streamResult = checkCanceled(run(w.preRunCtx, func(ctx context.Context) error { w.lastErr = w.writeLoop(ctx) return w.lastErr - }, writerRetry, w.settings.idempotent, withOperation("WriteObject"), withBucket(w.bucket), withObject(w.attrs.Name))) + }, writerRetry, w.settings.idempotent, withOperation("WriteObject"), withBucket(w.bucket), withObject(w.attrs.Name), withProgressReset(w.budget.consumeProgress))) w.setError(w.streamResult) close(w.donec) }() @@ -288,19 +321,126 @@ type gRPCWriter struct { bufUnsentIdx int bufFlushedIdx int bufBaseOffset int64 + // awaitingFirstAck is true until the server has confirmed any offset, + // including offset 0. Flush waits for that first confirmation. + awaitingFirstAck bool - chunkRetryDeadline time.Duration - abandonRetriesTime time.Time - attempts int - lastErr error - streamSender gRPCBidiWriteBufferSender + budget chunkRetryBudget + chunkTransferTimeout time.Duration + lastErr error + streamSender gRPCBidiWriteBufferSender + watchdog *writeStallWatchdog // Communication from the user goroutine to the stream management goroutines - writesChan chan gRPCWriterCommand - currentCommand gRPCWriterCommand - forcedStreamResult error - streamResult error - donec chan struct{} + writesChan chan gRPCWriterCommand + currentCommand gRPCWriterCommand + streamResult error + donec chan struct{} +} + +// chunkRetryBudget bounds how long the writer keeps retrying without the +// server confirming new bytes. The stopwatch runs only while data is in +// flight (see gRPCWriter.isActive) and restarts whenever a completion +// confirms strictly more bytes than before. +// +// All methods must be called from the writer goroutine. +type chunkRetryBudget struct { + // deadline is the configured ChunkRetryDeadline. Zero disables the budget. + deadline time.Duration + // now returns the current time; nil means time.Now. + now func() time.Time + + // expiresAt is zero while the stopwatch is stopped. + expiresAt time.Time + // attempts counts writeLoop invocations since the last confirmed progress. + attempts int + // progressMade is set by recordProgress and cleared by consumeProgress. + progressMade bool +} + +func (b *chunkRetryBudget) clock() time.Time { + if b.now == nil { + return time.Now() + } + return b.now() +} + +func (b *chunkRetryBudget) enabled() bool { return b.deadline > 0 } + +// start arms the stopwatch if it is not already running. +func (b *chunkRetryBudget) start() { + if b.enabled() && b.expiresAt.IsZero() { + b.expiresAt = b.clock().Add(b.deadline) + } +} + +// stop clears the stopwatch so idle time does not count against the chunk. +func (b *chunkRetryBudget) stop() { b.expiresAt = time.Time{} } + +// expired reports whether a running stopwatch has elapsed. +func (b *chunkRetryBudget) expired() bool { + return !b.expiresAt.IsZero() && b.clock().After(b.expiresAt) +} + +// recordProgress resets the budget after the server confirmed new bytes and +// restarts the stopwatch if data is still in flight. +func (b *chunkRetryBudget) recordProgress(stillActive bool) { + b.stop() + b.attempts = 0 + b.progressMade = true + if stillActive { + b.start() + } +} + +// consumeProgress reports and clears whether progress was recorded since the +// last call. run() uses it, via withProgressReset, to reset its own attempt +// counter and backoff. +func (b *chunkRetryBudget) consumeProgress() bool { + if b.progressMade { + b.progressMade = false + return true + } + return false +} + +// chunkRetryDeadlineError is returned by writeLoop once ChunkRetryDeadline +// elapses without the server confirming new bytes. It wraps the last transport +// error for errors.Is/As; writerRetryConfig treats it as terminal regardless +// of what it wraps. +type chunkRetryDeadlineError struct { + deadline time.Duration + attempts int + err error +} + +func (e *chunkRetryDeadlineError) Error() string { + return fmt.Sprintf("storage: retry deadline of %s reached after %v attempts; last error: %v", e.deadline, e.attempts, e.err) +} + +func (e *chunkRetryDeadlineError) Unwrap() error { return e.err } + +// isChunkRetryDeadlineError reports whether err is, or wraps, a +// chunkRetryDeadlineError. +func isChunkRetryDeadlineError(err error) bool { + var target *chunkRetryDeadlineError + return errors.As(err, &target) +} + +// usesOneshotSender reports whether the writer uploads with a single +// BidiWriteObject call and no upload session. Must match pickBufferSender. +func (w *gRPCWriter) usesOneshotSender() bool { + return w.forceOneShot && !w.append +} + +// flushOutstanding reports whether a flush has been sent that GCS has not yet +// fully acknowledged. In the buffered path a flush is sent exactly when w.buf +// is full and entirely sent, and w.buf is cleared once that flush is acked. +// Unflushed data does not count: GCS does not acknowledge it, so the writer is +// waiting on the application to complete the chunk, not on the server. +func (w *gRPCWriter) flushOutstanding() bool { + n := len(w.buf) + return n > 0 && n == cap(w.buf) && w.bufUnsentIdx == n } func (w *gRPCWriter) pickBufferSender() gRPCBidiWriteBufferSender { @@ -340,15 +480,16 @@ func (w *gRPCWriter) sendBufferToTarget(cs gRPCWriterCommandHandleChans, buf []b q = flushAt - sent } - if w.chunkRetryDeadline > 0 && w.abandonRetriesTime.IsZero() { - w.abandonRetriesTime = time.Now().Add(w.chunkRetryDeadline) - } + w.budget.start() req := gRPCBidiWriteRequest{ buf: buf[:q], offset: baseOffset + int64(sent), flush: q == flushAt-sent, } + if req.flush && w.watchdog != nil { + w.watchdog.resume() + } if !cs.deliverRequestUnlessCompleted(req, handleCompletion) { return baseOffset + int64(sent), false } @@ -373,10 +514,14 @@ func (w *gRPCWriter) handleCompletion(c gRPCBidiWriteCompletion) { w.setObj(newObjectFromProto(c.resource)) } - // Already handled this completion - if c.flushOffset <= w.bufBaseOffset+int64(w.bufFlushedIdx) { + // prevConfirmed is the highest offset GCS had confirmed before this + // completion; it is meaningless until the first completion. + prevConfirmed := w.bufBaseOffset + int64(w.bufFlushedIdx) + if !w.awaitingFirstAck && c.flushOffset <= prevConfirmed { + // Already handled this completion. return } + w.awaitingFirstAck = false w.bufFlushedIdx = int(c.flushOffset - w.bufBaseOffset) if w.bufFlushedIdx >= len(w.buf) { @@ -387,16 +532,21 @@ func (w *gRPCWriter) handleCompletion(c gRPCBidiWriteCompletion) { w.buf = w.buf[:0] } - // We made forward progress on the network! Reset the retry stopwatch. - w.abandonRetriesTime = time.Time{} - w.attempts = 0 - w.setSize(c.flushOffset) w.progress(c.flushOffset) - // Restart the stopwatch if there is still more data waiting to be sent. - if w.chunkRetryDeadline > 0 && w.isActive() { - w.abandonRetriesTime = time.Now().Add(w.chunkRetryDeadline) + // Only a completion strictly past prevConfirmed counts as progress: a + // reconnect that reports the same persisted size must not reset the retry + // budget. The stopwatch restarts only if more data is waiting to be sent. + progressed := c.flushOffset > prevConfirmed || c.resource != nil + if progressed { + w.budget.recordProgress(w.isActive()) + } + + // Restart the stall timer on forward progress. If nothing remains + // outstanding, the write loop pauses it before waiting on the application. + if progressed && w.watchdog != nil { + w.watchdog.reset() } } @@ -432,7 +582,6 @@ func (w *gRPCWriter) gatherFirstBuffer() error { w.buf = w.buf[:origLen+len(v.p)] copy(w.buf[origLen:], v.p) close(v.done) - break case *gRPCWriterCommandClose: // If we get here, data (if any) fits in w.buf, so we can force oneshot. w.forceOneShot = true @@ -449,20 +598,16 @@ func (w *gRPCWriter) gatherFirstBuffer() error { return errors.New("storage.Writer: unexpectedly closed w.writesChan") } -func (w *gRPCWriter) writeLoop(ctx context.Context) error { - w.attempts++ - if w.chunkRetryDeadline > 0 { - if w.isActive() { - if w.abandonRetriesTime.IsZero() { - w.abandonRetriesTime = time.Now().Add(w.chunkRetryDeadline) - } - // Return an error if we've been waiting for a single operation for too long. - if time.Now().After(w.abandonRetriesTime) { - return fmt.Errorf("storage: retry deadline of %s reached after %v attempts; last error: %v", w.chunkRetryDeadline, w.attempts, w.lastErr) - } - } else { - w.abandonRetriesTime = time.Time{} +func (w *gRPCWriter) writeLoop(ctx context.Context) (retErr error) { + w.budget.attempts++ + if w.isActive() { + w.budget.start() + // Give up if we have been retrying the same chunk for too long. + if w.budget.expired() { + return &chunkRetryDeadlineError{deadline: w.budget.deadline, attempts: w.budget.attempts, err: w.lastErr} } + } else { + w.budget.stop() } // Allow each request in w.buf to be sent and result in a completion without // blocking. @@ -472,9 +617,44 @@ func (w *gRPCWriter) writeLoop(ctx context.Context) error { requestAcks := make(chan struct{}, 1) chcs := gRPCWriterCommandHandleChans{requests, requestAcks, completions} bscs := gRPCBufSenderChans{requests, requestAcks, completions} - ctx, cancel := context.WithCancel(ctx) - defer cancel() - w.streamSender.connect(ctx, bscs, w.settings.gax...) + attemptCtx, attemptCancel := context.WithCancel(ctx) + defer attemptCancel() + + // Oneshot uploads are excluded: there is no upload session, so a commit + // abandoned by a stall-cancelled attempt could still land after the retry. + if w.chunkTransferTimeout > 0 && !w.usesOneshotSender() { + stage := rpcBidiWriteObject + if s, ok := w.streamSender.(interface{ connectStage() string }); ok { + stage = s.connectStage() + } + watchdog := newWriteStallWatchdog(w.chunkTransferTimeout, stage, func(stage string) { + if w.c != nil && w.c.metrics != nil { + target := stripPort(metricsStateFromContext(w.preRunCtx).getTarget()) + w.c.metrics.recordStallDuration(attemptCtx, w.chunkTransferTimeout, stage, "grpc", target) + } + attemptCancel() + }) + w.watchdog = watchdog + defer func() { + watchdog.stop() + // Report a stall only if it is what ended a failed attempt. + if retErr != nil && ctx.Err() == nil && watchdog.isStalled() { + retErr = &stallTimeoutError{ + timeout: w.chunkTransferTimeout, + stage: watchdog.currentStage(), + } + } + w.watchdog = nil + }() + // Stage 1: StartResumableWrite, QueryWriteStatus, and initial BidiWriteObject + // stream connection share the ChunkTransferTimeout duration. + watchdog.resume() + } + + w.streamSender.connect(attemptCtx, bscs, w.settings.gax...) + if w.watchdog != nil { + w.watchdog.setStage(rpcBidiWriteObject) + } // Drain any initial completions (like QueryWriteStatus results). Loop: @@ -489,6 +669,9 @@ Loop: break Loop } } + if w.watchdog != nil { + w.watchdog.pause() + } if w.bufFlushedIdx > 0 { copy(w.buf, w.buf[w.bufFlushedIdx:]) @@ -498,7 +681,7 @@ Loop: if w.bufUnsentIdx < 0 { w.bufUnsentIdx = 0 } - w.bufFlushedIdx = -1 + w.bufFlushedIdx = 0 } // Send any full quantum in w.buf, possibly including a flush @@ -522,11 +705,14 @@ Loop: return err } w.currentCommand = nil - // Pause the stopwatch if we are completely idle and waiting for the user's next Write() call. - if w.chunkRetryDeadline > 0 && !w.isActive() { - w.abandonRetriesTime = time.Time{} + // Stop the stopwatch if we are completely idle and waiting for the user's next Write() call. + if !w.isActive() { + w.budget.stop() } } + if w.watchdog != nil && !w.flushOutstanding() { + w.watchdog.pause() + } select { case c, ok := <-completions: if !ok { @@ -551,10 +737,12 @@ Loop: return err } + finalOffset := int64(-1) if closeErr.err == nil { // Clean shutdown. Send any remaining tail. - if w.chunkRetryDeadline > 0 && w.abandonRetriesTime.IsZero() { - w.abandonRetriesTime = time.Now().Add(w.chunkRetryDeadline) + w.budget.start() + if w.watchdog != nil { + w.watchdog.resume() } req := gRPCBidiWriteRequest{ @@ -563,17 +751,24 @@ Loop: flush: true, finishWrite: true, } + finalOffset = req.offset + int64(len(req.buf)) if !chcs.deliverRequestUnlessCompleted(req, w.handleCompletion) { return w.streamSender.err() } } else { // Unclean shutdown. Cancel the context so we clean up expeditiously. - cancel() + attemptCancel() } close(requests) + finalizes := !w.append || w.finalizeOnClose for c := range completions { w.handleCompletion(c) + // Once every byte is acknowledged and, if the close finalizes, the + // object has been returned, only stream teardown remains. + if w.watchdog != nil && c.flushOffset >= finalOffset && (c.resource != nil || !finalizes) { + w.watchdog.pause() + } } if closeErr.err == nil { return w.streamSender.err() @@ -581,6 +776,121 @@ Loop: return closeErr.err } +type writeStallWatchdog struct { + mu sync.Mutex + timeout time.Duration + timer *time.Timer + // gen identifies the current timer. Every arm and disarm increments it. + // time.Timer.Stop cannot cancel a callback that has already started, so + // a callback that was waiting on mu when its timer was stopped compares + // its generation against gen and returns without firing. + gen uint64 + running bool + stallOccurred bool + // stage names the RPC being timed. It is frozen once a stall fires. + stage string + onStall func(stage string) +} + +func newWriteStallWatchdog(timeout time.Duration, stage string, onStall func(stage string)) *writeStallWatchdog { + return &writeStallWatchdog{ + timeout: timeout, + stage: stage, + onStall: onStall, + } +} + +// setStage names the RPC being timed. It has no effect after a stall. +func (w *writeStallWatchdog) setStage(stage string) { + w.mu.Lock() + defer w.mu.Unlock() + if !w.stallOccurred { + w.stage = stage + } +} + +// currentStage returns the RPC being timed, or the one that stalled. +func (w *writeStallWatchdog) currentStage() string { + w.mu.Lock() + defer w.mu.Unlock() + return w.stage +} + +// arm stops any current timer and starts a new one for the full timeout. +// w.mu must be held. +func (w *writeStallWatchdog) arm() { + w.disarm() + w.running = true + gen := w.gen + w.timer = time.AfterFunc(w.timeout, func() { w.fire(gen) }) +} + +// disarm stops the current timer and invalidates its callback. w.mu must be +// held. +func (w *writeStallWatchdog) disarm() { + if w.timer != nil { + w.timer.Stop() + } + w.gen++ + w.running = false +} + +func (w *writeStallWatchdog) reset() { + w.mu.Lock() + defer w.mu.Unlock() + if w.stallOccurred { + return + } + w.arm() +} + +func (w *writeStallWatchdog) pause() { + w.mu.Lock() + defer w.mu.Unlock() + if w.stallOccurred || !w.running { + return + } + w.disarm() +} + +func (w *writeStallWatchdog) resume() { + w.mu.Lock() + defer w.mu.Unlock() + if w.stallOccurred || w.running { + return + } + w.arm() +} + +func (w *writeStallWatchdog) stop() { + w.mu.Lock() + defer w.mu.Unlock() + w.disarm() +} + +func (w *writeStallWatchdog) isStalled() bool { + w.mu.Lock() + defer w.mu.Unlock() + return w.stallOccurred +} + +// fire is the timer callback for generation gen. +func (w *writeStallWatchdog) fire(gen uint64) { + w.mu.Lock() + if gen != w.gen || !w.running || w.stallOccurred { + w.mu.Unlock() + return + } + w.stallOccurred = true + w.running = false + onStall, stage := w.onStall, w.stage + w.mu.Unlock() + + if onStall != nil { + onStall(stage) + } +} + // gRPCWriterCommandHandleChans contains the channels that a gRPCWriterCommand // implementation must use to send requests and get notified of completions. // Requests are delivered on a write-only channel, request acks and completions @@ -681,14 +991,11 @@ func (c *gRPCWriterCommandWrite) handle(w *gRPCWriter, cs gRPCWriterCommandHandl wblen := len(w.buf) allKnownBytes := wblen + len(c.p) fullBufs := allKnownBytes / cap(w.buf) - partialBuf := allKnownBytes % cap(w.buf) - if partialBuf == 0 { + if allKnownBytes%cap(w.buf) == 0 { // If we would exactly fill some number of cap(w.buf) units, we don't need // to block on the flush for the last one. We know that c.p is not empty, so - // allKnownBytes is not 0 and therefore if partialBuf is 0, fullBufs is not - // 0. + // allKnownBytes is not 0 and therefore fullBufs is not 0. fullBufs-- - partialBuf = cap(w.buf) } if fullBufs == 0 { @@ -728,9 +1035,8 @@ func (c *gRPCWriterCommandWrite) handle(w *gRPCWriter, cs gRPCWriterCommandHandl firstFullBufFromCmd := cap(w.buf) - len(w.buf) sending := w.buf[w.bufUnsentIdx:] - sentOffset, ok := w.sendBufferToTarget(cs, sending, w.bufBaseOffset+int64(w.bufUnsentIdx), cap(sending), - w.handleCompletion) - if !ok { + if _, ok := w.sendBufferToTarget(cs, sending, w.bufBaseOffset+int64(w.bufUnsentIdx), cap(sending), + w.handleCompletion); !ok { return w.streamSender.err() } @@ -753,7 +1059,7 @@ func (c *gRPCWriterCommandWrite) handle(w *gRPCWriter, cs gRPCWriterCommandHandl cmdBaseOffset = bufTail } offset := cmdBaseOffset - sentOffset, ok = w.sendBufferToTarget(cs, cmdBuf, offset, firstFullBufFromCmd, + sentOffset, ok := w.sendBufferToTarget(cs, cmdBuf, offset, firstFullBufFromCmd, trimCommandBuf) if !ok { return w.streamSender.err() @@ -784,7 +1090,7 @@ func (c *gRPCWriterCommandWrite) handle(w *gRPCWriter, cs gRPCWriterCommandHandl return w.streamSender.err() } ackOutstanding := true - for ackOutstanding || (w.bufBaseOffset+int64(w.bufFlushedIdx)) < offset { + for ackOutstanding || w.awaitingFirstAck || (w.bufBaseOffset+int64(w.bufFlushedIdx)) < offset { select { case cmp, ok := <-cs.completions: if !ok { @@ -855,8 +1161,9 @@ func (c *gRPCWriterCommandFlush) handle(w *gRPCWriter, cs gRPCWriterCommandHandl // We know that there are at most w.writeQuantum bytes in // w.buf[w.bufUnsentIdx:], because we send anything more inline when handling // a write. - if w.chunkRetryDeadline > 0 && w.abandonRetriesTime.IsZero() { - w.abandonRetriesTime = time.Now().Add(w.chunkRetryDeadline) + w.budget.start() + if w.watchdog != nil { + w.watchdog.resume() } req := gRPCBidiWriteRequest{ @@ -869,7 +1176,7 @@ func (c *gRPCWriterCommandFlush) handle(w *gRPCWriter, cs gRPCWriterCommandHandl return w.streamSender.err() } // Successful flushes will clear w.buf. - for (w.bufBaseOffset + int64(w.bufFlushedIdx)) < flushTarget { + for w.awaitingFirstAck || (w.bufBaseOffset+int64(w.bufFlushedIdx)) < flushTarget { c, ok := <-cs.completions if !ok { // Stream failure @@ -1045,6 +1352,12 @@ type gRPCBidiWriteBufferSender interface { // to call after the completion channel provided to connect() is closed. The // write loop will not make concurrent calls to connect() and err(). err() error + + // canResumeSession reports whether an upload session (resumable upload ID + // or appendable write handle / takeover generation) has been established, + // making subsequent reconnects idempotent even without initial object + // preconditions. + canResumeSession() bool } type gRPCOneshotBidiWriteBufferSender struct { @@ -1081,7 +1394,8 @@ func (w *gRPCWriter) newGRPCOneshotBidiWriteBufferSender() *gRPCOneshotBidiWrite } } -func (s *gRPCOneshotBidiWriteBufferSender) err() error { return s.streamErr } +func (s *gRPCOneshotBidiWriteBufferSender) err() error { return s.streamErr } +func (s *gRPCOneshotBidiWriteBufferSender) canResumeSession() bool { return false } func (s *gRPCOneshotBidiWriteBufferSender) connect(ctx context.Context, cs gRPCBufSenderChans, opts ...gax.CallOption) { s.streamErr = nil @@ -1191,6 +1505,8 @@ type gRPCResumableBidiWriteBufferSender struct { startWriteRequest *storagepb.StartResumableWriteRequest upid string + chunkDelay *dynamicDelay + // Checksum related settings. sendCRC32C bool disableAutoChecksum bool @@ -1209,6 +1525,7 @@ func (w *gRPCWriter) newGRPCResumableBidiWriteBufferSender() *gRPCResumableBidiW CommonObjectRequestParams: toProtoCommonObjectRequestParams(w.encryptionKey), ObjectChecksums: toProtoChecksums(w.sendCRC32C, w.attrs), }, + chunkDelay: newWriteChunkDelay(w.chunkSize, w.chunkTransferTimeout), sendCRC32C: w.sendCRC32C, disableAutoChecksum: w.disableAutoChecksum, objectAttrs: w.attrs, @@ -1219,7 +1536,51 @@ func (w *gRPCWriter) newGRPCResumableBidiWriteBufferSender() *gRPCResumableBidiW } } -func (s *gRPCResumableBidiWriteBufferSender) err() error { return s.streamErr } +func (s *gRPCResumableBidiWriteBufferSender) err() error { return s.streamErr } +func (s *gRPCResumableBidiWriteBufferSender) canResumeSession() bool { return s.upid != "" } + +// connectStage names the RPC that connect blocks on before it opens the +// stream. +func (s *gRPCResumableBidiWriteBufferSender) connectStage() string { + if s.startWriteRequest != nil { + return rpcStartResumableWrite + } + return rpcQueryWriteStatus +} + +type flushTiming struct { + sentAt time.Time + sendDuration time.Duration +} + +// resumableStream encapsulates a single BidiWriteObject gRPC stream and its +// background receiver goroutine for a resumable upload session. +// +// Adaptive stream rotation state machine: +// 1. Active: The sender loop streams write quantums (r.flush == false) and +// flushes (r.flush == true) over st, while the receiver goroutine reads +// persisted_size acks, records chunk latency (sendDuration + commitWait), +// and sets rotate = true when latency exceeds the adaptive threshold. +// 2. Drain & Half-Close (closeAndWait): At the next chunk boundary +// (!r.finishWrite && !unflushedDataSent) when rotate is true, closeAndWait +// calls CloseSend() and waits for the receiver goroutine to drain any +// remaining persisted_size acks until the server ends the stream with +// io.EOF (the normal gRPC response to CloseSend()). +// 3. Re-attach (openStream): Once drained, openStream opens a fresh +// BidiWriteObject stream with the existing UploadId without calling +// QueryWriteStatus. The current stream is only replaced on success. +type resumableStream struct { + st storagepb.Storage_BidiWriteObjectClient + flushes chan flushTiming + done chan struct{} + rErr error +} + +func (rs *resumableStream) closeAndWait() error { + rs.st.CloseSend() + <-rs.done + return rs.rErr +} func (s *gRPCResumableBidiWriteBufferSender) connect(ctx context.Context, cs gRPCBufSenderChans, opts ...gax.CallOption) { s.streamErr = nil @@ -1244,7 +1605,60 @@ func (s *gRPCResumableBidiWriteBufferSender) connect(ctx context.Context, cs gRP cs.completions <- gRPCBidiWriteCompletion{flushOffset: q.GetPersistedSize()} } - stream, err := s.raw.BidiWriteObject(ctx, opts...) + var rotate atomic.Bool + + openStream := func() (*resumableStream, error) { + st, err := s.raw.BidiWriteObject(ctx, opts...) + if err != nil { + return nil, err + } + rotate.Store(false) + s.chunkDelay.resetWarmUp() + rs := &resumableStream{ + st: st, + flushes: make(chan flushTiming, 16), + done: make(chan struct{}), + } + go func() { + rs.rErr = func() error { + var lastAck time.Time + for { + resp, err := st.Recv() + if err != nil { + return err + } + if c := completion(resp); c != nil { + now := time.Now() + select { + case f := <-rs.flushes: + waitStart := f.sentAt + if lastAck.After(waitStart) { + waitStart = lastAck + } + var commitWait time.Duration + if now.After(waitStart) { + commitWait = now.Sub(waitStart) + } + if s.chunkDelay.recordLatency(f.sendDuration + commitWait) { + rotate.Store(true) + } + default: + } + lastAck = now + select { + case cs.completions <- *c: + case <-st.Context().Done(): + return st.Context().Err() + } + } + } + }() + close(rs.done) + }() + return rs, nil + } + + cur, err := openStream() if err != nil { s.streamErr = err close(cs.completions) @@ -1252,81 +1666,95 @@ func (s *gRPCResumableBidiWriteBufferSender) connect(ctx context.Context, cs gRP } go func() { - var sendErr, recvErr error - sendDone := make(chan struct{}) - recvDone := make(chan struct{}) + var sendErr error + firstSend := true + unflushedDataSent := false + var chunkSendDuration time.Duration - go func() { - sendErr = func() error { - firstSend := true - for { - select { - case <-recvDone: - // Because `requests` is not connected to the gRPC machinery, we - // have to check for asynchronous termination on the receive side. + sendErr = func() error { + for { + select { + case <-cur.done: + // Because `requests` is not connected to the gRPC machinery, we + // have to check for asynchronous termination on the receive side. + return nil + case r, ok := <-cs.requests: + if !ok { + cur.st.CloseSend() return nil - case r, ok := <-cs.requests: - if !ok { - stream.CloseSend() - return nil - } - if r.requestAck { - cs.requestAcks <- struct{}{} - continue - } - - var bufChecksum *uint32 - if !s.disableAutoChecksum { - bufChecksum = proto.Uint32(crc32.Checksum(r.buf, crc32cTable)) - } - objectChecksums := getObjectChecksums(&getObjectChecksumsParams{ - sendCRC32C: s.sendCRC32C, - objectAttrs: s.objectAttrs, - fullObjectChecksum: s.fullObjectChecksum, - disableAutoChecksum: s.disableAutoChecksum, - finishWrite: r.finishWrite, - }) - req := bidiWriteObjectRequest(r, bufChecksum, objectChecksums) + } + if r.requestAck { + cs.requestAcks <- struct{}{} + continue + } - if firstSend { - req.FirstMessage = &storagepb.BidiWriteObjectRequest_UploadId{UploadId: s.upid} - firstSend = false + if !r.finishWrite && !unflushedDataSent && rotate.Load() { + // Half-close the current stream and wait for the receiver + // goroutine to drain any remaining persisted_size acks. + // Receiving io.EOF from Recv() is the normal gRPC response + // once the server finishes replying to a half-closed stream. + if err := cur.closeAndWait(); err != nil && err != io.EOF { + return err } - if err := stream.Send(req); err != nil { + next, err := openStream() + if err != nil { return err } - if r.finishWrite { - stream.CloseSend() + cur = next + firstSend = true + chunkSendDuration = 0 + } + + var bufChecksum *uint32 + if !s.disableAutoChecksum { + bufChecksum = proto.Uint32(crc32.Checksum(r.buf, crc32cTable)) + } + objectChecksums := getObjectChecksums(&getObjectChecksumsParams{ + sendCRC32C: s.sendCRC32C, + objectAttrs: s.objectAttrs, + fullObjectChecksum: s.fullObjectChecksum, + disableAutoChecksum: s.disableAutoChecksum, + finishWrite: r.finishWrite, + }) + req := bidiWriteObjectRequest(r, bufChecksum, objectChecksums) + + if firstSend { + req.FirstMessage = &storagepb.BidiWriteObjectRequest_UploadId{UploadId: s.upid} + firstSend = false + } + sendStart := time.Now() + if r.flush && !r.finishWrite && s.chunkDelay != nil { + select { + case cur.flushes <- flushTiming{sentAt: sendStart, sendDuration: chunkSendDuration}: + case <-cur.done: return nil } } - } - }() - close(sendDone) - }() - - go func() { - recvErr = func() error { - for { - resp, err := stream.Recv() - if err != nil { + if err := cur.st.Send(req); err != nil { return err } - if c := completion(resp); c != nil { - select { - case cs.completions <- *c: - case <-stream.Context().Done(): - return stream.Context().Err() + if r.finishWrite { + cur.st.CloseSend() + return nil + } + if s.chunkDelay != nil { + chunkSendDuration += time.Since(sendStart) + if s.chunkDelay.exceeds(chunkSendDuration) { + rotate.Store(true) } } + if r.flush { + chunkSendDuration = 0 + unflushedDataSent = false + } else if len(r.buf) > 0 { + unflushedDataSent = true + } } - }() - close(recvDone) + } }() - <-sendDone - <-recvDone - s.streamErr = pickStreamError(recvErr, sendErr) + <-cur.done + s.streamErr = pickStreamError(cur.rErr, sendErr) close(cs.completions) }() } @@ -1338,7 +1766,6 @@ type gRPCAppendBidiWriteBufferSender struct { firstMessage *storagepb.BidiWriteObjectRequest finalizeOnClose bool - objResource *storagepb.Object // Checksum related settings. sendCRC32C bool @@ -1352,6 +1779,9 @@ type gRPCAppendBidiWriteBufferSender struct { } func (s *gRPCAppendBidiWriteBufferSender) err() error { return s.streamErr } +func (s *gRPCAppendBidiWriteBufferSender) canResumeSession() bool { + return s.firstMessage.GetAppendObjectSpec().GetWriteHandle() != nil || s.takeoverWriter +} // Use for a newly created appendable object. func (w *gRPCWriter) newGRPCAppendableObjectBufferSender() *gRPCAppendBidiWriteBufferSender { @@ -1690,36 +2120,60 @@ func (p gRPCWriteRequestParams) apply(ctx context.Context) context.Context { return gax.InsertMetadataIntoOutgoingContext(ctx, "x-goog-request-params", strings.Join(hds, "&")) } -func withBidiWriteObjectRedirectionErrorRetries(s *settings) (newr *retryConfig) { - oldr := s.retry - newr = oldr.clone() - if newr == nil { - newr = &retryConfig{} - } - if (oldr.policy == RetryIdempotent && !s.idempotent) || oldr.policy == RetryNever { - // We still retry redirection errors even when settings indicate not to - // retry. - // - // The protocol requires us to respect redirection errors, so RetryNever has - // to ignore them. - // - // Idempotency is always protected by redirection errors: they either - // contain a handle which can be used as idempotency information, or they do - // not contain a handle and are "affirmative failures" which indicate that - // no server-side action occurred. - newr.policy = RetryAlways - newr.shouldRetry = func(err error, retryCtx *RetryContext) bool { - return errors.Is(err, bidiWriteObjectRedirectionError{}) +func (w *gRPCWriter) writerRetryConfig() *retryConfig { + oldr := w.settings.retry + if oldr == nil { + oldr = defaultRetry + } + newr := oldr.clone() + // Writer does not use maxRetryDuration from retryConfig to maintain + // consistency with HTTP client behavior. Writers should use + // ChunkRetryDeadline for per-chunk timeouts and context for overall timeouts. + newr.maxRetryDuration = 0 + if newr.backoff == nil { + newr.backoff = &gax.Backoff{Initial: defaultWriteRetryInitialBackoff} + } + + if oldr.policy == RetryNever { + if w.append { + // The protocol requires us to respect redirection errors even when + // RetryNever is configured. + newr.policy = RetryAlways + newr.shouldRetry = func(err error, retryCtx *RetryContext) bool { + if isChunkRetryDeadlineError(err) { + return false + } + return errors.Is(err, bidiWriteObjectRedirectionError{}) + } } return newr } - // If retry settings allow retries normally, fall back to that behavior. + + // Set policy to RetryAlways so run() enters the retry loop even when + // w.settings.idempotent is initially false under RetryIdempotent. Once a + // resumable upload ID (upid) or appendable WriteHandle is established, + // resuming that session is idempotent and should be retried under + // RetryIdempotent. + newr.policy = RetryAlways newr.shouldRetry = func(err error, retryCtx *RetryContext) bool { - if errors.Is(err, bidiWriteObjectRedirectionError{}) { + // The per-chunk budget is exhausted; retrying would re-enter writeLoop + // with the same expired budget. Checked before any user ErrorFunc. + if isChunkRetryDeadlineError(err) { + return false + } + if w.append && errors.Is(err, bidiWriteObjectRedirectionError{}) { + return true + } + if oldr.policy == RetryIdempotent && !w.settings.idempotent && + !w.streamSender.canResumeSession() { + return false + } + // Stalls are retried even if a custom error func rejects them, matching + // the HTTP writer. Retries remain bounded by ChunkRetryDeadline. + if errors.Is(err, errStallTimeout) { return true } - v := oldr.runShouldRetry(err, nil) - return v + return oldr.runShouldRetry(err, retryCtx) } return newr } diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/apiv2/storagepb/storage.pb.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/apiv2/storagepb/storage.pb.go index 78839a01c..f8e68a8aa 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/apiv2/storagepb/storage.pb.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/apiv2/storagepb/storage.pb.go @@ -7921,16 +7921,16 @@ var File_google_storage_v2_storage_proto protoreflect.FileDescriptor const file_google_storage_v2_storage_proto_rawDesc = "" + "\n" + - "\x1fgoogle/storage/v2/storage.proto\x12\x11google.storage.v2\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x18google/api/routing.proto\x1a\x1egoogle/iam/v1/iam_policy.proto\x1a\x1agoogle/iam/v1/policy.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x16google/type/date.proto\"\x8d\x02\n" + - "\x13DeleteBucketRequest\x129\n" + - "\x04name\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + + "\x1fgoogle/storage/v2/storage.proto\x12\x11google.storage.v2\x1a\x17google/api/client.proto\x1a\x1fgoogle/api/field_behavior.proto\x1a\x19google/api/resource.proto\x1a\x18google/api/routing.proto\x1a\x1egoogle/iam/v1/iam_policy.proto\x1a\x1agoogle/iam/v1/policy.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1bgoogle/protobuf/empty.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x17google/rpc/status.proto\x1a\x16google/type/date.proto\"\x8e\x02\n" + + "\x13DeleteBucketRequest\x12:\n" + + "\x04name\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + "\x1dstorage.googleapis.com/BucketR\x04name\x12;\n" + "\x17if_metageneration_match\x18\x02 \x01(\x03H\x00R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + "\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01R\x18ifMetagenerationNotMatch\x88\x01\x01B\x1a\n" + "\x18_if_metageneration_matchB\x1e\n" + - "\x1c_if_metageneration_not_match\"\xd6\x02\n" + - "\x10GetBucketRequest\x129\n" + - "\x04name\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + + "\x1c_if_metageneration_not_match\"\xd7\x02\n" + + "\x10GetBucketRequest\x12:\n" + + "\x04name\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + "\x1dstorage.googleapis.com/BucketR\x04name\x12;\n" + "\x17if_metageneration_match\x18\x02 \x01(\x03H\x00R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + "\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01R\x18ifMetagenerationNotMatch\x88\x01\x01\x12<\n" + @@ -7938,145 +7938,145 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x18_if_metageneration_matchB\x1e\n" + "\x1c_if_metageneration_not_matchB\f\n" + "\n" + - "_read_mask\"\xdf\x02\n" + - "\x13CreateBucketRequest\x12=\n" + - "\x06parent\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\x12\x1dstorage.googleapis.com/BucketR\x06parent\x126\n" + - "\x06bucket\x18\x02 \x01(\v2\x19.google.storage.v2.BucketB\x03\xe0A\x01R\x06bucket\x12 \n" + - "\tbucket_id\x18\x03 \x01(\tB\x03\xe0A\x02R\bbucketId\x12*\n" + - "\x0epredefined_acl\x18\x06 \x01(\tB\x03\xe0A\x01R\rpredefinedAcl\x12F\n" + - "\x1dpredefined_default_object_acl\x18\a \x01(\tB\x03\xe0A\x01R\x1apredefinedDefaultObjectAcl\x12;\n" + - "\x17enable_object_retention\x18\t \x01(\bB\x03\xe0A\x01R\x15enableObjectRetention\"\xbd\x02\n" + - "\x12ListBucketsRequest\x12=\n" + - "\x06parent\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\x12\x1dstorage.googleapis.com/BucketR\x06parent\x12 \n" + - "\tpage_size\x18\x02 \x01(\x05B\x03\xe0A\x01R\bpageSize\x12\"\n" + + "_read_mask\"\xe5\x02\n" + + "\x13CreateBucketRequest\x12>\n" + + "\x06parent\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\x12\x1dstorage.googleapis.com/BucketR\x06parent\x127\n" + + "\x06bucket\x18\x02 \x01(\v2\x19.google.storage.v2.BucketB\x04\xe2A\x01\x01R\x06bucket\x12!\n" + + "\tbucket_id\x18\x03 \x01(\tB\x04\xe2A\x01\x02R\bbucketId\x12+\n" + + "\x0epredefined_acl\x18\x06 \x01(\tB\x04\xe2A\x01\x01R\rpredefinedAcl\x12G\n" + + "\x1dpredefined_default_object_acl\x18\a \x01(\tB\x04\xe2A\x01\x01R\x1apredefinedDefaultObjectAcl\x12<\n" + + "\x17enable_object_retention\x18\t \x01(\bB\x04\xe2A\x01\x01R\x15enableObjectRetention\"\xc2\x02\n" + + "\x12ListBucketsRequest\x12>\n" + + "\x06parent\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\x12\x1dstorage.googleapis.com/BucketR\x06parent\x12!\n" + + "\tpage_size\x18\x02 \x01(\x05B\x04\xe2A\x01\x01R\bpageSize\x12#\n" + "\n" + - "page_token\x18\x03 \x01(\tB\x03\xe0A\x01R\tpageToken\x12\x1b\n" + - "\x06prefix\x18\x04 \x01(\tB\x03\xe0A\x01R\x06prefix\x12<\n" + - "\tread_mask\x18\x05 \x01(\v2\x1a.google.protobuf.FieldMaskH\x00R\breadMask\x88\x01\x01\x129\n" + - "\x16return_partial_success\x18\t \x01(\bB\x03\xe0A\x01R\x14returnPartialSuccessB\f\n" + + "page_token\x18\x03 \x01(\tB\x04\xe2A\x01\x01R\tpageToken\x12\x1c\n" + + "\x06prefix\x18\x04 \x01(\tB\x04\xe2A\x01\x01R\x06prefix\x12<\n" + + "\tread_mask\x18\x05 \x01(\v2\x1a.google.protobuf.FieldMaskH\x00R\breadMask\x88\x01\x01\x12:\n" + + "\x16return_partial_success\x18\t \x01(\bB\x04\xe2A\x01\x01R\x14returnPartialSuccessB\f\n" + "\n" + "_read_mask\"\x94\x01\n" + "\x13ListBucketsResponse\x123\n" + "\abuckets\x18\x01 \x03(\v2\x19.google.storage.v2.BucketR\abuckets\x12&\n" + "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\x12 \n" + - "\vunreachable\x18\x03 \x03(\tR\vunreachable\"\x9e\x01\n" + - " LockBucketRetentionPolicyRequest\x12=\n" + - "\x06bucket\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06bucket\x12;\n" + - "\x17if_metageneration_match\x18\x02 \x01(\x03B\x03\xe0A\x02R\x15ifMetagenerationMatch\"\xc0\x03\n" + - "\x13UpdateBucketRequest\x126\n" + - "\x06bucket\x18\x01 \x01(\v2\x19.google.storage.v2.BucketB\x03\xe0A\x02R\x06bucket\x12;\n" + + "\vunreachable\x18\x03 \x03(\tR\vunreachable\"\xa0\x01\n" + + " LockBucketRetentionPolicyRequest\x12>\n" + + "\x06bucket\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06bucket\x12<\n" + + "\x17if_metageneration_match\x18\x02 \x01(\x03B\x04\xe2A\x01\x02R\x15ifMetagenerationMatch\"\xc4\x03\n" + + "\x13UpdateBucketRequest\x127\n" + + "\x06bucket\x18\x01 \x01(\v2\x19.google.storage.v2.BucketB\x04\xe2A\x01\x02R\x06bucket\x12;\n" + "\x17if_metageneration_match\x18\x02 \x01(\x03H\x00R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + - "\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01R\x18ifMetagenerationNotMatch\x88\x01\x01\x12*\n" + - "\x0epredefined_acl\x18\b \x01(\tB\x03\xe0A\x01R\rpredefinedAcl\x12F\n" + - "\x1dpredefined_default_object_acl\x18\t \x01(\tB\x03\xe0A\x01R\x1apredefinedDefaultObjectAcl\x12@\n" + - "\vupdate_mask\x18\x06 \x01(\v2\x1a.google.protobuf.FieldMaskB\x03\xe0A\x02R\n" + + "\x1bif_metageneration_not_match\x18\x03 \x01(\x03H\x01R\x18ifMetagenerationNotMatch\x88\x01\x01\x12+\n" + + "\x0epredefined_acl\x18\b \x01(\tB\x04\xe2A\x01\x01R\rpredefinedAcl\x12G\n" + + "\x1dpredefined_default_object_acl\x18\t \x01(\tB\x04\xe2A\x01\x01R\x1apredefinedDefaultObjectAcl\x12A\n" + + "\vupdate_mask\x18\x06 \x01(\v2\x1a.google.protobuf.FieldMaskB\x04\xe2A\x01\x02R\n" + "updateMaskB\x1a\n" + "\x18_if_metageneration_matchB\x1e\n" + - "\x1c_if_metageneration_not_match\"\xb8\b\n" + - "\x14ComposeObjectRequest\x12@\n" + - "\vdestination\x18\x01 \x01(\v2\x19.google.storage.v2.ObjectB\x03\xe0A\x02R\vdestination\x12`\n" + - "\x0esource_objects\x18\x02 \x03(\v24.google.storage.v2.ComposeObjectRequest.SourceObjectB\x03\xe0A\x01R\rsourceObjects\x12A\n" + - "\x1adestination_predefined_acl\x18\t \x01(\tB\x03\xe0A\x01R\x18destinationPredefinedAcl\x123\n" + + "\x1c_if_metageneration_not_match\"\xc1\b\n" + + "\x14ComposeObjectRequest\x12A\n" + + "\vdestination\x18\x01 \x01(\v2\x19.google.storage.v2.ObjectB\x04\xe2A\x01\x02R\vdestination\x12a\n" + + "\x0esource_objects\x18\x02 \x03(\v24.google.storage.v2.ComposeObjectRequest.SourceObjectB\x04\xe2A\x01\x01R\rsourceObjects\x12B\n" + + "\x1adestination_predefined_acl\x18\t \x01(\tB\x04\xe2A\x01\x01R\x18destinationPredefinedAcl\x123\n" + "\x13if_generation_match\x18\x04 \x01(\x03H\x00R\x11ifGenerationMatch\x88\x01\x01\x12;\n" + - "\x17if_metageneration_match\x18\x05 \x01(\x03H\x01R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + - "\akms_key\x18\x06 \x01(\tB)\xe0A\x01\xfaA#\n" + - "!cloudkms.googleapis.com/CryptoKeyR\x06kmsKey\x12r\n" + - "\x1ccommon_object_request_params\x18\a \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParams\x12R\n" + + "\x17if_metageneration_match\x18\x05 \x01(\x03H\x01R\x15ifMetagenerationMatch\x88\x01\x01\x12C\n" + + "\akms_key\x18\x06 \x01(\tB*\xe2A\x01\x01\xfaA#\n" + + "!cloudkms.googleapis.com/CryptoKeyR\x06kmsKey\x12s\n" + + "\x1ccommon_object_request_params\x18\a \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParams\x12S\n" + "\x10object_checksums\x18\n" + - " \x01(\v2\".google.storage.v2.ObjectChecksumsB\x03\xe0A\x01R\x0fobjectChecksums\x127\n" + - "\x15delete_source_objects\x18\v \x01(\bH\x02R\x13deleteSourceObjects\x88\x01\x01\x1a\xb3\x02\n" + - "\fSourceObject\x12\x17\n" + - "\x04name\x18\x01 \x01(\tB\x03\xe0A\x02R\x04name\x12#\n" + + " \x01(\v2\".google.storage.v2.ObjectChecksumsB\x04\xe2A\x01\x01R\x0fobjectChecksums\x127\n" + + "\x15delete_source_objects\x18\v \x01(\bH\x02R\x13deleteSourceObjects\x88\x01\x01\x1a\xb6\x02\n" + + "\fSourceObject\x12\x18\n" + + "\x04name\x18\x01 \x01(\tB\x04\xe2A\x01\x02R\x04name\x12$\n" + "\n" + - "generation\x18\x02 \x01(\x03B\x03\xe0A\x01R\n" + - "generation\x12\x80\x01\n" + - "\x14object_preconditions\x18\x03 \x01(\v2H.google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditionsB\x03\xe0A\x01R\x13objectPreconditions\x1ab\n" + + "generation\x18\x02 \x01(\x03B\x04\xe2A\x01\x01R\n" + + "generation\x12\x81\x01\n" + + "\x14object_preconditions\x18\x03 \x01(\v2H.google.storage.v2.ComposeObjectRequest.SourceObject.ObjectPreconditionsB\x04\xe2A\x01\x01R\x13objectPreconditions\x1ab\n" + "\x13ObjectPreconditions\x123\n" + "\x13if_generation_match\x18\x01 \x01(\x03H\x00R\x11ifGenerationMatch\x88\x01\x01B\x16\n" + "\x14_if_generation_matchB\x16\n" + "\x14_if_generation_matchB\x1a\n" + "\x18_if_metageneration_matchB\x18\n" + - "\x16_delete_source_objects\"\xec\x04\n" + - "\x13DeleteObjectRequest\x12=\n" + - "\x06bucket\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1b\n" + - "\x06object\x18\x02 \x01(\tB\x03\xe0A\x02R\x06object\x12#\n" + + "\x16_delete_source_objects\"\xf0\x04\n" + + "\x13DeleteObjectRequest\x12>\n" + + "\x06bucket\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1c\n" + + "\x06object\x18\x02 \x01(\tB\x04\xe2A\x01\x02R\x06object\x12$\n" + "\n" + - "generation\x18\x04 \x01(\x03B\x03\xe0A\x01R\n" + + "generation\x18\x04 \x01(\x03B\x04\xe2A\x01\x01R\n" + "generation\x123\n" + "\x13if_generation_match\x18\x05 \x01(\x03H\x00R\x11ifGenerationMatch\x88\x01\x01\x12:\n" + "\x17if_generation_not_match\x18\x06 \x01(\x03H\x01R\x14ifGenerationNotMatch\x88\x01\x01\x12;\n" + "\x17if_metageneration_match\x18\a \x01(\x03H\x02R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + - "\x1bif_metageneration_not_match\x18\b \x01(\x03H\x03R\x18ifMetagenerationNotMatch\x88\x01\x01\x12r\n" + + "\x1bif_metageneration_not_match\x18\b \x01(\x03H\x03R\x18ifMetagenerationNotMatch\x88\x01\x01\x12s\n" + "\x1ccommon_object_request_params\x18\n" + - " \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParamsB\x16\n" + + " \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParamsB\x16\n" + "\x14_if_generation_matchB\x1a\n" + "\x18_if_generation_not_matchB\x1a\n" + "\x18_if_metageneration_matchB\x1e\n" + - "\x1c_if_metageneration_not_match\"\xd8\x05\n" + - "\x14RestoreObjectRequest\x12=\n" + - "\x06bucket\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1b\n" + - "\x06object\x18\x02 \x01(\tB\x03\xe0A\x02R\x06object\x12#\n" + + "\x1c_if_metageneration_not_match\"\xdd\x05\n" + + "\x14RestoreObjectRequest\x12>\n" + + "\x06bucket\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1c\n" + + "\x06object\x18\x02 \x01(\tB\x04\xe2A\x01\x02R\x06object\x12$\n" + "\n" + - "generation\x18\x03 \x01(\x03B\x03\xe0A\x02R\n" + - "generation\x12(\n" + - "\rrestore_token\x18\v \x01(\tB\x03\xe0A\x01R\frestoreToken\x123\n" + + "generation\x18\x03 \x01(\x03B\x04\xe2A\x01\x02R\n" + + "generation\x12)\n" + + "\rrestore_token\x18\v \x01(\tB\x04\xe2A\x01\x01R\frestoreToken\x123\n" + "\x13if_generation_match\x18\x04 \x01(\x03H\x00R\x11ifGenerationMatch\x88\x01\x01\x12:\n" + "\x17if_generation_not_match\x18\x05 \x01(\x03H\x01R\x14ifGenerationNotMatch\x88\x01\x01\x12;\n" + "\x17if_metageneration_match\x18\x06 \x01(\x03H\x02R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + "\x1bif_metageneration_not_match\x18\a \x01(\x03H\x03R\x18ifMetagenerationNotMatch\x88\x01\x01\x12+\n" + - "\x0fcopy_source_acl\x18\t \x01(\bH\x04R\rcopySourceAcl\x88\x01\x01\x12r\n" + - "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParamsB\x16\n" + + "\x0fcopy_source_acl\x18\t \x01(\bH\x04R\rcopySourceAcl\x88\x01\x01\x12s\n" + + "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParamsB\x16\n" + "\x14_if_generation_matchB\x1a\n" + "\x18_if_generation_not_matchB\x1a\n" + "\x18_if_metageneration_matchB\x1e\n" + "\x1c_if_metageneration_not_matchB\x12\n" + - "\x10_copy_source_acl\"?\n" + - "\x1bCancelResumableWriteRequest\x12 \n" + - "\tupload_id\x18\x01 \x01(\tB\x03\xe0A\x02R\buploadId\"\x1e\n" + - "\x1cCancelResumableWriteResponse\"\x80\x06\n" + - "\x11ReadObjectRequest\x12=\n" + - "\x06bucket\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1b\n" + - "\x06object\x18\x02 \x01(\tB\x03\xe0A\x02R\x06object\x12#\n" + + "\x10_copy_source_acl\"@\n" + + "\x1bCancelResumableWriteRequest\x12!\n" + + "\tupload_id\x18\x01 \x01(\tB\x04\xe2A\x01\x02R\buploadId\"\x1e\n" + + "\x1cCancelResumableWriteResponse\"\x86\x06\n" + + "\x11ReadObjectRequest\x12>\n" + + "\x06bucket\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1c\n" + + "\x06object\x18\x02 \x01(\tB\x04\xe2A\x01\x02R\x06object\x12$\n" + "\n" + - "generation\x18\x03 \x01(\x03B\x03\xe0A\x01R\n" + - "generation\x12$\n" + - "\vread_offset\x18\x04 \x01(\x03B\x03\xe0A\x01R\n" + - "readOffset\x12\"\n" + + "generation\x18\x03 \x01(\x03B\x04\xe2A\x01\x01R\n" + + "generation\x12%\n" + + "\vread_offset\x18\x04 \x01(\x03B\x04\xe2A\x01\x01R\n" + + "readOffset\x12#\n" + "\n" + - "read_limit\x18\x05 \x01(\x03B\x03\xe0A\x01R\treadLimit\x123\n" + + "read_limit\x18\x05 \x01(\x03B\x04\xe2A\x01\x01R\treadLimit\x123\n" + "\x13if_generation_match\x18\x06 \x01(\x03H\x00R\x11ifGenerationMatch\x88\x01\x01\x12:\n" + "\x17if_generation_not_match\x18\a \x01(\x03H\x01R\x14ifGenerationNotMatch\x88\x01\x01\x12;\n" + "\x17if_metageneration_match\x18\b \x01(\x03H\x02R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + - "\x1bif_metageneration_not_match\x18\t \x01(\x03H\x03R\x18ifMetagenerationNotMatch\x88\x01\x01\x12r\n" + + "\x1bif_metageneration_not_match\x18\t \x01(\x03H\x03R\x18ifMetagenerationNotMatch\x88\x01\x01\x12s\n" + "\x1ccommon_object_request_params\x18\n" + - " \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParams\x12<\n" + + " \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParams\x12<\n" + "\tread_mask\x18\f \x01(\v2\x1a.google.protobuf.FieldMaskH\x04R\breadMask\x88\x01\x01B\x16\n" + "\x14_if_generation_matchB\x1a\n" + "\x18_if_generation_not_matchB\x1a\n" + "\x18_if_metageneration_matchB\x1e\n" + "\x1c_if_metageneration_not_matchB\f\n" + "\n" + - "_read_mask\"\x98\x06\n" + - "\x10GetObjectRequest\x12=\n" + - "\x06bucket\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1b\n" + - "\x06object\x18\x02 \x01(\tB\x03\xe0A\x02R\x06object\x12#\n" + + "_read_mask\"\x9d\x06\n" + + "\x10GetObjectRequest\x12>\n" + + "\x06bucket\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1c\n" + + "\x06object\x18\x02 \x01(\tB\x04\xe2A\x01\x02R\x06object\x12$\n" + "\n" + - "generation\x18\x03 \x01(\x03B\x03\xe0A\x01R\n" + + "generation\x18\x03 \x01(\x03B\x04\xe2A\x01\x01R\n" + "generation\x12&\n" + "\fsoft_deleted\x18\v \x01(\bH\x00R\vsoftDeleted\x88\x01\x01\x123\n" + "\x13if_generation_match\x18\x04 \x01(\x03H\x01R\x11ifGenerationMatch\x88\x01\x01\x12:\n" + "\x17if_generation_not_match\x18\x05 \x01(\x03H\x02R\x14ifGenerationNotMatch\x88\x01\x01\x12;\n" + "\x17if_metageneration_match\x18\x06 \x01(\x03H\x03R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + - "\x1bif_metageneration_not_match\x18\a \x01(\x03H\x04R\x18ifMetagenerationNotMatch\x88\x01\x01\x12r\n" + - "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParams\x12<\n" + + "\x1bif_metageneration_not_match\x18\a \x01(\x03H\x04R\x18ifMetagenerationNotMatch\x88\x01\x01\x12s\n" + + "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParams\x12<\n" + "\tread_mask\x18\n" + - " \x01(\v2\x1a.google.protobuf.FieldMaskH\x05R\breadMask\x88\x01\x01\x12(\n" + - "\rrestore_token\x18\f \x01(\tB\x03\xe0A\x01R\frestoreTokenB\x0f\n" + + " \x01(\v2\x1a.google.protobuf.FieldMaskH\x05R\breadMask\x88\x01\x01\x12)\n" + + "\rrestore_token\x18\f \x01(\tB\x04\xe2A\x01\x01R\frestoreTokenB\x0f\n" + "\r_soft_deletedB\x16\n" + "\x14_if_generation_matchB\x1a\n" + "\x18_if_generation_not_matchB\x1a\n" + @@ -8088,19 +8088,19 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x10checksummed_data\x18\x01 \x01(\v2\".google.storage.v2.ChecksummedDataR\x0fchecksummedData\x12M\n" + "\x10object_checksums\x18\x02 \x01(\v2\".google.storage.v2.ObjectChecksumsR\x0fobjectChecksums\x12D\n" + "\rcontent_range\x18\x03 \x01(\v2\x1f.google.storage.v2.ContentRangeR\fcontentRange\x125\n" + - "\bmetadata\x18\x04 \x01(\v2\x19.google.storage.v2.ObjectR\bmetadata\"\xd0\x06\n" + - "\x12BidiReadObjectSpec\x12=\n" + - "\x06bucket\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1b\n" + - "\x06object\x18\x02 \x01(\tB\x03\xe0A\x02R\x06object\x12#\n" + + "\bmetadata\x18\x04 \x01(\v2\x19.google.storage.v2.ObjectR\bmetadata\"\xd4\x06\n" + + "\x12BidiReadObjectSpec\x12>\n" + + "\x06bucket\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1c\n" + + "\x06object\x18\x02 \x01(\tB\x04\xe2A\x01\x02R\x06object\x12$\n" + "\n" + - "generation\x18\x03 \x01(\x03B\x03\xe0A\x01R\n" + + "generation\x18\x03 \x01(\x03B\x04\xe2A\x01\x01R\n" + "generation\x123\n" + "\x13if_generation_match\x18\x04 \x01(\x03H\x00R\x11ifGenerationMatch\x88\x01\x01\x12:\n" + "\x17if_generation_not_match\x18\x05 \x01(\x03H\x01R\x14ifGenerationNotMatch\x88\x01\x01\x12;\n" + "\x17if_metageneration_match\x18\x06 \x01(\x03H\x02R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + - "\x1bif_metageneration_not_match\x18\a \x01(\x03H\x03R\x18ifMetagenerationNotMatch\x88\x01\x01\x12r\n" + - "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParams\x12@\n" + + "\x1bif_metageneration_not_match\x18\a \x01(\x03H\x03R\x18ifMetagenerationNotMatch\x88\x01\x01\x12s\n" + + "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParams\x12@\n" + "\tread_mask\x18\f \x01(\v2\x1a.google.protobuf.FieldMaskB\x02\x18\x01H\x04R\breadMask\x88\x01\x01\x12G\n" + "\vread_handle\x18\r \x01(\v2!.google.storage.v2.BidiReadHandleH\x05R\n" + "readHandle\x88\x01\x01\x12(\n" + @@ -8112,10 +8112,10 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\n" + "_read_maskB\x0e\n" + "\f_read_handleB\x10\n" + - "\x0e_routing_token\"\xb1\x01\n" + - "\x15BidiReadObjectRequest\x12T\n" + - "\x10read_object_spec\x18\x01 \x01(\v2%.google.storage.v2.BidiReadObjectSpecB\x03\xe0A\x01R\x0ereadObjectSpec\x12B\n" + - "\vread_ranges\x18\b \x03(\v2\x1c.google.storage.v2.ReadRangeB\x03\xe0A\x01R\n" + + "\x0e_routing_token\"\xb3\x01\n" + + "\x15BidiReadObjectRequest\x12U\n" + + "\x10read_object_spec\x18\x01 \x01(\v2%.google.storage.v2.BidiReadObjectSpecB\x04\xe2A\x01\x01R\x0ereadObjectSpec\x12C\n" + + "\vread_ranges\x18\b \x03(\v2\x1c.google.storage.v2.ReadRangeB\x04\xe2A\x01\x01R\n" + "readRanges\"\xe5\x01\n" + "\x16BidiReadObjectResponse\x12P\n" + "\x12object_data_ranges\x18\x06 \x03(\v2\".google.storage.v2.ObjectRangeDataR\x10objectDataRanges\x125\n" + @@ -8140,25 +8140,25 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x11read_range_errors\x18\x01 \x03(\v2!.google.storage.v2.ReadRangeErrorR\x0freadRangeErrors\"U\n" + "\x0eReadRangeError\x12\x17\n" + "\aread_id\x18\x01 \x01(\x03R\x06readId\x12*\n" + - "\x06status\x18\x02 \x01(\v2\x12.google.rpc.StatusR\x06status\"u\n" + - "\tReadRange\x12$\n" + - "\vread_offset\x18\x01 \x01(\x03B\x03\xe0A\x02R\n" + - "readOffset\x12$\n" + - "\vread_length\x18\x02 \x01(\x03B\x03\xe0A\x01R\n" + - "readLength\x12\x1c\n" + - "\aread_id\x18\x03 \x01(\x03B\x03\xe0A\x02R\x06readId\"\xba\x01\n" + + "\x06status\x18\x02 \x01(\v2\x12.google.rpc.StatusR\x06status\"x\n" + + "\tReadRange\x12%\n" + + "\vread_offset\x18\x01 \x01(\x03B\x04\xe2A\x01\x02R\n" + + "readOffset\x12%\n" + + "\vread_length\x18\x02 \x01(\x03B\x04\xe2A\x01\x01R\n" + + "readLength\x12\x1d\n" + + "\aread_id\x18\x03 \x01(\x03B\x04\xe2A\x01\x02R\x06readId\"\xba\x01\n" + "\x0fObjectRangeData\x12M\n" + "\x10checksummed_data\x18\x01 \x01(\v2\".google.storage.v2.ChecksummedDataR\x0fchecksummedData\x12;\n" + "\n" + "read_range\x18\x02 \x01(\v2\x1c.google.storage.v2.ReadRangeR\treadRange\x12\x1b\n" + - "\trange_end\x18\x03 \x01(\bR\brangeEnd\"-\n" + - "\x0eBidiReadHandle\x12\x1b\n" + - "\x06handle\x18\x01 \x01(\fB\x03\xe0A\x02R\x06handle\".\n" + - "\x0fBidiWriteHandle\x12\x1b\n" + - "\x06handle\x18\x01 \x01(\fB\x03\xe0A\x02R\x06handle\"\xc5\x04\n" + - "\x0fWriteObjectSpec\x12:\n" + - "\bresource\x18\x01 \x01(\v2\x19.google.storage.v2.ObjectB\x03\xe0A\x02R\bresource\x12*\n" + - "\x0epredefined_acl\x18\a \x01(\tB\x03\xe0A\x01R\rpredefinedAcl\x123\n" + + "\trange_end\x18\x03 \x01(\bR\brangeEnd\".\n" + + "\x0eBidiReadHandle\x12\x1c\n" + + "\x06handle\x18\x01 \x01(\fB\x04\xe2A\x01\x02R\x06handle\"/\n" + + "\x0fBidiWriteHandle\x12\x1c\n" + + "\x06handle\x18\x01 \x01(\fB\x04\xe2A\x01\x02R\x06handle\"\xc7\x04\n" + + "\x0fWriteObjectSpec\x12;\n" + + "\bresource\x18\x01 \x01(\v2\x19.google.storage.v2.ObjectB\x04\xe2A\x01\x02R\bresource\x12+\n" + + "\x0epredefined_acl\x18\a \x01(\tB\x04\xe2A\x01\x01R\rpredefinedAcl\x123\n" + "\x13if_generation_match\x18\x03 \x01(\x03H\x00R\x11ifGenerationMatch\x88\x01\x01\x12:\n" + "\x17if_generation_not_match\x18\x04 \x01(\x03H\x01R\x14ifGenerationNotMatch\x88\x01\x01\x12;\n" + "\x17if_metageneration_match\x18\x05 \x01(\x03H\x02R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + @@ -8173,28 +8173,28 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x18_if_metageneration_matchB\x1e\n" + "\x1c_if_metageneration_not_matchB\x0e\n" + "\f_object_sizeB\r\n" + - "\v_appendable\"\x87\x04\n" + + "\v_appendable\"\x8b\x04\n" + "\x12WriteObjectRequest\x12\x1d\n" + "\tupload_id\x18\x01 \x01(\tH\x00R\buploadId\x12P\n" + - "\x11write_object_spec\x18\x02 \x01(\v2\".google.storage.v2.WriteObjectSpecH\x00R\x0fwriteObjectSpec\x12&\n" + - "\fwrite_offset\x18\x03 \x01(\x03B\x03\xe0A\x02R\vwriteOffset\x12O\n" + - "\x10checksummed_data\x18\x04 \x01(\v2\".google.storage.v2.ChecksummedDataH\x01R\x0fchecksummedData\x12R\n" + - "\x10object_checksums\x18\x06 \x01(\v2\".google.storage.v2.ObjectChecksumsB\x03\xe0A\x01R\x0fobjectChecksums\x12&\n" + - "\ffinish_write\x18\a \x01(\bB\x03\xe0A\x01R\vfinishWrite\x12r\n" + - "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParamsB\x0f\n" + + "\x11write_object_spec\x18\x02 \x01(\v2\".google.storage.v2.WriteObjectSpecH\x00R\x0fwriteObjectSpec\x12'\n" + + "\fwrite_offset\x18\x03 \x01(\x03B\x04\xe2A\x01\x02R\vwriteOffset\x12O\n" + + "\x10checksummed_data\x18\x04 \x01(\v2\".google.storage.v2.ChecksummedDataH\x01R\x0fchecksummedData\x12S\n" + + "\x10object_checksums\x18\x06 \x01(\v2\".google.storage.v2.ObjectChecksumsB\x04\xe2A\x01\x01R\x0fobjectChecksums\x12'\n" + + "\ffinish_write\x18\a \x01(\bB\x04\xe2A\x01\x01R\vfinishWrite\x12s\n" + + "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParamsB\x0f\n" + "\rfirst_messageB\x06\n" + "\x04data\"\xe5\x01\n" + "\x13WriteObjectResponse\x12'\n" + "\x0epersisted_size\x18\x01 \x01(\x03H\x00R\rpersistedSize\x127\n" + "\bresource\x18\x02 \x01(\v2\x19.google.storage.v2.ObjectH\x00R\bresource\x12\\\n" + "\x18persisted_data_checksums\x18\x03 \x01(\v2\".google.storage.v2.ObjectChecksumsR\x16persistedDataChecksumsB\x0e\n" + - "\fwrite_status\"\xe9\x03\n" + - "\x10AppendObjectSpec\x12=\n" + - "\x06bucket\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1b\n" + - "\x06object\x18\x02 \x01(\tB\x03\xe0A\x02R\x06object\x12#\n" + + "\fwrite_status\"\xec\x03\n" + + "\x10AppendObjectSpec\x12>\n" + + "\x06bucket\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x1c\n" + + "\x06object\x18\x02 \x01(\tB\x04\xe2A\x01\x02R\x06object\x12$\n" + "\n" + - "generation\x18\x03 \x01(\x03B\x03\xe0A\x02R\n" + + "generation\x18\x03 \x01(\x03B\x04\xe2A\x01\x02R\n" + "generation\x12;\n" + "\x17if_metageneration_match\x18\x04 \x01(\x03H\x00R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + "\x1bif_metageneration_not_match\x18\x05 \x01(\x03H\x01R\x18ifMetagenerationNotMatch\x88\x01\x01\x12(\n" + @@ -8203,19 +8203,19 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x18_if_metageneration_matchB\x1e\n" + "\x1c_if_metageneration_not_matchB\x10\n" + "\x0e_routing_tokenB\x0f\n" + - "\r_write_handle\"\xa3\x05\n" + + "\r_write_handle\"\xa9\x05\n" + "\x16BidiWriteObjectRequest\x12\x1d\n" + "\tupload_id\x18\x01 \x01(\tH\x00R\buploadId\x12P\n" + "\x11write_object_spec\x18\x02 \x01(\v2\".google.storage.v2.WriteObjectSpecH\x00R\x0fwriteObjectSpec\x12S\n" + - "\x12append_object_spec\x18\v \x01(\v2#.google.storage.v2.AppendObjectSpecH\x00R\x10appendObjectSpec\x12&\n" + - "\fwrite_offset\x18\x03 \x01(\x03B\x03\xe0A\x02R\vwriteOffset\x12O\n" + - "\x10checksummed_data\x18\x04 \x01(\v2\".google.storage.v2.ChecksummedDataH\x01R\x0fchecksummedData\x12R\n" + - "\x10object_checksums\x18\x06 \x01(\v2\".google.storage.v2.ObjectChecksumsB\x03\xe0A\x01R\x0fobjectChecksums\x12&\n" + - "\fstate_lookup\x18\a \x01(\bB\x03\xe0A\x01R\vstateLookup\x12\x19\n" + - "\x05flush\x18\b \x01(\bB\x03\xe0A\x01R\x05flush\x12&\n" + - "\ffinish_write\x18\t \x01(\bB\x03\xe0A\x01R\vfinishWrite\x12r\n" + + "\x12append_object_spec\x18\v \x01(\v2#.google.storage.v2.AppendObjectSpecH\x00R\x10appendObjectSpec\x12'\n" + + "\fwrite_offset\x18\x03 \x01(\x03B\x04\xe2A\x01\x02R\vwriteOffset\x12O\n" + + "\x10checksummed_data\x18\x04 \x01(\v2\".google.storage.v2.ChecksummedDataH\x01R\x0fchecksummedData\x12S\n" + + "\x10object_checksums\x18\x06 \x01(\v2\".google.storage.v2.ObjectChecksumsB\x04\xe2A\x01\x01R\x0fobjectChecksums\x12'\n" + + "\fstate_lookup\x18\a \x01(\bB\x04\xe2A\x01\x01R\vstateLookup\x12\x1a\n" + + "\x05flush\x18\b \x01(\bB\x04\xe2A\x01\x01R\x05flush\x12'\n" + + "\ffinish_write\x18\t \x01(\bB\x04\xe2A\x01\x01R\vfinishWrite\x12s\n" + "\x1ccommon_object_request_params\x18\n" + - " \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParamsB\x0f\n" + + " \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParamsB\x0f\n" + "\rfirst_messageB\x06\n" + "\x04data\"\xc6\x02\n" + "\x17BidiWriteObjectResponse\x12'\n" + @@ -8224,49 +8224,49 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x18persisted_data_checksums\x18\x04 \x01(\v2\".google.storage.v2.ObjectChecksumsR\x16persistedDataChecksums\x12J\n" + "\fwrite_handle\x18\x03 \x01(\v2\".google.storage.v2.BidiWriteHandleH\x01R\vwriteHandle\x88\x01\x01B\x0e\n" + "\fwrite_statusB\x0f\n" + - "\r_write_handle\"\x9e\x05\n" + - "\x12ListObjectsRequest\x12=\n" + - "\x06parent\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06parent\x12 \n" + - "\tpage_size\x18\x02 \x01(\x05B\x03\xe0A\x01R\bpageSize\x12\"\n" + + "\r_write_handle\"\xab\x05\n" + + "\x12ListObjectsRequest\x12>\n" + + "\x06parent\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06parent\x12!\n" + + "\tpage_size\x18\x02 \x01(\x05B\x04\xe2A\x01\x01R\bpageSize\x12#\n" + "\n" + - "page_token\x18\x03 \x01(\tB\x03\xe0A\x01R\tpageToken\x12!\n" + - "\tdelimiter\x18\x04 \x01(\tB\x03\xe0A\x01R\tdelimiter\x12A\n" + - "\x1ainclude_trailing_delimiter\x18\x05 \x01(\bB\x03\xe0A\x01R\x18includeTrailingDelimiter\x12\x1b\n" + - "\x06prefix\x18\x06 \x01(\tB\x03\xe0A\x01R\x06prefix\x12\x1f\n" + - "\bversions\x18\a \x01(\bB\x03\xe0A\x01R\bversions\x12<\n" + - "\tread_mask\x18\b \x01(\v2\x1a.google.protobuf.FieldMaskH\x00R\breadMask\x88\x01\x01\x124\n" + + "page_token\x18\x03 \x01(\tB\x04\xe2A\x01\x01R\tpageToken\x12\"\n" + + "\tdelimiter\x18\x04 \x01(\tB\x04\xe2A\x01\x01R\tdelimiter\x12B\n" + + "\x1ainclude_trailing_delimiter\x18\x05 \x01(\bB\x04\xe2A\x01\x01R\x18includeTrailingDelimiter\x12\x1c\n" + + "\x06prefix\x18\x06 \x01(\tB\x04\xe2A\x01\x01R\x06prefix\x12 \n" + + "\bversions\x18\a \x01(\bB\x04\xe2A\x01\x01R\bversions\x12<\n" + + "\tread_mask\x18\b \x01(\v2\x1a.google.protobuf.FieldMaskH\x00R\breadMask\x88\x01\x01\x125\n" + "\x13lexicographic_start\x18\n" + - " \x01(\tB\x03\xe0A\x01R\x12lexicographicStart\x120\n" + - "\x11lexicographic_end\x18\v \x01(\tB\x03\xe0A\x01R\x10lexicographicEnd\x12&\n" + - "\fsoft_deleted\x18\f \x01(\bB\x03\xe0A\x01R\vsoftDeleted\x12B\n" + - "\x1binclude_folders_as_prefixes\x18\r \x01(\bB\x03\xe0A\x01R\x18includeFoldersAsPrefixes\x12\"\n" + + " \x01(\tB\x04\xe2A\x01\x01R\x12lexicographicStart\x121\n" + + "\x11lexicographic_end\x18\v \x01(\tB\x04\xe2A\x01\x01R\x10lexicographicEnd\x12'\n" + + "\fsoft_deleted\x18\f \x01(\bB\x04\xe2A\x01\x01R\vsoftDeleted\x12C\n" + + "\x1binclude_folders_as_prefixes\x18\r \x01(\bB\x04\xe2A\x01\x01R\x18includeFoldersAsPrefixes\x12#\n" + "\n" + - "match_glob\x18\x0e \x01(\tB\x03\xe0A\x01R\tmatchGlob\x12\x1b\n" + - "\x06filter\x18\x0f \x01(\tB\x03\xe0A\x01R\x06filterB\f\n" + + "match_glob\x18\x0e \x01(\tB\x04\xe2A\x01\x01R\tmatchGlob\x12\x1c\n" + + "\x06filter\x18\x0f \x01(\tB\x04\xe2A\x01\x01R\x06filterB\f\n" + "\n" + - "_read_mask\"\xaf\x01\n" + - "\x17QueryWriteStatusRequest\x12 \n" + - "\tupload_id\x18\x01 \x01(\tB\x03\xe0A\x02R\buploadId\x12r\n" + - "\x1ccommon_object_request_params\x18\x02 \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParams\"\xea\x01\n" + + "_read_mask\"\xb1\x01\n" + + "\x17QueryWriteStatusRequest\x12!\n" + + "\tupload_id\x18\x01 \x01(\tB\x04\xe2A\x01\x02R\buploadId\x12s\n" + + "\x1ccommon_object_request_params\x18\x02 \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParams\"\xea\x01\n" + "\x18QueryWriteStatusResponse\x12'\n" + "\x0epersisted_size\x18\x01 \x01(\x03H\x00R\rpersistedSize\x127\n" + "\bresource\x18\x02 \x01(\v2\x19.google.storage.v2.ObjectH\x00R\bresource\x12\\\n" + "\x18persisted_data_checksums\x18\x03 \x01(\v2\".google.storage.v2.ObjectChecksumsR\x16persistedDataChecksumsB\x0e\n" + - "\fwrite_status\"\xea\x0e\n" + - "\x14RewriteObjectRequest\x121\n" + - "\x10destination_name\x18\x18 \x01(\tB\x06\xe0A\x02\xe0A\x05R\x0fdestinationName\x12W\n" + - "\x12destination_bucket\x18\x19 \x01(\tB(\xe0A\x02\xe0A\x05\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x11destinationBucket\x12Y\n" + - "\x13destination_kms_key\x18\x1b \x01(\tB)\xe0A\x01\xfaA#\n" + - "!cloudkms.googleapis.com/CryptoKeyR\x11destinationKmsKey\x12@\n" + - "\vdestination\x18\x01 \x01(\v2\x19.google.storage.v2.ObjectB\x03\xe0A\x01R\vdestination\x12J\n" + - "\rsource_bucket\x18\x02 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\fsourceBucket\x12(\n" + - "\rsource_object\x18\x03 \x01(\tB\x03\xe0A\x02R\fsourceObject\x120\n" + - "\x11source_generation\x18\x04 \x01(\x03B\x03\xe0A\x01R\x10sourceGeneration\x12(\n" + - "\rrewrite_token\x18\x05 \x01(\tB\x03\xe0A\x01R\frewriteToken\x12A\n" + - "\x1adestination_predefined_acl\x18\x1c \x01(\tB\x03\xe0A\x01R\x18destinationPredefinedAcl\x123\n" + + "\fwrite_status\"\xf5\x0e\n" + + "\x14RewriteObjectRequest\x120\n" + + "\x10destination_name\x18\x18 \x01(\tB\x05\xe2A\x02\x02\x05R\x0fdestinationName\x12V\n" + + "\x12destination_bucket\x18\x19 \x01(\tB'\xe2A\x02\x02\x05\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x11destinationBucket\x12Z\n" + + "\x13destination_kms_key\x18\x1b \x01(\tB*\xe2A\x01\x01\xfaA#\n" + + "!cloudkms.googleapis.com/CryptoKeyR\x11destinationKmsKey\x12A\n" + + "\vdestination\x18\x01 \x01(\v2\x19.google.storage.v2.ObjectB\x04\xe2A\x01\x01R\vdestination\x12K\n" + + "\rsource_bucket\x18\x02 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\fsourceBucket\x12)\n" + + "\rsource_object\x18\x03 \x01(\tB\x04\xe2A\x01\x02R\fsourceObject\x121\n" + + "\x11source_generation\x18\x04 \x01(\x03B\x04\xe2A\x01\x01R\x10sourceGeneration\x12)\n" + + "\rrewrite_token\x18\x05 \x01(\tB\x04\xe2A\x01\x01R\frewriteToken\x12B\n" + + "\x1adestination_predefined_acl\x18\x1c \x01(\tB\x04\xe2A\x01\x01R\x18destinationPredefinedAcl\x123\n" + "\x13if_generation_match\x18\a \x01(\x03H\x00R\x11ifGenerationMatch\x88\x01\x01\x12:\n" + "\x17if_generation_not_match\x18\b \x01(\x03H\x01R\x14ifGenerationNotMatch\x88\x01\x01\x12;\n" + "\x17if_metageneration_match\x18\t \x01(\x03H\x02R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + @@ -8275,13 +8275,13 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x1aif_source_generation_match\x18\v \x01(\x03H\x04R\x17ifSourceGenerationMatch\x88\x01\x01\x12G\n" + "\x1eif_source_generation_not_match\x18\f \x01(\x03H\x05R\x1aifSourceGenerationNotMatch\x88\x01\x01\x12H\n" + "\x1eif_source_metageneration_match\x18\r \x01(\x03H\x06R\x1bifSourceMetagenerationMatch\x88\x01\x01\x12O\n" + - "\"if_source_metageneration_not_match\x18\x0e \x01(\x03H\aR\x1eifSourceMetagenerationNotMatch\x88\x01\x01\x12C\n" + - "\x1cmax_bytes_rewritten_per_call\x18\x0f \x01(\x03B\x03\xe0A\x01R\x18maxBytesRewrittenPerCall\x12L\n" + - " copy_source_encryption_algorithm\x18\x10 \x01(\tB\x03\xe0A\x01R\x1dcopySourceEncryptionAlgorithm\x12K\n" + - " copy_source_encryption_key_bytes\x18\x15 \x01(\fB\x03\xe0A\x01R\x1ccopySourceEncryptionKeyBytes\x12X\n" + - "'copy_source_encryption_key_sha256_bytes\x18\x16 \x01(\fB\x03\xe0A\x01R\"copySourceEncryptionKeySha256Bytes\x12r\n" + - "\x1ccommon_object_request_params\x18\x13 \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParams\x12R\n" + - "\x10object_checksums\x18\x1d \x01(\v2\".google.storage.v2.ObjectChecksumsB\x03\xe0A\x01R\x0fobjectChecksumsB\x16\n" + + "\"if_source_metageneration_not_match\x18\x0e \x01(\x03H\aR\x1eifSourceMetagenerationNotMatch\x88\x01\x01\x12D\n" + + "\x1cmax_bytes_rewritten_per_call\x18\x0f \x01(\x03B\x04\xe2A\x01\x01R\x18maxBytesRewrittenPerCall\x12M\n" + + " copy_source_encryption_algorithm\x18\x10 \x01(\tB\x04\xe2A\x01\x01R\x1dcopySourceEncryptionAlgorithm\x12L\n" + + " copy_source_encryption_key_bytes\x18\x15 \x01(\fB\x04\xe2A\x01\x01R\x1ccopySourceEncryptionKeyBytes\x12Y\n" + + "'copy_source_encryption_key_sha256_bytes\x18\x16 \x01(\fB\x04\xe2A\x01\x01R\"copySourceEncryptionKeySha256Bytes\x12s\n" + + "\x1ccommon_object_request_params\x18\x13 \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParams\x12S\n" + + "\x10object_checksums\x18\x1d \x01(\v2\".google.storage.v2.ObjectChecksumsB\x04\xe2A\x01\x01R\x0fobjectChecksumsB\x16\n" + "\x14_if_generation_matchB\x1a\n" + "\x18_if_generation_not_matchB\x1a\n" + "\x18_if_metageneration_matchB\x1e\n" + @@ -8296,21 +8296,21 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "objectSize\x12\x12\n" + "\x04done\x18\x03 \x01(\bR\x04done\x12#\n" + "\rrewrite_token\x18\x04 \x01(\tR\frewriteToken\x125\n" + - "\bresource\x18\x05 \x01(\v2\x19.google.storage.v2.ObjectR\bresource\"\xec\a\n" + - "\x11MoveObjectRequest\x12=\n" + - "\x06bucket\x18\x01 \x01(\tB%\xe0A\x02\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06bucket\x12(\n" + - "\rsource_object\x18\x02 \x01(\tB\x03\xe0A\x02R\fsourceObject\x122\n" + - "\x12destination_object\x18\x03 \x01(\tB\x03\xe0A\x02R\x11destinationObject\x12E\n" + - "\x1aif_source_generation_match\x18\x04 \x01(\x03B\x03\xe0A\x01H\x00R\x17ifSourceGenerationMatch\x88\x01\x01\x12L\n" + - "\x1eif_source_generation_not_match\x18\x05 \x01(\x03B\x03\xe0A\x01H\x01R\x1aifSourceGenerationNotMatch\x88\x01\x01\x12M\n" + - "\x1eif_source_metageneration_match\x18\x06 \x01(\x03B\x03\xe0A\x01H\x02R\x1bifSourceMetagenerationMatch\x88\x01\x01\x12T\n" + - "\"if_source_metageneration_not_match\x18\a \x01(\x03B\x03\xe0A\x01H\x03R\x1eifSourceMetagenerationNotMatch\x88\x01\x01\x128\n" + - "\x13if_generation_match\x18\b \x01(\x03B\x03\xe0A\x01H\x04R\x11ifGenerationMatch\x88\x01\x01\x12?\n" + - "\x17if_generation_not_match\x18\t \x01(\x03B\x03\xe0A\x01H\x05R\x14ifGenerationNotMatch\x88\x01\x01\x12@\n" + + "\bresource\x18\x05 \x01(\v2\x19.google.storage.v2.ObjectR\bresource\"\xf7\a\n" + + "\x11MoveObjectRequest\x12>\n" + + "\x06bucket\x18\x01 \x01(\tB&\xe2A\x01\x02\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06bucket\x12)\n" + + "\rsource_object\x18\x02 \x01(\tB\x04\xe2A\x01\x02R\fsourceObject\x123\n" + + "\x12destination_object\x18\x03 \x01(\tB\x04\xe2A\x01\x02R\x11destinationObject\x12F\n" + + "\x1aif_source_generation_match\x18\x04 \x01(\x03B\x04\xe2A\x01\x01H\x00R\x17ifSourceGenerationMatch\x88\x01\x01\x12M\n" + + "\x1eif_source_generation_not_match\x18\x05 \x01(\x03B\x04\xe2A\x01\x01H\x01R\x1aifSourceGenerationNotMatch\x88\x01\x01\x12N\n" + + "\x1eif_source_metageneration_match\x18\x06 \x01(\x03B\x04\xe2A\x01\x01H\x02R\x1bifSourceMetagenerationMatch\x88\x01\x01\x12U\n" + + "\"if_source_metageneration_not_match\x18\a \x01(\x03B\x04\xe2A\x01\x01H\x03R\x1eifSourceMetagenerationNotMatch\x88\x01\x01\x129\n" + + "\x13if_generation_match\x18\b \x01(\x03B\x04\xe2A\x01\x01H\x04R\x11ifGenerationMatch\x88\x01\x01\x12@\n" + + "\x17if_generation_not_match\x18\t \x01(\x03B\x04\xe2A\x01\x01H\x05R\x14ifGenerationNotMatch\x88\x01\x01\x12A\n" + "\x17if_metageneration_match\x18\n" + - " \x01(\x03B\x03\xe0A\x01H\x06R\x15ifMetagenerationMatch\x88\x01\x01\x12G\n" + - "\x1bif_metageneration_not_match\x18\v \x01(\x03B\x03\xe0A\x01H\aR\x18ifMetagenerationNotMatch\x88\x01\x01B\x1d\n" + + " \x01(\x03B\x04\xe2A\x01\x01H\x06R\x15ifMetagenerationMatch\x88\x01\x01\x12H\n" + + "\x1bif_metageneration_not_match\x18\v \x01(\x03B\x04\xe2A\x01\x01H\aR\x18ifMetagenerationNotMatch\x88\x01\x01B\x1d\n" + "\x1b_if_source_generation_matchB!\n" + "\x1f_if_source_generation_not_matchB!\n" + "\x1f_if_source_metageneration_matchB%\n" + @@ -8318,33 +8318,33 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x14_if_generation_matchB\x1a\n" + "\x18_if_generation_not_matchB\x1a\n" + "\x18_if_metageneration_matchB\x1e\n" + - "\x1c_if_metageneration_not_match\"\xb9\x02\n" + - "\x1aStartResumableWriteRequest\x12S\n" + - "\x11write_object_spec\x18\x01 \x01(\v2\".google.storage.v2.WriteObjectSpecB\x03\xe0A\x02R\x0fwriteObjectSpec\x12r\n" + - "\x1ccommon_object_request_params\x18\x03 \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParams\x12R\n" + - "\x10object_checksums\x18\x05 \x01(\v2\".google.storage.v2.ObjectChecksumsB\x03\xe0A\x01R\x0fobjectChecksums\":\n" + + "\x1c_if_metageneration_not_match\"\xbc\x02\n" + + "\x1aStartResumableWriteRequest\x12T\n" + + "\x11write_object_spec\x18\x01 \x01(\v2\".google.storage.v2.WriteObjectSpecB\x04\xe2A\x01\x02R\x0fwriteObjectSpec\x12s\n" + + "\x1ccommon_object_request_params\x18\x03 \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParams\x12S\n" + + "\x10object_checksums\x18\x05 \x01(\v2\".google.storage.v2.ObjectChecksumsB\x04\xe2A\x01\x01R\x0fobjectChecksums\":\n" + "\x1bStartResumableWriteResponse\x12\x1b\n" + - "\tupload_id\x18\x01 \x01(\tR\buploadId\"\xd6\x05\n" + - "\x13UpdateObjectRequest\x126\n" + - "\x06object\x18\x01 \x01(\v2\x19.google.storage.v2.ObjectB\x03\xe0A\x02R\x06object\x123\n" + + "\tupload_id\x18\x01 \x01(\tR\buploadId\"\xdb\x05\n" + + "\x13UpdateObjectRequest\x127\n" + + "\x06object\x18\x01 \x01(\v2\x19.google.storage.v2.ObjectB\x04\xe2A\x01\x02R\x06object\x123\n" + "\x13if_generation_match\x18\x02 \x01(\x03H\x00R\x11ifGenerationMatch\x88\x01\x01\x12:\n" + "\x17if_generation_not_match\x18\x03 \x01(\x03H\x01R\x14ifGenerationNotMatch\x88\x01\x01\x12;\n" + "\x17if_metageneration_match\x18\x04 \x01(\x03H\x02R\x15ifMetagenerationMatch\x88\x01\x01\x12B\n" + - "\x1bif_metageneration_not_match\x18\x05 \x01(\x03H\x03R\x18ifMetagenerationNotMatch\x88\x01\x01\x12*\n" + + "\x1bif_metageneration_not_match\x18\x05 \x01(\x03H\x03R\x18ifMetagenerationNotMatch\x88\x01\x01\x12+\n" + "\x0epredefined_acl\x18\n" + - " \x01(\tB\x03\xe0A\x01R\rpredefinedAcl\x12@\n" + - "\vupdate_mask\x18\a \x01(\v2\x1a.google.protobuf.FieldMaskB\x03\xe0A\x02R\n" + - "updateMask\x12r\n" + - "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x03\xe0A\x01R\x19commonObjectRequestParams\x12C\n" + - "\x1boverride_unlocked_retention\x18\v \x01(\bB\x03\xe0A\x01R\x19overrideUnlockedRetentionB\x16\n" + + " \x01(\tB\x04\xe2A\x01\x01R\rpredefinedAcl\x12A\n" + + "\vupdate_mask\x18\a \x01(\v2\x1a.google.protobuf.FieldMaskB\x04\xe2A\x01\x02R\n" + + "updateMask\x12s\n" + + "\x1ccommon_object_request_params\x18\b \x01(\v2,.google.storage.v2.CommonObjectRequestParamsB\x04\xe2A\x01\x01R\x19commonObjectRequestParams\x12D\n" + + "\x1boverride_unlocked_retention\x18\v \x01(\bB\x04\xe2A\x01\x01R\x19overrideUnlockedRetentionB\x16\n" + "\x14_if_generation_matchB\x1a\n" + "\x18_if_generation_not_matchB\x1a\n" + "\x18_if_metageneration_matchB\x1e\n" + - "\x1c_if_metageneration_not_match\"\xce\x01\n" + - "\x19CommonObjectRequestParams\x126\n" + - "\x14encryption_algorithm\x18\x01 \x01(\tB\x03\xe0A\x01R\x13encryptionAlgorithm\x125\n" + - "\x14encryption_key_bytes\x18\x04 \x01(\fB\x03\xe0A\x01R\x12encryptionKeyBytes\x12B\n" + - "\x1bencryption_key_sha256_bytes\x18\x05 \x01(\fB\x03\xe0A\x01R\x18encryptionKeySha256Bytes\"\xca\x05\n" + + "\x1c_if_metageneration_not_match\"\xd1\x01\n" + + "\x19CommonObjectRequestParams\x127\n" + + "\x14encryption_algorithm\x18\x01 \x01(\tB\x04\xe2A\x01\x01R\x13encryptionAlgorithm\x126\n" + + "\x14encryption_key_bytes\x18\x04 \x01(\fB\x04\xe2A\x01\x01R\x12encryptionKeyBytes\x12C\n" + + "\x1bencryption_key_sha256_bytes\x18\x05 \x01(\fB\x04\xe2A\x01\x01R\x18encryptionKeySha256Bytes\"\xca\x05\n" + "\x10ServiceConstants\"\xb5\x05\n" + "\x06Values\x12\x16\n" + "\x12VALUES_UNSPECIFIED\x10\x00\x12\x1b\n" + @@ -8364,63 +8364,63 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x1bMAX_LABELS_KEY_VALUE_LENGTH\x10?\x12\x1f\n" + "\x1aMAX_LABELS_KEY_VALUE_BYTES\x10\x80\x01\x12.\n" + ")MAX_OBJECT_IDS_PER_DELETE_OBJECTS_REQUEST\x10\xe8\a\x12\x1e\n" + - "\x1aSPLIT_TOKEN_MAX_VALID_DAYS\x10\x0e\x1a\x02\x10\x01\"\xb57\n" + - "\x06Bucket\x12\x17\n" + - "\x04name\x18\x01 \x01(\tB\x03\xe0A\bR\x04name\x12 \n" + - "\tbucket_id\x18\x02 \x01(\tB\x03\xe0A\x03R\bbucketId\x12\x12\n" + - "\x04etag\x18\x1d \x01(\tR\x04etag\x12M\n" + - "\aproject\x18\x03 \x01(\tB3\xe0A\x05\xfaA-\n" + - "+cloudresourcemanager.googleapis.com/ProjectR\aproject\x12+\n" + - "\x0emetageneration\x18\x04 \x01(\x03B\x03\xe0A\x03R\x0emetageneration\x12\x1f\n" + - "\blocation\x18\x05 \x01(\tB\x03\xe0A\x05R\blocation\x12(\n" + - "\rlocation_type\x18\x06 \x01(\tB\x03\xe0A\x03R\flocationType\x12(\n" + - "\rstorage_class\x18\a \x01(\tB\x03\xe0A\x01R\fstorageClass\x12\x15\n" + - "\x03rpo\x18\x1b \x01(\tB\x03\xe0A\x01R\x03rpo\x12=\n" + - "\x03acl\x18\b \x03(\v2&.google.storage.v2.BucketAccessControlB\x03\xe0A\x01R\x03acl\x12Y\n" + - "\x12default_object_acl\x18\t \x03(\v2&.google.storage.v2.ObjectAccessControlB\x03\xe0A\x01R\x10defaultObjectAcl\x12F\n" + + "\x1aSPLIT_TOKEN_MAX_VALID_DAYS\x10\x0e\x1a\x02\x10\x01\"\xfc7\n" + + "\x06Bucket\x12\x18\n" + + "\x04name\x18\x01 \x01(\tB\x04\xe2A\x01\bR\x04name\x12!\n" + + "\tbucket_id\x18\x02 \x01(\tB\x04\xe2A\x01\x03R\bbucketId\x12\x12\n" + + "\x04etag\x18\x1d \x01(\tR\x04etag\x12N\n" + + "\aproject\x18\x03 \x01(\tB4\xe2A\x01\x05\xfaA-\n" + + "+cloudresourcemanager.googleapis.com/ProjectR\aproject\x12,\n" + + "\x0emetageneration\x18\x04 \x01(\x03B\x04\xe2A\x01\x03R\x0emetageneration\x12 \n" + + "\blocation\x18\x05 \x01(\tB\x04\xe2A\x01\x05R\blocation\x12)\n" + + "\rlocation_type\x18\x06 \x01(\tB\x04\xe2A\x01\x03R\flocationType\x12)\n" + + "\rstorage_class\x18\a \x01(\tB\x04\xe2A\x01\x01R\fstorageClass\x12\x16\n" + + "\x03rpo\x18\x1b \x01(\tB\x04\xe2A\x01\x01R\x03rpo\x12>\n" + + "\x03acl\x18\b \x03(\v2&.google.storage.v2.BucketAccessControlB\x04\xe2A\x01\x01R\x03acl\x12Z\n" + + "\x12default_object_acl\x18\t \x03(\v2&.google.storage.v2.ObjectAccessControlB\x04\xe2A\x01\x01R\x10defaultObjectAcl\x12G\n" + "\tlifecycle\x18\n" + - " \x01(\v2#.google.storage.v2.Bucket.LifecycleB\x03\xe0A\x01R\tlifecycle\x12@\n" + - "\vcreate_time\x18\v \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\n" + - "createTime\x127\n" + - "\x04cors\x18\f \x03(\v2\x1e.google.storage.v2.Bucket.CorsB\x03\xe0A\x01R\x04cors\x12@\n" + - "\vupdate_time\x18\r \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\n" + - "updateTime\x12<\n" + - "\x18default_event_based_hold\x18\x0e \x01(\bB\x03\xe0A\x01R\x15defaultEventBasedHold\x12B\n" + - "\x06labels\x18\x0f \x03(\v2%.google.storage.v2.Bucket.LabelsEntryB\x03\xe0A\x01R\x06labels\x12@\n" + - "\awebsite\x18\x10 \x01(\v2!.google.storage.v2.Bucket.WebsiteB\x03\xe0A\x01R\awebsite\x12I\n" + + " \x01(\v2#.google.storage.v2.Bucket.LifecycleB\x04\xe2A\x01\x01R\tlifecycle\x12A\n" + + "\vcreate_time\x18\v \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\n" + + "createTime\x128\n" + + "\x04cors\x18\f \x03(\v2\x1e.google.storage.v2.Bucket.CorsB\x04\xe2A\x01\x01R\x04cors\x12A\n" + + "\vupdate_time\x18\r \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\n" + + "updateTime\x12=\n" + + "\x18default_event_based_hold\x18\x0e \x01(\bB\x04\xe2A\x01\x01R\x15defaultEventBasedHold\x12C\n" + + "\x06labels\x18\x0f \x03(\v2%.google.storage.v2.Bucket.LabelsEntryB\x04\xe2A\x01\x01R\x06labels\x12A\n" + + "\awebsite\x18\x10 \x01(\v2!.google.storage.v2.Bucket.WebsiteB\x04\xe2A\x01\x01R\awebsite\x12J\n" + "\n" + - "versioning\x18\x11 \x01(\v2$.google.storage.v2.Bucket.VersioningB\x03\xe0A\x01R\n" + - "versioning\x12@\n" + - "\alogging\x18\x12 \x01(\v2!.google.storage.v2.Bucket.LoggingB\x03\xe0A\x01R\alogging\x123\n" + - "\x05owner\x18\x13 \x01(\v2\x18.google.storage.v2.OwnerB\x03\xe0A\x03R\x05owner\x12I\n" + + "versioning\x18\x11 \x01(\v2$.google.storage.v2.Bucket.VersioningB\x04\xe2A\x01\x01R\n" + + "versioning\x12A\n" + + "\alogging\x18\x12 \x01(\v2!.google.storage.v2.Bucket.LoggingB\x04\xe2A\x01\x01R\alogging\x124\n" + + "\x05owner\x18\x13 \x01(\v2\x18.google.storage.v2.OwnerB\x04\xe2A\x01\x03R\x05owner\x12J\n" + "\n" + - "encryption\x18\x14 \x01(\v2$.google.storage.v2.Bucket.EncryptionB\x03\xe0A\x01R\n" + - "encryption\x12@\n" + - "\abilling\x18\x15 \x01(\v2!.google.storage.v2.Bucket.BillingB\x03\xe0A\x01R\abilling\x12Y\n" + - "\x10retention_policy\x18\x16 \x01(\v2).google.storage.v2.Bucket.RetentionPolicyB\x03\xe0A\x01R\x0fretentionPolicy\x12G\n" + + "encryption\x18\x14 \x01(\v2$.google.storage.v2.Bucket.EncryptionB\x04\xe2A\x01\x01R\n" + + "encryption\x12A\n" + + "\abilling\x18\x15 \x01(\v2!.google.storage.v2.Bucket.BillingB\x04\xe2A\x01\x01R\abilling\x12Z\n" + + "\x10retention_policy\x18\x16 \x01(\v2).google.storage.v2.Bucket.RetentionPolicyB\x04\xe2A\x01\x01R\x0fretentionPolicy\x12H\n" + "\n" + - "iam_config\x18\x17 \x01(\v2#.google.storage.v2.Bucket.IamConfigB\x03\xe0A\x01R\tiamConfig\x12(\n" + - "\rsatisfies_pzs\x18\x19 \x01(\bB\x03\xe0A\x01R\fsatisfiesPzs\x12l\n" + - "\x17custom_placement_config\x18\x1a \x01(\v2/.google.storage.v2.Bucket.CustomPlacementConfigB\x03\xe0A\x01R\x15customPlacementConfig\x12F\n" + - "\tautoclass\x18\x1c \x01(\v2#.google.storage.v2.Bucket.AutoclassB\x03\xe0A\x01R\tautoclass\x12k\n" + - "\x16hierarchical_namespace\x18 \x01(\v2/.google.storage.v2.Bucket.HierarchicalNamespaceB\x03\xe0A\x01R\x15hierarchicalNamespace\x12]\n" + - "\x12soft_delete_policy\x18\x1f \x01(\v2*.google.storage.v2.Bucket.SoftDeletePolicyB\x03\xe0A\x01R\x10softDeletePolicy\x12Y\n" + - "\x10object_retention\x18! \x01(\v2).google.storage.v2.Bucket.ObjectRetentionB\x03\xe0A\x01R\x0fobjectRetention\x12I\n" + - "\tip_filter\x18& \x01(\v2\".google.storage.v2.Bucket.IpFilterB\x03\xe0A\x01H\x00R\bipFilter\x88\x01\x01\x1a5\n" + - "\aBilling\x12*\n" + - "\x0erequester_pays\x18\x01 \x01(\bB\x03\xe0A\x01R\rrequesterPays\x1a\x9b\x01\n" + - "\x04Cors\x12\x1b\n" + - "\x06origin\x18\x01 \x03(\tB\x03\xe0A\x01R\x06origin\x12\x1b\n" + - "\x06method\x18\x02 \x03(\tB\x03\xe0A\x01R\x06method\x12,\n" + - "\x0fresponse_header\x18\x03 \x03(\tB\x03\xe0A\x01R\x0eresponseHeader\x12+\n" + - "\x0fmax_age_seconds\x18\x04 \x01(\x05B\x03\xe0A\x01R\rmaxAgeSeconds\x1a\xa0\v\n" + + "iam_config\x18\x17 \x01(\v2#.google.storage.v2.Bucket.IamConfigB\x04\xe2A\x01\x01R\tiamConfig\x12)\n" + + "\rsatisfies_pzs\x18\x19 \x01(\bB\x04\xe2A\x01\x01R\fsatisfiesPzs\x12m\n" + + "\x17custom_placement_config\x18\x1a \x01(\v2/.google.storage.v2.Bucket.CustomPlacementConfigB\x04\xe2A\x01\x01R\x15customPlacementConfig\x12G\n" + + "\tautoclass\x18\x1c \x01(\v2#.google.storage.v2.Bucket.AutoclassB\x04\xe2A\x01\x01R\tautoclass\x12l\n" + + "\x16hierarchical_namespace\x18 \x01(\v2/.google.storage.v2.Bucket.HierarchicalNamespaceB\x04\xe2A\x01\x01R\x15hierarchicalNamespace\x12^\n" + + "\x12soft_delete_policy\x18\x1f \x01(\v2*.google.storage.v2.Bucket.SoftDeletePolicyB\x04\xe2A\x01\x01R\x10softDeletePolicy\x12Z\n" + + "\x10object_retention\x18! \x01(\v2).google.storage.v2.Bucket.ObjectRetentionB\x04\xe2A\x01\x01R\x0fobjectRetention\x12J\n" + + "\tip_filter\x18& \x01(\v2\".google.storage.v2.Bucket.IpFilterB\x04\xe2A\x01\x01H\x00R\bipFilter\x88\x01\x01\x1a6\n" + + "\aBilling\x12+\n" + + "\x0erequester_pays\x18\x01 \x01(\bB\x04\xe2A\x01\x01R\rrequesterPays\x1a\x9f\x01\n" + + "\x04Cors\x12\x1c\n" + + "\x06origin\x18\x01 \x03(\tB\x04\xe2A\x01\x01R\x06origin\x12\x1c\n" + + "\x06method\x18\x02 \x03(\tB\x04\xe2A\x01\x01R\x06method\x12-\n" + + "\x0fresponse_header\x18\x03 \x03(\tB\x04\xe2A\x01\x01R\x0eresponseHeader\x12,\n" + + "\x0fmax_age_seconds\x18\x04 \x01(\x05B\x04\xe2A\x01\x01R\rmaxAgeSeconds\x1a\xa4\v\n" + "\n" + - "Encryption\x12Q\n" + - "\x0fdefault_kms_key\x18\x01 \x01(\tB)\xe0A\x01\xfaA#\n" + - "!cloudkms.googleapis.com/CryptoKeyR\rdefaultKmsKey\x12\xb7\x01\n" + - ",google_managed_encryption_enforcement_config\x18\x02 \x01(\v2M.google.storage.v2.Bucket.Encryption.GoogleManagedEncryptionEnforcementConfigB\x03\xe0A\x01H\x00R(googleManagedEncryptionEnforcementConfig\x88\x01\x01\x12\xbd\x01\n" + - ".customer_managed_encryption_enforcement_config\x18\x03 \x01(\v2O.google.storage.v2.Bucket.Encryption.CustomerManagedEncryptionEnforcementConfigB\x03\xe0A\x01H\x01R*customerManagedEncryptionEnforcementConfig\x88\x01\x01\x12\xc0\x01\n" + - "/customer_supplied_encryption_enforcement_config\x18\x04 \x01(\v2P.google.storage.v2.Bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfigB\x03\xe0A\x01H\x02R+customerSuppliedEncryptionEnforcementConfig\x88\x01\x01\x1a\xca\x01\n" + + "Encryption\x12R\n" + + "\x0fdefault_kms_key\x18\x01 \x01(\tB*\xe2A\x01\x01\xfaA#\n" + + "!cloudkms.googleapis.com/CryptoKeyR\rdefaultKmsKey\x12\xb8\x01\n" + + ",google_managed_encryption_enforcement_config\x18\x02 \x01(\v2M.google.storage.v2.Bucket.Encryption.GoogleManagedEncryptionEnforcementConfigB\x04\xe2A\x01\x01H\x00R(googleManagedEncryptionEnforcementConfig\x88\x01\x01\x12\xbe\x01\n" + + ".customer_managed_encryption_enforcement_config\x18\x03 \x01(\v2O.google.storage.v2.Bucket.Encryption.CustomerManagedEncryptionEnforcementConfigB\x04\xe2A\x01\x01H\x01R*customerManagedEncryptionEnforcementConfig\x88\x01\x01\x12\xc1\x01\n" + + "/customer_supplied_encryption_enforcement_config\x18\x04 \x01(\v2P.google.storage.v2.Bucket.Encryption.CustomerSuppliedEncryptionEnforcementConfigB\x04\xe2A\x01\x01H\x02R+customerSuppliedEncryptionEnforcementConfig\x88\x01\x01\x1a\xca\x01\n" + "(GoogleManagedEncryptionEnforcementConfig\x12.\n" + "\x10restriction_mode\x18\x03 \x01(\tH\x00R\x0frestrictionMode\x88\x01\x01\x12F\n" + "\x0eeffective_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampH\x01R\reffectiveTime\x88\x01\x01B\x13\n" + @@ -8438,174 +8438,174 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x0f_effective_timeB/\n" + "-_google_managed_encryption_enforcement_configB1\n" + "/_customer_managed_encryption_enforcement_configB2\n" + - "0_customer_supplied_encryption_enforcement_config\x1a\xc6\x02\n" + - "\tIamConfig\x12\x80\x01\n" + - "\x1buniform_bucket_level_access\x18\x01 \x01(\v2<.google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccessB\x03\xe0A\x01R\x18uniformBucketLevelAccess\x12=\n" + - "\x18public_access_prevention\x18\x03 \x01(\tB\x03\xe0A\x01R\x16publicAccessPrevention\x1aw\n" + - "\x18UniformBucketLevelAccess\x12\x1d\n" + - "\aenabled\x18\x01 \x01(\bB\x03\xe0A\x01R\aenabled\x12<\n" + - "\tlock_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x01R\blockTime\x1a\x92\b\n" + - "\tLifecycle\x12A\n" + - "\x04rule\x18\x01 \x03(\v2(.google.storage.v2.Bucket.Lifecycle.RuleB\x03\xe0A\x01R\x04rule\x1a\xc1\a\n" + - "\x04Rule\x12L\n" + - "\x06action\x18\x01 \x01(\v2/.google.storage.v2.Bucket.Lifecycle.Rule.ActionB\x03\xe0A\x01R\x06action\x12U\n" + - "\tcondition\x18\x02 \x01(\v22.google.storage.v2.Bucket.Lifecycle.Rule.ConditionB\x03\xe0A\x01R\tcondition\x1aK\n" + - "\x06Action\x12\x17\n" + - "\x04type\x18\x01 \x01(\tB\x03\xe0A\x01R\x04type\x12(\n" + - "\rstorage_class\x18\x02 \x01(\tB\x03\xe0A\x01R\fstorageClass\x1a\xc6\x05\n" + + "0_customer_supplied_encryption_enforcement_config\x1a\xca\x02\n" + + "\tIamConfig\x12\x81\x01\n" + + "\x1buniform_bucket_level_access\x18\x01 \x01(\v2<.google.storage.v2.Bucket.IamConfig.UniformBucketLevelAccessB\x04\xe2A\x01\x01R\x18uniformBucketLevelAccess\x12>\n" + + "\x18public_access_prevention\x18\x03 \x01(\tB\x04\xe2A\x01\x01R\x16publicAccessPrevention\x1ay\n" + + "\x18UniformBucketLevelAccess\x12\x1e\n" + + "\aenabled\x18\x01 \x01(\bB\x04\xe2A\x01\x01R\aenabled\x12=\n" + + "\tlock_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x01R\blockTime\x1a\x9d\b\n" + + "\tLifecycle\x12B\n" + + "\x04rule\x18\x01 \x03(\v2(.google.storage.v2.Bucket.Lifecycle.RuleB\x04\xe2A\x01\x01R\x04rule\x1a\xcb\a\n" + + "\x04Rule\x12M\n" + + "\x06action\x18\x01 \x01(\v2/.google.storage.v2.Bucket.Lifecycle.Rule.ActionB\x04\xe2A\x01\x01R\x06action\x12V\n" + + "\tcondition\x18\x02 \x01(\v22.google.storage.v2.Bucket.Lifecycle.Rule.ConditionB\x04\xe2A\x01\x01R\tcondition\x1aM\n" + + "\x06Action\x12\x18\n" + + "\x04type\x18\x01 \x01(\tB\x04\xe2A\x01\x01R\x04type\x12)\n" + + "\rstorage_class\x18\x02 \x01(\tB\x04\xe2A\x01\x01R\fstorageClass\x1a\xcc\x05\n" + "\tCondition\x12\x1e\n" + - "\bage_days\x18\x01 \x01(\x05H\x00R\aageDays\x88\x01\x01\x12=\n" + - "\x0ecreated_before\x18\x02 \x01(\v2\x11.google.type.DateB\x03\xe0A\x01R\rcreatedBefore\x12\x1c\n" + + "\bage_days\x18\x01 \x01(\x05H\x00R\aageDays\x88\x01\x01\x12>\n" + + "\x0ecreated_before\x18\x02 \x01(\v2\x11.google.type.DateB\x04\xe2A\x01\x01R\rcreatedBefore\x12\x1c\n" + "\ais_live\x18\x03 \x01(\bH\x01R\x06isLive\x88\x01\x01\x121\n" + - "\x12num_newer_versions\x18\x04 \x01(\x05H\x02R\x10numNewerVersions\x88\x01\x01\x127\n" + - "\x15matches_storage_class\x18\x05 \x03(\tB\x03\xe0A\x01R\x13matchesStorageClass\x128\n" + - "\x16days_since_custom_time\x18\a \x01(\x05H\x03R\x13daysSinceCustomTime\x88\x01\x01\x12D\n" + - "\x12custom_time_before\x18\b \x01(\v2\x11.google.type.DateB\x03\xe0A\x01R\x10customTimeBefore\x12@\n" + - "\x1adays_since_noncurrent_time\x18\t \x01(\x05H\x04R\x17daysSinceNoncurrentTime\x88\x01\x01\x12L\n" + + "\x12num_newer_versions\x18\x04 \x01(\x05H\x02R\x10numNewerVersions\x88\x01\x01\x128\n" + + "\x15matches_storage_class\x18\x05 \x03(\tB\x04\xe2A\x01\x01R\x13matchesStorageClass\x128\n" + + "\x16days_since_custom_time\x18\a \x01(\x05H\x03R\x13daysSinceCustomTime\x88\x01\x01\x12E\n" + + "\x12custom_time_before\x18\b \x01(\v2\x11.google.type.DateB\x04\xe2A\x01\x01R\x10customTimeBefore\x12@\n" + + "\x1adays_since_noncurrent_time\x18\t \x01(\x05H\x04R\x17daysSinceNoncurrentTime\x88\x01\x01\x12M\n" + "\x16noncurrent_time_before\x18\n" + - " \x01(\v2\x11.google.type.DateB\x03\xe0A\x01R\x14noncurrentTimeBefore\x12*\n" + - "\x0ematches_prefix\x18\v \x03(\tB\x03\xe0A\x01R\rmatchesPrefix\x12*\n" + - "\x0ematches_suffix\x18\f \x03(\tB\x03\xe0A\x01R\rmatchesSuffixB\v\n" + + " \x01(\v2\x11.google.type.DateB\x04\xe2A\x01\x01R\x14noncurrentTimeBefore\x12+\n" + + "\x0ematches_prefix\x18\v \x03(\tB\x04\xe2A\x01\x01R\rmatchesPrefix\x12+\n" + + "\x0ematches_suffix\x18\f \x03(\tB\x04\xe2A\x01\x01R\rmatchesSuffixB\v\n" + "\t_age_daysB\n" + "\n" + "\b_is_liveB\x15\n" + "\x13_num_newer_versionsB\x19\n" + "\x17_days_since_custom_timeB\x1d\n" + - "\x1b_days_since_noncurrent_time\x1a^\n" + - "\aLogging\x12\"\n" + + "\x1b_days_since_noncurrent_time\x1a`\n" + + "\aLogging\x12#\n" + "\n" + - "log_bucket\x18\x01 \x01(\tB\x03\xe0A\x01R\tlogBucket\x12/\n" + - "\x11log_object_prefix\x18\x02 \x01(\tB\x03\xe0A\x01R\x0flogObjectPrefix\x1a3\n" + - "\x0fObjectRetention\x12 \n" + - "\aenabled\x18\x01 \x01(\bB\x06\xe0A\x01\xe0A\x03R\aenabled\x1a\xca\x01\n" + - "\x0fRetentionPolicy\x12F\n" + - "\x0eeffective_time\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x01R\reffectiveTime\x12 \n" + - "\tis_locked\x18\x02 \x01(\bB\x03\xe0A\x01R\bisLocked\x12M\n" + - "\x12retention_duration\x18\x04 \x01(\v2\x19.google.protobuf.DurationB\x03\xe0A\x01R\x11retentionDuration\x1a\xd3\x01\n" + + "log_bucket\x18\x01 \x01(\tB\x04\xe2A\x01\x01R\tlogBucket\x120\n" + + "\x11log_object_prefix\x18\x02 \x01(\tB\x04\xe2A\x01\x01R\x0flogObjectPrefix\x1a2\n" + + "\x0fObjectRetention\x12\x1f\n" + + "\aenabled\x18\x01 \x01(\bB\x05\xe2A\x02\x01\x03R\aenabled\x1a\xcd\x01\n" + + "\x0fRetentionPolicy\x12G\n" + + "\x0eeffective_time\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x01R\reffectiveTime\x12!\n" + + "\tis_locked\x18\x02 \x01(\bB\x04\xe2A\x01\x01R\bisLocked\x12N\n" + + "\x12retention_duration\x18\x04 \x01(\v2\x19.google.protobuf.DurationB\x04\xe2A\x01\x01R\x11retentionDuration\x1a\xd3\x01\n" + "\x10SoftDeletePolicy\x12M\n" + "\x12retention_duration\x18\x01 \x01(\v2\x19.google.protobuf.DurationH\x00R\x11retentionDuration\x88\x01\x01\x12F\n" + "\x0eeffective_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampH\x01R\reffectiveTime\x88\x01\x01B\x15\n" + "\x13_retention_durationB\x11\n" + - "\x0f_effective_time\x1a+\n" + + "\x0f_effective_time\x1a,\n" + "\n" + - "Versioning\x12\x1d\n" + - "\aenabled\x18\x01 \x01(\bB\x03\xe0A\x01R\aenabled\x1ac\n" + - "\aWebsite\x12-\n" + - "\x10main_page_suffix\x18\x01 \x01(\tB\x03\xe0A\x01R\x0emainPageSuffix\x12)\n" + - "\x0enot_found_page\x18\x02 \x01(\tB\x03\xe0A\x01R\fnotFoundPage\x1aC\n" + - "\x15CustomPlacementConfig\x12*\n" + - "\x0edata_locations\x18\x01 \x03(\tB\x03\xe0A\x01R\rdataLocations\x1a\xdb\x02\n" + - "\tAutoclass\x12\x1d\n" + - "\aenabled\x18\x01 \x01(\bB\x03\xe0A\x01R\aenabled\x12@\n" + - "\vtoggle_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\n" + + "Versioning\x12\x1e\n" + + "\aenabled\x18\x01 \x01(\bB\x04\xe2A\x01\x01R\aenabled\x1ae\n" + + "\aWebsite\x12.\n" + + "\x10main_page_suffix\x18\x01 \x01(\tB\x04\xe2A\x01\x01R\x0emainPageSuffix\x12*\n" + + "\x0enot_found_page\x18\x02 \x01(\tB\x04\xe2A\x01\x01R\fnotFoundPage\x1aD\n" + + "\x15CustomPlacementConfig\x12+\n" + + "\x0edata_locations\x18\x01 \x03(\tB\x04\xe2A\x01\x01R\rdataLocations\x1a\xde\x02\n" + + "\tAutoclass\x12\x1e\n" + + "\aenabled\x18\x01 \x01(\bB\x04\xe2A\x01\x01R\aenabled\x12A\n" + + "\vtoggle_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\n" + "toggleTime\x129\n" + - "\x16terminal_storage_class\x18\x03 \x01(\tH\x00R\x14terminalStorageClass\x88\x01\x01\x12p\n" + - "\"terminal_storage_class_update_time\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03H\x01R\x1eterminalStorageClassUpdateTime\x88\x01\x01B\x19\n" + + "\x16terminal_storage_class\x18\x03 \x01(\tH\x00R\x14terminalStorageClass\x88\x01\x01\x12q\n" + + "\"terminal_storage_class_update_time\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03H\x01R\x1eterminalStorageClassUpdateTime\x88\x01\x01B\x19\n" + "\x17_terminal_storage_classB%\n" + - "#_terminal_storage_class_update_time\x1a\x8d\x05\n" + + "#_terminal_storage_class_update_time\x1a\x91\x05\n" + "\bIpFilter\x12\x17\n" + "\x04mode\x18\x01 \x01(\tH\x00R\x04mode\x88\x01\x01\x12o\n" + - "\x15public_network_source\x18\x02 \x01(\v26.google.storage.v2.Bucket.IpFilter.PublicNetworkSourceH\x01R\x13publicNetworkSource\x88\x01\x01\x12h\n" + - "\x13vpc_network_sources\x18\x03 \x03(\v23.google.storage.v2.Bucket.IpFilter.VpcNetworkSourceB\x03\xe0A\x01R\x11vpcNetworkSources\x124\n" + - "\x14allow_cross_org_vpcs\x18\x04 \x01(\bB\x03\xe0A\x01R\x11allowCrossOrgVpcs\x12G\n" + - "\x1eallow_all_service_agent_access\x18\x05 \x01(\bH\x02R\x1aallowAllServiceAgentAccess\x88\x01\x01\x1aO\n" + - "\x13PublicNetworkSource\x128\n" + - "\x16allowed_ip_cidr_ranges\x18\x01 \x03(\tB\x03\xe0A\x01R\x13allowedIpCidrRanges\x1aw\n" + + "\x15public_network_source\x18\x02 \x01(\v26.google.storage.v2.Bucket.IpFilter.PublicNetworkSourceH\x01R\x13publicNetworkSource\x88\x01\x01\x12i\n" + + "\x13vpc_network_sources\x18\x03 \x03(\v23.google.storage.v2.Bucket.IpFilter.VpcNetworkSourceB\x04\xe2A\x01\x01R\x11vpcNetworkSources\x125\n" + + "\x14allow_cross_org_vpcs\x18\x04 \x01(\bB\x04\xe2A\x01\x01R\x11allowCrossOrgVpcs\x12G\n" + + "\x1eallow_all_service_agent_access\x18\x05 \x01(\bH\x02R\x1aallowAllServiceAgentAccess\x88\x01\x01\x1aP\n" + + "\x13PublicNetworkSource\x129\n" + + "\x16allowed_ip_cidr_ranges\x18\x01 \x03(\tB\x04\xe2A\x01\x01R\x13allowedIpCidrRanges\x1ax\n" + "\x10VpcNetworkSource\x12\x1d\n" + - "\anetwork\x18\x01 \x01(\tH\x00R\anetwork\x88\x01\x01\x128\n" + - "\x16allowed_ip_cidr_ranges\x18\x02 \x03(\tB\x03\xe0A\x01R\x13allowedIpCidrRangesB\n" + + "\anetwork\x18\x01 \x01(\tH\x00R\anetwork\x88\x01\x01\x129\n" + + "\x16allowed_ip_cidr_ranges\x18\x02 \x03(\tB\x04\xe2A\x01\x01R\x13allowedIpCidrRangesB\n" + "\n" + "\b_networkB\a\n" + "\x05_modeB\x18\n" + "\x16_public_network_sourceB!\n" + - "\x1f_allow_all_service_agent_access\x1a6\n" + - "\x15HierarchicalNamespace\x12\x1d\n" + - "\aenabled\x18\x01 \x01(\bB\x03\xe0A\x01R\aenabled\x1a9\n" + + "\x1f_allow_all_service_agent_access\x1a7\n" + + "\x15HierarchicalNamespace\x12\x1e\n" + + "\aenabled\x18\x01 \x01(\bB\x04\xe2A\x01\x01R\aenabled\x1a9\n" + "\vLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01:X\xeaAU\n" + "\x1dstorage.googleapis.com/Bucket\x12#projects/{project}/buckets/{bucket}*\abuckets2\x06bucketB\f\n" + "\n" + - "_ip_filter\"\xbf\x02\n" + - "\x13BucketAccessControl\x12\x17\n" + - "\x04role\x18\x01 \x01(\tB\x03\xe0A\x01R\x04role\x12\x13\n" + - "\x02id\x18\x02 \x01(\tB\x03\xe0A\x01R\x02id\x12\x1b\n" + - "\x06entity\x18\x03 \x01(\tB\x03\xe0A\x01R\x06entity\x12\"\n" + + "_ip_filter\"\xc8\x02\n" + + "\x13BucketAccessControl\x12\x18\n" + + "\x04role\x18\x01 \x01(\tB\x04\xe2A\x01\x01R\x04role\x12\x14\n" + + "\x02id\x18\x02 \x01(\tB\x04\xe2A\x01\x01R\x02id\x12\x1c\n" + + "\x06entity\x18\x03 \x01(\tB\x04\xe2A\x01\x01R\x06entity\x12#\n" + "\n" + - "entity_alt\x18\t \x01(\tB\x03\xe0A\x03R\tentityAlt\x12 \n" + - "\tentity_id\x18\x04 \x01(\tB\x03\xe0A\x01R\bentityId\x12\x17\n" + - "\x04etag\x18\b \x01(\tB\x03\xe0A\x01R\x04etag\x12\x19\n" + - "\x05email\x18\x05 \x01(\tB\x03\xe0A\x01R\x05email\x12\x1b\n" + - "\x06domain\x18\x06 \x01(\tB\x03\xe0A\x01R\x06domain\x12F\n" + - "\fproject_team\x18\a \x01(\v2\x1e.google.storage.v2.ProjectTeamB\x03\xe0A\x01R\vprojectTeam\"Z\n" + - "\x0fChecksummedData\x12\x1f\n" + - "\acontent\x18\x01 \x01(\fB\x05\xe0A\x01\b\x01R\acontent\x12\x1b\n" + + "entity_alt\x18\t \x01(\tB\x04\xe2A\x01\x03R\tentityAlt\x12!\n" + + "\tentity_id\x18\x04 \x01(\tB\x04\xe2A\x01\x01R\bentityId\x12\x18\n" + + "\x04etag\x18\b \x01(\tB\x04\xe2A\x01\x01R\x04etag\x12\x1a\n" + + "\x05email\x18\x05 \x01(\tB\x04\xe2A\x01\x01R\x05email\x12\x1c\n" + + "\x06domain\x18\x06 \x01(\tB\x04\xe2A\x01\x01R\x06domain\x12G\n" + + "\fproject_team\x18\a \x01(\v2\x1e.google.storage.v2.ProjectTeamB\x04\xe2A\x01\x01R\vprojectTeam\"[\n" + + "\x0fChecksummedData\x12 \n" + + "\acontent\x18\x01 \x01(\fB\x06\xe2A\x01\x01\b\x01R\acontent\x12\x1b\n" + "\x06crc32c\x18\x02 \x01(\aH\x00R\x06crc32c\x88\x01\x01B\t\n" + - "\a_crc32c\"Y\n" + + "\a_crc32c\"Z\n" + "\x0fObjectChecksums\x12\x1b\n" + - "\x06crc32c\x18\x01 \x01(\aH\x00R\x06crc32c\x88\x01\x01\x12\x1e\n" + - "\bmd5_hash\x18\x02 \x01(\fB\x03\xe0A\x01R\amd5HashB\t\n" + - "\a_crc32c\"\xbb\x01\n" + - "\x1aObjectCustomContextPayload\x12\x19\n" + - "\x05value\x18\x01 \x01(\tB\x03\xe0A\x02R\x05value\x12@\n" + - "\vcreate_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\n" + - "createTime\x12@\n" + - "\vupdate_time\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\n" + - "updateTime\"\xc6\x01\n" + - "\x0eObjectContexts\x12J\n" + - "\x06custom\x18\x01 \x03(\v2-.google.storage.v2.ObjectContexts.CustomEntryB\x03\xe0A\x01R\x06custom\x1ah\n" + + "\x06crc32c\x18\x01 \x01(\aH\x00R\x06crc32c\x88\x01\x01\x12\x1f\n" + + "\bmd5_hash\x18\x02 \x01(\fB\x04\xe2A\x01\x01R\amd5HashB\t\n" + + "\a_crc32c\"\xbe\x01\n" + + "\x1aObjectCustomContextPayload\x12\x1a\n" + + "\x05value\x18\x01 \x01(\tB\x04\xe2A\x01\x02R\x05value\x12A\n" + + "\vcreate_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\n" + + "createTime\x12A\n" + + "\vupdate_time\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\n" + + "updateTime\"\xc7\x01\n" + + "\x0eObjectContexts\x12K\n" + + "\x06custom\x18\x01 \x03(\v2-.google.storage.v2.ObjectContexts.CustomEntryB\x04\xe2A\x01\x01R\x06custom\x1ah\n" + "\vCustomEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12C\n" + - "\x05value\x18\x02 \x01(\v2-.google.storage.v2.ObjectCustomContextPayloadR\x05value:\x028\x01\"{\n" + - "\x12CustomerEncryption\x126\n" + - "\x14encryption_algorithm\x18\x01 \x01(\tB\x03\xe0A\x01R\x13encryptionAlgorithm\x12-\n" + - "\x10key_sha256_bytes\x18\x03 \x01(\fB\x03\xe0A\x01R\x0ekeySha256Bytes\"\xe3\x11\n" + - "\x06Object\x12\x17\n" + - "\x04name\x18\x01 \x01(\tB\x03\xe0A\x05R\x04name\x12=\n" + - "\x06bucket\x18\x02 \x01(\tB%\xe0A\x05\xfaA\x1f\n" + - "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x17\n" + - "\x04etag\x18\x1b \x01(\tB\x03\xe0A\x01R\x04etag\x12#\n" + + "\x05value\x18\x02 \x01(\v2-.google.storage.v2.ObjectCustomContextPayloadR\x05value:\x028\x01\"}\n" + + "\x12CustomerEncryption\x127\n" + + "\x14encryption_algorithm\x18\x01 \x01(\tB\x04\xe2A\x01\x01R\x13encryptionAlgorithm\x12.\n" + + "\x10key_sha256_bytes\x18\x03 \x01(\fB\x04\xe2A\x01\x01R\x0ekeySha256Bytes\"\x85\x12\n" + + "\x06Object\x12\x18\n" + + "\x04name\x18\x01 \x01(\tB\x04\xe2A\x01\x05R\x04name\x12>\n" + + "\x06bucket\x18\x02 \x01(\tB&\xe2A\x01\x05\xfaA\x1f\n" + + "\x1dstorage.googleapis.com/BucketR\x06bucket\x12\x18\n" + + "\x04etag\x18\x1b \x01(\tB\x04\xe2A\x01\x01R\x04etag\x12$\n" + "\n" + - "generation\x18\x03 \x01(\x03B\x03\xe0A\x05R\n" + - "generation\x12-\n" + - "\rrestore_token\x18# \x01(\tB\x03\xe0A\x03H\x00R\frestoreToken\x88\x01\x01\x12+\n" + - "\x0emetageneration\x18\x04 \x01(\x03B\x03\xe0A\x03R\x0emetageneration\x12(\n" + - "\rstorage_class\x18\x05 \x01(\tB\x03\xe0A\x01R\fstorageClass\x12\x17\n" + - "\x04size\x18\x06 \x01(\x03B\x03\xe0A\x03R\x04size\x12.\n" + - "\x10content_encoding\x18\a \x01(\tB\x03\xe0A\x01R\x0fcontentEncoding\x124\n" + - "\x13content_disposition\x18\b \x01(\tB\x03\xe0A\x01R\x12contentDisposition\x12(\n" + - "\rcache_control\x18\t \x01(\tB\x03\xe0A\x01R\fcacheControl\x12=\n" + + "generation\x18\x03 \x01(\x03B\x04\xe2A\x01\x05R\n" + + "generation\x12.\n" + + "\rrestore_token\x18# \x01(\tB\x04\xe2A\x01\x03H\x00R\frestoreToken\x88\x01\x01\x12,\n" + + "\x0emetageneration\x18\x04 \x01(\x03B\x04\xe2A\x01\x03R\x0emetageneration\x12)\n" + + "\rstorage_class\x18\x05 \x01(\tB\x04\xe2A\x01\x01R\fstorageClass\x12\x18\n" + + "\x04size\x18\x06 \x01(\x03B\x04\xe2A\x01\x03R\x04size\x12/\n" + + "\x10content_encoding\x18\a \x01(\tB\x04\xe2A\x01\x01R\x0fcontentEncoding\x125\n" + + "\x13content_disposition\x18\b \x01(\tB\x04\xe2A\x01\x01R\x12contentDisposition\x12)\n" + + "\rcache_control\x18\t \x01(\tB\x04\xe2A\x01\x01R\fcacheControl\x12>\n" + "\x03acl\x18\n" + - " \x03(\v2&.google.storage.v2.ObjectAccessControlB\x03\xe0A\x01R\x03acl\x12.\n" + - "\x10content_language\x18\v \x01(\tB\x03\xe0A\x01R\x0fcontentLanguage\x12@\n" + - "\vdelete_time\x18\f \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\n" + - "deleteTime\x12D\n" + - "\rfinalize_time\x18$ \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\ffinalizeTime\x12&\n" + - "\fcontent_type\x18\r \x01(\tB\x03\xe0A\x01R\vcontentType\x12@\n" + - "\vcreate_time\x18\x0e \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\n" + - "createTime\x12,\n" + - "\x0fcomponent_count\x18\x0f \x01(\x05B\x03\xe0A\x03R\x0ecomponentCount\x12E\n" + - "\tchecksums\x18\x10 \x01(\v2\".google.storage.v2.ObjectChecksumsB\x03\xe0A\x03R\tchecksums\x12@\n" + - "\vupdate_time\x18\x11 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\n" + - "updateTime\x12B\n" + - "\akms_key\x18\x12 \x01(\tB)\xe0A\x01\xfaA#\n" + - "!cloudkms.googleapis.com/CryptoKeyR\x06kmsKey\x12Z\n" + - "\x19update_storage_class_time\x18\x13 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03R\x16updateStorageClassTime\x12*\n" + - "\x0etemporary_hold\x18\x14 \x01(\bB\x03\xe0A\x01R\rtemporaryHold\x12S\n" + - "\x15retention_expire_time\x18\x15 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x01R\x13retentionExpireTime\x12H\n" + - "\bmetadata\x18\x16 \x03(\v2'.google.storage.v2.Object.MetadataEntryB\x03\xe0A\x01R\bmetadata\x12B\n" + - "\bcontexts\x18& \x01(\v2!.google.storage.v2.ObjectContextsB\x03\xe0A\x01R\bcontexts\x12-\n" + - "\x10event_based_hold\x18\x17 \x01(\bH\x01R\x0eeventBasedHold\x88\x01\x01\x123\n" + - "\x05owner\x18\x18 \x01(\v2\x18.google.storage.v2.OwnerB\x03\xe0A\x03R\x05owner\x12[\n" + - "\x13customer_encryption\x18\x19 \x01(\v2%.google.storage.v2.CustomerEncryptionB\x03\xe0A\x01R\x12customerEncryption\x12@\n" + - "\vcustom_time\x18\x1a \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x01R\n" + - "customTime\x12N\n" + - "\x10soft_delete_time\x18\x1c \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03H\x02R\x0esoftDeleteTime\x88\x01\x01\x12N\n" + - "\x10hard_delete_time\x18\x1d \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x03H\x03R\x0ehardDeleteTime\x88\x01\x01\x12F\n" + - "\tretention\x18\x1e \x01(\v2#.google.storage.v2.Object.RetentionB\x03\xe0A\x01R\tretention\x1a\xd3\x01\n" + - "\tRetention\x12A\n" + - "\x04mode\x18\x01 \x01(\x0e2(.google.storage.v2.Object.Retention.ModeB\x03\xe0A\x01R\x04mode\x12K\n" + - "\x11retain_until_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampB\x03\xe0A\x01R\x0fretainUntilTime\"6\n" + + " \x03(\v2&.google.storage.v2.ObjectAccessControlB\x04\xe2A\x01\x01R\x03acl\x12/\n" + + "\x10content_language\x18\v \x01(\tB\x04\xe2A\x01\x01R\x0fcontentLanguage\x12A\n" + + "\vdelete_time\x18\f \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\n" + + "deleteTime\x12E\n" + + "\rfinalize_time\x18$ \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\ffinalizeTime\x12'\n" + + "\fcontent_type\x18\r \x01(\tB\x04\xe2A\x01\x01R\vcontentType\x12A\n" + + "\vcreate_time\x18\x0e \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\n" + + "createTime\x12-\n" + + "\x0fcomponent_count\x18\x0f \x01(\x05B\x04\xe2A\x01\x03R\x0ecomponentCount\x12F\n" + + "\tchecksums\x18\x10 \x01(\v2\".google.storage.v2.ObjectChecksumsB\x04\xe2A\x01\x03R\tchecksums\x12A\n" + + "\vupdate_time\x18\x11 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\n" + + "updateTime\x12C\n" + + "\akms_key\x18\x12 \x01(\tB*\xe2A\x01\x01\xfaA#\n" + + "!cloudkms.googleapis.com/CryptoKeyR\x06kmsKey\x12[\n" + + "\x19update_storage_class_time\x18\x13 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03R\x16updateStorageClassTime\x12+\n" + + "\x0etemporary_hold\x18\x14 \x01(\bB\x04\xe2A\x01\x01R\rtemporaryHold\x12T\n" + + "\x15retention_expire_time\x18\x15 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x01R\x13retentionExpireTime\x12I\n" + + "\bmetadata\x18\x16 \x03(\v2'.google.storage.v2.Object.MetadataEntryB\x04\xe2A\x01\x01R\bmetadata\x12C\n" + + "\bcontexts\x18& \x01(\v2!.google.storage.v2.ObjectContextsB\x04\xe2A\x01\x01R\bcontexts\x12-\n" + + "\x10event_based_hold\x18\x17 \x01(\bH\x01R\x0eeventBasedHold\x88\x01\x01\x124\n" + + "\x05owner\x18\x18 \x01(\v2\x18.google.storage.v2.OwnerB\x04\xe2A\x01\x03R\x05owner\x12\\\n" + + "\x13customer_encryption\x18\x19 \x01(\v2%.google.storage.v2.CustomerEncryptionB\x04\xe2A\x01\x01R\x12customerEncryption\x12A\n" + + "\vcustom_time\x18\x1a \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x01R\n" + + "customTime\x12O\n" + + "\x10soft_delete_time\x18\x1c \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03H\x02R\x0esoftDeleteTime\x88\x01\x01\x12O\n" + + "\x10hard_delete_time\x18\x1d \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x03H\x03R\x0ehardDeleteTime\x88\x01\x01\x12G\n" + + "\tretention\x18\x1e \x01(\v2#.google.storage.v2.Object.RetentionB\x04\xe2A\x01\x01R\tretention\x1a\xd5\x01\n" + + "\tRetention\x12B\n" + + "\x04mode\x18\x01 \x01(\x0e2(.google.storage.v2.Object.Retention.ModeB\x04\xe2A\x01\x01R\x04mode\x12L\n" + + "\x11retain_until_time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampB\x04\xe2A\x01\x01R\x0fretainUntilTime\"6\n" + "\x04Mode\x12\x14\n" + "\x10MODE_UNSPECIFIED\x10\x00\x12\f\n" + "\bUNLOCKED\x10\x01\x12\n" + @@ -8617,28 +8617,28 @@ const file_google_storage_v2_storage_proto_rawDesc = "" + "\x0e_restore_tokenB\x13\n" + "\x11_event_based_holdB\x13\n" + "\x11_soft_delete_timeB\x13\n" + - "\x11_hard_delete_time\"\xbf\x02\n" + - "\x13ObjectAccessControl\x12\x17\n" + - "\x04role\x18\x01 \x01(\tB\x03\xe0A\x01R\x04role\x12\x13\n" + - "\x02id\x18\x02 \x01(\tB\x03\xe0A\x01R\x02id\x12\x1b\n" + - "\x06entity\x18\x03 \x01(\tB\x03\xe0A\x01R\x06entity\x12\"\n" + + "\x11_hard_delete_time\"\xc8\x02\n" + + "\x13ObjectAccessControl\x12\x18\n" + + "\x04role\x18\x01 \x01(\tB\x04\xe2A\x01\x01R\x04role\x12\x14\n" + + "\x02id\x18\x02 \x01(\tB\x04\xe2A\x01\x01R\x02id\x12\x1c\n" + + "\x06entity\x18\x03 \x01(\tB\x04\xe2A\x01\x01R\x06entity\x12#\n" + "\n" + - "entity_alt\x18\t \x01(\tB\x03\xe0A\x03R\tentityAlt\x12 \n" + - "\tentity_id\x18\x04 \x01(\tB\x03\xe0A\x01R\bentityId\x12\x17\n" + - "\x04etag\x18\b \x01(\tB\x03\xe0A\x01R\x04etag\x12\x19\n" + - "\x05email\x18\x05 \x01(\tB\x03\xe0A\x01R\x05email\x12\x1b\n" + - "\x06domain\x18\x06 \x01(\tB\x03\xe0A\x01R\x06domain\x12F\n" + - "\fproject_team\x18\a \x01(\v2\x1e.google.storage.v2.ProjectTeamB\x03\xe0A\x01R\vprojectTeam\"\x8e\x01\n" + + "entity_alt\x18\t \x01(\tB\x04\xe2A\x01\x03R\tentityAlt\x12!\n" + + "\tentity_id\x18\x04 \x01(\tB\x04\xe2A\x01\x01R\bentityId\x12\x18\n" + + "\x04etag\x18\b \x01(\tB\x04\xe2A\x01\x01R\x04etag\x12\x1a\n" + + "\x05email\x18\x05 \x01(\tB\x04\xe2A\x01\x01R\x05email\x12\x1c\n" + + "\x06domain\x18\x06 \x01(\tB\x04\xe2A\x01\x01R\x06domain\x12G\n" + + "\fproject_team\x18\a \x01(\v2\x1e.google.storage.v2.ProjectTeamB\x04\xe2A\x01\x01R\vprojectTeam\"\x8e\x01\n" + "\x13ListObjectsResponse\x123\n" + "\aobjects\x18\x01 \x03(\v2\x19.google.storage.v2.ObjectR\aobjects\x12\x1a\n" + "\bprefixes\x18\x02 \x03(\tR\bprefixes\x12&\n" + - "\x0fnext_page_token\x18\x03 \x01(\tR\rnextPageToken\"R\n" + - "\vProjectTeam\x12*\n" + - "\x0eproject_number\x18\x01 \x01(\tB\x03\xe0A\x01R\rprojectNumber\x12\x17\n" + - "\x04team\x18\x02 \x01(\tB\x03\xe0A\x01R\x04team\"F\n" + - "\x05Owner\x12\x1b\n" + - "\x06entity\x18\x01 \x01(\tB\x03\xe0A\x01R\x06entity\x12 \n" + - "\tentity_id\x18\x02 \x01(\tB\x03\xe0A\x01R\bentityId\"_\n" + + "\x0fnext_page_token\x18\x03 \x01(\tR\rnextPageToken\"T\n" + + "\vProjectTeam\x12+\n" + + "\x0eproject_number\x18\x01 \x01(\tB\x04\xe2A\x01\x01R\rprojectNumber\x12\x18\n" + + "\x04team\x18\x02 \x01(\tB\x04\xe2A\x01\x01R\x04team\"H\n" + + "\x05Owner\x12\x1c\n" + + "\x06entity\x18\x01 \x01(\tB\x04\xe2A\x01\x01R\x06entity\x12!\n" + + "\tentity_id\x18\x02 \x01(\tB\x04\xe2A\x01\x01R\bentityId\"_\n" + "\fContentRange\x12\x14\n" + "\x05start\x18\x01 \x01(\x03R\x05start\x12\x10\n" + "\x03end\x18\x02 \x01(\x03R\x03end\x12'\n" + diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/experimental.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/experimental.go index 089a452f1..fc092bbc7 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/experimental.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/experimental.go @@ -39,6 +39,10 @@ var ( // if direct path connectivity cannot be established for a request. WithDirectConnectivityEnforced any // func() option.ClientOption + // WithDirectPathXdsOverInterconnect is a function which is implemented by the storage package. + // It instructs the gRPC client to attempt DirectPath over Google Cloud Interconnect. + WithDirectPathXdsOverInterconnect any // func() option.ClientOption + // WithOtelMetrics is a function which is implemented by the storage package. // It enables client-side OpenTelemetry metrics. WithOtelMetrics any // func() option.ClientOption @@ -51,4 +55,8 @@ var ( // // This option is not supported at the moment. WithBufferPool any // func(BufferPool) option.ClientOption + + // WithGRPCKeepalive is a function which is implemented by the storage package. + // It enables HTTP/2 keepalive pings on the client's gRPC connections. + WithGRPCKeepalive any // func(GRPCKeepaliveConfig) option.ClientOption ) diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/version.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/version.go index 2f5eb4c99..f59a8dd66 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/version.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/internal/version.go @@ -17,4 +17,4 @@ package internal // Version is the current tagged release of the library. -const Version = "1.69.0" +const Version = "1.70.0" diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/invoke.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/invoke.go index b57c0a7a4..92b34a634 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/invoke.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/invoke.go @@ -26,7 +26,6 @@ import ( "sync" "time" - "cloud.google.com/go/internal" "cloud.google.com/go/internal/version" sinternal "cloud.google.com/go/storage/internal" "github.com/google/uuid" @@ -65,9 +64,10 @@ func (r *retryConfig) runShouldRetry(err error, retryCtx *RetryContext) bool { // runOptions holds optional metadata for retry contexts. type runOptions struct { - operation string - bucket string - object string + operation string + bucket string + object string + shouldReset func() bool } // runOption configures optional metadata for retry contexts. @@ -88,6 +88,22 @@ func withObject(object string) runOption { return func(o *runOptions) { o.object = object } } +// withProgressReset specifies a callback checked after each failed call. If it +// returns true, the attempt counter and backoff are reset so that maxAttempts +// and backoff apply per unit of progress (per chunk for the gRPC Writer). +// +// Only the attempt counter and backoff are reset. The invocation ID and +// idempotency token are minted once per run() and span the whole operation, +// because every gRPC reconnect resumes the same BidiWriteObject session. +// This differs from the HTTP transport, which mints a new invocation ID per +// chunk; the gccl-attempt-count header therefore restarts at 1 after progress. +// +// TODO: run() owns the attempt counter and backoff while the gRPC Writer owns +// the per-chunk deadline (chunkRetryBudget); the writer should own all three. +func withProgressReset(fn func() bool) runOption { + return func(o *runOptions) { o.shouldReset = fn } +} + // run determines whether a retry is necessary based on the config and // idempotency information. It then calls the function with or without retries // as appropriate, using the configured settings. @@ -117,12 +133,13 @@ func run(ctx context.Context, call func(ctx context.Context) error, retry *retry ctxWithHeaders := setInvocationHeaders(ctx, invocationID, attempts) return call(ctxWithHeaders) } - bo := gax.Backoff{} + initialBo := gax.Backoff{} if retry.backoff != nil { - bo.Multiplier = retry.backoff.Multiplier - bo.Initial = retry.backoff.Initial - bo.Max = retry.backoff.Max + initialBo.Multiplier = retry.backoff.Multiplier + initialBo.Initial = retry.backoff.Initial + initialBo.Max = retry.backoff.Max } + bo := initialBo var quitAfterTimer *time.Timer if retry.maxRetryDuration != 0 { @@ -131,27 +148,33 @@ func run(ctx context.Context, call func(ctx context.Context) error, retry *retry } var lastErr error - return internal.Retry(ctx, bo, func() (stop bool, err error) { + for { if retry.maxRetryDuration != 0 { select { case <-quitAfterTimer.C: if lastErr == nil { - return true, fmt.Errorf("storage: request not sent, choose a larger value for the retry deadline (currently set to %s)", retry.maxRetryDuration) + return fmt.Errorf("storage: request not sent, choose a larger value for the retry deadline (currently set to %s)", retry.maxRetryDuration) } - return true, fmt.Errorf("storage: retry deadline of %s reached after %v attempts; last error: %w", retry.maxRetryDuration, attempts, lastErr) + return fmt.Errorf("storage: retry deadline of %s reached after %v attempts; last error: %w", retry.maxRetryDuration, attempts, lastErr) default: } } ctxWithHeaders := setInvocationHeaders(ctx, invocationID, attempts) lastErr = call(ctxWithHeaders) - if lastErr != nil && retry.maxAttempts != nil && attempts >= *retry.maxAttempts { - return true, fmt.Errorf("storage: retry failed after %v attempts; last error: %w", *retry.maxAttempts, lastErr) + if lastErr == nil { + return nil + } + if options.shouldReset != nil && options.shouldReset() { + attempts = 1 + bo = initialBo + } + if retry.maxAttempts != nil && attempts >= *retry.maxAttempts { + return fmt.Errorf("storage: retry failed after %v attempts; last error: %w", *retry.maxAttempts, lastErr) } retryCtx.Attempt = attempts retryable := retry.runShouldRetry(lastErr, retryCtx) - attempts++ // Explicitly check context cancellation so that we can distinguish between a // DEADLINE_EXCEEDED error from the server and a user-set context deadline. // Unfortunately gRPC will codes.DeadlineExceeded (which may be retryable if it's @@ -159,8 +182,32 @@ func run(ctx context.Context, call func(ctx context.Context) error, retry *retry if ctxErr := ctx.Err(); errors.Is(ctxErr, context.Canceled) || errors.Is(ctxErr, context.DeadlineExceeded) { retryable = false } - return !retryable, lastErr - }) + if !retryable { + return lastErr + } + + attempts++ + if ctxErr := gax.Sleep(ctx, bo.Pause()); ctxErr != nil { + return wrappedCallErr{ctxErr: ctxErr, wrappedErr: lastErr} + } + } +} + +type wrappedCallErr struct { + ctxErr error + wrappedErr error +} + +func (e wrappedCallErr) Error() string { + return fmt.Sprintf("retry failed with %v; last error: %v", e.ctxErr, e.wrappedErr) +} + +func (e wrappedCallErr) Unwrap() error { + return e.wrappedErr +} + +func (e wrappedCallErr) Is(err error) bool { + return errors.Is(e.ctxErr, err) || errors.Is(e.wrappedErr, err) } // Sets invocation ID headers on the context which will be propagated as @@ -199,6 +246,9 @@ func ShouldRetry(err error) bool { if errors.Is(err, net.ErrClosed) { return true } + if errors.Is(err, errStallTimeout) { + return true + } switch e := err.(type) { case *googleapi.Error: diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/metrics.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/metrics.go index 967c51446..255590d8e 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/metrics.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/metrics.go @@ -371,7 +371,7 @@ func initMetrics(ctx context.Context, projectID string, config *storageConfig) ( stallDuration, err = meter.Float64Histogram( "gcp.storage.client.stall.duration", - metric.WithDescription("Stall timeout after which a read attempt was aborted while waiting for the initial response (response headers for HTTP, first response message for gRPC)."), + metric.WithDescription("Stall timeout after which a read attempt was aborted while waiting for the initial response (response headers for HTTP, first response message for gRPC), or a write attempt was aborted due to lack of chunk progress."), metric.WithUnit("s"), ) if err != nil { diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/option.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/option.go index e54a59b1d..7718a6863 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/option.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/option.go @@ -42,9 +42,11 @@ func init() { storageinternal.WithMeterProvider = withMeterProvider storageinternal.WithReadStallTimeout = withReadStallTimeout storageinternal.WithDirectConnectivityEnforced = withDirectConnectivityEnforced + storageinternal.WithDirectPathXdsOverInterconnect = withDirectPathXdsOverInterconnect storageinternal.WithOtelMetrics = withOtelMetrics storageinternal.WithOtelDebugMetrics = withOtelDebugMetrics storageinternal.WithBufferPool = withBufferPool + storageinternal.WithGRPCKeepalive = withGRPCKeepalive } // getDynamicReadReqIncreaseRateFromEnv returns the value set in the env variable. @@ -93,6 +95,7 @@ type storageConfig struct { grpcAppendableUploads bool grpcDirectPathEnforced bool bufferPool experimental.BufferPool + grpcKeepalive *experimental.GRPCKeepaliveConfig } // newStorageConfig generates a new storageConfig with all the given @@ -125,6 +128,10 @@ func (w *withDirectPathEnforced) ApplyStorageOpt(c *storageConfig) { c.grpcDirectPathEnforced = true } +func withDirectPathXdsOverInterconnect() option.ClientOption { + return internaloption.EnableDirectPathXdsOverInterconnect() +} + // WithJSONReads is an option that may be passed to [NewClient]. // It sets the client to use the Cloud Storage JSON API for object // reads. Currently, the default API used for reads is XML, but JSON will @@ -310,6 +317,20 @@ func (w *withGRPCAppendableUploadsConfig) ApplyStorageOpt(config *storageConfig) config.grpcAppendableUploads = true } +// withGRPCKeepalive is the implementation of experimental.WithGRPCKeepalive. +func withGRPCKeepalive(cfg experimental.GRPCKeepaliveConfig) option.ClientOption { + return &withGRPCKeepaliveConfig{cfg: cfg} +} + +type withGRPCKeepaliveConfig struct { + internaloption.EmbeddableAdapter + cfg experimental.GRPCKeepaliveConfig +} + +func (w *withGRPCKeepaliveConfig) ApplyStorageOpt(config *storageConfig) { + config.grpcKeepalive = &w.cfg +} + func withOtelMetrics() option.ClientOption { return &withOtelMetricsConfig{} } diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/trace.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/trace.go index b080dbecb..c7710064e 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/trace.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/trace.go @@ -54,6 +54,7 @@ func traceAttributesFromContext(ctx context.Context) ([]attribute.KeyValue, bool const ( defaultTracerName = "cloud.google.com/go/storage" gcpClientArtifact = "cloud.google.com/go/storage" + gcpClientService = "storage" ) // isOTelTracingDevEnabled checks the development flag until experimental feature is launched. @@ -84,7 +85,7 @@ func startSpanWithBucket(ctx context.Context, client *Client, bucket string, nam meta, hit := cache.get(bucket) if !hit { placeholder := bucketMetadata{ - resource: fmt.Sprintf("%sprojects/_/buckets/%s", storageResourceNamePrefix, bucket), + resource: fmt.Sprintf("projects/_/buckets/%s", bucket), location: "global", placeholder: true, } @@ -93,7 +94,7 @@ func startSpanWithBucket(ctx context.Context, client *Client, bucket string, nam meta = placeholder } attrs := []attribute.KeyValue{ - attribute.String("gcp.resource.destination.id", meta.resource), + attribute.String("gcp.resource.destination.id", destinationResourceName(meta.resource)), attribute.String("gcp.resource.destination.location", meta.location), } ctx = contextWithTraceAttributes(ctx, attrs) @@ -101,6 +102,23 @@ func startSpanWithBucket(ctx context.Context, client *Client, bucket string, nam return startSpan(ctx, name, opts...) } +// storageResourceNamePrefix is prepended to the bucket resource name only when +// it is emitted in the gcp.resource.destination.id span attribute. Cloud +// Trace's App Hub extractor only accepts full resource names of the form +// "//{service}/{path}"; a bare "projects/.../buckets/..." path is rejected as +// malformed and the span is silently dropped from App Hub enrichment. The +// bucket metadata cache and fetchBucketMetadata keep the bare +// "projects/{p}/buckets/{b}" form. +const storageResourceNamePrefix = "//storage.googleapis.com/" + +// destinationResourceName converts a bare bucket resource name +// ("projects/{p}/buckets/{b}") into the full resource name +// ("//storage.googleapis.com/projects/{p}/buckets/{b}") required by Cloud +// Trace's App Hub extractor for the gcp.resource.destination.id attribute. +func destinationResourceName(resource string) string { + return storageResourceNamePrefix + resource +} + // startSpan creates a span and a context.Context containing the newly-created span. // If the context.Context provided in `ctx` contains a span then the newly-created // span will be a child of that span, otherwise it will be a root span. @@ -170,6 +188,7 @@ func getCommonTraceOptions() []trace.SpanStartOption { // getCommonAttributes includes the common attributes used for Cloud Trace adoption tracking. func getCommonAttributes() []attribute.KeyValue { return []attribute.KeyValue{ + attribute.String("gcp.client.service", gcpClientService), attribute.String("gcp.client.version", internal.Version), attribute.String("gcp.client.artifact", gcpClientArtifact), } diff --git a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/writer.go b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/writer.go index db2161ac1..be64062cb 100644 --- a/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/writer.go +++ b/ci/resources/stemcell-version-bump/vendor/cloud.google.com/go/storage/writer.go @@ -134,19 +134,29 @@ type Writer struct { // The default value is 32s. Users may want to pick a longer deadline if they // expect to have a slow or unreliable internet connection. // + // When the deadline is reached, the returned error wraps the error from the + // last failed attempt, so errors.Is, errors.As and status.Code can be used + // to inspect the underlying cause. + // // To set a deadline on the entire upload, use context timeout or // cancellation. ChunkRetryDeadline time.Duration // ChunkTransferTimeout sets a per-chunk request timeout for resumable uploads. // - // For resumable uploads, the Writer will terminate the request and attempt - // a retry if the request to upload a particular chunk stalls for longer than - // this duration. Retries may continue until the ChunkRetryDeadline is reached. + // For resumable uploads, if the transfer of a single chunk stalls for longer + // than this duration without server acknowledgement, the Writer terminates + // the in-flight attempt and retries if the retry policy permits. Retries may + // continue until the ChunkRetryDeadline is reached. // - // ChunkTransferTimeout is not applicable to uploads made using a gRPC client. + // For gRPC clients, ChunkTransferTimeout applies to resumable and appendable + // uploads. For gRPC resumable uploads, a non-zero value also enables adaptive + // BidiWriteObject stream rotation between flushed chunks when chunk latency + // degrades. It is not supported for one-shot uploads, which send the whole + // object in a single request. A non-appendable upload is one-shot when + // ChunkSize is 0 or the object's total size is at most ChunkSize. // - // The default value is no timeout. + // The default value is no timeout (0). ChunkTransferTimeout time.Duration // ForceEmptyContentType is an optional parameter that is used to disable diff --git a/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/internal/v2/s2av2.go b/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/internal/v2/s2av2.go index c59e1c829..0017307f0 100644 --- a/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/internal/v2/s2av2.go +++ b/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/internal/v2/s2av2.go @@ -168,7 +168,8 @@ func (c *s2av2TransportCreds) ClientHandshake(ctx context.Context, serverAuthori } retry.Run(timeoutCtx, func() error { - config, err = tlsconfigstore.GetTLSConfigurationForClient(sn, s2AStream, tokenManager, c.localIdentity, c.verificationMode, c.serverAuthorizationPolicy) + // The gRPC transport requires HTTP/2, so this path never overrides ALPN. + config, err = tlsconfigstore.GetTLSConfigurationForClient(sn, s2AStream, tokenManager, c.localIdentity, c.verificationMode, c.serverAuthorizationPolicy, nil) return err }) if err != nil { @@ -308,14 +309,15 @@ func NewClientTLSConfig( serverName string, serverAuthorizationPolicy []byte, getStream stream.GetS2AStream, - localIdentity *commonpb.Identity) (*tls.Config, error) { + localIdentity *commonpb.Identity, + nextProtos []string) (*tls.Config, error) { s2AStream, err := createStream(ctx, s2av2Address, transportCreds, getStream) if err != nil { grpclog.Infof("Failed to connect to S2Av2: %v", err) return nil, err } - return tlsconfigstore.GetTLSConfigurationForClient(removeServerNamePort(serverName), s2AStream, tokenManager, localIdentity, verificationMode, serverAuthorizationPolicy) + return tlsconfigstore.GetTLSConfigurationForClient(removeServerNamePort(serverName), s2AStream, tokenManager, localIdentity, verificationMode, serverAuthorizationPolicy, nextProtos) } // OverrideServerName sets the ServerName in the s2av2TransportCreds protocol diff --git a/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/tlsconfigstore.go b/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/tlsconfigstore.go index 6ca75f560..a545e6373 100644 --- a/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/tlsconfigstore.go +++ b/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/internal/v2/tlsconfigstore/tlsconfigstore.go @@ -25,6 +25,7 @@ import ( "encoding/pem" "errors" "fmt" + "slices" "github.com/google/s2a-go/internal/tokenmanager" "github.com/google/s2a-go/internal/v2/certverifier" @@ -42,8 +43,18 @@ const ( h2 = "h2" ) +// nextProtosOrDefault returns the ALPN protocols to offer during the handshake. +func nextProtosOrDefault(nextProtos []string) []string { + if len(nextProtos) == 0 { + return []string{h2} + } + return slices.Clone(nextProtos) +} + // GetTLSConfigurationForClient returns a tls.Config instance for use by a client application. -func GetTLSConfigurationForClient(serverHostname string, s2AStream stream.S2AStream, tokenManager tokenmanager.AccessTokenManager, localIdentity *commonpb.Identity, verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode, serverAuthorizationPolicy []byte) (*tls.Config, error) { +// nextProtos sets the ALPN protocols offered during the handshake; if it is +// empty, the returned config offers HTTP/2 only. +func GetTLSConfigurationForClient(serverHostname string, s2AStream stream.S2AStream, tokenManager tokenmanager.AccessTokenManager, localIdentity *commonpb.Identity, verificationMode s2av2pb.ValidatePeerCertificateChainReq_VerificationMode, serverAuthorizationPolicy []byte, nextProtos []string) (*tls.Config, error) { authMechanisms := getAuthMechanisms(tokenManager, []*commonpb.Identity{localIdentity}) if grpclog.V(1) { @@ -116,7 +127,7 @@ func GetTLSConfigurationForClient(serverHostname string, s2AStream stream.S2AStr SessionTicketsDisabled: true, MinVersion: minVersion, MaxVersion: maxVersion, - NextProtos: []string{h2}, + NextProtos: nextProtosOrDefault(nextProtos), } if len(tlsConfig.CertificateChain) > 0 { config.Certificates = []tls.Certificate{cert} diff --git a/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/s2a.go b/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/s2a.go index 8aaa3269c..c5e7ae09b 100644 --- a/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/s2a.go +++ b/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/s2a.go @@ -305,6 +305,11 @@ type TLSClientConfigOptions struct { // ServerName: "example.com", // }) ServerName string + + // NextProtos is the list of ALPN protocols offered during the TLS + // handshake. If empty, ClientOptions.NextProtos is used; if that is also + // empty, HTTP/2 ("h2") is offered. + NextProtos []string } // TLSClientConfigFactory defines the interface for a client TLS config factory. @@ -337,6 +342,7 @@ func NewTLSClientConfigFactory(opts *ClientOptions) (TLSClientConfigFactory, err serverAuthorizationPolicy: opts.serverAuthorizationPolicy, getStream: opts.getS2AStream, localIdentity: localIdentity, + nextProtos: opts.NextProtos, }, nil } return &s2aTLSClientConfigFactory{ @@ -347,6 +353,7 @@ func NewTLSClientConfigFactory(opts *ClientOptions) (TLSClientConfigFactory, err serverAuthorizationPolicy: opts.serverAuthorizationPolicy, getStream: opts.getS2AStream, localIdentity: localIdentity, + nextProtos: opts.NextProtos, }, nil } @@ -359,15 +366,22 @@ type s2aTLSClientConfigFactory struct { getStream stream.GetS2AStream // localIdentity should only be used by the client. localIdentity *commonpb.Identity + nextProtos []string } func (f *s2aTLSClientConfigFactory) Build( ctx context.Context, opts *TLSClientConfigOptions) (*tls.Config, error) { serverName := "" - if opts != nil && opts.ServerName != "" { - serverName = opts.ServerName + nextProtos := f.nextProtos + if opts != nil { + if opts.ServerName != "" { + serverName = opts.ServerName + } + if len(opts.NextProtos) > 0 { + nextProtos = opts.NextProtos + } } - return v2.NewClientTLSConfig(ctx, f.s2av2Address, f.transportCreds, f.tokenManager, f.verificationMode, serverName, f.serverAuthorizationPolicy, f.getStream, f.localIdentity) + return v2.NewClientTLSConfig(ctx, f.s2av2Address, f.transportCreds, f.tokenManager, f.verificationMode, serverName, f.serverAuthorizationPolicy, f.getStream, f.localIdentity, nextProtos) } func getVerificationMode(verificationMode VerificationModeType) s2av2pb.ValidatePeerCertificateChainReq_VerificationMode { diff --git a/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/s2a_options.go b/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/s2a_options.go index 0db758e4e..abbbf8556 100644 --- a/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/s2a_options.go +++ b/ci/resources/stemcell-version-bump/vendor/github.com/google/s2a-go/s2a_options.go @@ -145,6 +145,17 @@ type ClientOptions struct { // peer certificate chain. VerificationMode VerificationModeType + // NextProtos is the list of ALPN protocols offered during the TLS + // handshake. If empty, HTTP/2 ("h2") is offered. + // + // This is only consulted when building a tls.Config for an HTTP client, + // via NewTLSClientConfigFactory or NewS2ADialTLSContextFunc. It is ignored + // by NewClientCreds, because the gRPC transport requires HTTP/2. + // + // Set this when the connection will not speak HTTP/2, for example + // []string{"http/1.1"} for an HTTP/1.1 client. + NextProtos []string + // Optional fallback after dialing with S2A fails. FallbackOpts *FallbackOptions diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_loong64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_loong64.go new file mode 100644 index 000000000..9679f9ee0 --- /dev/null +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_loong64.go @@ -0,0 +1,22 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +package chacha20 + +import "golang.org/x/sys/cpu" + +const bufSize = 256 + +//go:noescape +func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) + +func (c *Cipher) xorKeyStreamBlocks(dst, src []byte) { + if cpu.Loong64.HasLSX { + xorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter) + } else { + c.xorKeyStreamBlocksGeneric(dst, src) + } +} diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_loong64.s b/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_loong64.s new file mode 100644 index 000000000..e377b4327 --- /dev/null +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_loong64.s @@ -0,0 +1,342 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// derived from chacha_arm64.s + +//go:build gc && !purego + +#include "textflag.h" + +DATA ·constants+0x00(SB)/4, $0x61707865 +DATA ·constants+0x04(SB)/4, $0x3320646e +DATA ·constants+0x08(SB)/4, $0x79622d32 +DATA ·constants+0x0c(SB)/4, $0x6b206574 +GLOBL ·constants(SB), NOPTR|RODATA, $32 + +DATA ·incRotMatrix+0x00(SB)/4, $0x00000000 +DATA ·incRotMatrix+0x04(SB)/4, $0x00000001 +DATA ·incRotMatrix+0x08(SB)/4, $0x00000002 +DATA ·incRotMatrix+0x0c(SB)/4, $0x00000003 +GLOBL ·incRotMatrix(SB), NOPTR|RODATA, $32 + +#define NUM_ROUNDS 10 + +// func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) +TEXT ·xorKeyStreamVX(SB), NOSPLIT, $0 + MOVV dst+0(FP), R4 + MOVV src+24(FP), R5 + MOVV src_len+32(FP), R6 + MOVV key+48(FP), R7 + MOVV nonce+56(FP), R8 + MOVV counter+64(FP), R9 + + MOVV $·constants(SB), R10 + MOVV $·incRotMatrix(SB), R11 + + MOVW (R9), R12 + +loop: + MOVV $NUM_ROUNDS, R15 + // load 4-32bit data from incRotMatrix added to counter + VMOVQ (R11), V30 + + // load contants + VMOVQ (R10), V0.W4 + VMOVQ 4(R10), V1.W4 + VMOVQ 8(R10), V2.W4 + VMOVQ 12(R10), V3.W4 + + // load keys + VMOVQ (R7), V4.W4 + VMOVQ 4(R7), V5.W4 + VMOVQ 8(R7), V6.W4 + VMOVQ 12(R7), V7.W4 + VMOVQ 16(R7), V8.W4 + VMOVQ 20(R7), V9.W4 + VMOVQ 24(R7), V10.W4 + VMOVQ 28(R7), V11.W4 + + // load counter + nonce + VMOVQ (R9), V12.W4 + + VMOVQ (R8), V13.W4 + VMOVQ 4(R8), V14.W4 + VMOVQ 8(R8), V15.W4 + + // update counter + VADDW V30, V12, V12 + +chacha: + // V0..V3 += V4..V7 + // V12..V15 <<<= ((V12..V15 XOR V0..V3), 16) + VADDW V0, V4, V0 + VADDW V1, V5, V1 + VADDW V2, V6, V2 + VADDW V3, V7, V3 + VXORV V12, V0, V12 + VXORV V13, V1, V13 + VXORV V14, V2, V14 + VXORV V15, V3, V15 + VROTRW $16, V12, V12 + VROTRW $16, V13, V13 + VROTRW $16, V14, V14 + VROTRW $16, V15, V15 + + // V8..V11 += V12..V15 + // V4..V7 <<<= ((V4..V7 XOR V8..V11), 12) + VADDW V8, V12, V8 + VADDW V9, V13, V9 + VADDW V10, V14, V10 + VADDW V11, V15, V11 + VXORV V4, V8, V4 + VXORV V5, V9, V5 + VXORV V6, V10, V6 + VXORV V7, V11, V7 + VROTRW $20, V4, V4 + VROTRW $20, V5, V5 + VROTRW $20, V6, V6 + VROTRW $20, V7, V7 + + // V0..V3 += V4..V7 + // V12..V15 <<<= ((V12..V15 XOR V0..V3), 8) + VADDW V0, V4, V0 + VADDW V1, V5, V1 + VADDW V2, V6, V2 + VADDW V3, V7, V3 + VXORV V12, V0, V12 + VXORV V13, V1, V13 + VXORV V14, V2, V14 + VXORV V15, V3, V15 + VROTRW $24, V12, V12 + VROTRW $24, V13, V13 + VROTRW $24, V14, V14 + VROTRW $24, V15, V15 + + // V8..V11 += V12..V15 + // V4..V7 <<<= ((V4..V7 XOR V8..V11), 7) + VADDW V12, V8, V8 + VADDW V13, V9, V9 + VADDW V14, V10, V10 + VADDW V15, V11, V11 + VXORV V4, V8, V4 + VXORV V5, V9, V5 + VXORV V6, V10, V6 + VXORV V7, V11, V7 + VROTRW $25, V4, V4 + VROTRW $25, V5, V5 + VROTRW $25, V6, V6 + VROTRW $25, V7, V7 + + // V0..V3 += V5..V7, V4 + // V15,V12-V14 <<<= ((V15,V12-V14 XOR V0..V3), 16) + VADDW V0, V5, V0 + VADDW V1, V6, V1 + VADDW V2, V7, V2 + VADDW V3, V4, V3 + VXORV V15, V0, V15 + VXORV V12, V1, V12 + VXORV V13, V2, V13 + VXORV V14, V3, V14 + VROTRW $16, V15, V15 + VROTRW $16, V12, V12 + VROTRW $16, V13, V13 + VROTRW $16, V14, V14 + + // V10,V11,V8,V9 += V15,V12,V13,V14 + // V5,V6,V7,V4 <<<= ((V5,V6,V7,V4 XOR V10,V11,V8,V9), 12) + VADDW V10, V15, V10 + VADDW V11, V12, V11 + VADDW V8, V13, V8 + VADDW V9, V14, V9 + VXORV V5, V10, V5 + VXORV V6, V11, V6 + VXORV V7, V8, V7 + VXORV V4, V9, V4 + VROTRW $20, V5, V5 + VROTRW $20, V6, V6 + VROTRW $20, V7, V7 + VROTRW $20, V4, V4 + + // V0..V3 += V5..V7, V4 + // V15,V12-V14 <<<= ((V15,V12-V14 XOR V0..V3), 8) + VADDW V5, V0, V0 + VADDW V6, V1, V1 + VADDW V7, V2, V2 + VADDW V4, V3, V3 + VXORV V15, V0, V15 + VXORV V12, V1, V12 + VXORV V13, V2, V13 + VXORV V14, V3, V14 + VROTRW $24, V15, V15 + VROTRW $24, V12, V12 + VROTRW $24, V13, V13 + VROTRW $24, V14, V14 + + // V10,V11,V8,V9 += V15,V12,V13,V14 + // V5,V6,V7,V4 <<<= ((V5,V6,V7,V4 XOR V10,V11,V8,V9), 7) + VADDW V15, V10, V10 + VADDW V12, V11, V11 + VADDW V13, V8, V8 + VADDW V14, V9, V9 + VXORV V5, V10, V5 + VXORV V6, V11, V6 + VXORV V7, V8, V7 + VXORV V4, V9, V4 + VROTRW $25, V5, V5 + VROTRW $25, V6, V6 + VROTRW $25, V7, V7 + VROTRW $25, V4, V4 + + SUBV $1, R15 + BNE R15, R0, chacha + + // load origin contants + VMOVQ (R10), V16.W4 + VMOVQ 4(R10), V17.W4 + VMOVQ 8(R10), V18.W4 + VMOVQ 12(R10), V19.W4 + + // load origin keys + VMOVQ (R7), V20.W4 + VMOVQ 4(R7), V21.W4 + VMOVQ 8(R7), V22.W4 + VMOVQ 12(R7), V23.W4 + VMOVQ 16(R7), V24.W4 + VMOVQ 20(R7), V25.W4 + VMOVQ 24(R7), V26.W4 + VMOVQ 28(R7), V27.W4 + + // add back the initial state to generate the key stream + VADDW V30, V12, V12 // update counter in advance to prevent V30 from being overwritten + VADDW V16, V0, V0 + VADDW V17, V1, V1 + VADDW V18, V2, V2 + VADDW V19, V3, V3 + + // load origin counter + nonce + VMOVQ (R9), V28.W4 + VMOVQ (R8), V29.W4 + VMOVQ 4(R8), V30.W4 + VMOVQ 8(R8), V31.W4 + + VADDW V20, V4, V4 + VADDW V21, V5, V5 + VADDW V22, V6, V6 + VADDW V23, V7, V7 + VADDW V24, V8, V8 + VADDW V25, V9, V9 + VADDW V26, V10, V10 + VADDW V27, V11, V11 + VADDW V28, V12, V12 + VADDW V29, V13, V13 + VADDW V30, V14, V14 + VADDW V31, V15, V15 + + // shuffle + VILVLW V0, V1, V16 + VILVHW V0, V1, V17 + VILVLW V2, V3, V18 + VILVHW V2, V3, V19 + VILVLW V4, V5 ,V20 + VILVHW V4, V5, V21 + VILVLW V6, V7, V22 + VILVHW V6, V7, V23 + VILVLW V8, V9, V24 + VILVHW V8, V9, V25 + VILVLW V10, V11, V26 + VILVHW V10, V11, V27 + VILVLW V12, V13, V28 + VILVHW V12, V13, V29 + VILVLW V14, V15, V30 + VILVHW V14, V15, V31 + VILVLV V16, V18, V0 + VILVHV V16, V18, V4 + VILVLV V17, V19, V8 + VILVHV V17, V19, V12 + + // load src data from R5 + VMOVQ 0(R5), V16 + VMOVQ 16(R5), V17 + VMOVQ 32(R5), V18 + VMOVQ 48(R5), V19 + + VILVLV V20, V22, V1 + VILVHV V20, V22, V5 + VILVLV V21, V23, V9 + VILVHV V21, V23, V13 + + VMOVQ 64(R5), V20 + VMOVQ 80(R5), V21 + VMOVQ 96(R5), V22 + VMOVQ 112(R5), V23 + + VILVLV V24, V26, V2 + VILVHV V24, V26, V6 + VILVLV V25, V27, V10 + VILVHV V25, V27, V14 + + VMOVQ 128(R5), V24 + VMOVQ 144(R5), V25 + VMOVQ 160(R5), V26 + VMOVQ 176(R5), V27 + + VILVLV V28, V30, V3 + VILVHV V28, V30, V7 + VILVLV V29, V31, V11 + VILVHV V29, V31, V15 + + VMOVQ 192(R5), V28 + VMOVQ 208(R5), V29 + VMOVQ 224(R5), V30 + VMOVQ 240(R5), V31 + + VXORV V0, V16, V16 + VXORV V1, V17, V17 + VXORV V2, V18, V18 + VXORV V3, V19, V19 + + VMOVQ V16, 0(R4) + VMOVQ V17, 16(R4) + VMOVQ V18, 32(R4) + VMOVQ V19, 48(R4) + + VXORV V4, V20, V20 + VXORV V5, V21, V21 + VXORV V6, V22, V22 + VXORV V7, V23, V23 + + VMOVQ V20, 64(R4) + VMOVQ V21, 80(R4) + VMOVQ V22, 96(R4) + VMOVQ V23, 112(R4) + + VXORV V8, V24, V24 + VXORV V9, V25, V25 + VXORV V10, V26, V26 + VXORV V11, V27, V27 + + VMOVQ V24, 128(R4) + VMOVQ V25, 144(R4) + VMOVQ V26, 160(R4) + VMOVQ V27, 176(R4) + + VXORV V12, V28, V28 + VXORV V13, V29, V29 + VXORV V14, V30, V30 + VXORV V15, V31, V31 + + VMOVQ V28, 192(R4) + VMOVQ V29, 208(R4) + VMOVQ V30, 224(R4) + VMOVQ V31, 240(R4) + + ADD $4, R12, R12 + MOVW R12, (R9) // update counter + + ADDV $256, R4, R4 + ADDV $256, R5, R5 + SUBV $256, R6, R6 + BNE R6, R0, loop + + RET diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go index c709b7284..3853cc0e0 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (!arm64 && !s390x && !ppc64 && !ppc64le) || !gc || purego +//go:build (!arm64 && !loong64 && !s390x && !ppc64 && !ppc64le) || !gc || purego package chacha20 diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/flow.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/flow.go index b7dbd1869..5066a3991 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/flow.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/flow.go @@ -10,6 +10,9 @@ package http2 // flow control window update. const inflowMinRefresh = 4 << 10 +// maxFlowWindow is the maximum size of a flow control window. +const maxFlowWindow = (1 << 31) - 1 + // inflow accounts for an inbound flow control window. // It tracks both the latest window sent to the peer (used for enforcement) // and the accumulated unsent window. @@ -74,47 +77,99 @@ func takeInflows(f1, f2 *inflow, n uint32) bool { return true } -// outflow is the outbound flow control window's size. +// connOutflow is connection-level outbound flow control. +type connOutflow struct { + initial int32 // SETTINGS_INITIAL_WINDOW_SIZE, changes with settings updates + n int32 // connection-level flow control window + flowErr bool // set when a flow control error is encountered +} + +func (f *connOutflow) init() { + f.initial = initialWindowSize // initial stream window size + f.n = initialWindowSize // current connection window size +} + +func (f *connOutflow) changeInitialWindowSize(size int64) bool { + if size > maxFlowWindow { + f.flowErr = true + return false + } + f.initial = int32(size) + return true +} + +func (f *connOutflow) add(n int32) bool { + sum := int64(f.n) + int64(n) + if sum > maxFlowWindow { + f.flowErr = true + return false + } + f.n += n + return true +} + +// outflow is the stream-level outbound flow control window's size. type outflow struct { _ incomparable - // n is the number of DATA bytes we're allowed to send. - // An outflow is kept both on a conn and a per-stream. - n int32 + // delta is the difference between the stream's flow control window and + // the connection's initial window size (conn.initial). + // + // Another view is that delta is the number of flow control bytes provided to this + // stream in WINDOW_UPDATE frames, less the number of bytes sent on the stream. + delta int32 // conn points to the shared connection-level outflow that is - // shared by all streams on that conn. It is nil for the outflow - // that's on the conn directly. - conn *outflow + // shared by all streams on that conn. + conn *connOutflow } -func (f *outflow) setConnFlow(cf *outflow) { f.conn = cf } - -func (f *outflow) available() int32 { - n := f.n - if f.conn != nil && f.conn.n < n { - n = f.conn.n +func (f *outflow) available() (int32, bool) { + if f.conn == nil { + return maxFlowWindow, true // only happens in tests } - return n + if f.conn.flowErr { + // Block all sending once any stream observes a flow control error. + return 0, false + } + n := int64(f.conn.initial) + int64(f.delta) + if n > maxFlowWindow { + f.conn.flowErr = true + return 0, false + } + return min(int32(n), f.conn.n), true } func (f *outflow) take(n int32) { - if n > f.available() { - panic("internal error: took too much") + if f.conn == nil { + return // only happens in tests } - f.n -= n - if f.conn != nil { - f.conn.n -= n + avail, _ := f.available() + if n > avail { + panic("internal error: took too much") } + f.delta -= n + f.conn.n -= n } // add adds n bytes (positive or negative) to the flow control window. // It returns false if the sum would exceed 2^31-1. func (f *outflow) add(n int32) bool { - sum := f.n + n - if (sum > n) == (f.n > 0) { - f.n = sum - return true + if f.conn == nil { + return true // only happens in tests + } + avail := int64(f.conn.initial) + int64(f.delta) + if avail > maxFlowWindow { + // An earlier change to the initial window pushed this stream over the limit. + // This is a connection-level flow control error. + f.conn.flowErr = true + return false } - return false + if avail+int64(n) > maxFlowWindow { + // This update would push the stream over the limit. + // This is a stream-level flow control error. + return false + } + f.delta += n + return true } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/frame.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/frame.go index be75badcc..3363bbafc 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/frame.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/frame.go @@ -1711,7 +1711,8 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (Frame, error) { mh := &MetaHeadersFrame{ HeadersFrame: hf, } - var remainSize = fr.maxHeaderListSize() + var headersRemainSize = fr.maxHeaderListSize() + var trailersRemainSize = fr.maxHeaderListSize() var sawRegular bool var invalid error // pseudo header field errors @@ -1743,14 +1744,29 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (Frame, error) { return } - size := hf.Size() - if size > remainSize { + var remainSize *uint32 + var size uint32 + if hf.Name == "trailer" { + remainSize = &trailersRemainSize + fieldCount := strings.Count(hf.Value, ",") + 1 + // Rather than actually constructing hpack.HeaderField for each + // trailer field and cumulatively adding its Size, just do the math + // manually to avoid unnecessary work. This does make it so + // whitespaces after comma are counted against the budget, but that + // should be innocuous. + size = uint32(len(hf.Value)-fieldCount+1) + uint32(fieldCount)*hpack.HeaderField{}.Size() + } else { + remainSize = &headersRemainSize + size = hf.Size() + } + if size > *remainSize { hdec.SetEmitEnabled(false) mh.Truncated = true - remainSize = 0 + headersRemainSize = 0 + trailersRemainSize = 0 return } - remainSize -= size + *remainSize -= size mh.Fields = append(mh.Fields, hf) }) @@ -1766,10 +1782,10 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (Frame, error) { // skip parsing the fragment and close the connection. // // "Too much" is either any CONTINUATION frame after we've already - // exceeded the max header list size (in which case remainSize is 0), - // or a frame whose encoded size is more than twice the remaining - // header list bytes we're willing to accept. - if int64(len(frag)) > int64(2*remainSize) { + // exceeded the max header list size (if so, both budgets are 0), or a + // frame whose encoded size is more than twice the remaining header + // list bytes we're willing to accept. + if int64(len(frag)) > 2*int64(headersRemainSize+trailersRemainSize) { if VerboseLogs { log.Printf("http2: header list too large") } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/server.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/server.go index a7d2053b6..a6cd66226 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/server.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/server.go @@ -280,7 +280,6 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon doneServing: make(chan struct{}), clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value" advMaxStreams: conf.MaxConcurrentStreams, - initialStreamSendWindowSize: initialWindowSize, initialStreamRecvWindowSize: conf.MaxUploadBufferPerStream, maxFrameSize: initialMaxFrameSize, pingTimeout: conf.PingTimeout, @@ -320,7 +319,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon // These start at the RFC-specified defaults. If there is a higher // configured value for inflow, that will be updated when we send a // WINDOW_UPDATE shortly after sending SETTINGS. - sc.flow.add(initialWindowSize) + sc.flow.init() sc.inflow.init(initialWindowSize) sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf) sc.hpackEncoder.SetMaxDynamicTableSizeLimit(conf.MaxEncoderHeaderTableSize) @@ -427,7 +426,7 @@ type serverConn struct { wroteFrameCh chan frameWriteResult // from writeFrameAsync -> serve, tickles more frame writes bodyReadCh chan bodyReadMsg // from handlers -> serve serveMsgCh chan interface{} // misc messages & code to send to / run on the serve loop - flow outflow // conn-wide (not stream-specific) outbound flow control + flow connOutflow // conn-wide (not stream-specific) outbound flow control inflow inflow // conn-wide inbound flow control tlsState *tls.ConnectionState // shared by all handlers, like net/http remoteAddrStr string @@ -441,6 +440,9 @@ type serverConn struct { sawFirstSettings bool // got the initial SETTINGS frame after the preface needToSendSettingsAck bool unackedSettings int // how many SETTINGS have we sent without ACKs? + pendingEncoderTableSize bool // peer changed SETTINGS_HEADER_TABLE_SIZE; apply to hpackEncoder before the next frame write + encoderTableSizeMin uint32 // smallest SETTINGS_HEADER_TABLE_SIZE since the last apply + encoderTableSize uint32 // latest SETTINGS_HEADER_TABLE_SIZE queuedControlFrames int // control frames in the writeSched queue clientMaxStreams uint32 // SETTINGS_MAX_CONCURRENT_STREAMS from client (our PUSH_PROMISE limit) advMaxStreams uint32 // our SETTINGS_MAX_CONCURRENT_STREAMS advertised the client @@ -451,7 +453,6 @@ type serverConn struct { maxPushPromiseID uint32 // ID of the last push promise (even), or 0 if there have been no pushes streams map[uint32]*stream unstartedHandlers []unstartedHandler - initialStreamSendWindowSize int32 initialStreamRecvWindowSize int32 maxFrameSize int32 peerMaxHeaderListSize uint32 // zero means unknown (default) @@ -521,7 +522,8 @@ type stream struct { // immutable: sc *serverConn id uint32 - body *pipe // non-nil if expecting DATA frames + body *pipe // non-nil if expecting DATA frames + reqBody *requestBody cw closeWaiter // closed wait stream transitions to closed state ctx context.Context cancelCtx func() @@ -1172,6 +1174,16 @@ func (sc *serverConn) startFrameWrite(wr FrameWriteRequest) { sc.writingFrame = true sc.needsFrameFlush = true + if sc.pendingEncoderTableSize { + // hpackEncoder may be in use by writeFrameAsync, so SETTINGS + // changes to it are deferred until no frame is being written. + // Replaying the smallest size before the latest one keeps the + // encoder's view identical to having applied every change + // (RFC 7541, Section 4.2). + sc.pendingEncoderTableSize = false + sc.hpackEncoder.SetMaxDynamicTableSize(sc.encoderTableSizeMin) + sc.hpackEncoder.SetMaxDynamicTableSize(sc.encoderTableSize) + } if wr.write.staysWithinBuffer(sc.bw.Available()) { sc.writingFrameAsync = false err := wr.write.writeFrame(sc) @@ -1271,6 +1283,11 @@ func (sc *serverConn) scheduleFrameWrite() { } sc.inFrameScheduleLoop = true for !sc.writingFrameAsync { + if sc.flow.flowErr && (!sc.inGoAway || sc.goAwayCode == ErrCodeNo) { + sc.inGoAway = true + sc.needToSendGoAway = true + sc.goAwayCode = ErrCodeFlowControl + } if sc.needToSendGoAway { sc.needToSendGoAway = false sc.startFrameWrite(FrameWriteRequest{ @@ -1294,6 +1311,9 @@ func (sc *serverConn) scheduleFrameWrite() { sc.startFrameWrite(wr) continue } + if sc.flow.flowErr { + continue + } } if sc.needsFrameFlush { sc.startFrameWrite(FrameWriteRequest{write: flushFrameWriter{}}) @@ -1526,6 +1546,10 @@ func (sc *serverConn) processWindowUpdate(f *WindowUpdateFrame) error { return nil } if !st.flow.add(int32(f.Increment)) { + if st.flow.conn.flowErr { + // This is a lazily-detected connection-level flow control error. + return sc.countError("bad_flow", ConnectionError(ErrCodeFlowControl)) + } return sc.countError("bad_flow", streamError(f.StreamID, ErrCodeFlowControl)) } default: // connection-level flow control @@ -1584,10 +1608,6 @@ func (sc *serverConn) closeStream(st *stream, err error) { } } if p := st.body; p != nil { - // Return any buffered unread bytes worth of conn-level flow control. - // See golang.org/issue/16481 - sc.sendWindowUpdate(nil, p.Len()) - p.CloseWithError(err) } if e, ok := err.(StreamError); ok { @@ -1641,7 +1661,12 @@ func (sc *serverConn) processSetting(s Setting) error { } switch s.ID { case SettingHeaderTableSize: - sc.hpackEncoder.SetMaxDynamicTableSize(s.Val) + // Applied by startFrameWrite; see comment there. + if !sc.pendingEncoderTableSize || s.Val < sc.encoderTableSizeMin { + sc.encoderTableSizeMin = s.Val + } + sc.encoderTableSize = s.Val + sc.pendingEncoderTableSize = true case SettingEnablePush: sc.pushEnabled = s.Val != 0 case SettingMaxConcurrentStreams: @@ -1672,28 +1697,14 @@ func (sc *serverConn) processSetting(s Setting) error { func (sc *serverConn) processSettingInitialWindowSize(val uint32) error { sc.serveG.check() - // Note: val already validated to be within range by - // processSetting's Valid call. - - // "A SETTINGS frame can alter the initial flow control window - // size for all current streams. When the value of - // SETTINGS_INITIAL_WINDOW_SIZE changes, a receiver MUST - // adjust the size of all stream flow control windows that it - // maintains by the difference between the new value and the - // old value." - old := sc.initialStreamSendWindowSize - sc.initialStreamSendWindowSize = int32(val) - growth := int32(val) - old // may be negative - for _, st := range sc.streams { - if !st.flow.add(growth) { - // 6.9.2 Initial Flow Control Window Size - // "An endpoint MUST treat a change to - // SETTINGS_INITIAL_WINDOW_SIZE that causes any flow - // control window to exceed the maximum size as a - // connection error (Section 5.4.1) of type - // FLOW_CONTROL_ERROR." - return sc.countError("setting_win_size", ConnectionError(ErrCodeFlowControl)) - } + if !sc.flow.changeInitialWindowSize(int64(val)) { + // 6.9.2 Initial Flow Control Window Size + // "An endpoint MUST treat a change to + // SETTINGS_INITIAL_WINDOW_SIZE that causes any flow + // control window to exceed the maximum size as a + // connection error (Section 5.4.1) of type + // FLOW_CONTROL_ERROR." + return sc.countError("setting_win_size", ConnectionError(ErrCodeFlowControl)) } return nil } @@ -1966,7 +1977,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { if st.reqTrailer != nil { st.trailer = make(http.Header) } - st.body = req.Body.(*requestBody).pipe // may be nil + st.body = st.reqBody.pipe // may be nil st.declBodyBytes = req.ContentLength handler := sc.handler.ServeHTTP @@ -1989,7 +2000,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout) } - return sc.scheduleHandler(id, rw, req, handler) + return sc.scheduleHandler(st, rw, req, handler) } func (sc *serverConn) upgradeRequest(req *http.Request) { @@ -2102,7 +2113,6 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState, priority } st.cw.Init() st.flow.conn = &sc.flow // link to conn-level counter - st.flow.add(sc.initialStreamSendWindowSize) st.inflow.init(sc.initialStreamRecvWindowSize) if sc.hs.WriteTimeout > 0 { st.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout) @@ -2184,7 +2194,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res } else { req.ContentLength = -1 } - req.Body.(*requestBody).pipe = &pipe{ + st.reqBody.pipe = &pipe{ b: &dataBuffer{expected: req.ContentLength}, } } @@ -2204,7 +2214,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp httpcommon.Server return nil, nil, sc.countError(res.InvalidReason, streamError(st.id, ErrCodeProtocol)) } - body := &requestBody{ + st.reqBody = &requestBody{ conn: sc, stream: st, needsContinue: res.NeedsContinue, @@ -2220,7 +2230,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp httpcommon.Server ProtoMinor: 0, TLS: tlsState, Host: rp.Authority, - Body: body, + Body: st.reqBody, Trailer: res.Trailer, }).WithContext(st.ctx) rw := sc.newResponseWriter(st, req) @@ -2244,11 +2254,12 @@ type unstartedHandler struct { rw *responseWriter req *http.Request handler func(http.ResponseWriter, *http.Request) + body *pipe } // scheduleHandler starts a handler goroutine, // or schedules one to start as soon as an existing handler finishes. -func (sc *serverConn) scheduleHandler(streamID uint32, rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) error { +func (sc *serverConn) scheduleHandler(st *stream, rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) error { sc.serveG.check() maxHandlers := sc.advMaxStreams if sc.curHandlers < maxHandlers { @@ -2260,10 +2271,11 @@ func (sc *serverConn) scheduleHandler(streamID uint32, rw *responseWriter, req * return sc.countError("too_many_early_resets", ConnectionError(ErrCodeEnhanceYourCalm)) } sc.unstartedHandlers = append(sc.unstartedHandlers, unstartedHandler{ - streamID: streamID, + streamID: st.id, rw: rw, req: req, handler: handler, + body: st.body, }) return nil } @@ -2277,6 +2289,10 @@ func (sc *serverConn) handlerDone() { u := sc.unstartedHandlers[i] if sc.streams[u.streamID] == nil { // This stream was reset before its goroutine had a chance to start. + if u.body != nil { + u.body.BreakWithError(errClosedBody) + sc.sendWindowUpdate(nil, u.body.Len()) + } continue } if sc.curHandlers >= maxHandlers { @@ -2298,6 +2314,12 @@ func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler didPanic := true defer func() { rw.rws.stream.cancelCtx() + if b := rw.rws.stream.reqBody; b != nil { + // Closing the body refunds flow control credit for any unconsumed data. + // (reqBody is nil for Upgrade: h2c requests, but those do not use flow + // control for the request body.) + b.Close() + } if req.MultipartForm != nil { req.MultipartForm.RemoveAll() } @@ -2396,7 +2418,7 @@ func (sc *serverConn) noteBodyReadFromHandler(st *stream, n int, err error) { func (sc *serverConn) noteBodyRead(st *stream, n int) { sc.serveG.check() sc.sendWindowUpdate(nil, n) // conn-level - if st.state != stateHalfClosedRemote && st.state != stateClosed { + if st != nil && st.state != stateHalfClosedRemote && st.state != stateClosed { // Don't send this WINDOW_UPDATE if the stream is closed // remotely. sc.sendWindowUpdate(st, n) @@ -2444,6 +2466,9 @@ func (b *requestBody) Close() error { b.closeOnce.Do(func() { if b.pipe != nil { b.pipe.BreakWithError(errClosedBody) + if unread := b.pipe.Len(); unread > 0 { + b.conn.noteBodyReadFromHandler(nil, unread, errClosedBody) + } } }) return nil @@ -2461,9 +2486,6 @@ func (b *requestBody) Read(p []byte) (n int, err error) { if err == io.EOF { b.sawEOF = true } - if b.conn == nil { - return - } b.conn.noteBodyReadFromHandler(b.stream, n, err) return } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/transport.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/transport.go index 088eb9bef..d894c6019 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/transport.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/transport.go @@ -27,6 +27,7 @@ import ( "net/http" "net/http/httptrace" "net/textproto" + "slices" "strconv" "sync" "sync/atomic" @@ -203,7 +204,7 @@ type ClientConn struct { mu sync.Mutex // guards following cond *sync.Cond // hold mu; broadcast on flow/closed changes - flow outflow // our conn-level flow control quota (cs.outflow is per stream) + flow connOutflow // our conn-level flow control quota (cs.outflow is per stream) inflow inflow // peer's conn-level flow control doNotReuse bool // whether conn is marked to not be reused for any future requests closing bool @@ -227,7 +228,6 @@ type ClientConn struct { maxConcurrentStreams uint32 peerMaxHeaderListSize uint64 peerMaxHeaderTableSize uint32 - initialWindowSize uint32 initialStreamRecvWindowSize int32 readIdleTimeout time.Duration pingTimeout time.Duration @@ -472,7 +472,6 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool, internalStateHook readerDone: make(chan struct{}), nextStreamID: 1, maxFrameSize: 16 << 10, // spec default - initialWindowSize: 65535, // spec default initialStreamRecvWindowSize: conf.MaxUploadBufferPerStream, maxConcurrentStreams: initialMaxConcurrentStreams, // "infinite", per spec. Use a smaller value until we have received server settings. strictMaxConcurrentStreams: conf.StrictMaxConcurrentRequests, @@ -497,7 +496,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool, internalStateHook } cc.cond = sync.NewCond(&cc.mu) - cc.flow.add(int32(initialWindowSize)) + cc.flow.init() // TODO: adjust this writer size to account for frame size + // MTU + crypto/tls record padding. @@ -876,6 +875,33 @@ func (cc *ClientConn) sendGoAway() error { return nil } +func (cc *ClientConn) goAwayAndClose(code ErrCode) { + cc.mu.Lock() + closed := cc.closed + cc.closing = true + cc.closed = true + cc.mu.Unlock() + if closed { + return + } + if f := cc.fr.countError; f != nil { + f(fmt.Sprintf("conn_close_error_%s", code.stringToken())) + } + done := make(chan struct{}) + go func() { + defer close(done) + cc.wmu.Lock() + cc.fr.WriteGoAway(0, code, nil) + cc.bw.Flush() + cc.wmu.Unlock() + }() + select { + case <-done: + case <-time.After(250 * time.Millisecond): + } + cc.closeForError(fmt.Errorf("http2: closing connection with %v", code)) +} + // closes the client connection immediately. In-flight requests are interrupted. // err is sent to streams. func (cc *ClientConn) closeForError(err error) { @@ -1319,7 +1345,9 @@ func (cs *clientStream) cleanupWriteRequest(err error) { } if err != nil { cs.abortStream(err) // possibly redundant, but harmless - if cs.sentHeaders { + if ce, ok := err.(ConnectionError); ok { + cc.goAwayAndClose(ErrCode(ce)) + } else if cs.sentHeaders { if se, ok := err.(StreamError); ok { if se.Cause != errFromPeer { cc.writeStreamReset(cs.ID, se.Code, false, err) @@ -1648,8 +1676,12 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) return 0, errRequestCanceled default: } - if a := cs.flow.available(); a > 0 { - take := a + avail, ok := cs.flow.available() + if !ok { + return 0, ConnectionError(ErrCodeFlowControl) + } + if avail > 0 { + take := avail if int(take) > maxBytes { take = int32(maxBytes) // can't truncate int; take is int32 @@ -1710,8 +1742,7 @@ type resAndError struct { // requires cc.mu be held. func (cc *ClientConn) addStreamLocked(cs *clientStream) { - cs.flow.add(int32(cc.initialWindowSize)) - cs.flow.setConnFlow(&cc.flow) + cs.flow.conn = &cc.flow cs.inflow.init(cc.initialStreamRecvWindowSize) cs.ID = cc.nextStreamID cc.nextStreamID += 2 @@ -2095,18 +2126,42 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra return nil, nil } + // Delete various headers that might mess up framing for HTTP/1. This is + // not a problem for HTTP/2, but someone might use HTTP/2 transport as a + // reverse proxy which forwards the response to an HTTP/1 client. Our + // HTTP/1 client transport will properly reject improper headers such as + // multiple conflicting Content-Length headers, but other implementations + // might not. + // TODO: just reject such responses? We deleted them for compatibility + // since this was done in a security fix (go.dev/issue/81115). However, + // rejecting them seems entirely reasonable and relatively safe. + + // Connection-specific header fields must not appear in an HTTP/2 message, + // and any message containing them is malformed. RFC 9113, Section 8.2.2. + for _, k := range connHeaders { + delete(res.Header, k) + } res.ContentLength = -1 - if clens := res.Header["Content-Length"]; len(clens) == 1 { - if cl, err := strconv.ParseUint(clens[0], 10, 63); err == nil { - res.ContentLength = int64(cl) + if clens, ok := res.Header["Content-Length"]; ok { + // Repeated Content-Length values may be collapsed into one only if + // they are identical per RFC 9110 Section 8.6. + // No need to trim whitespace, HTTP/2 header values must not have + // extraneous whitespace per RFC 9113 Section 8.2.1. + // Non-canonical headers are already rejected by our framer at this + // point. + conflicting := slices.ContainsFunc(clens[1:], func(clen string) bool { + return clen != clens[0] + }) + cl, err := strconv.ParseUint(clens[0], 10, 63) + if conflicting || err != nil { + delete(res.Header, "Content-Length") } else { - // TODO: care? unlike http/1, it won't mess up our framing, so it's - // more safe smuggling-wise to ignore. + res.Header["Content-Length"] = clens[:1] + res.ContentLength = int64(cl) } - } else if len(clens) > 1 { - // TODO: care? unlike http/1, it won't mess up our framing, so it's - // more safe smuggling-wise to ignore. - } else if f.StreamEnded() && !cs.isHead { + } + + if res.ContentLength < 0 && f.StreamEnded() && !cs.isHead { res.ContentLength = 0 } @@ -2417,6 +2472,10 @@ const ( func (rl *clientConnReadLoop) streamByID(id uint32, headerOrData bool) *clientStream { rl.cc.mu.Lock() defer rl.cc.mu.Unlock() + return rl.streamByIDLocked(id, headerOrData) +} + +func (rl *clientConnReadLoop) streamByIDLocked(id uint32, headerOrData bool) *clientStream { if headerOrData { // Work around an unfortunate gRPC behavior. // See comment on ClientConn.rstStreamPingsBlocked for details. @@ -2499,24 +2558,10 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { case SettingMaxHeaderListSize: cc.peerMaxHeaderListSize = uint64(s.Val) case SettingInitialWindowSize: - // Values above the maximum flow-control - // window size of 2^31-1 MUST be treated as a - // connection error (Section 5.4.1) of type - // FLOW_CONTROL_ERROR. - if s.Val > math.MaxInt32 { + if !cc.flow.changeInitialWindowSize(int64(s.Val)) { return ConnectionError(ErrCodeFlowControl) } - - // Adjust flow control of currently-open - // frames by the difference of the old initial - // window size and this one. - delta := int32(s.Val) - int32(cc.initialWindowSize) - for _, cs := range cc.streams { - cs.flow.add(delta) - } cc.cond.Broadcast() - - cc.initialWindowSize = s.Val case SettingHeaderTableSize: cc.henc.SetMaxDynamicTableSize(s.Val) cc.peerMaxHeaderTableSize = s.Val @@ -2558,29 +2603,30 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { cc := rl.cc - cs := rl.streamByID(f.StreamID, notHeaderOrDataFrame) - if f.StreamID != 0 && cs == nil { - return nil - } - cc.mu.Lock() defer cc.mu.Unlock() - - fl := &cc.flow - if cs != nil { - fl = &cs.flow - } - if !fl.add(int32(f.Increment)) { - // For stream, the sender sends RST_STREAM with an error code of FLOW_CONTROL_ERROR - if cs != nil { + if f.StreamID == 0 { + if !cc.flow.add(int32(f.Increment)) { + return ConnectionError(ErrCodeFlowControl) + } + } else { + cs := rl.streamByIDLocked(f.StreamID, notHeaderOrDataFrame) + if cs == nil { + return nil + } + if !cs.flow.add(int32(f.Increment)) { + if cs.flow.conn.flowErr { + // This is a lazily-detected connection-level flow control error. + return ConnectionError(ErrCodeFlowControl) + } + // For stream, the sender sends RST_STREAM with + // an error code of FLOW_CONTROL_ERROR. rl.endStreamErrorLocked(cs, StreamError{ StreamID: f.StreamID, Code: ErrCodeFlowControl, }) return nil } - - return ConnectionError(ErrCodeFlowControl) } cc.cond.Broadcast() return nil diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/transport_wrap.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/transport_wrap.go index 34dfb3cca..eeaa95f03 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/transport_wrap.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/transport_wrap.go @@ -119,33 +119,27 @@ type http2TransportContextKey struct{} // DialFromContext dials a new connection using the http2.Transport's DialTLS/DialTLSContext. func (t transportConfig) DialFromContext(ctx context.Context, network, address string) (net.Conn, error) { - if ctx.Value(http2TransportContextKey{}) == nil { + dial, _ := ctx.Value(http2TransportContextKey{}).(*transportRoundTripState) + if dial == nil { // We're being called from a RoundTrip that did not start with an http2.Transport. // Use the http.Transport's dialer. return nil, errors.ErrUnsupported } - - tlsConf := t.t.TLSClientConfig - if tlsConf == nil { - tlsConf = &tls.Config{} - } else { - tlsConf = tlsConf.Clone() - } - if !slices.Contains(tlsConf.NextProtos, "h2") { - tlsConf.NextProtos = append([]string{"h2"}, tlsConf.NextProtos...) - } - if tlsConf.ServerName == "" { - host, _, err := net.SplitHostPort(address) - if err == nil { - tlsConf.ServerName = host - } - } - return t.t.dialTLS(ctx, network, address, tlsConf) + return t.t.dialForRoundTrip(ctx, dial, network, address) } type transportInternal struct { initOnce sync.Once lazyt1 *http.Transport + + dialMu sync.Mutex + dials map[string]*transportDialState +} + +type transportDialState struct { + dialc chan struct{} // close when dial returns + dialErr error // dial result, set before dialc is closed + rtdonec chan struct{} // closed when RoundTrip initiating the dial returns } func (t *Transport) init() *http.Transport { @@ -167,6 +161,52 @@ func (t *Transport) configure(t1 *http.Transport) { } } +// transportRoundTripState is the state of the dial for an http2.Transport.RoundTrip. +type transportRoundTripState struct { + mu sync.Mutex + rtdone bool // set when RoundTrip returns + rtdonec chan struct{} // closed when RoundTrip returns + gotconnc chan struct{} // closed when GotConn hook is called +} + +// startDial is called when a dial starts. +// +// It returns done=true if the RoundTrip has already returned, +// in which case we should skip dialing. +func (dial *transportRoundTripState) startDial() (gotconnc chan struct{}, done bool) { + dial.mu.Lock() + defer dial.mu.Unlock() + if dial.rtdone { + return nil, true + } + if dial.rtdonec == nil { + dial.rtdonec = make(chan struct{}) + } + dial.gotconnc = make(chan struct{}) + return dial.gotconnc, false +} + +// gotConn is called when RoundTrip gets a connection. +// This may happen multiple times per RoundTrip, if a request is retried. +func (dial *transportRoundTripState) gotConn() { + dial.mu.Lock() + defer dial.mu.Unlock() + if dial.gotconnc != nil { + close(dial.gotconnc) + dial.gotconnc = nil + } +} + +// roundTripDone is called when RoundTrip returns. +func (dial *transportRoundTripState) roundTripDone() { + dial.mu.Lock() + defer dial.mu.Unlock() + dial.rtdone = true + if dial.rtdonec != nil { + close(dial.rtdonec) + } +} + func (t *Transport) roundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) { t1 := t.init() @@ -186,12 +226,146 @@ func (t *Transport) roundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res // Both http.Transport and http2.Transport allow the user to provide a custom // dial function, and historically you only get the dial function from the // Transport you're calling RoundTrip on. - ctx := context.WithValue(req.Context(), http2TransportContextKey{}, t) + // + // In addition, http2.Transport coalesces dials, which http.Transport historically + // has not. + dial := &transportRoundTripState{} + defer dial.roundTripDone() + ctx := context.WithValue(req.Context(), http2TransportContextKey{}, dial) + ctx = httptrace.WithClientTrace(ctx, &httptrace.ClientTrace{ + GotConn: func(httptrace.GotConnInfo) { + // Tell dialForRoundTrip that we have received a connection. + dial.gotConn() + }, + }) req = req.WithContext(ctx) - return t1.RoundTrip(req) } +var errCoalescedDialAbandoned = errors.New("http2: abandoned coalesced dial") + +const coalescedDialRetryTimeout = 50 * time.Millisecond + +// dialForRoundTrip is called (indirectly) by net/http when dialing a new connection +// for a request call which originated as an http2.Transport.RoundTrip call. +// +// It uses the http2.Transport's Dial hooks and coalesces dials. +func (t *Transport) dialForRoundTrip(ctx context.Context, dial *transportRoundTripState, network, address string) (net.Conn, error) { + gotconnc, rtdone := dial.startDial() + if rtdone { + // RoundTrip returned, no need for this dial to proceed. + return nil, errCoalescedDialAbandoned + } + + var state *transportDialState + for { + // The first dial to an address registers itself with t.dials. + // When the dial finishes, it records the outcome and removes itself from t.dials + // so future dials will start a new round of coalescing. + // + // Subsequent dials observe that a dial is in progress, and skip dialing. + t.dialMu.Lock() + if t.dials == nil { + t.dials = make(map[string]*transportDialState) + } + leader := t.dials[address] + if leader == nil { + // No entry in t.dials to coalesce with. Add ourselves as leader. + state = &transportDialState{ + dialc: make(chan struct{}), + rtdonec: dial.rtdonec, + } + t.dials[address] = state + } + t.dialMu.Unlock() + if leader == nil { + // We are the leader, so we should dial for real. + break + } + + // Coalesce with a previous dial. + var ( + done = false + leaderdialc = leader.dialc + leaderrtdonec = leader.rtdonec + timerc <-chan time.Time + ) + for !done { + if leaderdialc == nil && leaderrtdonec == nil && timerc == nil { + // The leader finished dialing, and its RoundTrip finished. + // + // There are several possibilities, which reduce to: + // - The RoundTrip we are dialing for is about to receive + // a connection (possibly the one the leader just dialed), + // but we haven't observed it yet. + // - There's something wrong with the leader's connection, + // such as a TLS handshake failure. + // + // We have no good way to distinguish between these cases. + // + // Wait a short time for the leader's connection (or some + // other usable connection) to be delivered to our RoundTrip. + // If it is not, start a dial of our own. + timerc = time.After(coalescedDialRetryTimeout) + } + select { + case <-leaderdialc: + // The leader's dial completed. + if leader.dialErr != nil { + return nil, leader.dialErr + } + leaderdialc = nil + case <-leaderrtdonec: + // The leader's RoundTrip completed. + leaderrtdonec = nil + case <-timerc: + // The leader's dial and RoundTrip completed, and some time + // has passed. Assume we're not getting a connection and + // restart the dial process. + done = true + case <-dial.rtdonec: + // Our RoundTrip returned. + return nil, errCoalescedDialAbandoned + case <-gotconnc: + // Our RoundTrip got a connection. + return nil, errCoalescedDialAbandoned + case <-ctx.Done(): + // net/http abandoned the dial. + return nil, ctx.Err() + } + } + } + + // Dial for real. + tlsConf := t.TLSClientConfig + if tlsConf == nil { + tlsConf = &tls.Config{} + } else { + tlsConf = tlsConf.Clone() + } + if !slices.Contains(tlsConf.NextProtos, "h2") { + tlsConf.NextProtos = append([]string{"h2"}, tlsConf.NextProtos...) + } + if tlsConf.ServerName == "" { + host, _, err := net.SplitHostPort(address) + if err == nil { + tlsConf.ServerName = host + } + } + nc, err := t.dialTLS(ctx, network, address, tlsConf) + + // Remove this dial from t.dials, so future dial attempts will not coalesce with it. + t.dialMu.Lock() + delete(t.dials, address) + t.dialMu.Unlock() + + // Notify any dial coalesced with this one that we are done. + state.dialErr = err + close(state.dialc) + + return nc, err +} + func (t *Transport) closeIdleConnections() { t1 := t.init() t1.CloseIdleConnections() diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/writesched.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/writesched.go index 36ad5e32b..f1903a8c6 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/writesched.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/http2/writesched.go @@ -79,10 +79,11 @@ func (wr FrameWriteRequest) Consume(n int32) (FrameWriteRequest, FrameWriteReque } // Might need to split after applying limits. - allowed := wr.stream.flow.available() - if n < allowed { - allowed = n + avail, ok := wr.stream.flow.available() + if !ok { + return empty, empty, 0 } + allowed := min(n, avail) if wr.stream.sc.maxFrameSize < allowed { allowed = wr.stream.sc.maxFrameSize } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/internal/httpcommon/gzip.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/internal/httpcommon/gzip.go new file mode 100644 index 000000000..819dd650c --- /dev/null +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/net/internal/httpcommon/gzip.go @@ -0,0 +1,132 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package httpcommon + +import ( + "compress/flate" + "compress/gzip" + "errors" + "io" + "io/fs" + "sync" +) + +var errConcurrentRead = errors.New("http: concurrent read on response body") + +// incomparable is a zero-width, non-comparable type. Adding it to a struct +// makes that struct also non-comparable, and generally doesn't add +// any size (as long as it's first). +type incomparable [0]func() + +// GzipReader wraps a response body so it can lazily +// get gzip.Reader from the pool on the first call to Read. +// After Close is called it puts gzip.Reader to the pool immediately +// if there is no Read in progress or later when Read completes. +type GzipReader struct { + _ incomparable + Body io.ReadCloser // underlying Response.Body + mu sync.Mutex // guards zr and zerr + zr *gzip.Reader // stores gzip reader from the pool between reads + zerr error // sticky gzip reader init error or sentinel value to detect concurrent read and read after close +} + +type eofReader struct{} + +func (eofReader) Read([]byte) (int, error) { return 0, io.EOF } +func (eofReader) ReadByte() (byte, error) { return 0, io.EOF } + +var gzipPool = sync.Pool{New: func() any { return new(gzip.Reader) }} + +// gzipPoolGet gets a gzip.Reader from the pool and resets it to read from r. +func gzipPoolGet(r io.Reader) (*gzip.Reader, error) { + zr := gzipPool.Get().(*gzip.Reader) + if err := zr.Reset(r); err != nil { + gzipPoolPut(zr) + return nil, err + } + return zr, nil +} + +// gzipPoolPut puts a gzip.Reader back into the pool. +func gzipPoolPut(zr *gzip.Reader) { + // Reset will allocate bufio.Reader if we pass it anything + // other than a flate.Reader, so ensure that it's getting one. + var r flate.Reader = eofReader{} + zr.Reset(r) + gzipPool.Put(zr) +} + +// acquire returns a gzip.Reader for reading response body. +// The reader must be released after use. +func (gz *GzipReader) acquire() (*gzip.Reader, error) { + gz.mu.Lock() + defer gz.mu.Unlock() + if gz.zerr != nil { + return nil, gz.zerr + } + if gz.zr == nil { + // gzipPoolGet might block indefinitely since it reads the gzip header. + // Therefore, drop mu temporarily when using gzipPoolGet. + // We set zerr to errConcurrentRead to prevent concurrent read + // even when mu is temporarily dropped. + gz.zerr = errConcurrentRead + gz.mu.Unlock() + zr, err := gzipPoolGet(gz.Body) + gz.mu.Lock() + // Guard against Close being called while gzipPoolGet is running. + if gz.zerr != errConcurrentRead { + if zr != nil { + gzipPoolPut(zr) + } + return nil, gz.zerr + } + gz.zr, gz.zerr = zr, err + if gz.zerr != nil { + return nil, gz.zerr + } + } + ret := gz.zr + gz.zr, gz.zerr = nil, errConcurrentRead + return ret, nil +} + +// release returns the gzip.Reader to the pool if Close was called during Read. +func (gz *GzipReader) release(zr *gzip.Reader) { + gz.mu.Lock() + defer gz.mu.Unlock() + if gz.zerr == errConcurrentRead { + gz.zr, gz.zerr = zr, nil + } else { // fs.ErrClosed + gzipPoolPut(zr) + } +} + +// close returns the gzip.Reader to the pool immediately or +// signals release to do so after Read completes. +func (gz *GzipReader) close() { + gz.mu.Lock() + defer gz.mu.Unlock() + if gz.zerr == nil && gz.zr != nil { + gzipPoolPut(gz.zr) + gz.zr = nil + } + gz.zerr = fs.ErrClosed +} + +func (gz *GzipReader) Read(p []byte) (n int, err error) { + zr, err := gz.acquire() + if err != nil { + return 0, err + } + defer gz.release(zr) + + return zr.Read(p) +} + +func (gz *GzipReader) Close() error { + gz.close() + + return gz.Body.Close() +} diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/cpu/cpu.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/cpu/cpu.go index df8dbd1db..422b139cd 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/cpu/cpu.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/cpu/cpu.go @@ -61,7 +61,11 @@ var X86 struct { HasBMI2 bool // Bit manipulation instruction set 2 HasCX16 bool // Compare and exchange 16 Bytes HasERMS bool // Enhanced REP for MOVSB and STOSB + HasF16C bool // 16-bit floating-point conversion instructions HasFMA bool // Fused-multiply-add instructions + HasLAHF bool // LAHF/SAHF available in 64-bit mode + HasLZCNT bool // Leading zeros count instruction + HasMOVBE bool // Move data after byte swap HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers. HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM HasPOPCNT bool // Hamming weight instruction POPCNT. @@ -75,6 +79,7 @@ var X86 struct { HasAVXIFMA bool // Advanced vector extension Integer Fused Multiply Add HasAVXVNNI bool // Advanced vector extension Vector Neural Network Instructions HasAVXVNNIInt8 bool // Advanced vector extension Vector Neural Network Int8 instructions + HasXSAVE bool // XSAVE/XRSTOR/XSETBV/XGETBV instructions (hardware support; see also HasOSXSAVE) _ CacheLinePad } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/cpu/cpu_x86.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/cpu/cpu_x86.go index f5723d4f7..7e6cead53 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/cpu/cpu_x86.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -43,7 +43,11 @@ func initOptions() { {Name: "bmi2", Feature: &X86.HasBMI2}, {Name: "cx16", Feature: &X86.HasCX16}, {Name: "erms", Feature: &X86.HasERMS}, + {Name: "f16c", Feature: &X86.HasF16C}, {Name: "fma", Feature: &X86.HasFMA}, + {Name: "lahf", Feature: &X86.HasLAHF}, + {Name: "lzcnt", Feature: &X86.HasLZCNT}, + {Name: "movbe", Feature: &X86.HasMOVBE}, {Name: "osxsave", Feature: &X86.HasOSXSAVE}, {Name: "pclmulqdq", Feature: &X86.HasPCLMULQDQ}, {Name: "popcnt", Feature: &X86.HasPOPCNT}, @@ -56,6 +60,7 @@ func initOptions() { {Name: "avxifma", Feature: &X86.HasAVXIFMA}, {Name: "avxvnni", Feature: &X86.HasAVXVNNI}, {Name: "avxvnniint8", Feature: &X86.HasAVXVNNIInt8}, + {Name: "xsave", Feature: &X86.HasXSAVE}, // These capabilities should always be enabled on amd64: {Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"}, @@ -83,10 +88,13 @@ func archInit() { cpuid_AVX512VPOPCNTDQ = 1 << 14 cpuid_SSE41 = 1 << 19 cpuid_SSE42 = 1 << 20 + cpuid_MOVBE = 1 << 22 cpuid_POPCNT = 1 << 23 cpuid_AES = 1 << 25 + cpuid_XSAVE = 1 << 26 cpuid_OSXSAVE = 1 << 27 cpuid_AVX = 1 << 28 + cpuid_F16C = 1 << 29 // "Extended Feature Flag" bits returned in EBX for CPUID EAX=0x7 ECX=0x0 cpuid_BMI1 = 1 << 3 @@ -110,6 +118,9 @@ func archInit() { // edx bits cpuid_FSRM = 1 << 4 + // ecx bits for CPUID 0x80000001 + cpuid_LAHF = 1 << 0 + cpuid_LZCNT = 1 << 5 // edx bits for CPUID 0x80000001 cpuid_RDTSCP = 1 << 27 ) @@ -158,9 +169,21 @@ func archInit() { X86.HasSSE42 = isSet(ecx1, cpuid_SSE42) X86.HasPOPCNT = isSet(ecx1, cpuid_POPCNT) X86.HasAES = isSet(ecx1, cpuid_AES) + X86.HasXSAVE = isSet(ecx1, cpuid_XSAVE) X86.HasOSXSAVE = isSet(ecx1, cpuid_OSXSAVE) + X86.HasF16C = isSet(ecx1, cpuid_F16C) + X86.HasMOVBE = isSet(ecx1, cpuid_MOVBE) X86.HasRDRAND = isSet(ecx1, cpuid_RDRAND) + // Extended processor info and feature bits, under the separate extended + // (0x8000_0000-prefixed) leaf hierarchy, so maxID (the basic leaf count) + // doesn't gate it. + if maxExtID, _, _, _ := cpuid(0x80000000, 0); maxExtID >= 0x80000001 { + _, _, ecxExt1, _ := cpuid(0x80000001, 0) + X86.HasLAHF = isSet(ecxExt1, cpuid_LAHF) + X86.HasLZCNT = isSet(ecxExt1, cpuid_LZCNT) + } + var osSupportsAVX, osSupportsAVX512 bool // For XGETBV, OSXSAVE bit is required and sufficient. if X86.HasOSXSAVE { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s index bdfc024d2..2e1f4c3e7 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s @@ -13,6 +13,16 @@ // Just jump to package syscall's implementation for all these functions. // The runtime may know about them. +TEXT ·Syscall(SB),NOSPLIT,$0-56 + MOVD $syscall·Syscall(SB), R31 + MOVD R31, CTR + JMP (CTR) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + MOVD $syscall·Syscall6(SB), R31 + MOVD R31, CTR + JMP (CTR) + TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 BL runtime·entersyscall(SB) MOVD a1+8(FP), R3 @@ -28,6 +38,16 @@ TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 BL runtime·exitsyscall(SB) RET +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + MOVD $syscall·RawSyscall(SB), R31 + MOVD R31, CTR + JMP (CTR) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + MOVD $syscall·RawSyscall6(SB), R31 + MOVD R31, CTR + JMP (CTR) + TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 MOVD a1+8(FP), R3 MOVD a2+16(FP), R4 diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_linux_sparc64.s b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_linux_sparc64.s new file mode 100644 index 000000000..77e1e327e --- /dev/null +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_linux_sparc64.s @@ -0,0 +1,48 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && sparc64 && gc + +#include "textflag.h" + +// +// System calls for sparc64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB), NOSPLIT, $0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB), NOSPLIT, $0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB), NOSPLIT, $0-48 + CALL runtime·entersyscall(SB) + MOVD trap+0(FP), R1 // syscall entry + MOVD a1+8(FP), R8 + MOVD a2+16(FP), R9 + MOVD a3+24(FP), R10 + TA $0x6d + MOVD R8, r1+32(FP) + MOVD R9, r2+40(FP) + CALL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB), NOSPLIT, $0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB), NOSPLIT, $0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB), NOSPLIT, $0-48 + MOVD trap+0(FP), R1 // syscall entry + MOVD a1+8(FP), R8 + MOVD a2+16(FP), R9 + MOVD a3+24(FP), R10 + TA $0x6d + MOVD R8, r1+32(FP) + MOVD R9, r2+40(FP) + RET diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_zos_s390x.s b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_zos_s390x.s index 813dfad7d..980f07a3b 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_zos_s390x.s +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/asm_zos_s390x.s @@ -30,21 +30,8 @@ #define SVC_LOAD BYTE $0x0A; BYTE $0x08 // SVC 08 LOAD #define SVC_DELETE BYTE $0x0A; BYTE $0x09 // SVC 09 DELETE -DATA zosLibVec<>(SB)/8, $0 -GLOBL zosLibVec<>(SB), NOPTR, $8 - -TEXT ·initZosLibVec(SB), NOSPLIT|NOFRAME, $0-0 - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD CAA(R8), R8 - MOVD EDCHPXV(R8), R8 - MOVD R8, zosLibVec<>(SB) - RET - TEXT ·GetZosLibVec(SB), NOSPLIT|NOFRAME, $0-0 - MOVD zosLibVec<>(SB), R8 - MOVD R8, ret+0(FP) - RET + JMP runtime·GetZosLibVec(SB) TEXT ·clearErrno(SB), NOSPLIT, $0-0 BL addrerrno<>(SB) @@ -160,163 +147,13 @@ TEXT ·gettid(SB), NOSPLIT, $0 // errno and errno2 is retrieved // TEXT ·CallLeFuncWithErr(SB), NOSPLIT, $0 - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD CAA(R8), R9 - MOVD g, GOCB(R9) - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address - MOVD 0(R9), R4 // R4-> restore previously saved stack frame pointer - - MOVD parms_base+8(FP), R7 // R7 -> argument array - MOVD parms_len+16(FP), R8 // R8 number of arguments - - // arg 1 ---> R1 - CMP R8, $0 - BEQ docall - SUB $1, R8 - MOVD 0(R7), R1 - - // arg 2 ---> R2 - CMP R8, $0 - BEQ docall - SUB $1, R8 - ADD $8, R7 - MOVD 0(R7), R2 - - // arg 3 --> R3 - CMP R8, $0 - BEQ docall - SUB $1, R8 - ADD $8, R7 - MOVD 0(R7), R3 - - CMP R8, $0 - BEQ docall - MOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument - -repeat: - ADD $8, R7 - MOVD 0(R7), R0 // advance arg pointer by 8 byte - ADD $8, R6 // advance LE argument address by 8 byte - MOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame - SUB $1, R8 - CMP R8, $0 - BNE repeat - -docall: - MOVD funcdesc+0(FP), R8 // R8-> function descriptor - LMG 0(R8), R5, R6 - MOVD $0, 0(R9) // R9 address of SAVSTACK_ASYNC - LE_CALL // balr R7, R6 (return #1) - NOPH - MOVD R3, ret+32(FP) - CMP R3, $-1 // compare result to -1 - BNE done - - // retrieve errno and errno2 - MOVD zosLibVec<>(SB), R8 - ADD $(__errno), R8 - LMG 0(R8), R5, R6 - LE_CALL // balr R7, R6 __errno (return #3) - NOPH - MOVWZ 0(R3), R3 - MOVD R3, err+48(FP) - MOVD zosLibVec<>(SB), R8 - ADD $(__err2ad), R8 - LMG 0(R8), R5, R6 - LE_CALL // balr R7, R6 __err2ad (return #2) - NOPH - MOVW (R3), R2 // retrieve errno2 - MOVD R2, errno2+40(FP) // store in return area - -done: - MOVD R4, 0(R9) // Save stack pointer. - RET - + JMP runtime·CallLeFuncWithErr(SB) // // Call LE function, if the return is 0 // errno and errno2 is retrieved // TEXT ·CallLeFuncWithPtrReturn(SB), NOSPLIT, $0 - MOVW PSALAA, R8 - MOVD LCA64(R8), R8 - MOVD CAA(R8), R9 - MOVD g, GOCB(R9) - - // Restore LE stack. - MOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address - MOVD 0(R9), R4 // R4-> restore previously saved stack frame pointer - - MOVD parms_base+8(FP), R7 // R7 -> argument array - MOVD parms_len+16(FP), R8 // R8 number of arguments - - // arg 1 ---> R1 - CMP R8, $0 - BEQ docall - SUB $1, R8 - MOVD 0(R7), R1 - - // arg 2 ---> R2 - CMP R8, $0 - BEQ docall - SUB $1, R8 - ADD $8, R7 - MOVD 0(R7), R2 - - // arg 3 --> R3 - CMP R8, $0 - BEQ docall - SUB $1, R8 - ADD $8, R7 - MOVD 0(R7), R3 - - CMP R8, $0 - BEQ docall - MOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument - -repeat: - ADD $8, R7 - MOVD 0(R7), R0 // advance arg pointer by 8 byte - ADD $8, R6 // advance LE argument address by 8 byte - MOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame - SUB $1, R8 - CMP R8, $0 - BNE repeat - -docall: - MOVD funcdesc+0(FP), R8 // R8-> function descriptor - LMG 0(R8), R5, R6 - MOVD $0, 0(R9) // R9 address of SAVSTACK_ASYNC - LE_CALL // balr R7, R6 (return #1) - NOPH - MOVD R3, ret+32(FP) - CMP R3, $0 // compare result to 0 - BNE done - - // retrieve errno and errno2 - MOVD zosLibVec<>(SB), R8 - ADD $(__errno), R8 - LMG 0(R8), R5, R6 - LE_CALL // balr R7, R6 __errno (return #3) - NOPH - MOVWZ 0(R3), R3 - MOVD R3, err+48(FP) - MOVD zosLibVec<>(SB), R8 - ADD $(__err2ad), R8 - LMG 0(R8), R5, R6 - LE_CALL // balr R7, R6 __err2ad (return #2) - NOPH - MOVW (R3), R2 // retrieve errno2 - MOVD R2, errno2+40(FP) // store in return area - XOR R2, R2 - MOVWZ R2, (R3) // clear errno2 - -done: - MOVD R4, 0(R9) // Save stack pointer. - RET - + JMP runtime·CallLeFuncWithPtrReturn(SB) // // function to test if a pointer can be safely dereferenced (content read) // return 0 for succces @@ -360,23 +197,4 @@ TEXT ·ptrtest(SB), NOSPLIT, $0-16 // // func safeload(ptr uintptr) ( value uintptr, error uintptr) TEXT ·safeload(SB), NOSPLIT, $0-24 - MOVD ptr+0(FP), R10 // test pointer in R10 - MOVD $0x0, R6 - BYTE $0xE3; BYTE $0x20; BYTE $0x04; BYTE $0xB8; BYTE $0x00; BYTE $0x17 // llgt 2,1208 - BYTE $0xB9; BYTE $0x17; BYTE $0x00; BYTE $0x22 // llgtr 2,2 - BYTE $0xA5; BYTE $0x26; BYTE $0x7F; BYTE $0xFF // nilh 2,32767 - BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x58; BYTE $0x00; BYTE $0x04 // lg 2,88(2) - BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x08; BYTE $0x00; BYTE $0x04 // lg 2,8(2) - BYTE $0x41; BYTE $0x22; BYTE $0x03; BYTE $0x68 // la 2,872(2) - BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x33 // xgr 3,3 - BYTE $0xA7; BYTE $0x55; BYTE $0x00; BYTE $0x04 // bras 5,lbl1 - BYTE $0xA7; BYTE $0x39; BYTE $0x00; BYTE $0x01 // lghi 3,1 - BYTE $0xB9; BYTE $0x02; BYTE $0x00; BYTE $0x33 // lbl1 ltgr 3,3 - BYTE $0xA7; BYTE $0x74; BYTE $0x00; BYTE $0x08 // brc b'0111',lbl2 - BYTE $0xE3; BYTE $0x52; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 5,0(2) - BYTE $0xE3; BYTE $0x6A; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x04 // lg 6,0(10) - BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x99 // lbl2 xgr 9,9 - BYTE $0xE3; BYTE $0x92; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 9,0(2) - MOVD R6, value+8(FP) // result in R6 - MOVD R3, error+16(FP) // error in R3 - RET + JMP runtime·ZosSafeLoad(SB) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/bpxsvc_zos.s b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/bpxsvc_zos.s index 4bd4a1798..1236e1e90 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/bpxsvc_zos.s +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/bpxsvc_zos.s @@ -20,15 +20,15 @@ TEXT ·bpxcall(SB), NOSPLIT|NOFRAME, $0 MOVD plist_base+0(FP), R1 // r1 points to plist MOVD bpx_offset+24(FP), R2 // r2 offset to BPX vector table MOVD R14, R7 // save r14 - MOVD R15, R8 // save r15 - MOVWZ 16(R0), R9 - MOVWZ 544(R9), R9 - MOVWZ 24(R9), R9 // call vector in r9 - ADD R2, R9 // add offset to vector table - MOVWZ (R9), R9 // r9 points to entry point - BYTE $0x0D // BL R14,R9 --> basr r14,r9 - BYTE $0xE9 // clobbers 0,1,14,15 - MOVD R8, R15 // restore 15 + MOVD R15, R9 // save r15 + MOVWZ 16(R0), R15 + MOVWZ 544(R15), R15 + MOVWZ 24(R15), R15 // call vector in r15 + ADD R2, R15 // add offset to vector table + MOVWZ (R15), R15 // r15 points to entry point + BYTE $0x0D // BL R14,R15 --> basr r14,r15 + BYTE $0xEF // clobbers 0,1,14,15 + MOVD R9, R15 // restore 15 JMP R7 // return via saved return address // func A2e(arr [] byte) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/fcntl_darwin.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/fcntl_darwin.go index a9911c7c1..78c28a3dc 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/fcntl_darwin.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/fcntl_darwin.go @@ -13,12 +13,12 @@ func FcntlInt(fd uintptr, cmd, arg int) (int, error) { // FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { - _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk)))) + _, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(lk)) return err } // FcntlFstore performs a fcntl syscall for the F_PREALLOCATE command. func FcntlFstore(fd uintptr, cmd int, fstore *Fstore_t) error { - _, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(fstore)))) + _, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(fstore)) return err } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/mkerrors.sh b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/mkerrors.sh index 9e907ac29..e95eecd53 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -579,7 +579,7 @@ ccflags="$@" $2 ~ /^DIOC/ || $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || - $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || + $2 ~ /^PRIO_(PROCESS|PGRP|USER|DARWIN_(THREAD|PROCESS|BG|NONUI))/ || $2 ~ /^CLONE_[A-Z_]+/ || $2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+|BPF_F_LINK)$/ && $2 ~ /^(BPF|DLT)_/ || diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ptrace_zos.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ptrace_zos.go new file mode 100644 index 000000000..394fbd71b --- /dev/null +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ptrace_zos.go @@ -0,0 +1,537 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build zos + +package unix + +import "unsafe" + +// z/OS ptrace implementation notes: +// +// This file provides ptrace wrappers for z/OS that match the Linux API as closely +// as possible. However, there are fundamental differences in how z/OS implements +// process tracing compared to Linux: +// +// 1. SYSTEM CALL INTERFACE: +// - z/OS uses BPX4PTR (5 parameters) vs Linux ptrace syscall (4 parameters) +// - The 5th parameter (buffer) is used for block operations +// +// 2. MEMORY OPERATIONS: +// - z/OS: PT_READ_BLOCK/PT_WRITE_BLOCK for efficient block transfers +// - Linux: PTRACE_PEEKTEXT/POKETEXT for word-by-word access +// +// 3. REGISTER OPERATIONS: +// - z/OS: PT_READ_GPR/PT_WRITE_GPR with register number for 64-bit values +// - Linux: PTRACE_GETREGSET/SETREGSET with iovec structure +// +// 4. SINGLE-STEPPING: +// - z/OS: No native single-step; requires temporary breakpoints or PER +// - Linux: PTRACE_SINGLESTEP natively supported +// a) Read instruction at current PSW +// b) Calculate next instruction address (handle branches) +// c) Set temporary breakpoint (SVC 144 = 0x0A90) at next address +// d) Continue execution until breakpoint hit +// e) Restore original instruction and adjust PSW +// +// 5. SYSCALL TRACING: +// - z/OS: No PTRACE_SYSCALL equivalent; requires breakpoint-based approach +// - Linux: PTRACE_SYSCALL stops at syscall entry/exit +// a) Identify BPX syscall vector location +// b) Set breakpoints at syscall entry points +// c) Detect BASR instructions calling into syscall vector +// d) Parse arguments from registers before/after syscall +// +// 6. LIMITATIONS: +// - PtraceSetOptions: No equivalent (returns ENOSYS) +// - PtraceGetEventMsg: No equivalent (returns ENOSYS) +// - PtraceSingleStep: Requires complex implementation (returns ENOSYS) +// - PtraceInterrupt: No equivalent (returns ENOSYS) +// - PtracePokeUser: No PT_WRITE_U (returns ENOSYS) +// +// For reference implementations of single-stepping and syscall tracing on z/OS, + +// ptrace is the basic wrapper for BPX4PTR on z/OS. +// Note: z/OS ptrace (BPX4PTR) takes 5 parameters vs 4 on Linux/Darwin. +// The 5th parameter (buffer) is used for operations like PT_READ_BLOCK/PT_WRITE_BLOCK. +// +// data is an integer-valued argument (signal number, register index, byte count, +// or a target-process address). It is not a Go-managed pointer. We must not pass +// it to Bpx4ptr as unsafe.Pointer(data) because the garbage collector would treat +// that integer as a pointer and may crash trying to follow it. +// +// Instead we inline the parms array that Bpx4ptr would construct, placing &data +// at parms[3]. BPX4PTR dereferences parms[3] to obtain the data value, so it +// receives data unchanged while the GC only ever sees a valid stack pointer. +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + req32 := int32(request) + pid32 := int32(pid) + var rv, rc, rn int32 + var buffer unsafe.Pointer + parms := [8]unsafe.Pointer{ + unsafe.Pointer(&req32), + unsafe.Pointer(&pid32), + unsafe.Pointer(&addr), + unsafe.Pointer(&data), // &data, not unsafe.Pointer(data) + unsafe.Pointer(&buffer), + unsafe.Pointer(&rv), + unsafe.Pointer(&rc), + unsafe.Pointer(&rn), + } + bpxcall(parms[:], BPX4PTR) + if rv != 0 { + err = errnoErr2(Errno(rc), uintptr(rn)) + } + return +} + +// ptracePtr is a variant that accepts unsafe.Pointer for the data parameter. +// addr is a target-process address (a raw integer), not a Go-managed pointer. +// We must not pass it to Bpx4ptr as unsafe.Pointer(addr); instead we inline the +// parms array and place &addr at parms[2], exactly as ptrace() does for data. +func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) { + req32 := int32(request) + pid32 := int32(pid) + var rv, rc, rn int32 + var buffer unsafe.Pointer + parms := [8]unsafe.Pointer{ + unsafe.Pointer(&req32), + unsafe.Pointer(&pid32), + unsafe.Pointer(&addr), // &addr, not unsafe.Pointer(addr) + unsafe.Pointer(&data), + unsafe.Pointer(&buffer), + unsafe.Pointer(&rv), + unsafe.Pointer(&rc), + unsafe.Pointer(&rn), + } + bpxcall(parms[:], BPX4PTR) + if rv != 0 { + err = errnoErr2(Errno(rc), uintptr(rn)) + } + return +} + +// ptracePtrWithBuffer is used for operations that require the buffer parameter. +// addr is a target-process address; same &addr treatment as ptracePtr. +func ptracePtrWithBuffer(request int, pid int, addr uintptr, data unsafe.Pointer, buffer unsafe.Pointer) (err error) { + req32 := int32(request) + pid32 := int32(pid) + var rv, rc, rn int32 + parms := [8]unsafe.Pointer{ + unsafe.Pointer(&req32), + unsafe.Pointer(&pid32), + unsafe.Pointer(&addr), // &addr, not unsafe.Pointer(addr) + unsafe.Pointer(&data), + unsafe.Pointer(&buffer), + unsafe.Pointer(&rv), + unsafe.Pointer(&rc), + unsafe.Pointer(&rn), + } + bpxcall(parms[:], BPX4PTR) + if rv != 0 { + err = errnoErr2(Errno(rc), uintptr(rn)) + } + return +} + +// High-level convenience functions matching the Linux/Darwin API + +func PtraceAttach(pid int) (err error) { + return ptrace(PT_ATTACH, pid, 0, 0) +} + +func PtraceDetach(pid int) (err error) { + return ptrace(PT_DETACH, pid, 0, 0) +} + +func PtraceCont(pid int, signal int) (err error) { + // PT_CONTINUE can be interrupted by signals (EINTR), retry if needed + for { + err = ptrace(PT_CONTINUE, pid, 0, uintptr(signal)) + if err != EINTR { + break + } + } + return err +} + +func PtraceKill(pid int) (err error) { + return ptrace(PT_KILL, pid, 0, 0) +} + +// ptracePeek implements the peek operations using PT_READ_BLOCK. +// On z/OS, PT_READ_BLOCK can read arbitrary-length data efficiently. +// Unlike Linux which reads word-by-word, z/OS can read blocks directly. +func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { + if len(out) == 0 { + return 0, nil + } + + // z/OS PT_READ_BLOCK can read blocks directly without word-by-word alignment + // The buffer parameter points to the output buffer + buffer := unsafe.Pointer(&out[0]) + err = ptracePtrWithBuffer(req, pid, addr, unsafe.Pointer(uintptr(len(out))), buffer) + if err != nil { + return 0, err + } + return len(out), nil +} + +// PtracePeekText reads from the traced process's text segment. +func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PT_READ_BLOCK, pid, addr, out) +} + +// PtracePeekData reads from the traced process's data segment. +func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PT_READ_BLOCK, pid, addr, out) +} + +// PtracePeekUser reads from the traced process's user area. +// On z/OS, PT_READ_U reads a 32-bit word from the user area at the specified offset. +// To match Linux behavior, we implement word-by-word reading for arbitrary lengths. +func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) { + if len(out) == 0 { + return 0, nil + } + + // PT_READ_U reads 32-bit words from user area + // We need to read word-by-word to handle arbitrary lengths + n := 0 + for n < len(out) { + var data uint32 + err = ptracePtr(PT_READ_U, pid, addr+uintptr(n), unsafe.Pointer(&data)) + if err != nil { + return n, err + } + + // Copy up to 4 bytes to output + remaining := len(out) - n + if remaining >= 4 { + out[n] = byte(data >> 24) + out[n+1] = byte(data >> 16) + out[n+2] = byte(data >> 8) + out[n+3] = byte(data) + n += 4 + } else { + // Handle partial word at the end + for i := 0; i < remaining; i++ { + out[n+i] = byte(data >> (24 - i*8)) + } + n += remaining + } + } + return n, nil +} + +// ptracePoke implements the poke operations using PT_WRITE_BLOCK. +func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) { + if len(data) == 0 { + return 0, nil + } + + // z/OS PT_WRITE_BLOCK can write blocks directly + buffer := unsafe.Pointer(&data[0]) + err = ptracePtrWithBuffer(pokeReq, pid, addr, unsafe.Pointer(uintptr(len(data))), buffer) + if err != nil { + return 0, err + } + return len(data), nil +} + +// PtracePokeText writes to the traced process's text segment. +func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PT_WRITE_BLOCK, PT_READ_BLOCK, pid, addr, data) +} + +// PtracePokeData writes to the traced process's data segment. +func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PT_WRITE_BLOCK, PT_READ_BLOCK, pid, addr, data) +} + +// PtracePokeUser writes to the traced process's user area. +// Note: z/OS does not have a direct PT_WRITE_U equivalent. +// This function returns ENOSYS to indicate it's not supported. +// DIFFERENCE FROM LINUX: Linux supports PTRACE_POKEUSR, z/OS does not. +func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) { + // z/OS doesn't have PT_WRITE_U + return 0, ENOSYS +} + +// PtraceGetRegs retrieves the general purpose registers from the traced process. +// On z/OS, PT_READ_GPR can read individual registers as 64-bit values when called +// with a register number, or read all registers when called with a buffer. +// This function reads each register individually to ensure full 64-bit values. +// DIFFERENCE FROM LINUX: Linux uses PTRACE_GETREGSET with iovec, z/OS uses PT_READ_GPR. +func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { + // Use PT_REGHSET to enable reading high GPRs for AMODE 64 programs + rv, rc, rn := Bpx4ptr(int32(PT_REGHSET), int32(pid), nil, nil, nil) + _ = rv + _ = rc + _ = rn + + // Use PT_BLOCKREQ to read GPRs and PSW in one call + // dbx uses 3 requests: PT_READ_GPR, PT_READ_U, PT_READ_GPRH + // PT_READ_U is required for ptrace to populate PSW in GPR block + // + // IMPORTANT: z/OS ptrace always returns 64-bit ESA/390 format PSW in the Psw field. + // The 128-bit Pswg field is never populated, even with PSWG_Req bit set. + // We convert ESA/390 to z/Architecture format in software (matching DBX behavior). + const ( + numRequests = 3 + reqSize = int(unsafe.Sizeof(PtraceBlkReqReq{})) + gprSize = int(unsafe.Sizeof(PtraceBlkGpr{})) + uareaSize = int(unsafe.Sizeof(PtraceBlkUar{})) + 6*int(unsafe.Sizeof(PtraceBlkUarOcw{})) + totalSize = int(unsafe.Sizeof(PtraceBlkReq{})) + numRequests*reqSize + gprSize*2 + uareaSize + ) + + // Allocate buffer for block request + buf := make([]byte, totalSize) + + // Setup block request header + blkReq := (*PtraceBlkReq)(unsafe.Pointer(&buf[0])) + blkReq.Numreq = numRequests + + // Setup request array + reqOffset := int(unsafe.Sizeof(PtraceBlkReq{})) + reqs := (*[3]PtraceBlkReqReq)(unsafe.Pointer(&buf[reqOffset])) + + // Setup GPR block (lower 32 bits) + gprOffset := reqOffset + numRequests*reqSize + gprBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprOffset])) + + // Setup user area block (required for PSW) + uareaOffset := gprOffset + gprSize + uareaBlock := (*PtraceBlkUar)(unsafe.Pointer(&buf[uareaOffset])) + uareaBlock.Num = 6 // Number of control info entries + + // Setup user area offset/control words + uareaOcw := (*[6]PtraceBlkUarOcw)(unsafe.Pointer(&buf[uareaOffset+int(unsafe.Sizeof(PtraceBlkUar{}))])) + uareaOcw[0].Ofs = 1025 // program interrupt code + uareaOcw[1].Ofs = 1026 // abend completion code + uareaOcw[2].Ofs = 1027 // abend reason code + uareaOcw[3].Ofs = 1028 // signal code + uareaOcw[4].Ofs = 1029 // instruction length code + uareaOcw[5].Ofs = 1030 // process flags + + // Setup high GPR block (upper 32 bits) + gprHighOffset := uareaOffset + uareaSize + gprHighBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprHighOffset])) + + // Configure requests (order matters: GPR, U, GPRH) + // reqdata contains OFFSET from buffer start, not absolute address + // dbx: brr[0].reqdata=(unsigned long)brg; where brg is the offset + reqs[0].Reqtype = PT_READ_GPR + reqs[0].Reqdata = uint32(gprOffset) + reqs[1].Reqtype = PT_READ_U + reqs[1].Reqdata = uint32(uareaOffset) + reqs[2].Reqtype = PT_READ_GPRH + reqs[2].Reqdata = uint32(gprHighOffset) + + // Execute block request + rvBlk, rcBlk, rnBlk := Bpx4ptr(int32(PT_BLOCKREQ), int32(pid), + unsafe.Pointer(&buf[0]), unsafe.Pointer(uintptr(totalSize)), nil) + if rvBlk == -1 { + return errnoErr2(Errno(rcBlk), uintptr(rnBlk)) + } + + // Extract GPRs (combine low and high 32 bits) + for i := 0; i < 16; i++ { + low := uint64(gprBlock.Gpr[i]) + high := uint64(gprHighBlock.Gpr[i]) << 32 + regsout.Gprs[i] = high | low + } + + // Extract PSW from GPR block structure + // z/OS ptrace ALWAYS returns 8-byte ESA/390 format PSW at offset 144. + // The 16-byte PSWG field at offset 152 is NEVER populated (always zero). + // We must convert ESA/390 format to z/Architecture format in software (like DBX does). + // + // ESA/390 PSW format (8 bytes): + // Word 1 (bytes 0-3): Mask with bit 12 = 1 (ECMODE31BIT) + // Word 2 (bytes 4-7): Address with bit 0 = AMODE bit (1=31-bit, 0=64-bit) + // + // z/Architecture PSW format (16 bytes): + // Mask (bytes 0-7): Extended mask with bit 12 = 0, bits 31-32 = EA+BA (AMODE) + // Addr (bytes 8-15): Full 64-bit instruction address + + // Read ESA/390 PSW as two 32-bit words + pswWord1 := uint32(gprBlock.Psw[0])<<24 | uint32(gprBlock.Psw[1])<<16 | + uint32(gprBlock.Psw[2])<<8 | uint32(gprBlock.Psw[3]) + pswWord2 := uint32(gprBlock.Psw[4])<<24 | uint32(gprBlock.Psw[5])<<16 | + uint32(gprBlock.Psw[6])<<8 | uint32(gprBlock.Psw[7]) + + // Convert ESA/390 to z/Architecture format (matching DBX psw_ESA390_to_zArchitecture) + const ECMODE31BIT = uint64(0x0000000000080000) + const AMODE31BIT = uint64(0x0000000080000000) + const ADDR_MASK_31 = uint64(0x000000007FFFFFFF) + + // Extract AMODE bit from address word (bit 0 of word 2) + amode31 := uint64(pswWord2) & AMODE31BIT + + // Mask off AMODE bit from address + addr := uint64(pswWord2) & ADDR_MASK_31 + + // Convert mask: clear ECMODE31BIT, shift left 32 bits, add AMODE bit + mask := uint64(pswWord1) & ^ECMODE31BIT + mask = (mask << 32) | amode31 + + regsout.Psw.Mask = mask + regsout.Psw.Addr = addr + + // Note: Access registers (Acrs), floating point registers (Fp_regs), + // PER info (Per_info), and other fields would require additional + // PT_READ_* calls. For now, we focus on GPRs and PSW which are + // the most commonly used registers for debugging. + + return nil +} + +// ptraceWritePSW writes only the PSW address register. +// This is a lower-level function used internally for single-stepping. +// Based on ztrace's write_psw function. +func ptraceWritePSW(pid int, pswAddr uint32) error { + const PTRACE_REG_PSWA = 41 + rv, rc, rn := Bpx4ptr(int32(PT_WRITE_GPR), int32(pid), + unsafe.Pointer(uintptr(PTRACE_REG_PSWA)), + unsafe.Pointer(uintptr(pswAddr)), + nil) + if rv == -1 { + return errnoErr2(Errno(rc), uintptr(rn)) + } + return nil +} + +// PtraceSetRegs sets the general purpose registers in the traced process. +// Uses PT_BLOCKREQ to write GPRs and PSW in a single call, matching dbx implementation. +// DIFFERENCE FROM LINUX: Linux uses PTRACE_SETREGSET with iovec, z/OS uses PT_BLOCKREQ. +// NOTE: The process must be in a stopped state for register writes to succeed. +func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { + // Use PT_REGHSET to enable writing high GPRs for AMODE 64 programs + rv, rc, rn := Bpx4ptr(int32(PT_REGHSET), int32(pid), nil, nil, nil) + _ = rv + _ = rc + _ = rn + + // Use PT_BLOCKREQ to write GPRs and PSW in one call + const ( + numRequests = 2 + reqSize = int(unsafe.Sizeof(PtraceBlkReqReq{})) + gprSize = int(unsafe.Sizeof(PtraceBlkGpr{})) + totalSize = int(unsafe.Sizeof(PtraceBlkReq{})) + numRequests*reqSize + gprSize*2 + ) + + // Allocate buffer for block request + buf := make([]byte, totalSize) + + // Setup block request header + blkReq := (*PtraceBlkReq)(unsafe.Pointer(&buf[0])) + blkReq.Numreq = numRequests + + // Setup request array + reqOffset := int(unsafe.Sizeof(PtraceBlkReq{})) + reqs := (*[2]PtraceBlkReqReq)(unsafe.Pointer(&buf[reqOffset])) + + // Setup GPR block (lower 32 bits) + gprOffset := reqOffset + numRequests*reqSize + gprBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprOffset])) + + // Setup high GPR block (upper 32 bits) + gprHighOffset := gprOffset + gprSize + gprHighBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprHighOffset])) + + // Mark all GPRs as modified (set all 16 bits) + gprBlock.Writebitflags = 0xFFFF + gprHighBlock.Writebitflags = 0xFFFF + + // Split 64-bit GPRs into low and high 32 bits + for i := 0; i < 16; i++ { + gprBlock.Gpr[i] = uint32(regs.Gprs[i] & 0xFFFFFFFF) + gprHighBlock.Gpr[i] = uint32(regs.Gprs[i] >> 32) + } + + // Pack PSW for 31-bit targets (current z/OS) + // Upper 32 bits = mask, lower 32 bits = address + gprBlock.Wpsw = 1 // Mark PSW as modified + // Write PSW in old format (8 bytes at offset 144) + // Word 1 (mask) at bytes 0-3, Word 2 (addr) at bytes 4-7 + pswMask := uint32(regs.Psw.Mask) + pswAddr := uint32(regs.Psw.Addr) + gprBlock.Psw[0] = byte(pswMask >> 24) + gprBlock.Psw[1] = byte(pswMask >> 16) + gprBlock.Psw[2] = byte(pswMask >> 8) + gprBlock.Psw[3] = byte(pswMask) + gprBlock.Psw[4] = byte(pswAddr >> 24) + gprBlock.Psw[5] = byte(pswAddr >> 16) + gprBlock.Psw[6] = byte(pswAddr >> 8) + gprBlock.Psw[7] = byte(pswAddr) + + // Clear extended PSWG (not used for 31-bit targets) + for i := 0; i < 16; i++ { + gprBlock.Pswg[i] = 0 + } + + // Configure requests + // reqdata contains OFFSET from buffer start, not absolute address + reqs[0].Reqtype = PT_WRITE_GPR + reqs[0].Reqdata = uint32(gprOffset) + reqs[1].Reqtype = PT_WRITE_GPRH + reqs[1].Reqdata = uint32(gprHighOffset) + + // Execute block request + rvBlk, rcBlk, rnBlk := Bpx4ptr(int32(PT_BLOCKREQ), int32(pid), + unsafe.Pointer(&buf[0]), unsafe.Pointer(uintptr(totalSize)), nil) + if rvBlk == -1 { + return errnoErr2(Errno(rcBlk), uintptr(rnBlk)) + } + + return nil +} + +// PtraceSetOptions sets ptrace options. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_SETOPTIONS equivalent. +// Returns ENOSYS to indicate this is not supported on z/OS. +func PtraceSetOptions(pid int, options int) (err error) { + return ENOSYS +} + +// PtraceGetEventMsg retrieves a message about the ptrace event. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_GETEVENTMSG equivalent. +// Returns ENOSYS to indicate this is not supported on z/OS. +func PtraceGetEventMsg(pid int) (msg uint, err error) { + return 0, ENOSYS +} + +// PtraceSyscall continues execution and stops at the next syscall entry/exit. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_SYSCALL equivalent. +// This function falls back to PT_CONTINUE and will NOT stop at syscalls. +// +// To trace syscalls on z/OS, applications must: +// 1. Set breakpoints at BPX syscall entry points (requires knowledge of syscall vector) +// 2. Detect BASR instructions that call into the BPX syscall vector +// 3. Use PT_LDINFO to identify loaded modules and their entry points +func PtraceSyscall(pid int, signal int) (err error) { + // z/OS doesn't have a direct PTRACE_SYSCALL equivalent + // Use PT_CONTINUE as a fallback (won't stop at syscalls) + return ptrace(PT_CONTINUE, pid, 0, uintptr(signal)) +} + +// Note: PtraceSingleStep is implemented in ptrace_zos_singlestep.go +// with full two-breakpoint emulation for branch instructions. + +// PtraceInterrupt interrupts the traced process. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_INTERRUPT equivalent. +// Returns ENOSYS to indicate this is not supported on z/OS. +func PtraceInterrupt(pid int) (err error) { + return ENOSYS +} + +// PtraceSeize attaches to a process without stopping it. +// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_SEIZE equivalent. +// Uses PT_ATTACH as a fallback, which will stop the process. +func PtraceSeize(pid int) (err error) { + // z/OS doesn't have PTRACE_SEIZE, use PT_ATTACH + // Note: This WILL stop the process, unlike Linux PTRACE_SEIZE + return ptrace(PT_ATTACH, pid, 0, 0) +} diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ptrace_zos_singlestep.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ptrace_zos_singlestep.go new file mode 100644 index 000000000..7d7e2c8d3 --- /dev/null +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ptrace_zos_singlestep.go @@ -0,0 +1,425 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build zos + +package unix + +import ( + "sync" +) + +// Single-stepping emulation for z/OS +// +// z/OS does not have native single-step support like Linux's PTRACE_SINGLESTEP. +// Instead, single-stepping must be emulated using temporary breakpoints. +// +// This file provides a complete implementation of single-step emulation using +// temporary breakpoints at both the sequential next instruction and branch target. + +const ( + // NO_BRANCH_DEST indicates the instruction is not a branch or cannot branch + NO_BRANCH_DEST = 0xFFFFFFFF + + // SVC_144 is the breakpoint instruction (SVC 144 = 0x0A90) + SVC_144 = 0x0A90 + + // Maximum number of temporary breakpoints (one for next PC, one for branch dest) + MAX_TEMP_BREAKPOINTS = 2 + + // S/390 branch instruction opcodes + // RR format (Register-Register) + opBCR = 0x07 // Branch on Condition Register + opBALR = 0x05 // Branch and Link Register + opBASR = 0x0D // Branch and Save Register + opBASSM = 0x0C // Branch and Save and Set Mode + opBSM = 0x0B // Branch and Set Mode + opBCTR = 0x06 // Branch on Count Register + + // RX format (Register-Index-Storage) + opBC = 0x47 // Branch on Condition + opBAL = 0x45 // Branch and Link + opBCT = 0x46 // Branch on Count + opBAS = 0x4D // Branch and Save + + // RS format (Register-Storage) + opBXH = 0x86 // Branch on Index High + opBXLE = 0x87 // Branch on Index Low or Equal + + // Extended branch opcodes + opBA7 = 0xA7 // A7x series (BRC, BRAS, BRCT, BRCTG) + opBC0 = 0xC0 // C0x series (BRASL, BRCL) + opBEC = 0xEC // ECxx series (RIEc format: compare-and-branch) +) + +// tempBreakpoint represents a temporary breakpoint for single-stepping +type tempBreakpoint struct { + address uint64 + originalInsn [8]byte // Save up to 8 bytes (full instruction) + active bool +} + +// singleStepState manages temporary breakpoints for a process +type singleStepState struct { + mu sync.Mutex + breakpoints [MAX_TEMP_BREAKPOINTS]tempBreakpoint +} + +var ( + // Global map of process states (pid -> state) + processStates = make(map[int]*singleStepState) + processStatesMu sync.Mutex +) + +// getProcessState returns or creates the single-step state for a process +func getProcessState(pid int) *singleStepState { + processStatesMu.Lock() + defer processStatesMu.Unlock() + + state, exists := processStates[pid] + if !exists { + state = &singleStepState{} + processStates[pid] = state + } + return state +} + +// cleanupProcessState removes the state for a process (call on detach) +func cleanupProcessState(pid int) { + processStatesMu.Lock() + defer processStatesMu.Unlock() + delete(processStates, pid) +} + +// GetInstructionLength returns the length of an S/390 instruction in bytes. +func GetInstructionLength(firstByte byte) int { + switch (firstByte >> 6) & 0x03 { + case 0x00: + return 2 + case 0x01, 0x02: + return 4 + case 0x03: + return 6 + default: + return 2 + } +} + +// GetNextInstructionAddr returns the address of the next sequential instruction. +func GetNextInstructionAddr(pc uint64, instruction []byte) uint64 { + if len(instruction) < 1 { + return pc + 2 + } + insnLen := GetInstructionLength(instruction[0]) + return pc + uint64(insnLen) +} + +// CalculateBranchDest calculates the destination address for branch instructions. +func CalculateBranchDest(pid int, pc uint64, instruction []byte) uint64 { + if len(instruction) < 6 { + return NO_BRANCH_DEST + } + + inst0_15 := uint16(instruction[0])<<8 | uint16(instruction[1]) + inst16_31 := uint16(instruction[2])<<8 | uint16(instruction[3]) + inst32_47 := uint16(instruction[4])<<8 | uint16(instruction[5]) + opcode := instruction[0] + + var dest uint64 = NO_BRANCH_DEST + + // RR format branches + if opcode == opBCR || opcode == opBALR || opcode == opBASR || + opcode == opBASSM || opcode == opBSM || opcode == opBCTR { + + r2 := int(inst0_15 & 0x0F) + + if opcode == opBCR { + mask := int((inst0_15 >> 4) & 0x0F) + if mask == 0 || r2 == 0 { + return NO_BRANCH_DEST + } + } else { + if r2 == 0 { + return NO_BRANCH_DEST + } + } + + var regs PtraceRegs + if err := PtraceGetRegs(pid, ®s); err == nil { + if r2 >= 0 && r2 < 16 { + regVal := regs.Gprs[r2] + dest = regVal + } + } + } else if opcode == opBC || opcode == opBAL || opcode == opBCT || opcode == opBAS { + // RX format branches + if opcode == opBC { + mask := int((inst0_15 >> 4) & 0x0F) + if mask == 0 { + return NO_BRANCH_DEST + } + } + + index := int(inst0_15 & 0x0F) + base := int((inst16_31 >> 12) & 0x0F) + displacement := uint32(inst16_31 & 0x0FFF) + + var baseVal, indexVal uint64 + var regs PtraceRegs + if err := PtraceGetRegs(pid, ®s); err == nil { + if base != 0 && base < 16 { + baseVal = regs.Gprs[base] + } + if index != 0 && index < 16 { + indexVal = regs.Gprs[index] + } + } + + if base == 0 && index == 0 { + dest = pc + uint64(displacement) + } else { + dest = baseVal + indexVal + uint64(displacement) + } + } else if opcode == opBXH || opcode == opBXLE { + // RS format branches + base := int((inst16_31 >> 12) & 0x0F) + displacement := uint32(inst16_31 & 0x0FFF) + + var baseVal uint64 + var regs PtraceRegs + if err := PtraceGetRegs(pid, ®s); err == nil { + if base != 0 && base < 16 { + baseVal = regs.Gprs[base] + } + } + + dest = baseVal + uint64(displacement) + } else if opcode == opBA7 { + // RI format branches + subOp := int(inst0_15 & 0x0F) + + if subOp < 4 || subOp > 7 { + return NO_BRANCH_DEST + } + + if subOp == 0x04 { + mask := int((inst0_15 >> 4) & 0x0F) + if mask == 0 { + return NO_BRANCH_DEST + } + } + + relDispl := int16(inst16_31) + dest = uint64(int64(pc) + int64(relDispl)*2) + } else if opcode == opBC0 { + // RIL format branches + subOp := int(inst0_15 & 0x0F) + + if subOp == 0x04 || subOp == 0x05 { + if subOp == 0x04 { + mask := int((inst0_15 >> 4) & 0x0F) + if mask == 0 { + return NO_BRANCH_DEST + } + } + + inst16_47 := (uint32(inst16_31) << 16) | uint32(inst32_47) + relDispl4 := int32(inst16_47) + dest = uint64(int64(pc) + int64(relDispl4)*2) + } + } else if opcode == opBEC { + // RIEc format compare-and-branch + subOp := instruction[4] + + isCompareBranch := (subOp >= 0x64 && subOp <= 0x67) || + (subOp >= 0x76 && subOp <= 0x77) || + (subOp >= 0x7C && subOp <= 0x7F) + + if isCompareBranch { + ri4 := int16(inst16_31) + dest = uint64(int64(pc) + int64(ri4)*2) + } + } + + if dest < 0x2000 { + return NO_BRANCH_DEST + } + + return dest +} + +// setTempBreakpoint sets a temporary breakpoint at the specified address +func (s *singleStepState) setTempBreakpoint(pid int, addr uint64) error { + s.mu.Lock() + defer s.mu.Unlock() + + // Find free slot + slot := -1 + for i := 0; i < MAX_TEMP_BREAKPOINTS; i++ { + if !s.breakpoints[i].active { + slot = i + break + } + } + + if slot == -1 { + return ENOMEM // All slots in use + } + + // Read original instruction (up to 8 bytes for safety) + _, err := PtracePeekText(pid, uintptr(addr), s.breakpoints[slot].originalInsn[:]) + if err != nil { + return err + } + + // Write SVC 144 (0x0A90) as breakpoint + svc144 := []byte{0x0A, 0x90} + _, err = PtracePokeText(pid, uintptr(addr), svc144) + if err != nil { + return err + } + + s.breakpoints[slot].address = addr + s.breakpoints[slot].active = true + + return nil +} + +// removeTempBreakpoints removes all active temporary breakpoints +func (s *singleStepState) removeTempBreakpoints(pid int) error { + s.mu.Lock() + defer s.mu.Unlock() + + var lastErr error + for i := 0; i < MAX_TEMP_BREAKPOINTS; i++ { + if !s.breakpoints[i].active { + continue + } + + // Restore original instruction (first 2 bytes are enough for SVC 144) + _, err := PtracePokeText(pid, uintptr(s.breakpoints[i].address), s.breakpoints[i].originalInsn[:2]) + if err != nil { + lastErr = err + } + + s.breakpoints[i].active = false + } + + return lastErr +} + +// isTempBreakpoint checks if an address is a temporary breakpoint +func (s *singleStepState) isTempBreakpoint(addr uint64) bool { + s.mu.Lock() + defer s.mu.Unlock() + + for i := 0; i < MAX_TEMP_BREAKPOINTS; i++ { + if s.breakpoints[i].active && s.breakpoints[i].address == addr { + return true + } + } + return false +} + +// PtraceSingleStep executes a single instruction using temporary breakpoints. +// +// This function: +// 1. Reads the current instruction at PSW +// 2. Calculates the next instruction address (sequential) +// 3. If branch instruction, calculates branch destination +// 4. Sets temporary breakpoints at both addresses +// 5. Continues execution until breakpoint hit +// 6. Restores original instructions and adjusts PSW +// +// Returns nil on success, error on failure. +func PtraceSingleStep(pid int) error { + state := getProcessState(pid) + + // 1. Get current PSW + var regs PtraceRegs + if err := PtraceGetRegs(pid, ®s); err != nil { + return err + } + pc := regs.Psw.Addr + + // 2. Read instruction at PC + insn := make([]byte, 8) + if _, err := PtracePeekText(pid, uintptr(pc), insn); err != nil { + return err + } + + // 3. Calculate next instruction addresses + nextPC := GetNextInstructionAddr(pc, insn) + branchDest := CalculateBranchDest(pid, pc, insn) + + // 4. Set temporary breakpoints + if err := state.setTempBreakpoint(pid, nextPC); err != nil { + return err + } + + // If branch instruction, set breakpoint at branch destination too + if branchDest != NO_BRANCH_DEST && branchDest != nextPC { + if err := state.setTempBreakpoint(pid, branchDest); err != nil { + state.removeTempBreakpoints(pid) // Cleanup first breakpoint + return err + } + } + + // 5. Continue execution + if err := PtraceCont(pid, 0); err != nil { + state.removeTempBreakpoints(pid) + return err + } + + // 6. Wait for breakpoint hit (retry on EINTR) + var status WaitStatus + for { + _, err := Wait4(pid, &status, 0, nil) + if err == EINTR { + continue // Retry on interrupted system call + } + if err != nil { + state.removeTempBreakpoints(pid) + return err + } + break + } + + // Check if process stopped (should be at breakpoint) + if !status.Stopped() { + state.removeTempBreakpoints(pid) + return ECHILD // Process exited or error + } + + // 7. Get current PSW (should be at breakpoint + 2) + if err := PtraceGetRegs(pid, ®s); err != nil { + state.removeTempBreakpoints(pid) + return err + } + + // 8. Remove temporary breakpoints + if err := state.removeTempBreakpoints(pid); err != nil { + return err + } + + // 9. Back up PSW by 2 bytes (to point at original instruction, not SVC 144) + // Use direct PSW write like ztrace does, not full register set + hitAddr := regs.Psw.Addr + if state.isTempBreakpoint(hitAddr - 2) { + if err := ptraceWritePSW(pid, uint32(hitAddr-2)); err != nil { + return err + } + } + + return nil +} + +// PtraceDetachWithCleanup detaches from a process and cleans up single-step state. +// Use this instead of PtraceDetach when using PtraceSingleStep. +func PtraceDetachWithCleanup(pid int) error { + state := getProcessState(pid) + state.removeTempBreakpoints(pid) + cleanupProcessState(pid) + return PtraceDetach(pid) +} diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_darwin.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_darwin.go index 38590ca81..cb9d0a181 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -369,6 +369,7 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) { */ //sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) = SYS_FCNTL //sys kill(pid int, signum int, posix int) (err error) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_freebsd.go index 2b57e0f73..495188996 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_freebsd.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -369,6 +369,15 @@ func Dup3(oldfd, newfd, flags int) error { //sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) //sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) //sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fchdir(fd int) (err error) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_linux.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_linux.go index 6926057e9..a31e2c71a 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -1991,7 +1991,24 @@ func FsconfigReconfigure(fd int) (err error) { return fsconfig(fd, FSCONFIG_CMD_RECONFIGURE, nil, nil, 0) } -//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 +//sys getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 + +// Getdents reads directory entries from fd into buf. +func Getdents(fd int, buf []byte) (n int, err error) { + // getdents64 stores d_ino with a 64-bit write, which faults on + // strict-alignment targets unless buf is 8-aligned. + if len(buf) > 0 { + if off := int(-uintptr(unsafe.Pointer(&buf[0])) & 7); off > 0 && off < len(buf) { + n, err = getdents(fd, buf[off:]) + if n > 0 { + copy(buf, buf[off:off+n]) + } + return n, err + } + } + return getdents(fd, buf) +} + //sysnb Getpgid(pid int) (pgid int, err error) func Getpgrp() (pid int) { @@ -2033,6 +2050,7 @@ func Getrandom(buf []byte, flags int) (n int, err error) { //sysnb Kill(pid int, sig syscall.Signal) (err error) //sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG //sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error) +//sys Listns(req *NsIdReq, nsIds []uint64, flags uint) (n int, err error) //sys Listxattr(path string, dest []byte) (sz int, err error) //sys Llistxattr(path string, dest []byte) (sz int, err error) //sys Lremovexattr(path string, attr string) (err error) @@ -2046,6 +2064,7 @@ func Getrandom(buf []byte, flags int) (n int, err error) { //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) +//sys PrctlArg5Ptr(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 unsafe.Pointer) (err error) = SYS_PRCTL //sys pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) //sys read(fd int, p []byte) (n int, err error) //sys Removexattr(path string, attr string) (err error) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go index 4964119af..cd50715c9 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -8,7 +8,7 @@ package unix //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 //sys Fchown(fd int, uid int, gid int) (err error) -//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 //sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 //sys Fstatfs(fd int, buf *Statfs_t) (err error) //sys Ftruncate(fd int, length int64) (err error) @@ -19,7 +19,7 @@ package unix //sysnb Getuid() (uid int) //sys Lchown(path string, uid int, gid int) (err error) //sys Listen(s int, n int) (err error) -//sys Lstat(path string, stat *Stat_t) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 //sys Pause() (err error) //sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 //sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 @@ -31,7 +31,7 @@ package unix //sys setfsuid(uid int) (prev int, err error) //sys Shutdown(fd int, how int) (err error) //sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) -//sys Stat(path string, stat *Stat_t) (err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 //sys Statfs(path string, buf *Statfs_t) (err error) //sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) //sys Truncate(path string, length int64) (err error) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 34a467697..c8badc54c 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -293,6 +293,15 @@ func Getvfsstat(buf []Statvfs_t, flags int) (n int, err error) { //sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) //sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) //sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) +//sys extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) //sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) //sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE //sys Fchdir(fd int) (err error) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_unix_gc.go index 05c95bccf..60c0d16cf 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_unix_gc.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_unix_gc.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (darwin || dragonfly || freebsd || (linux && !ppc64 && !ppc64le) || netbsd || openbsd || solaris) && gc +//go:build (darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris) && gc package unix diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go deleted file mode 100644 index 23f39b7af..000000000 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_unix_gc_ppc64x.go +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build linux && (ppc64le || ppc64) && gc - -package unix - -import "syscall" - -func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.Syscall(trap, a1, a2, a3) -} -func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6) -} -func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.RawSyscall(trap, a1, a2, a3) -} -func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { - return syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6) -} diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index 7bf5c04bb..edabb6892 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -27,14 +27,10 @@ import ( "unsafe" ) -//go:noescape -func initZosLibVec() - //go:noescape func GetZosLibVec() uintptr func init() { - initZosLibVec() r0, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS_____GETENV_A<<4, uintptr(unsafe.Pointer(&([]byte("__ZOS_XSYSTRACE\x00"))[0]))) if r0 != 0 { n, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___ATOI_A<<4, r0) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/xattr_bsd.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/xattr_bsd.go index e16879396..d3d12c27c 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/xattr_bsd.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/xattr_bsd.go @@ -56,7 +56,7 @@ func Getxattr(file string, attr string, dest []byte) (sz int, err error) { return -1, err } - return ExtattrGetFile(file, nsid, a, uintptr(d), destsize) + return extattrGetFile(file, nsid, a, d, destsize) } func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { @@ -68,7 +68,7 @@ func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { return -1, err } - return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize) + return extattrGetFd(fd, nsid, a, d, destsize) } func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { @@ -80,7 +80,7 @@ func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { return -1, err } - return ExtattrGetLink(link, nsid, a, uintptr(d), destsize) + return extattrGetLink(link, nsid, a, d, destsize) } // flags are unused on FreeBSD @@ -97,7 +97,7 @@ func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { return } - _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz) + _, err = extattrSetFd(fd, nsid, a, d, datasiz) return } @@ -113,7 +113,7 @@ func Setxattr(file string, attr string, data []byte, flags int) (err error) { return } - _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz) + _, err = extattrSetFile(file, nsid, a, d, datasiz) return } @@ -129,7 +129,7 @@ func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { return } - _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz) + _, err = extattrSetLink(link, nsid, a, d, datasiz) return } @@ -199,9 +199,9 @@ func ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) { d := initxattrdest(dest, 0) destsiz := len(dest) - s, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) + s, e := extattrListFile(file, nsid, d, destsiz) if e != nil { - return 0, err + return 0, e } return s, nil @@ -235,9 +235,9 @@ func FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) { d := initxattrdest(dest, 0) destsiz := len(dest) - s, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) + s, e := extattrListFd(fd, nsid, d, destsiz) if e != nil { - return 0, err + return 0, e } return s, nil @@ -271,9 +271,9 @@ func LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) { d := initxattrdest(dest, 0) destsiz := len(dest) - s, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) + s, e := extattrListLink(link, nsid, d, destsiz) if e != nil { - return 0, err + return 0, e } return s, nil diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index d73c4652e..01a395332 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -1128,6 +1128,7 @@ const ( O_DSYNC = 0x400000 O_EVTONLY = 0x8000 O_EXCL = 0x800 + O_EXEC = 0x40000000 O_EXLOCK = 0x20 O_FSYNC = 0x80 O_NDELAY = 0x4 @@ -1138,6 +1139,7 @@ const ( O_POPUP = 0x80000000 O_RDONLY = 0x0 O_RDWR = 0x2 + O_SEARCH = 0x40100000 O_SHLOCK = 0x10 O_SYMLINK = 0x200000 O_SYNC = 0x80 @@ -1147,6 +1149,10 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PRIO_DARWIN_BG = 0x1000 + PRIO_DARWIN_NONUI = 0x1001 + PRIO_DARWIN_PROCESS = 0x4 + PRIO_DARWIN_THREAD = 0x3 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index 4a55a4005..d80b95f6b 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -1128,6 +1128,7 @@ const ( O_DSYNC = 0x400000 O_EVTONLY = 0x8000 O_EXCL = 0x800 + O_EXEC = 0x40000000 O_EXLOCK = 0x20 O_FSYNC = 0x80 O_NDELAY = 0x4 @@ -1138,6 +1139,7 @@ const ( O_POPUP = 0x80000000 O_RDONLY = 0x0 O_RDWR = 0x2 + O_SEARCH = 0x40100000 O_SHLOCK = 0x10 O_SYMLINK = 0x200000 O_SYNC = 0x80 @@ -1147,6 +1149,10 @@ const ( PARMRK = 0x8 PARODD = 0x2000 PENDIN = 0x20000000 + PRIO_DARWIN_BG = 0x1000 + PRIO_DARWIN_NONUI = 0x1001 + PRIO_DARWIN_PROCESS = 0x4 + PRIO_DARWIN_THREAD = 0x3 PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux.go index 45feb1245..aa68cb8d0 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -752,10 +752,12 @@ const ( CLONE_ARGS_SIZE_VER0 = 0x40 CLONE_ARGS_SIZE_VER1 = 0x50 CLONE_ARGS_SIZE_VER2 = 0x58 + CLONE_AUTOREAP = 0x400000000 CLONE_CHILD_CLEARTID = 0x200000 CLONE_CHILD_SETTID = 0x1000000 CLONE_CLEAR_SIGHAND = 0x100000000 CLONE_DETACHED = 0x400000 + CLONE_EMPTY_MNTNS = 0x2000000000 CLONE_FILES = 0x400 CLONE_FS = 0x200 CLONE_INTO_CGROUP = 0x200000000 @@ -768,9 +770,11 @@ const ( CLONE_NEWTIME = 0x80 CLONE_NEWUSER = 0x10000000 CLONE_NEWUTS = 0x4000000 + CLONE_NNP = 0x800000000 CLONE_PARENT = 0x8000 CLONE_PARENT_SETTID = 0x100000 CLONE_PIDFD = 0x1000 + CLONE_PIDFD_AUTOKILL = 0x1000000000 CLONE_PTRACE = 0x2000 CLONE_SETTLS = 0x80000 CLONE_SIGHAND = 0x800 @@ -803,12 +807,15 @@ const ( DEVLINK_GENL_MCGRP_CONFIG_NAME = "config" DEVLINK_GENL_NAME = "devlink" DEVLINK_GENL_VERSION = 0x1 + DEVLINK_INDEX_BUS_NAME = "devlink_index" DEVLINK_PORT_FN_CAP_IPSEC_CRYPTO = 0x4 DEVLINK_PORT_FN_CAP_IPSEC_PACKET = 0x8 DEVLINK_PORT_FN_CAP_MIGRATABLE = 0x2 DEVLINK_PORT_FN_CAP_ROCE = 0x1 DEVLINK_RATE_TCS_MAX = 0x8 DEVLINK_RATE_TC_INDEX_MAX = 0x7 + DEVLINK_RESOURCE_SCOPE_DEV = 0x1 + DEVLINK_RESOURCE_SCOPE_PORT = 0x2 DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14 DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS = 0x3 DEVMEM_MAGIC = 0x454d444d @@ -1127,6 +1134,7 @@ const ( ETHTOOL_SWOL = 0x6 ETHTOOL_TEST = 0x1a ETH_P_1588 = 0x88f7 + ETH_P_8021AC = 0x8870 ETH_P_8021AD = 0x88a8 ETH_P_8021AH = 0x88e7 ETH_P_8021Q = 0x8100 @@ -1170,6 +1178,7 @@ const ( ETH_P_ETHERCAT = 0x88a4 ETH_P_FCOE = 0x8906 ETH_P_FIP = 0x8914 + ETH_P_GRE_OSI = 0xfe ETH_P_HDLC = 0x19 ETH_P_HSR = 0x892f ETH_P_IBOE = 0x8915 @@ -1198,6 +1207,7 @@ const ( ETH_P_MXLGSW = 0x88c3 ETH_P_NCSI = 0x88f8 ETH_P_NSH = 0x894f + ETH_P_NXP_NETC = 0xfd3a ETH_P_PAE = 0x888e ETH_P_PAUSE = 0x8808 ETH_P_PHONET = 0xf5 @@ -1359,6 +1369,7 @@ const ( FAN_UNLIMITED_MARKS = 0x20 FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 + FD_NSFS_ROOT = -0x2713 FD_PIDFS_ROOT = -0x2712 FD_SETSIZE = 0x400 FF0 = 0x0 @@ -1427,6 +1438,8 @@ const ( FS_POLICY_FLAGS_PAD_8 = 0x1 FS_POLICY_FLAGS_PAD_MASK = 0x3 FS_POLICY_FLAGS_VALID = 0x7 + FS_SHUTDOWN_FLAGS_LOGFLUSH = 0x1 + FS_SHUTDOWN_FLAGS_NOLOGFLUSH = 0x2 FS_VERITY_FL = 0x100000 FS_VERITY_HASH_ALG_SHA256 = 0x1 FS_VERITY_HASH_ALG_SHA512 = 0x2 @@ -1441,6 +1454,7 @@ const ( F_DUPFD_CLOEXEC = 0x406 F_DUPFD_QUERY = 0x403 F_EXLCK = 0x4 + F_GETDELEG = 0x40f F_GETFD = 0x1 F_GETFL = 0x3 F_GETLEASE = 0x401 @@ -1462,6 +1476,7 @@ const ( F_SEAL_SEAL = 0x1 F_SEAL_SHRINK = 0x2 F_SEAL_WRITE = 0x8 + F_SETDELEG = 0x410 F_SETFD = 0x2 F_SETFL = 0x4 F_SETLEASE = 0x400 @@ -1632,6 +1647,7 @@ const ( IN_UNMOUNT = 0x2000 IOCTL_MEI_CONNECT_CLIENT = 0xc0104801 IOCTL_MEI_CONNECT_CLIENT_VTAG = 0xc0144804 + IPPROTO_AGGFRAG = 0x90 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -1913,10 +1929,14 @@ const ( LANDLOCK_ACCESS_FS_REFER = 0x2000 LANDLOCK_ACCESS_FS_REMOVE_DIR = 0x10 LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20 + LANDLOCK_ACCESS_FS_RESOLVE_UNIX = 0x10000 LANDLOCK_ACCESS_FS_TRUNCATE = 0x4000 LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 LANDLOCK_ACCESS_NET_BIND_TCP = 0x1 + LANDLOCK_ACCESS_NET_BIND_UDP = 0x4 + LANDLOCK_ACCESS_NET_CONNECT_SEND_UDP = 0x8 LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2 + LANDLOCK_ADD_RULE_QUIET = 0x1 LANDLOCK_CREATE_RULESET_ERRATA = 0x2 LANDLOCK_CREATE_RULESET_VERSION = 0x1 LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON = 0x2 @@ -3408,6 +3428,7 @@ const ( SCHED_FLAG_UTIL_CLAMP = 0x60 SCHED_FLAG_UTIL_CLAMP_MAX = 0x40 SCHED_FLAG_UTIL_CLAMP_MIN = 0x20 + SCHED_GETATTR_FLAG_DL_DYNAMIC = 0x1 SCHED_IDLE = 0x5 SCHED_NORMAL = 0x0 SCHED_RESET_ON_FORK = 0x40000000 @@ -3790,6 +3811,14 @@ const ( TCPOPT_TIMESTAMP = 0x8 TCPOPT_TSTAMP_HDR = 0x101080a TCPOPT_WINDOW = 0x3 + TCP_ACCECN_ACE_FAIL_RECV = 0x2 + TCP_ACCECN_ACE_FAIL_SEND = 0x1 + TCP_ACCECN_OPT_COUNTER_SEEN = 0x2 + TCP_ACCECN_OPT_EMPTY_SEEN = 0x1 + TCP_ACCECN_OPT_FAIL_RECV = 0x8 + TCP_ACCECN_OPT_FAIL_SEEN = 0x3 + TCP_ACCECN_OPT_FAIL_SEND = 0x4 + TCP_ACCECN_OPT_NOT_SEEN = 0x0 TCP_AO_KEYF_EXCLUDE_OPT = 0x2 TCP_AO_KEYF_IFINDEX = 0x1 TCP_AO_MAXKEYLEN = 0x50 @@ -3804,6 +3833,7 @@ const ( TCP_COOKIE_TRANSACTIONS = 0xf TCP_CORK = 0x3 TCP_DEFER_ACCEPT = 0x9 + TCP_DELACK_MAX_US = 0x2e TCP_FASTOPEN = 0x17 TCP_FASTOPEN_CONNECT = 0x1e TCP_FASTOPEN_KEY = 0x21 @@ -3836,6 +3866,8 @@ const ( TCP_REPAIR_OPTIONS = 0x16 TCP_REPAIR_QUEUE = 0x14 TCP_REPAIR_WINDOW = 0x1d + TCP_RTO_MAX_MS = 0x2c + TCP_RTO_MIN_US = 0x2d TCP_SAVED_SYN = 0x1c TCP_SAVE_SYN = 0x1b TCP_SYNCNT = 0x7 diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 6f74d4a0c..5aaf4bc7a 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -600,6 +600,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -840,6 +841,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 36c1f0b68..b8e6287a1 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -600,6 +600,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -840,6 +841,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index c5512dbea..464f82189 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -605,6 +605,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -845,6 +846,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 4dabfae07..735265b62 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -602,6 +602,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -842,6 +843,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index ea97930f1..1970ce826 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -592,6 +592,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -832,6 +833,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 0826a929e..56de9aeb2 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -601,6 +601,7 @@ const ( EDQUOT = syscall.Errno(0x46d) EFSBADCRC = syscall.Errno(0x4d) EFSCORRUPTED = syscall.Errno(0x87) + EFTYPE = syscall.Errno(0xa9) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -845,6 +846,7 @@ var errorList = [...]struct { {166, "ENOTRECOVERABLE", "state not recoverable"}, {167, "ERFKILL", "operation not possible due to RF-kill"}, {168, "EHWPOISON", "memory page has hardware error"}, + {169, "EFTYPE", "unknown error 169"}, {1133, "EDQUOT", "disk quota exceeded"}, } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 139deedd9..26ca1caca 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -601,6 +601,7 @@ const ( EDQUOT = syscall.Errno(0x46d) EFSBADCRC = syscall.Errno(0x4d) EFSCORRUPTED = syscall.Errno(0x87) + EFTYPE = syscall.Errno(0xa9) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -845,6 +846,7 @@ var errorList = [...]struct { {166, "ENOTRECOVERABLE", "state not recoverable"}, {167, "ERFKILL", "operation not possible due to RF-kill"}, {168, "EHWPOISON", "memory page has hardware error"}, + {169, "EFTYPE", "unknown error 169"}, {1133, "EDQUOT", "disk quota exceeded"}, } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index b8018af33..b19df2348 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -601,6 +601,7 @@ const ( EDQUOT = syscall.Errno(0x46d) EFSBADCRC = syscall.Errno(0x4d) EFSCORRUPTED = syscall.Errno(0x87) + EFTYPE = syscall.Errno(0xa9) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -845,6 +846,7 @@ var errorList = [...]struct { {166, "ENOTRECOVERABLE", "state not recoverable"}, {167, "ERFKILL", "operation not possible due to RF-kill"}, {168, "EHWPOISON", "memory page has hardware error"}, + {169, "EFTYPE", "unknown error 169"}, {1133, "EDQUOT", "disk quota exceeded"}, } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index deb5c2e6a..9ba3c9509 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -601,6 +601,7 @@ const ( EDQUOT = syscall.Errno(0x46d) EFSBADCRC = syscall.Errno(0x4d) EFSCORRUPTED = syscall.Errno(0x87) + EFTYPE = syscall.Errno(0xa9) EHOSTDOWN = syscall.Errno(0x93) EHOSTUNREACH = syscall.Errno(0x94) EHWPOISON = syscall.Errno(0xa8) @@ -845,6 +846,7 @@ var errorList = [...]struct { {166, "ENOTRECOVERABLE", "state not recoverable"}, {167, "ERFKILL", "operation not possible due to RF-kill"}, {168, "EHWPOISON", "memory page has hardware error"}, + {169, "EFTYPE", "unknown error 169"}, {1133, "EDQUOT", "disk quota exceeded"}, } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 0603bf3a1..62da59f96 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -657,6 +657,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -898,6 +899,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 5fa8a5d36..d18d4daed 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -661,6 +661,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -902,6 +903,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index 2733e9993..ba7767db5 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -661,6 +661,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -902,6 +903,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 1470172fd..76cb22111 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -602,6 +602,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -842,6 +843,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 1871579c5..ffd12a97f 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -661,6 +661,7 @@ const ( EDQUOT = syscall.Errno(0x7a) EFSBADCRC = syscall.Errno(0x4a) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x86) EHOSTDOWN = syscall.Errno(0x70) EHOSTUNREACH = syscall.Errno(0x71) EHWPOISON = syscall.Errno(0x85) @@ -901,6 +902,7 @@ var errorList = [...]struct { {131, "ENOTRECOVERABLE", "state not recoverable"}, {132, "ERFKILL", "operation not possible due to RF-kill"}, {133, "EHWPOISON", "memory page has hardware error"}, + {134, "EFTYPE", "unknown error 134"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index 10881cf6d..f372aed32 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -704,6 +704,7 @@ const ( EDQUOT = syscall.Errno(0x45) EFSBADCRC = syscall.Errno(0x4c) EFSCORRUPTED = syscall.Errno(0x75) + EFTYPE = syscall.Errno(0x88) EHOSTDOWN = syscall.Errno(0x40) EHOSTUNREACH = syscall.Errno(0x41) EHWPOISON = syscall.Errno(0x87) @@ -950,6 +951,7 @@ var errorList = [...]struct { {133, "ENOTRECOVERABLE", "state not recoverable"}, {134, "ERFKILL", "operation not possible due to RF-kill"}, {135, "EHWPOISON", "memory page has hardware error"}, + {136, "EFTYPE", "unknown error 136"}, } // Signal table diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 813c05b66..7db9bf5f2 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -702,6 +702,17 @@ var libc_fcntl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func kill(pid int, signum int, posix int) (err error) { _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) if e1 != 0 { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index e6f58f3c6..2a658059d 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -702,6 +702,17 @@ var libc_fcntl_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) { + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func kill(pid int, signum int, posix int) (err error) { _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) if e1 != 0 { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go index c0096391a..10b57ffb9 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) if e1 != 0 { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go index 7664df749..6a6fc3cc4 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go index ae099182c..4a15b4abf 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) if e1 != 0 { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go index 11fd5d45b..f15331fb4 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm64.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go index c3d2d6530..faa562642 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_freebsd_riscv64.go @@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fadvise(fd int, offset int64, length int64, advice int) (err error) { _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) if e1 != 0 { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 5788c2a58..4c63b976b 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -943,7 +943,7 @@ func fsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getdents(fd int, buf []byte) (n int, err error) { +func getdents(fd int, buf []byte) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { _p0 = unsafe.Pointer(&buf[0]) @@ -1167,6 +1167,23 @@ func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Listns(req *NsIdReq, nsIds []uint64, flags uint) (n int, err error) { + var _p0 unsafe.Pointer + if len(nsIds) > 0 { + _p0 = unsafe.Pointer(&nsIds[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LISTNS, uintptr(unsafe.Pointer(req)), uintptr(_p0), uintptr(len(nsIds)), uintptr(flags), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Listxattr(path string, dest []byte) (sz int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) @@ -1390,6 +1407,16 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func PrctlArg5Ptr(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 unsafe.Pointer) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) { r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) n = int(r0) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go index 527637623..b7aca5459 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -66,7 +66,7 @@ func Fchown(fd int, uid int, gid int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -183,7 +183,7 @@ func Lstat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } @@ -338,7 +338,7 @@ func Stat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go index e91ebc14a..1e136d12b 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go index be28babbc..440db6ec5 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go index fb587e826..db963000e 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go index d576438bb..c4bea6c89 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm64.go @@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) ( // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go index 5e8c263ca..f09f84478 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/zsysnum_zos_s390x.go @@ -2848,5 +2848,18 @@ const ( SYS_____CHATTRAT64_A = 0xE39 // 3641 SYS_MADVISE = 0xE3A // 3642 SYS___AUTHENTICATE = 0xE3B // 3643 + SYS_GETPWENT_R = 0xE3C // 3644 + SYS___GETPWENT_R_A = 0xE3D // 3645 + SYS_STRNLEN = 0xE3E // 3646 + SYS_STPCPY = 0xE3F // 3647 + SYS_STPNCPY = 0xE40 // 3648 + SYS_STRSIGNAL = 0xE41 // 3649 + SYS_WCPCPY = 0xE42 // 3650 + SYS_WCPNCPY = 0xE43 // 3651 + SYS_WCSNLEN = 0xE44 // 3652 + SYS___STRSIGNAL_A = 0xE45 // 3653 + SYS_FDOPENDIR = 0xE46 // 3654 + SYS_FDCLOSEDIR = 0xE47 // 3655 + SYS_SYSCALL = 0xE48 // 3656 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux.go index 538a18f27..2b3c00b9d 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -933,6 +933,29 @@ type OpenHow struct { const SizeofOpenHow = 0x18 +type NsIdReq struct { + Size uint32 + Spare uint32 + Ns_id uint64 + Ns_type uint32 + Spare2 uint32 + User_ns_id uint64 +} + +const ( + NS_ID_REQ_SIZE_VER0 = 0x20 + LISTNS_CURRENT_USER = 0xffffffffffffffff + + TIME_NS = 0x80 + MNT_NS = 0x20000 + CGROUP_NS = 0x2000000 + UTS_NS = 0x4000000 + IPC_NS = 0x8000000 + USER_NS = 0x10000000 + PID_NS = 0x20000000 + NET_NS = 0x40000000 +) + const ( RESOLVE_BENEATH = 0x8 RESOLVE_IN_ROOT = 0x10 @@ -3579,7 +3602,7 @@ const ( DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 0xae DEVLINK_ATTR_NESTED_DEVLINK = 0xaf DEVLINK_ATTR_SELFTESTS = 0xb0 - DEVLINK_ATTR_MAX = 0xb7 + DEVLINK_ATTR_MAX = 0xb9 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0 DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1 DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0 @@ -4101,7 +4124,7 @@ const ( ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 - ETHTOOL_A_COALESCE_MAX = 0x1e + ETHTOOL_A_COALESCE_MAX = 0x20 ETHTOOL_A_PAUSE_UNSPEC = 0x0 ETHTOOL_A_PAUSE_HEADER = 0x1 ETHTOOL_A_PAUSE_AUTONEG = 0x2 @@ -4113,7 +4136,7 @@ const ( ETHTOOL_A_PAUSE_STAT_PAD = 0x1 ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2 ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 0x3 - ETHTOOL_A_PAUSE_STAT_MAX = 0x3 + ETHTOOL_A_PAUSE_STAT_MAX = 0x4 ETHTOOL_A_EEE_UNSPEC = 0x0 ETHTOOL_A_EEE_HEADER = 0x1 ETHTOOL_A_EEE_MODES_OURS = 0x2 @@ -4537,9 +4560,12 @@ const ( ) type LandlockRulesetAttr struct { - Access_fs uint64 - Access_net uint64 - Scoped uint64 + Handled_access_fs uint64 + Handled_access_net uint64 + Scoped uint64 + Quiet_access_fs uint64 + Quiet_access_net uint64 + Quiet_scoped uint64 } type LandlockPathBeneathAttr struct { @@ -4569,28 +4595,31 @@ const ( PIDFD_COREDUMP_USER = 0x4 PIDFD_COREDUMP_ROOT = 0x8 PIDFD_INFO_SIZE_VER0 = 0x40 - PIDFD_GET_INFO = 0xc048ff0b + PIDFD_GET_INFO = 0xc058ff0b ) -const SizeofPidfdInfo = 0x48 +const SizeofPidfdInfo = 0x58 type PidfdInfo struct { - Mask uint64 - Cgroupid uint64 - Pid uint32 - Tgid uint32 - Ppid uint32 - Ruid uint32 - Rgid uint32 - Euid uint32 - Egid uint32 - Suid uint32 - Sgid uint32 - Fsuid uint32 - Fsgid uint32 - Exit_code int32 - Coredump_mask uint32 - _ uint32 + Mask uint64 + Cgroupid uint64 + Pid uint32 + Tgid uint32 + Ppid uint32 + Ruid uint32 + Rgid uint32 + Euid uint32 + Egid uint32 + Suid uint32 + Sgid uint32 + Fsuid uint32 + Fsgid uint32 + Exit_code int32 + Coredump_mask uint32 + Coredump_signal uint32 + Coredump_code uint32 + Coredump_pad uint32 + Supported_mask uint64 } const ( @@ -4932,7 +4961,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x15c + NL80211_ATTR_MAX = 0x16e NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_HW_TIMESTAMP_PEERS = 0x143 @@ -5147,12 +5176,12 @@ const ( NL80211_ATTR_WOWLAN_TRIGGERS = 0x75 NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED = 0x76 NL80211_ATTR_WPA_VERSIONS = 0x4b - NL80211_AUTHTYPE_AUTOMATIC = 0x9 + NL80211_AUTHTYPE_AUTOMATIC = 0xa NL80211_AUTHTYPE_FILS_PK = 0x7 NL80211_AUTHTYPE_FILS_SK = 0x5 NL80211_AUTHTYPE_FILS_SK_PFS = 0x6 NL80211_AUTHTYPE_FT = 0x2 - NL80211_AUTHTYPE_MAX = 0x8 + NL80211_AUTHTYPE_MAX = 0x9 NL80211_AUTHTYPE_NETWORK_EAP = 0x3 NL80211_AUTHTYPE_OPEN_SYSTEM = 0x0 NL80211_AUTHTYPE_SAE = 0x4 @@ -5320,7 +5349,7 @@ const ( NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d NL80211_CMD_LINKS_REMOVED = 0x9a - NL80211_CMD_MAX = 0x9f + NL80211_CMD_MAX = 0xa7 NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5566,7 +5595,7 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x27 + NL80211_FREQUENCY_ATTR_MAX = 0x29 NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc @@ -5639,7 +5668,7 @@ const ( NL80211_IFTYPE_AKM_ATTR_SUITES = 0x2 NL80211_IFTYPE_AP = 0x3 NL80211_IFTYPE_AP_VLAN = 0x4 - NL80211_IFTYPE_MAX = 0xc + NL80211_IFTYPE_MAX = 0xe NL80211_IFTYPE_MESH_POINT = 0x7 NL80211_IFTYPE_MONITOR = 0x6 NL80211_IFTYPE_NAN = 0xc @@ -5664,7 +5693,7 @@ const ( NL80211_KEY_DEFAULT_TYPES = 0x8 NL80211_KEY_DEFAULT_TYPE_UNICAST = 0x1 NL80211_KEY_IDX = 0x2 - NL80211_KEY_MAX = 0xa + NL80211_KEY_MAX = 0xb NL80211_KEY_MODE = 0x9 NL80211_KEY_NO_TX = 0x1 NL80211_KEY_RX_TX = 0x0 @@ -5822,7 +5851,7 @@ const ( NL80211_PMKSA_CANDIDATE_BSSID = 0x2 NL80211_PMKSA_CANDIDATE_INDEX = 0x1 NL80211_PMKSA_CANDIDATE_PREAUTH = 0x3 - NL80211_PMSR_ATTR_MAX = 0x5 + NL80211_PMSR_ATTR_MAX = 0x7 NL80211_PMSR_ATTR_MAX_PEERS = 0x1 NL80211_PMSR_ATTR_PEERS = 0x5 NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR = 0x3 @@ -5831,7 +5860,7 @@ const ( NL80211_PMSR_FTM_CAPA_ATTR_ASAP = 0x1 NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS = 0x6 NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT = 0x7 - NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0x12 + NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0x1f NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST = 0x8 NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP = 0x2 NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED = 0xa @@ -5853,7 +5882,7 @@ const ( NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 0x4 NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 0x6 NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK = 0xc - NL80211_PMSR_FTM_REQ_ATTR_MAX = 0xe + NL80211_PMSR_FTM_REQ_ATTR_MAX = 0x17 NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED = 0xb NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP = 0x3 NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES = 0x7 @@ -5871,7 +5900,7 @@ const ( NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON = 0x1 NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST = 0x8 NL80211_PMSR_FTM_RESP_ATTR_LCI = 0x13 - NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x16 + NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x21 NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP = 0x6 NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS = 0x3 NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES = 0x4 @@ -5885,7 +5914,7 @@ const ( NL80211_PMSR_FTM_RESP_ATTR_TX_RATE = 0xb NL80211_PMSR_PEER_ATTR_ADDR = 0x1 NL80211_PMSR_PEER_ATTR_CHAN = 0x2 - NL80211_PMSR_PEER_ATTR_MAX = 0x4 + NL80211_PMSR_PEER_ATTR_MAX = 0x5 NL80211_PMSR_PEER_ATTR_REQ = 0x3 NL80211_PMSR_PEER_ATTR_RESP = 0x4 NL80211_PMSR_REQ_ATTR_DATA = 0x1 diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 38658a345..c7ec66dc9 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -163,6 +163,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -178,6 +183,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index 267ffe05f..abe072e89 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -166,6 +166,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -181,6 +187,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index ec459d5f3..4ba7cea03 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -169,6 +169,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -184,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index fa45ab7d2..3f55ca4af 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 3da72ccdf..445b2a2e9 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 78f8c6d55..6a52e254f 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -168,6 +168,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -183,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index bbd4c6c2b..fafd89de2 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index 644d31d6a..5fb6f4cf8 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index a976f6267..a50187bce 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -168,6 +168,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -183,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 46324695f..777b0228f 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -169,6 +169,11 @@ type Msghdr struct { Flags int32 } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 +} + type Cmsghdr struct { Len uint32 Level int32 @@ -184,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x58 SizeofIovec = 0x8 SizeofMsghdr = 0x1c + SizeofMmsghdr = 0x20 SizeofCmsghdr = 0xc ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index cbc303974..48a6a5ac3 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -168,6 +168,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -183,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index b47f7b498..1972c0125 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -168,6 +168,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -183,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index cb16add54..87572ee08 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -167,6 +167,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -182,6 +188,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index a57ab8fad..f6a33e680 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -166,6 +166,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -181,6 +187,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index bf99635d8..8b7261458 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -84,22 +84,20 @@ type Rusage struct { type Stat_t struct { Dev uint64 - _ uint16 Ino uint64 + Nlink uint64 Mode uint32 - Nlink uint32 Uid uint32 Gid uint32 + _ uint32 Rdev uint64 - _ uint16 Size int64 Blksize int64 Blocks int64 Atim Timespec Mtim Timespec Ctim Timespec - _ uint64 - _ uint64 + _ [3]int64 } type Dirent struct { @@ -170,6 +168,12 @@ type Msghdr struct { _ [4]byte } +type Mmsghdr struct { + Hdr Msghdr + Len uint32 + _ [4]byte +} + type Cmsghdr struct { Len uint64 Level int32 @@ -185,6 +189,7 @@ const ( SizeofSockaddrNFCLLCP = 0x60 SizeofIovec = 0x10 SizeofMsghdr = 0x38 + SizeofMmsghdr = 0x40 SizeofCmsghdr = 0x10 ) diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go index 2e5d5a443..80d4c9535 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go @@ -209,6 +209,84 @@ type TCPInfo struct { Total_retrans uint32 } +// Ptrace structures for z/OS + +type PtraceRegs struct { + Psw PtracePsw + Gprs [16]uint64 + Acrs [16]uint32 + Orig_gpr2 uint64 + Fp_regs PtraceFpregs + Per_info PtracePer + Ieee_instruction_pointer uint64 +} + +type PtracePsw struct { + Mask uint64 + Addr uint64 +} + +type PtraceFpregs struct { + Fpc uint32 + Fprs [16]float64 +} + +type PtracePer struct { + Control_regs [3]uint64 + _ [8]byte + Starting_addr uint64 + Ending_addr uint64 + Perc_atmid uint16 + Address uint64 + Access_id uint8 + _ [7]byte +} + +// PT_BLOCKREQ structures for block ptrace requests +// Layout matches BPXYPTRC HLASM macro (PtBR_GPR + PtBR_GPR_EXT): +// +// Offset 0-1: Writebitflags (PtBR_GPR_CntlGPR, 2 bytes) +// Offset 2-3: Wpsw (PtBR_GPR_CntlMisc, 2 bytes with WPSW bit flag) +// Offset 4-15: Reserved (12 bytes) +// Offset 16-79: Gpr (64 bytes, 16 GPRs) +// Offset 80-143: Ctl (64 bytes, 16 CRs) +// Offset 144-151: Psw old format (8 bytes, PtBR_GPR_PSW) +// Offset 152-167: Pswg extended (16 bytes, PtBR_GPR_PSWG for 64-bit) +// Total: 168 bytes (base 152 + extended 16) +type PtraceBlkGpr struct { + Writebitflags uint16 // 2 bytes at offset 0 (PtBR_GPR_CntlGPR) + Wpsw uint16 // 2 bytes at offset 2 (PtBR_GPR_CntlMisc with WPSW flag) + _ [12]byte // 12 bytes reserved (offset 4-15) + Gpr [16]uint32 // 64 bytes at offset 16 (GPRs) + Ctl [16]uint32 // 64 bytes at offset 80 (CRs) + Psw [8]byte // 8 bytes at offset 144 (old PSW format) + Pswg [16]byte // 16 bytes at offset 152 (extended PSWG) + // Total: 2+2+12+64+64+8+16 = 168 bytes +} + +type PtraceBlkReqReq struct { + Reqtype int32 + Reqstat int32 + Reqdata uint32 + _ [4]byte +} + +type PtraceBlkReq struct { + Numreq int32 + _ [12]byte +} + +// PT_READ_U structures for reading user area (control info) +type PtraceBlkUarOcw struct { + Ofs uint32 // Control information offset + Ctl uint32 // Control information +} + +type PtraceBlkUar struct { + Num uint32 // Number of entries + _ [4]byte +} + type _Gid_t uint32 type rusage_zos struct { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/windows/types_windows_arm.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/windows/types_windows_arm.go deleted file mode 100644 index 321872c3e..000000000 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/sys/windows/types_windows_arm.go +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package windows - -type WSAData struct { - Version uint16 - HighVersion uint16 - Description [WSADESCRIPTION_LEN + 1]byte - SystemStatus [WSASYS_STATUS_LEN + 1]byte - MaxSockets uint16 - MaxUdpDg uint16 - VendorInfo *byte -} - -type Servent struct { - Name *byte - Aliases **byte - Port uint16 - Proto *byte -} - -type JOBOBJECT_BASIC_LIMIT_INFORMATION struct { - PerProcessUserTimeLimit int64 - PerJobUserTimeLimit int64 - LimitFlags uint32 - MinimumWorkingSetSize uintptr - MaximumWorkingSetSize uintptr - ActiveProcessLimit uint32 - Affinity uintptr - PriorityClass uint32 - SchedulingClass uint32 - _ uint32 // pad to 8 byte boundary -} diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/text/secure/bidirule/bidirule.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/text/secure/bidirule/bidirule.go index 538632730..399cb8969 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/text/secure/bidirule/bidirule.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/text/secure/bidirule/bidirule.go @@ -10,6 +10,7 @@ package bidirule import ( "errors" + "sync" "unicode/utf8" "golang.org/x/text/transform" @@ -246,8 +247,9 @@ func (t *Transformer) Span(src []byte, atEOF bool) (n int, err error) { // Precomputing the ASCII values decreases running time for the ASCII fast path // by about 30%. var asciiTable [128]bidi.Properties +var asciiTableOnce sync.Once -func init() { +func initASCIITable() { for i := range asciiTable { p, _ := bidi.LookupRune(rune(i)) asciiTable[i] = p @@ -255,6 +257,8 @@ func init() { } func (t *Transformer) advance(s []byte) (n int, ok bool) { + asciiTableOnce.Do(initASCIITable) + var e bidi.Properties var sz int for n < len(s) { @@ -297,6 +301,8 @@ func (t *Transformer) advance(s []byte) (n int, ok bool) { } func (t *Transformer) advanceString(s string) (n int, ok bool) { + asciiTableOnce.Do(initASCIITable) + var e bidi.Properties var sz int for n < len(s) { diff --git a/ci/resources/stemcell-version-bump/vendor/golang.org/x/text/unicode/bidi/core.go b/ci/resources/stemcell-version-bump/vendor/golang.org/x/text/unicode/bidi/core.go index e28ac8c8a..fe5a46ffe 100644 --- a/ci/resources/stemcell-version-bump/vendor/golang.org/x/text/unicode/bidi/core.go +++ b/ci/resources/stemcell-version-bump/vendor/golang.org/x/text/unicode/bidi/core.go @@ -208,27 +208,23 @@ func (p *paragraph) determineMatchingIsolates() { p.matchingIsolateInitiator[i] = -1 } + var open []int for i := range p.matchingPDI { p.matchingPDI[i] = -1 - if t := p.resultTypes[i]; t.in(LRI, RLI, FSI) { - depthCounter := 1 - for j := i + 1; j < p.Len(); j++ { - if u := p.resultTypes[j]; u.in(LRI, RLI, FSI) { - depthCounter++ - } else if u == PDI { - if depthCounter--; depthCounter == 0 { - p.matchingPDI[i] = j - p.matchingIsolateInitiator[j] = i - break - } - } - } - if p.matchingPDI[i] == -1 { - p.matchingPDI[i] = p.Len() - } + switch t := p.resultTypes[i]; { + case t.in(LRI, RLI, FSI): + open = append(open, i) + case t == PDI && len(open) > 0: + j := open[len(open)-1] + open = open[:len(open)-1] + p.matchingPDI[j] = i + p.matchingIsolateInitiator[i] = j } } + for _, i := range open { + p.matchingPDI[i] = p.Len() + } } // determineParagraphEmbeddingLevel reports the resolved paragraph direction of @@ -496,16 +492,13 @@ func (s *isolatingRunSequence) resolveWeakTypes() { // Rule W2. // EN does not change at the start of the run, because sos != AL. + lastStrong := unknownClass for i, t := range s.types { - if t == EN { - for j := i - 1; j >= 0; j-- { - if t := s.types[j]; t.in(L, R, AL) { - if t == AL { - s.types[i] = AN - } - break - } - } + switch { + case t.in(L, R, AL): + lastStrong = t + case t == EN && lastStrong == AL: + s.types[i] = AN } } @@ -543,29 +536,30 @@ func (s *isolatingRunSequence) resolveWeakTypes() { } // Rule W5. - for i, t := range s.types { - if t == ET { - // locate end of sequence - runStart := i - runEnd := s.findRunLimit(runStart, ET) - - // check values at ends of sequence - t := s.sos - if runStart > 0 { - t = s.types[runStart-1] - } - if t != EN { - t = s.eos - if runEnd < len(s.types) { - t = s.types[runEnd] - } - } - if t == EN { - setTypes(s.types[runStart:runEnd], EN) + for i := 0; i < len(s.types); i++ { + if s.types[i] != ET { + continue + } + // locate end of sequence + runStart := i + runEnd := s.findRunLimit(runStart, ET) + + // check values at ends of sequence + t := s.sos + if runStart > 0 { + t = s.types[runStart-1] + } + if t != EN { + t = s.eos + if runEnd < len(s.types) { + t = s.types[runEnd] } - // continue at end of sequence - i = runEnd } + if t == EN { + setTypes(s.types[runStart:runEnd], EN) + } + // continue at end of sequence + i = runEnd } // Rule W6. @@ -576,20 +570,13 @@ func (s *isolatingRunSequence) resolveWeakTypes() { } // Rule W7. + prevStrongType := s.sos for i, t := range s.types { - if t == EN { - // set default if we reach start of run - prevStrongType := s.sos - for j := i - 1; j >= 0; j-- { - t = s.types[j] - if t == L || t == R { // AL's have been changed to R - prevStrongType = t - break - } - } - if prevStrongType == L { - s.types[i] = L - } + switch { + case t == L || t == R: // AL's have been changed to R + prevStrongType = t + case t == EN && prevStrongType == L: + s.types[i] = L } } } diff --git a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/gensupport/resumable.go b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/gensupport/resumable.go index 1e22adb5d..1536f9337 100644 --- a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/gensupport/resumable.go +++ b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/gensupport/resumable.go @@ -138,6 +138,17 @@ func (rx *ResumableUpload) reportProgress(old, updated int64) { } } +// contextCloser wraps an io.ReadCloser and cancels a context when closed. +type contextCloser struct { + io.ReadCloser + cancel context.CancelFunc +} + +func (c *contextCloser) Close() error { + defer c.cancel() + return c.ReadCloser.Close() +} + // transferChunk performs a single HTTP request to upload a single chunk. // It uses a goroutine to perform the upload and a timer to enforce ChunkTransferTimeout. func (rx *ResumableUpload) transferChunk(ctx context.Context, chunk io.Reader, off, size int64, done bool) (*http.Response, error) { @@ -152,6 +163,7 @@ func (rx *ResumableUpload) transferChunk(ctx context.Context, chunk io.Reader, o // Start a timer for the ChunkTransferTimeout duration. timer := time.NewTimer(rx.ChunkTransferTimeout) + defer timer.Stop() // A struct to hold the result from the goroutine. type uploadResult struct { @@ -166,8 +178,8 @@ func (rx *ResumableUpload) transferChunk(ctx context.Context, chunk io.Reader, o // abort the request if the timer fires first. rCtx, cancel := context.WithCancel(ctx) // NOTE: We do NOT use `defer cancel()` here. The context must remain valid - // for the caller to read the response body of a successful request. - // Cancellation is handled manually on timeout paths. + // for the caller to read the response body of a successful request, and is + // cancelled when the response body is closed. // Starting the chunk upload in parallel. go func() { @@ -183,21 +195,29 @@ func (rx *ResumableUpload) transferChunk(ctx context.Context, chunk io.Reader, o // Context is cancelled for the overall upload. cancel() // Drain resultCh. - <-resultCh + if result := <-resultCh; result.res != nil && result.res.Body != nil { + result.res.Body.Close() + } return nil, ctx.Err() case <-timer.C: // Chunk Transfer timer fired before resultCh so we return context.DeadlineExceeded. cancel() // Drain resultCh. - <-resultCh + if result := <-resultCh; result.res != nil && result.res.Body != nil { + result.res.Body.Close() + } return nil, context.DeadlineExceeded case result := <-resultCh: // Handle the result from the upload. - // Cancel our completed context. - cancel() if result.err != nil { + cancel() return result.res, result.err } + if result.res != nil && result.res.Body != nil { + result.res.Body = &contextCloser{ReadCloser: result.res.Body, cancel: cancel} + } else { + cancel() + } return result.res, nil } } @@ -281,6 +301,9 @@ func (rx *ResumableUpload) uploadChunkWithRetries(ctx context.Context, chunk io. // We sent "X-GUploader-No-308: yes" (see comment elsewhere in // this file), so we don't expect to get a 308. if status == 308 { + if resp.Body != nil { + resp.Body.Close() + } return nil, errors.New("unexpected 308 response status code") } // Chunk upload should be retried if the ChunkTransferTimeout is non-zero and err is context deadline exceeded diff --git a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/settings.go b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/settings.go index 03e928cd5..225f485b9 100644 --- a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/settings.go +++ b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/settings.go @@ -44,30 +44,31 @@ type DialSettings struct { // Deprecated: Use AuthCredentialsFile instead, due to security risk. CredentialsFile string // Deprecated: Use AuthCredentialsJSON instead, due to security risk. - CredentialsJSON []byte - InternalCredentials *google.Credentials - UserAgent string - APIKey string - Audiences []string - DefaultAudience string - HTTPClient *http.Client - GRPCDialOpts []grpc.DialOption - GRPCConn *grpc.ClientConn - GRPCConnPool ConnPool - GRPCConnPoolSize int - NoAuth bool - TelemetryDisabled bool - ClientCertSource func(*tls.CertificateRequestInfo) (*tls.Certificate, error) - CustomClaims map[string]interface{} - SkipValidation bool - ImpersonationConfig *impersonate.Config - EnableDirectPath bool - EnableDirectPathXds bool - AllowNonDefaultServiceAccount bool - DefaultUniverseDomain string - UniverseDomain string - AllowHardBoundTokens []string - Logger *slog.Logger + CredentialsJSON []byte + InternalCredentials *google.Credentials + UserAgent string + APIKey string + Audiences []string + DefaultAudience string + HTTPClient *http.Client + GRPCDialOpts []grpc.DialOption + GRPCConn *grpc.ClientConn + GRPCConnPool ConnPool + GRPCConnPoolSize int + NoAuth bool + TelemetryDisabled bool + ClientCertSource func(*tls.CertificateRequestInfo) (*tls.Certificate, error) + CustomClaims map[string]interface{} + SkipValidation bool + ImpersonationConfig *impersonate.Config + EnableDirectPath bool + EnableDirectPathXds bool + EnableDirectPathXdsOverInterconnect bool + AllowNonDefaultServiceAccount bool + DefaultUniverseDomain string + UniverseDomain string + AllowHardBoundTokens []string + Logger *slog.Logger // Google API system parameters. For more information please read: // https://cloud.google.com/apis/docs/system-parameters QuotaProject string diff --git a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/version.go b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/version.go index f2cd9f49c..f607b9289 100644 --- a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/version.go +++ b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/internal/version.go @@ -5,4 +5,4 @@ package internal // Version is the current tagged release of the library. -const Version = "0.300.0" +const Version = "0.307.0" diff --git a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/option/internaloption/internaloption.go b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/option/internaloption/internaloption.go index 6f9fdf23f..fedcefbf8 100644 --- a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/option/internaloption/internaloption.go +++ b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/option/internaloption/internaloption.go @@ -110,6 +110,22 @@ func (x enableDirectPathXds) Apply(o *internal.DialSettings) { o.EnableDirectPathXds = bool(x) } +// EnableDirectPathXdsOverInterconnect returns a ClientOption that enables +// DirectPath xDS over Cloud Interconnect. It is only valid when DirectPath +// and DirectPath xDS are enabled. +// +// It should only be used internally by generated clients. +// This is an EXPERIMENTAL API and may be changed or removed in the future. +func EnableDirectPathXdsOverInterconnect() option.ClientOption { + return enableDirectPathXdsOverInterconnect(true) +} + +type enableDirectPathXdsOverInterconnect bool + +func (x enableDirectPathXdsOverInterconnect) Apply(o *internal.DialSettings) { + o.EnableDirectPathXdsOverInterconnect = bool(x) +} + // AllowNonDefaultServiceAccount returns a ClientOption that overrides the default // requirement for using the default service account for DirectPath. // diff --git a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/option/internaloption/unsaferesolver.go b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/option/internaloption/unsaferesolver.go index 51a98c5a8..7c5012772 100644 --- a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/option/internaloption/unsaferesolver.go +++ b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/option/internaloption/unsaferesolver.go @@ -96,6 +96,15 @@ func (ur *UnsafeResolver) ResolvedEnableDirectPathXds() bool { return ur.ds.EnableDirectPathXds } +// ResolvedEnableDirectPathXdsOverInterconnect returns whether DirectPath xDS over +// Cloud Interconnect was requested. This corresponds to the +// EnableDirectPathXdsOverInterconnect option in this package. +// +// This is an EXPERIMENTAL API and may be changed or removed in the future. +func (ur *UnsafeResolver) ResolvedEnableDirectPathXdsOverInterconnect() bool { + return ur.ds.EnableDirectPathXdsOverInterconnect +} + // ResolvedWithoutAuthentication returns whether the option to explicitly disable // authentication was requested. This corresponds to the WithoutAuthentication // ClientOption in google.golang.org/option. diff --git a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/storage/v1/storage-api.json b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/storage/v1/storage-api.json index f075cf4a4..aa9f92c52 100644 --- a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/storage/v1/storage-api.json +++ b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/storage/v1/storage-api.json @@ -253,7 +253,7 @@ "location": "northamerica-south1" } ], - "etag": "\"3132373433353833303733323234363038313037\"", + "etag": "\"3130373737383931373330383137363536363734\"", "icons": { "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png", "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png" @@ -1496,27 +1496,6 @@ } } }, - "channels": { - "methods": { - "stop": { - "description": "Stop watching resources through this channel", - "httpMethod": "POST", - "id": "storage.channels.stop", - "path": "channels/stop", - "request": { - "$ref": "Channel", - "parameterName": "resource" - }, - "scopes": [ - "https://www.googleapis.com/auth/cloud-platform", - "https://www.googleapis.com/auth/cloud-platform.read-only", - "https://www.googleapis.com/auth/devstorage.full_control", - "https://www.googleapis.com/auth/devstorage.read_only", - "https://www.googleapis.com/auth/devstorage.read_write" - ] - } - } - }, "defaultObjectAccessControls": { "methods": { "delete": { @@ -4782,7 +4761,7 @@ } } }, - "revision": "20260926", + "revision": "20261009", "rootUrl": "https://storage.googleapis.com/", "schemas": { "AdvanceRelocateBucketOperationRequest": { @@ -5426,6 +5405,21 @@ "format": "date-time", "type": "string" }, + "hardDeletePause": { + "description": "The bucket's hard delete pause configuration. If set, soft-deleted objects in the bucket will not be permanently deleted until the hard delete pause is disabled.", + "properties": { + "effectiveTime": { + "description": "Server-determined value that indicates the time from which the hard delete pause became effective. This value is in RFC 3339 format.", + "format": "date-time", + "type": "string" + }, + "enabled": { + "description": "Whether hard deletions are paused.", + "type": "boolean" + } + }, + "type": "object" + }, "retentionDurationSeconds": { "description": "The duration in seconds that soft-deleted objects in the bucket will be retained and cannot be permanently deleted.", "format": "int64", @@ -5690,59 +5684,6 @@ }, "type": "object" }, - "Channel": { - "description": "An notification channel used to watch for resource changes.", - "id": "Channel", - "properties": { - "address": { - "description": "The address where notifications are delivered for this channel.", - "type": "string" - }, - "expiration": { - "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.", - "format": "int64", - "type": "string" - }, - "id": { - "description": "A UUID or similar unique string that identifies this channel.", - "type": "string" - }, - "kind": { - "default": "api#channel", - "description": "Identifies this as a notification channel used to watch for changes to a resource, which is \"api#channel\".", - "type": "string" - }, - "params": { - "additionalProperties": { - "description": "Declares a new parameter by name.", - "type": "string" - }, - "description": "Additional parameters controlling delivery channel behavior. Optional.", - "type": "object" - }, - "payload": { - "description": "A Boolean value to indicate whether payload is wanted. Optional.", - "type": "boolean" - }, - "resourceId": { - "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions.", - "type": "string" - }, - "resourceUri": { - "description": "A version-specific identifier for the watched resource.", - "type": "string" - }, - "token": { - "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional.", - "type": "string" - }, - "type": { - "description": "The type of delivery mechanism used for this channel.", - "type": "string" - } - }, - "type": "object" - }, "ComposeRequest": { "description": "A Compose request.", "id": "ComposeRequest", diff --git a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/storage/v1/storage-gen.go b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/storage/v1/storage-gen.go index 628f32b85..9e8222f31 100644 --- a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/storage/v1/storage-gen.go +++ b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/storage/v1/storage-gen.go @@ -146,7 +146,6 @@ func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, err s.AnywhereCaches = NewAnywhereCachesService(s) s.BucketAccessControls = NewBucketAccessControlsService(s) s.Buckets = NewBucketsService(s) - s.Channels = NewChannelsService(s) s.DefaultObjectAccessControls = NewDefaultObjectAccessControlsService(s) s.Folders = NewFoldersService(s) s.ManagedFolders = NewManagedFoldersService(s) @@ -186,8 +185,6 @@ type Service struct { Buckets *BucketsService - Channels *ChannelsService - DefaultObjectAccessControls *DefaultObjectAccessControlsService Folders *FoldersService @@ -241,15 +238,6 @@ type BucketsService struct { s *Service } -func NewChannelsService(s *Service) *ChannelsService { - rs := &ChannelsService{s: s} - return rs -} - -type ChannelsService struct { - s *Service -} - func NewDefaultObjectAccessControlsService(s *Service) *DefaultObjectAccessControlsService { rs := &DefaultObjectAccessControlsService{s: s} return rs @@ -1350,6 +1338,10 @@ type BucketSoftDeletePolicy struct { // the policy, or one with a greater retention, was effective. This value is in // RFC 3339 format. EffectiveTime string `json:"effectiveTime,omitempty"` + // HardDeletePause: The bucket's hard delete pause configuration. If set, + // soft-deleted objects in the bucket will not be permanently deleted until the + // hard delete pause is disabled. + HardDeletePause *BucketSoftDeletePolicyHardDeletePause `json:"hardDeletePause,omitempty"` // RetentionDurationSeconds: The duration in seconds that soft-deleted objects // in the bucket will be retained and cannot be permanently deleted. RetentionDurationSeconds int64 `json:"retentionDurationSeconds,omitempty,string"` @@ -1371,6 +1363,33 @@ func (s BucketSoftDeletePolicy) MarshalJSON() ([]byte, error) { return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields) } +// BucketSoftDeletePolicyHardDeletePause: The bucket's hard delete pause +// configuration. If set, soft-deleted objects in the bucket will not be +// permanently deleted until the hard delete pause is disabled. +type BucketSoftDeletePolicyHardDeletePause struct { + // EffectiveTime: Server-determined value that indicates the time from which + // the hard delete pause became effective. This value is in RFC 3339 format. + EffectiveTime string `json:"effectiveTime,omitempty"` + // Enabled: Whether hard deletions are paused. + Enabled bool `json:"enabled,omitempty"` + // ForceSendFields is a list of field names (e.g. "EffectiveTime") to + // unconditionally include in API requests. By default, fields with empty or + // default values are omitted from API requests. See + // https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more + // details. + ForceSendFields []string `json:"-"` + // NullFields is a list of field names (e.g. "EffectiveTime") to include in API + // requests with the JSON null value. By default, fields with empty values are + // omitted from API requests. See + // https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details. + NullFields []string `json:"-"` +} + +func (s BucketSoftDeletePolicyHardDeletePause) MarshalJSON() ([]byte, error) { + type NoMethod BucketSoftDeletePolicyHardDeletePause + return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields) +} + // BucketVersioning: The bucket's versioning configuration. type BucketVersioning struct { // Enabled: While set to true, versioning is fully enabled for this bucket. @@ -1703,51 +1722,6 @@ func (s BulkRestoreObjectsRequest) MarshalJSON() ([]byte, error) { return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields) } -// Channel: An notification channel used to watch for resource changes. -type Channel struct { - // Address: The address where notifications are delivered for this channel. - Address string `json:"address,omitempty"` - // Expiration: Date and time of notification channel expiration, expressed as a - // Unix timestamp, in milliseconds. Optional. - Expiration int64 `json:"expiration,omitempty,string"` - // Id: A UUID or similar unique string that identifies this channel. - Id string `json:"id,omitempty"` - // Kind: Identifies this as a notification channel used to watch for changes to - // a resource, which is "api#channel". - Kind string `json:"kind,omitempty"` - // Params: Additional parameters controlling delivery channel behavior. - // Optional. - Params map[string]string `json:"params,omitempty"` - // Payload: A Boolean value to indicate whether payload is wanted. Optional. - Payload bool `json:"payload,omitempty"` - // ResourceId: An opaque ID that identifies the resource being watched on this - // channel. Stable across different API versions. - ResourceId string `json:"resourceId,omitempty"` - // ResourceUri: A version-specific identifier for the watched resource. - ResourceUri string `json:"resourceUri,omitempty"` - // Token: An arbitrary string delivered to the target address with each - // notification delivered over this channel. Optional. - Token string `json:"token,omitempty"` - // Type: The type of delivery mechanism used for this channel. - Type string `json:"type,omitempty"` - // ForceSendFields is a list of field names (e.g. "Address") to unconditionally - // include in API requests. By default, fields with empty or default values are - // omitted from API requests. See - // https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more - // details. - ForceSendFields []string `json:"-"` - // NullFields is a list of field names (e.g. "Address") to include in API - // requests with the JSON null value. By default, fields with empty values are - // omitted from API requests. See - // https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details. - NullFields []string `json:"-"` -} - -func (s Channel) MarshalJSON() ([]byte, error) { - type NoMethod Channel - return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields) -} - // ComposeRequest: A Compose request. type ComposeRequest struct { // DeleteSourceObjects: If true, the source objects will be deleted. @@ -6530,78 +6504,6 @@ func (c *BucketsUpdateCall) Do(opts ...googleapi.CallOption) (*Bucket, error) { return ret, nil } -type ChannelsStopCall struct { - s *Service - channel *Channel - urlParams_ gensupport.URLParams - ctx_ context.Context - header_ http.Header -} - -// Stop: Stop watching resources through this channel -func (r *ChannelsService) Stop(channel *Channel) *ChannelsStopCall { - c := &ChannelsStopCall{s: r.s, urlParams_: make(gensupport.URLParams)} - c.channel = channel - return c -} - -// Fields allows partial responses to be retrieved. See -// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more -// details. -func (c *ChannelsStopCall) Fields(s ...googleapi.Field) *ChannelsStopCall { - c.urlParams_.Set("fields", googleapi.CombineFields(s)) - return c -} - -// Context sets the context to be used in this call's Do method. -func (c *ChannelsStopCall) Context(ctx context.Context) *ChannelsStopCall { - c.ctx_ = ctx - return c -} - -// Header returns a http.Header that can be modified by the caller to add -// headers to the request. -func (c *ChannelsStopCall) Header() http.Header { - if c.header_ == nil { - c.header_ = make(http.Header) - } - return c.header_ -} - -func (c *ChannelsStopCall) doRequest(alt string) (*http.Response, error) { - reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_) - body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.channel) - if err != nil { - return nil, err - } - c.urlParams_.Set("alt", alt) - c.urlParams_.Set("prettyPrint", "false") - urls := googleapi.ResolveRelative(c.s.BasePath, "channels/stop") - urls += "?" + c.urlParams_.Encode() - req, err := http.NewRequest("POST", urls, body) - if err != nil { - return nil, err - } - req.Header = reqHeaders - c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "storage.channels.stop", "request", internallog.HTTPRequest(req, body.Bytes())) - return gensupport.SendRequest(c.ctx_, c.s.client, req) -} - -// Do executes the "storage.channels.stop" call. -func (c *ChannelsStopCall) Do(opts ...googleapi.CallOption) error { - gensupport.SetOptions(c.urlParams_, opts...) - res, err := c.doRequest("json") - if err != nil { - return err - } - defer googleapi.CloseBody(res) - if err := googleapi.CheckResponse(res); err != nil { - return gensupport.WrapError(err) - } - c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "storage.channels.stop", "response", internallog.HTTPResponse(res, nil)) - return nil -} - type DefaultObjectAccessControlsDeleteCall struct { s *Service bucket string diff --git a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/transport/grpc/dial.go b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/transport/grpc/dial.go index 7c6bf402b..bfca990c4 100644 --- a/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/transport/grpc/dial.go +++ b/ci/resources/stemcell-version-bump/vendor/google.golang.org/api/transport/grpc/dial.go @@ -221,14 +221,16 @@ func dialPoolNewAuth(ctx context.Context, secure bool, poolSize int, ds *interna EnableNonDefaultSAForDirectPath: ds.AllowNonDefaultServiceAccount, EnableDirectPath: ds.EnableDirectPath, EnableDirectPathXds: ds.EnableDirectPathXds, - EnableJWTWithScope: ds.EnableJwtWithScope, - AllowHardBoundTokens: ds.AllowHardBoundTokens, - DefaultAudience: ds.DefaultAudience, - DefaultEndpointTemplate: defaultEndpointTemplate, - DefaultMTLSEndpoint: ds.DefaultMTLSEndpoint, - DefaultScopes: ds.DefaultScopes, - SkipValidation: skipValidation, - TelemetryAttributes: ds.TelemetryAttributes, + // TODO(https://github.com/googleapis/google-cloud-go/pull/20559): Bump cloud.google.com/go/auth in go.mod once released. + EnableDirectPathXdsOverInterconnect: ds.EnableDirectPathXdsOverInterconnect, + EnableJWTWithScope: ds.EnableJwtWithScope, + AllowHardBoundTokens: ds.AllowHardBoundTokens, + DefaultAudience: ds.DefaultAudience, + DefaultEndpointTemplate: defaultEndpointTemplate, + DefaultMTLSEndpoint: ds.DefaultMTLSEndpoint, + DefaultScopes: ds.DefaultScopes, + SkipValidation: skipValidation, + TelemetryAttributes: ds.TelemetryAttributes, }, UniverseDomain: ds.GetUniverseDomain(), Logger: ds.Logger, diff --git a/ci/resources/stemcell-version-bump/vendor/modules.txt b/ci/resources/stemcell-version-bump/vendor/modules.txt index 99c78f6c5..03ccbfdb4 100644 --- a/ci/resources/stemcell-version-bump/vendor/modules.txt +++ b/ci/resources/stemcell-version-bump/vendor/modules.txt @@ -3,11 +3,10 @@ cel.dev/expr # cloud.google.com/go v0.123.0 ## explicit; go 1.24.0 -cloud.google.com/go/internal cloud.google.com/go/internal/optional cloud.google.com/go/internal/trace cloud.google.com/go/internal/version -# cloud.google.com/go/auth v0.24.0 +# cloud.google.com/go/auth v0.24.1 ## explicit; go 1.26.0 cloud.google.com/go/auth cloud.google.com/go/auth/credentials @@ -44,7 +43,7 @@ cloud.google.com/go/iam/apiv1/iampb cloud.google.com/go/monitoring/apiv3/v2 cloud.google.com/go/monitoring/apiv3/v2/monitoringpb cloud.google.com/go/monitoring/internal -# cloud.google.com/go/storage v1.69.0 +# cloud.google.com/go/storage v1.70.0 ## explicit; go 1.26.0 cloud.google.com/go/storage cloud.google.com/go/storage/experimental @@ -136,7 +135,7 @@ github.com/go-logr/logr/funcr # github.com/go-logr/stdr v1.2.2 ## explicit; go 1.16 github.com/go-logr/stdr -# github.com/google/s2a-go v0.1.10 +# github.com/google/s2a-go v0.1.11 ## explicit; go 1.20 github.com/google/s2a-go github.com/google/s2a-go/fallback @@ -162,7 +161,7 @@ github.com/google/s2a-go/stream # github.com/google/uuid v1.6.0 ## explicit github.com/google/uuid -# github.com/googleapis/enterprise-certificate-proxy v0.3.22 +# github.com/googleapis/enterprise-certificate-proxy v0.3.23 ## explicit; go 1.25.0 github.com/googleapis/enterprise-certificate-proxy/client github.com/googleapis/enterprise-certificate-proxy/client/util @@ -273,7 +272,7 @@ go.opentelemetry.io/otel/trace/noop # go.yaml.in/yaml/v3 v3.0.5 ## explicit; go 1.16 go.yaml.in/yaml/v3 -# golang.org/x/crypto v0.57.0 +# golang.org/x/crypto v0.58.0 ## explicit; go 1.26.0 golang.org/x/crypto/chacha20 golang.org/x/crypto/chacha20poly1305 @@ -282,7 +281,7 @@ golang.org/x/crypto/cryptobyte/asn1 golang.org/x/crypto/hkdf golang.org/x/crypto/internal/alias golang.org/x/crypto/internal/poly1305 -# golang.org/x/net v0.59.0 +# golang.org/x/net v0.61.0 ## explicit; go 1.26.0 golang.org/x/net/http/httpguts golang.org/x/net/http2 @@ -304,17 +303,17 @@ golang.org/x/oauth2/google/internal/stsexchange golang.org/x/oauth2/internal golang.org/x/oauth2/jws golang.org/x/oauth2/jwt -# golang.org/x/sync v0.23.0 +# golang.org/x/sync v0.24.0 ## explicit; go 1.26.0 golang.org/x/sync/semaphore golang.org/x/sync/singleflight -# golang.org/x/sys v0.48.0 +# golang.org/x/sys v0.49.0 ## explicit; go 1.26.0 golang.org/x/sys/cpu golang.org/x/sys/unix golang.org/x/sys/windows golang.org/x/sys/windows/registry -# golang.org/x/text v0.42.0 +# golang.org/x/text v0.43.0 ## explicit; go 1.26.0 golang.org/x/text/secure/bidirule golang.org/x/text/transform @@ -323,7 +322,7 @@ golang.org/x/text/unicode/norm # golang.org/x/time v0.16.0 ## explicit; go 1.26.0 golang.org/x/time/rate -# google.golang.org/api v0.300.0 +# google.golang.org/api v0.307.0 ## explicit; go 1.26.0 google.golang.org/api/googleapi google.golang.org/api/googleapi/transport @@ -356,7 +355,7 @@ google.golang.org/genproto/googleapis/api/expr/v1alpha1 google.golang.org/genproto/googleapis/api/label google.golang.org/genproto/googleapis/api/metric google.golang.org/genproto/googleapis/api/monitoredres -# google.golang.org/genproto/googleapis/rpc v0.0.0-20260921155816-b14227669459 +# google.golang.org/genproto/googleapis/rpc v0.0.0-20261019180522-ce908d29299b ## explicit; go 1.26.0 google.golang.org/genproto/googleapis/rpc/code google.golang.org/genproto/googleapis/rpc/errdetails