Update google.golang.org/genproto
This commit is contained in:
10578
vendor/google.golang.org/api/compute/v0.alpha/compute-api.json
generated
vendored
10578
vendor/google.golang.org/api/compute/v0.alpha/compute-api.json
generated
vendored
File diff suppressed because it is too large
Load Diff
40686
vendor/google.golang.org/api/compute/v0.alpha/compute-gen.go
generated
vendored
40686
vendor/google.golang.org/api/compute/v0.alpha/compute-gen.go
generated
vendored
File diff suppressed because it is too large
Load Diff
9252
vendor/google.golang.org/api/compute/v0.beta/compute-api.json
generated
vendored
9252
vendor/google.golang.org/api/compute/v0.beta/compute-api.json
generated
vendored
File diff suppressed because it is too large
Load Diff
37364
vendor/google.golang.org/api/compute/v0.beta/compute-gen.go
generated
vendored
37364
vendor/google.golang.org/api/compute/v0.beta/compute-gen.go
generated
vendored
File diff suppressed because it is too large
Load Diff
10914
vendor/google.golang.org/api/compute/v1/compute-api.json
generated
vendored
10914
vendor/google.golang.org/api/compute/v1/compute-api.json
generated
vendored
File diff suppressed because it is too large
Load Diff
41016
vendor/google.golang.org/api/compute/v1/compute-gen.go
generated
vendored
41016
vendor/google.golang.org/api/compute/v1/compute-gen.go
generated
vendored
File diff suppressed because it is too large
Load Diff
1092
vendor/google.golang.org/api/container/v1/container-api.json
generated
vendored
1092
vendor/google.golang.org/api/container/v1/container-api.json
generated
vendored
File diff suppressed because it is too large
Load Diff
3157
vendor/google.golang.org/api/container/v1/container-gen.go
generated
vendored
3157
vendor/google.golang.org/api/container/v1/container-gen.go
generated
vendored
File diff suppressed because it is too large
Load Diff
45
vendor/google.golang.org/api/googleapi/googleapi.go
generated
vendored
45
vendor/google.golang.org/api/googleapi/googleapi.go
generated
vendored
@@ -15,6 +15,7 @@ import (
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"google.golang.org/api/internal/third_party/uritemplates"
|
||||
)
|
||||
@@ -78,6 +79,9 @@ type Error struct {
|
||||
Header http.Header
|
||||
|
||||
Errors []ErrorItem
|
||||
// err is typically a wrapped apierror.APIError, see
|
||||
// google-api-go-client/internal/gensupport/error.go.
|
||||
err error
|
||||
}
|
||||
|
||||
// ErrorItem is a detailed error code & message from the Google API frontend.
|
||||
@@ -121,6 +125,15 @@ func (e *Error) Error() string {
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
// Wrap allows an existing Error to wrap another error. See also [Error.Unwrap].
|
||||
func (e *Error) Wrap(err error) {
|
||||
e.err = err
|
||||
}
|
||||
|
||||
func (e *Error) Unwrap() error {
|
||||
return e.err
|
||||
}
|
||||
|
||||
type errorReply struct {
|
||||
Error *Error `json:"error"`
|
||||
}
|
||||
@@ -140,6 +153,7 @@ func CheckResponse(res *http.Response) error {
|
||||
jerr.Error.Code = res.StatusCode
|
||||
}
|
||||
jerr.Error.Body = string(slurp)
|
||||
jerr.Error.Header = res.Header
|
||||
return jerr.Error
|
||||
}
|
||||
}
|
||||
@@ -172,8 +186,9 @@ func CheckMediaResponse(res *http.Response) error {
|
||||
}
|
||||
slurp, _ := ioutil.ReadAll(io.LimitReader(res.Body, 1<<20))
|
||||
return &Error{
|
||||
Code: res.StatusCode,
|
||||
Body: string(slurp),
|
||||
Code: res.StatusCode,
|
||||
Body: string(slurp),
|
||||
Header: res.Header,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,12 +260,30 @@ func ChunkSize(size int) MediaOption {
|
||||
return chunkSizeOption(size)
|
||||
}
|
||||
|
||||
type chunkRetryDeadlineOption time.Duration
|
||||
|
||||
func (cd chunkRetryDeadlineOption) setOptions(o *MediaOptions) {
|
||||
o.ChunkRetryDeadline = time.Duration(cd)
|
||||
}
|
||||
|
||||
// ChunkRetryDeadline returns a MediaOption which sets a per-chunk retry
|
||||
// deadline. If a single chunk has been attempting to upload for longer than
|
||||
// this time and the request fails, it will no longer be retried, and the error
|
||||
// will be returned to the caller.
|
||||
// This is only applicable for files which are large enough to require
|
||||
// a multi-chunk resumable upload.
|
||||
// The default value is 32s.
|
||||
// To set a deadline on the entire upload, use context timeout or cancellation.
|
||||
func ChunkRetryDeadline(deadline time.Duration) MediaOption {
|
||||
return chunkRetryDeadlineOption(deadline)
|
||||
}
|
||||
|
||||
// MediaOptions stores options for customizing media upload. It is not used by developers directly.
|
||||
type MediaOptions struct {
|
||||
ContentType string
|
||||
ForceEmptyContentType bool
|
||||
|
||||
ChunkSize int
|
||||
ChunkSize int
|
||||
ChunkRetryDeadline time.Duration
|
||||
}
|
||||
|
||||
// ProcessMediaOptions stores options from opts in a MediaOptions.
|
||||
@@ -362,11 +395,11 @@ func ConvertVariant(v map[string]interface{}, dst interface{}) bool {
|
||||
// For example, if your response has a "NextPageToken" and a slice of "Items" with "Id" fields,
|
||||
// you could request just those fields like this:
|
||||
//
|
||||
// svc.Events.List().Fields("nextPageToken", "items/id").Do()
|
||||
// svc.Events.List().Fields("nextPageToken", "items/id").Do()
|
||||
//
|
||||
// or if you were also interested in each Item's "Updated" field, you can combine them like this:
|
||||
//
|
||||
// svc.Events.List().Fields("nextPageToken", "items(id,updated)").Do()
|
||||
// svc.Events.List().Fields("nextPageToken", "items(id,updated)").Do()
|
||||
//
|
||||
// Another way to find field names is through the Google API explorer:
|
||||
// https://developers.google.com/apis-explorer/#p/
|
||||
|
2
vendor/google.golang.org/api/googleapi/transport/apikey.go
generated
vendored
2
vendor/google.golang.org/api/googleapi/transport/apikey.go
generated
vendored
@@ -7,7 +7,7 @@
|
||||
//
|
||||
// This package is DEPRECATED. Users should instead use,
|
||||
//
|
||||
// service, err := NewService(..., option.WithAPIKey(...))
|
||||
// service, err := NewService(..., option.WithAPIKey(...))
|
||||
package transport
|
||||
|
||||
import (
|
||||
|
58
vendor/google.golang.org/api/internal/cert/default_cert.go
generated
vendored
Normal file
58
vendor/google.golang.org/api/internal/cert/default_cert.go
generated
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
// Copyright 2020 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Package cert contains certificate tools for Google API clients.
|
||||
// This package is intended to be used with crypto/tls.Config.GetClientCertificate.
|
||||
//
|
||||
// The certificates can be used to satisfy Google's Endpoint Validation.
|
||||
// See https://cloud.google.com/endpoint-verification/docs/overview
|
||||
//
|
||||
// This package is not intended for use by end developers. Use the
|
||||
// google.golang.org/api/option package to configure API clients.
|
||||
package cert
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// defaultCertData holds all the variables pertaining to
|
||||
// the default certficate source created by DefaultSource.
|
||||
//
|
||||
// A singleton model is used to allow the source to be reused
|
||||
// by the transport layer.
|
||||
type defaultCertData struct {
|
||||
once sync.Once
|
||||
source Source
|
||||
err error
|
||||
}
|
||||
|
||||
var (
|
||||
defaultCert defaultCertData
|
||||
)
|
||||
|
||||
// Source is a function that can be passed into crypto/tls.Config.GetClientCertificate.
|
||||
type Source func(*tls.CertificateRequestInfo) (*tls.Certificate, error)
|
||||
|
||||
// errSourceUnavailable is a sentinel error to indicate certificate source is unavailable.
|
||||
var errSourceUnavailable = errors.New("certificate source is unavailable")
|
||||
|
||||
// DefaultSource returns a certificate source using the preferred EnterpriseCertificateProxySource.
|
||||
// If EnterpriseCertificateProxySource is not available, fall back to the legacy SecureConnectSource.
|
||||
//
|
||||
// If neither source is available (due to missing configurations), a nil Source and a nil Error are
|
||||
// returned to indicate that a default certificate source is unavailable.
|
||||
func DefaultSource() (Source, error) {
|
||||
defaultCert.once.Do(func() {
|
||||
defaultCert.source, defaultCert.err = NewEnterpriseCertificateProxySource("")
|
||||
if errors.Is(defaultCert.err, errSourceUnavailable) {
|
||||
defaultCert.source, defaultCert.err = NewSecureConnectSource("")
|
||||
if errors.Is(defaultCert.err, errSourceUnavailable) {
|
||||
defaultCert.source, defaultCert.err = nil, nil
|
||||
}
|
||||
}
|
||||
})
|
||||
return defaultCert.source, defaultCert.err
|
||||
}
|
54
vendor/google.golang.org/api/internal/cert/enterprise_cert.go
generated
vendored
Normal file
54
vendor/google.golang.org/api/internal/cert/enterprise_cert.go
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
// Copyright 2022 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Package cert contains certificate tools for Google API clients.
|
||||
// This package is intended to be used with crypto/tls.Config.GetClientCertificate.
|
||||
//
|
||||
// The certificates can be used to satisfy Google's Endpoint Validation.
|
||||
// See https://cloud.google.com/endpoint-verification/docs/overview
|
||||
//
|
||||
// This package is not intended for use by end developers. Use the
|
||||
// google.golang.org/api/option package to configure API clients.
|
||||
package cert
|
||||
|
||||
import (
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
|
||||
"github.com/googleapis/enterprise-certificate-proxy/client"
|
||||
)
|
||||
|
||||
type ecpSource struct {
|
||||
key *client.Key
|
||||
}
|
||||
|
||||
// NewEnterpriseCertificateProxySource creates a certificate source
|
||||
// using the Enterprise Certificate Proxy client, which delegates
|
||||
// certifcate related operations to an OS-specific "signer binary"
|
||||
// that communicates with the native keystore (ex. keychain on MacOS).
|
||||
//
|
||||
// The configFilePath points to a config file containing relevant parameters
|
||||
// such as the certificate issuer and the location of the signer binary.
|
||||
// If configFilePath is empty, the client will attempt to load the config from
|
||||
// a well-known gcloud location.
|
||||
func NewEnterpriseCertificateProxySource(configFilePath string) (Source, error) {
|
||||
key, err := client.Cred(configFilePath)
|
||||
if err != nil {
|
||||
if errors.Is(err, client.ErrCredUnavailable) {
|
||||
return nil, errSourceUnavailable
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return (&ecpSource{
|
||||
key: key,
|
||||
}).getClientCertificate, nil
|
||||
}
|
||||
|
||||
func (s *ecpSource) getClientCertificate(info *tls.CertificateRequestInfo) (*tls.Certificate, error) {
|
||||
var cert tls.Certificate
|
||||
cert.PrivateKey = s.key
|
||||
cert.Certificate = s.key.CertificateChain()
|
||||
return &cert, nil
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
// Copyright 2020 Google LLC.
|
||||
// Copyright 2022 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
@@ -32,65 +32,48 @@ const (
|
||||
metadataFile = "context_aware_metadata.json"
|
||||
)
|
||||
|
||||
// defaultCertData holds all the variables pertaining to
|
||||
// the default certficate source created by DefaultSource.
|
||||
type defaultCertData struct {
|
||||
once sync.Once
|
||||
source Source
|
||||
err error
|
||||
cachedCertMutex sync.Mutex
|
||||
cachedCert *tls.Certificate
|
||||
}
|
||||
|
||||
var (
|
||||
defaultCert defaultCertData
|
||||
)
|
||||
|
||||
// Source is a function that can be passed into crypto/tls.Config.GetClientCertificate.
|
||||
type Source func(*tls.CertificateRequestInfo) (*tls.Certificate, error)
|
||||
|
||||
// DefaultSource returns a certificate source that execs the command specified
|
||||
// in the file at ~/.secureConnect/context_aware_metadata.json
|
||||
//
|
||||
// If that file does not exist, a nil source is returned.
|
||||
func DefaultSource() (Source, error) {
|
||||
defaultCert.once.Do(func() {
|
||||
defaultCert.source, defaultCert.err = newSecureConnectSource()
|
||||
})
|
||||
return defaultCert.source, defaultCert.err
|
||||
}
|
||||
|
||||
type secureConnectSource struct {
|
||||
metadata secureConnectMetadata
|
||||
|
||||
// Cache the cert to avoid executing helper command repeatedly.
|
||||
cachedCertMutex sync.Mutex
|
||||
cachedCert *tls.Certificate
|
||||
}
|
||||
|
||||
type secureConnectMetadata struct {
|
||||
Cmd []string `json:"cert_provider_command"`
|
||||
}
|
||||
|
||||
// newSecureConnectSource creates a secureConnectSource by reading the well-known file.
|
||||
func newSecureConnectSource() (Source, error) {
|
||||
user, err := user.Current()
|
||||
if err != nil {
|
||||
// Ignore.
|
||||
return nil, nil
|
||||
}
|
||||
filename := filepath.Join(user.HomeDir, metadataPath, metadataFile)
|
||||
file, err := ioutil.ReadFile(filename)
|
||||
if os.IsNotExist(err) {
|
||||
// Ignore.
|
||||
return nil, nil
|
||||
// NewSecureConnectSource creates a certificate source using
|
||||
// the Secure Connect Helper and its associated metadata file.
|
||||
//
|
||||
// The configFilePath points to the location of the context aware metadata file.
|
||||
// If configFilePath is empty, use the default context aware metadata location.
|
||||
func NewSecureConnectSource(configFilePath string) (Source, error) {
|
||||
if configFilePath == "" {
|
||||
user, err := user.Current()
|
||||
if err != nil {
|
||||
// Error locating the default config means Secure Connect is not supported.
|
||||
return nil, errSourceUnavailable
|
||||
}
|
||||
configFilePath = filepath.Join(user.HomeDir, metadataPath, metadataFile)
|
||||
}
|
||||
|
||||
file, err := ioutil.ReadFile(configFilePath)
|
||||
if err != nil {
|
||||
if errors.Is(err, os.ErrNotExist) {
|
||||
// Config file missing means Secure Connect is not supported.
|
||||
return nil, errSourceUnavailable
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var metadata secureConnectMetadata
|
||||
if err := json.Unmarshal(file, &metadata); err != nil {
|
||||
return nil, fmt.Errorf("cert: could not parse JSON in %q: %v", filename, err)
|
||||
return nil, fmt.Errorf("cert: could not parse JSON in %q: %w", configFilePath, err)
|
||||
}
|
||||
if err := validateMetadata(metadata); err != nil {
|
||||
return nil, fmt.Errorf("cert: invalid config in %q: %v", filename, err)
|
||||
return nil, fmt.Errorf("cert: invalid config in %q: %w", configFilePath, err)
|
||||
}
|
||||
return (&secureConnectSource{
|
||||
metadata: metadata,
|
||||
@@ -105,10 +88,10 @@ func validateMetadata(metadata secureConnectMetadata) error {
|
||||
}
|
||||
|
||||
func (s *secureConnectSource) getClientCertificate(info *tls.CertificateRequestInfo) (*tls.Certificate, error) {
|
||||
defaultCert.cachedCertMutex.Lock()
|
||||
defer defaultCert.cachedCertMutex.Unlock()
|
||||
if defaultCert.cachedCert != nil && !isCertificateExpired(defaultCert.cachedCert) {
|
||||
return defaultCert.cachedCert, nil
|
||||
s.cachedCertMutex.Lock()
|
||||
defer s.cachedCertMutex.Unlock()
|
||||
if s.cachedCert != nil && !isCertificateExpired(s.cachedCert) {
|
||||
return s.cachedCert, nil
|
||||
}
|
||||
// Expand OS environment variables in the cert provider command such as "$HOME".
|
||||
for i := 0; i < len(s.metadata.Cmd); i++ {
|
||||
@@ -117,14 +100,13 @@ func (s *secureConnectSource) getClientCertificate(info *tls.CertificateRequestI
|
||||
command := s.metadata.Cmd
|
||||
data, err := exec.Command(command[0], command[1:]...).Output()
|
||||
if err != nil {
|
||||
// TODO(cbro): read stderr for error message? Might contain sensitive info.
|
||||
return nil, err
|
||||
}
|
||||
cert, err := tls.X509KeyPair(data, data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defaultCert.cachedCert = &cert
|
||||
s.cachedCert = &cert
|
||||
return &cert, nil
|
||||
}
|
||||
|
87
vendor/google.golang.org/api/internal/creds.go
generated
vendored
87
vendor/google.golang.org/api/internal/creds.go
generated
vendored
@@ -6,10 +6,15 @@ package internal
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"golang.org/x/oauth2"
|
||||
"google.golang.org/api/internal/impersonate"
|
||||
@@ -17,6 +22,8 @@ import (
|
||||
"golang.org/x/oauth2/google"
|
||||
)
|
||||
|
||||
const quotaProjectEnvVar = "GOOGLE_CLOUD_QUOTA_PROJECT"
|
||||
|
||||
// Creds returns credential information obtained from DialSettings, or if none, then
|
||||
// it returns default credential information.
|
||||
func Creds(ctx context.Context, ds *DialSettings) (*google.Credentials, error) {
|
||||
@@ -70,17 +77,35 @@ const (
|
||||
//
|
||||
// - A self-signed JWT flow will be executed if the following conditions are
|
||||
// met:
|
||||
// (1) At least one of the following is true:
|
||||
// (a) No scope is provided
|
||||
// (b) Scope for self-signed JWT flow is enabled
|
||||
// (c) Audiences are explicitly provided by users
|
||||
// (2) No service account impersontation
|
||||
//
|
||||
// (1) At least one of the following is true:
|
||||
// (a) No scope is provided
|
||||
// (b) Scope for self-signed JWT flow is enabled
|
||||
// (c) Audiences are explicitly provided by users
|
||||
// (2) No service account impersontation
|
||||
//
|
||||
// - Otherwise, executes standard OAuth 2.0 flow
|
||||
// More details: google.aip.dev/auth/4111
|
||||
func credentialsFromJSON(ctx context.Context, data []byte, ds *DialSettings) (*google.Credentials, error) {
|
||||
var params google.CredentialsParams
|
||||
params.Scopes = ds.GetScopes()
|
||||
|
||||
// Determine configurations for the OAuth2 transport, which is separate from the API transport.
|
||||
// The OAuth2 transport and endpoint will be configured for mTLS if applicable.
|
||||
clientCertSource, oauth2Endpoint, err := GetClientCertificateSourceAndEndpoint(oauth2DialSettings(ds))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
params.TokenURL = oauth2Endpoint
|
||||
if clientCertSource != nil {
|
||||
tlsConfig := &tls.Config{
|
||||
GetClientCertificate: clientCertSource,
|
||||
}
|
||||
ctx = context.WithValue(ctx, oauth2.HTTPClient, customHTTPClient(tlsConfig))
|
||||
}
|
||||
|
||||
// By default, a standard OAuth 2.0 token source is created
|
||||
cred, err := google.CredentialsFromJSON(ctx, data, ds.GetScopes()...)
|
||||
cred, err := google.CredentialsFromJSONWithParams(ctx, data, params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -130,14 +155,22 @@ func selfSignedJWTTokenSource(data []byte, ds *DialSettings) (oauth2.TokenSource
|
||||
}
|
||||
}
|
||||
|
||||
// QuotaProjectFromCreds returns the quota project from the JSON blob in the provided credentials.
|
||||
//
|
||||
// NOTE(cbro): consider promoting this to a field on google.Credentials.
|
||||
func QuotaProjectFromCreds(cred *google.Credentials) string {
|
||||
// GetQuotaProject retrieves quota project with precedence being: client option,
|
||||
// environment variable, creds file.
|
||||
func GetQuotaProject(creds *google.Credentials, clientOpt string) string {
|
||||
if clientOpt != "" {
|
||||
return clientOpt
|
||||
}
|
||||
if env := os.Getenv(quotaProjectEnvVar); env != "" {
|
||||
return env
|
||||
}
|
||||
if creds == nil {
|
||||
return ""
|
||||
}
|
||||
var v struct {
|
||||
QuotaProject string `json:"quota_project_id"`
|
||||
}
|
||||
if err := json.Unmarshal(cred.JSON, &v); err != nil {
|
||||
if err := json.Unmarshal(creds.JSON, &v); err != nil {
|
||||
return ""
|
||||
}
|
||||
return v.QuotaProject
|
||||
@@ -156,3 +189,35 @@ func impersonateCredentials(ctx context.Context, creds *google.Credentials, ds *
|
||||
ProjectID: creds.ProjectID,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// oauth2DialSettings returns the settings to be used by the OAuth2 transport, which is separate from the API transport.
|
||||
func oauth2DialSettings(ds *DialSettings) *DialSettings {
|
||||
var ods DialSettings
|
||||
ods.DefaultEndpoint = google.Endpoint.TokenURL
|
||||
ods.DefaultMTLSEndpoint = google.MTLSTokenURL
|
||||
ods.ClientCertSource = ds.ClientCertSource
|
||||
return &ods
|
||||
}
|
||||
|
||||
// customHTTPClient constructs an HTTPClient using the provided tlsConfig, to support mTLS.
|
||||
func customHTTPClient(tlsConfig *tls.Config) *http.Client {
|
||||
trans := baseTransport()
|
||||
trans.TLSClientConfig = tlsConfig
|
||||
return &http.Client{Transport: trans}
|
||||
}
|
||||
|
||||
func baseTransport() *http.Transport {
|
||||
return &http.Transport{
|
||||
Proxy: http.ProxyFromEnvironment,
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 30 * time.Second,
|
||||
KeepAlive: 30 * time.Second,
|
||||
DualStack: true,
|
||||
}).DialContext,
|
||||
MaxIdleConns: 100,
|
||||
MaxIdleConnsPerHost: 100,
|
||||
IdleConnTimeout: 90 * time.Second,
|
||||
TLSHandshakeTimeout: 10 * time.Second,
|
||||
ExpectContinueTimeout: 1 * time.Second,
|
||||
}
|
||||
}
|
||||
|
@@ -6,32 +6,33 @@
|
||||
// Authentication according to https://google.aip.dev/auth/4114
|
||||
//
|
||||
// The overall logic for DCA is as follows:
|
||||
// 1. If both endpoint override and client certificate are specified, use them as is.
|
||||
// 2. If user does not specify client certificate, we will attempt to use default
|
||||
// client certificate.
|
||||
// 3. If user does not specify endpoint override, we will use defaultMtlsEndpoint if
|
||||
// client certificate is available and defaultEndpoint otherwise.
|
||||
// 1. If both endpoint override and client certificate are specified, use them as is.
|
||||
// 2. If user does not specify client certificate, we will attempt to use default
|
||||
// client certificate.
|
||||
// 3. If user does not specify endpoint override, we will use defaultMtlsEndpoint if
|
||||
// client certificate is available and defaultEndpoint otherwise.
|
||||
//
|
||||
// Implications of the above logic:
|
||||
// 1. If the user specifies a non-mTLS endpoint override but client certificate is
|
||||
// available, we will pass along the cert anyway and let the server decide what to do.
|
||||
// 2. If the user specifies an mTLS endpoint override but client certificate is not
|
||||
// available, we will not fail-fast, but let backend throw error when connecting.
|
||||
// 1. If the user specifies a non-mTLS endpoint override but client certificate is
|
||||
// available, we will pass along the cert anyway and let the server decide what to do.
|
||||
// 2. If the user specifies an mTLS endpoint override but client certificate is not
|
||||
// available, we will not fail-fast, but let backend throw error when connecting.
|
||||
//
|
||||
// We would like to avoid introducing client-side logic that parses whether the
|
||||
// endpoint override is an mTLS url, since the url pattern may change at anytime.
|
||||
//
|
||||
// This package is not intended for use by end developers. Use the
|
||||
// google.golang.org/api/option package to configure API clients.
|
||||
package dca
|
||||
|
||||
// Package internal supports the options and transport packages.
|
||||
package internal
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"google.golang.org/api/internal"
|
||||
"google.golang.org/api/transport/cert"
|
||||
"google.golang.org/api/internal/cert"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -43,7 +44,7 @@ const (
|
||||
// GetClientCertificateSourceAndEndpoint is a convenience function that invokes
|
||||
// getClientCertificateSource and getEndpoint sequentially and returns the client
|
||||
// cert source and endpoint as a tuple.
|
||||
func GetClientCertificateSourceAndEndpoint(settings *internal.DialSettings) (cert.Source, string, error) {
|
||||
func GetClientCertificateSourceAndEndpoint(settings *DialSettings) (cert.Source, string, error) {
|
||||
clientCertSource, err := getClientCertificateSource(settings)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
@@ -65,7 +66,7 @@ func GetClientCertificateSourceAndEndpoint(settings *internal.DialSettings) (cer
|
||||
// Important Note: For now, the environment variable GOOGLE_API_USE_CLIENT_CERTIFICATE
|
||||
// must be set to "true" to allow certificate to be used (including user provided
|
||||
// certificates). For details, see AIP-4114.
|
||||
func getClientCertificateSource(settings *internal.DialSettings) (cert.Source, error) {
|
||||
func getClientCertificateSource(settings *DialSettings) (cert.Source, error) {
|
||||
if !isClientCertificateEnabled() {
|
||||
return nil, nil
|
||||
} else if settings.ClientCertSource != nil {
|
||||
@@ -94,7 +95,7 @@ func isClientCertificateEnabled() bool {
|
||||
// URL (ex. https://...), then the user-provided address will be merged into
|
||||
// the default endpoint. For example, WithEndpoint("myhost:8000") and
|
||||
// WithDefaultEndpoint("https://foo.com/bar/baz") will return "https://myhost:8080/bar/baz"
|
||||
func getEndpoint(settings *internal.DialSettings, clientCertSource cert.Source) (string, error) {
|
||||
func getEndpoint(settings *DialSettings, clientCertSource cert.Source) (string, error) {
|
||||
if settings.Endpoint == "" {
|
||||
mtlsMode := getMTLSMode()
|
||||
if mtlsMode == mTLSModeAlways || (clientCertSource != nil && mtlsMode == mTLSModeAuto) {
|
24
vendor/google.golang.org/api/internal/gensupport/error.go
generated
vendored
Normal file
24
vendor/google.golang.org/api/internal/gensupport/error.go
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
// Copyright 2022 Google LLC. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package gensupport
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/googleapis/gax-go/v2/apierror"
|
||||
"google.golang.org/api/googleapi"
|
||||
)
|
||||
|
||||
// WrapError creates an [apierror.APIError] from err, wraps it in err, and
|
||||
// returns err. If err is not a [googleapi.Error] (or a
|
||||
// [google.golang.org/grpc/status.Status]), it returns err without modification.
|
||||
func WrapError(err error) error {
|
||||
var herr *googleapi.Error
|
||||
apiError, ok := apierror.ParseError(err, false)
|
||||
if ok && errors.As(err, &herr) {
|
||||
herr.Wrap(apiError)
|
||||
}
|
||||
return err
|
||||
}
|
33
vendor/google.golang.org/api/internal/gensupport/json.go
generated
vendored
33
vendor/google.golang.org/api/internal/gensupport/json.go
generated
vendored
@@ -13,9 +13,10 @@ import (
|
||||
|
||||
// MarshalJSON returns a JSON encoding of schema containing only selected fields.
|
||||
// A field is selected if any of the following is true:
|
||||
// * it has a non-empty value
|
||||
// * its field name is present in forceSendFields and it is not a nil pointer or nil interface
|
||||
// * its field name is present in nullFields.
|
||||
// - it has a non-empty value
|
||||
// - its field name is present in forceSendFields and it is not a nil pointer or nil interface
|
||||
// - its field name is present in nullFields.
|
||||
//
|
||||
// The JSON key for each selected field is taken from the field's json: struct tag.
|
||||
func MarshalJSON(schema interface{}, forceSendFields, nullFields []string) ([]byte, error) {
|
||||
if len(forceSendFields) == 0 && len(nullFields) == 0 {
|
||||
@@ -85,7 +86,12 @@ func schemaToMap(schema interface{}, mustInclude, useNull map[string]bool, useNu
|
||||
if f.Type.Kind() == reflect.Map && useNullMaps[f.Name] != nil {
|
||||
ms, ok := v.Interface().(map[string]string)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("field %q has keys in NullFields but is not a map[string]string", f.Name)
|
||||
mi, err := initMapSlow(v, f.Name, useNullMaps)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
m[tag.apiName] = mi
|
||||
continue
|
||||
}
|
||||
mi := map[string]interface{}{}
|
||||
for k, v := range ms {
|
||||
@@ -119,6 +125,25 @@ func schemaToMap(schema interface{}, mustInclude, useNull map[string]bool, useNu
|
||||
return m, nil
|
||||
}
|
||||
|
||||
// initMapSlow uses reflection to build up a map object. This is slower than
|
||||
// the default behavior so it should be used only as a fallback.
|
||||
func initMapSlow(rv reflect.Value, fieldName string, useNullMaps map[string]map[string]bool) (map[string]interface{}, error) {
|
||||
mi := map[string]interface{}{}
|
||||
iter := rv.MapRange()
|
||||
for iter.Next() {
|
||||
k, ok := iter.Key().Interface().(string)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("field %q has keys in NullFields but is not a map[string]any", fieldName)
|
||||
}
|
||||
v := iter.Value().Interface()
|
||||
mi[k] = v
|
||||
}
|
||||
for k := range useNullMaps[fieldName] {
|
||||
mi[k] = nil
|
||||
}
|
||||
return mi, nil
|
||||
}
|
||||
|
||||
// formatAsString returns a string representation of v, dereferencing it first if possible.
|
||||
func formatAsString(v reflect.Value, kind reflect.Kind) string {
|
||||
if kind == reflect.Ptr && !v.IsNil() {
|
||||
|
140
vendor/google.golang.org/api/internal/gensupport/media.go
generated
vendored
140
vendor/google.golang.org/api/internal/gensupport/media.go
generated
vendored
@@ -15,93 +15,12 @@ import (
|
||||
"net/textproto"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
gax "github.com/googleapis/gax-go/v2"
|
||||
"google.golang.org/api/googleapi"
|
||||
)
|
||||
|
||||
const sniffBuffSize = 512
|
||||
|
||||
func newContentSniffer(r io.Reader) *contentSniffer {
|
||||
return &contentSniffer{r: r}
|
||||
}
|
||||
|
||||
// contentSniffer wraps a Reader, and reports the content type determined by sniffing up to 512 bytes from the Reader.
|
||||
type contentSniffer struct {
|
||||
r io.Reader
|
||||
start []byte // buffer for the sniffed bytes.
|
||||
err error // set to any error encountered while reading bytes to be sniffed.
|
||||
|
||||
ctype string // set on first sniff.
|
||||
sniffed bool // set to true on first sniff.
|
||||
}
|
||||
|
||||
func (cs *contentSniffer) Read(p []byte) (n int, err error) {
|
||||
// Ensure that the content type is sniffed before any data is consumed from Reader.
|
||||
_, _ = cs.ContentType()
|
||||
|
||||
if len(cs.start) > 0 {
|
||||
n := copy(p, cs.start)
|
||||
cs.start = cs.start[n:]
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// We may have read some bytes into start while sniffing, even if the read ended in an error.
|
||||
// We should first return those bytes, then the error.
|
||||
if cs.err != nil {
|
||||
return 0, cs.err
|
||||
}
|
||||
|
||||
// Now we have handled all bytes that were buffered while sniffing. Now just delegate to the underlying reader.
|
||||
return cs.r.Read(p)
|
||||
}
|
||||
|
||||
// ContentType returns the sniffed content type, and whether the content type was successfully sniffed.
|
||||
func (cs *contentSniffer) ContentType() (string, bool) {
|
||||
if cs.sniffed {
|
||||
return cs.ctype, cs.ctype != ""
|
||||
}
|
||||
cs.sniffed = true
|
||||
// If ReadAll hits EOF, it returns err==nil.
|
||||
cs.start, cs.err = ioutil.ReadAll(io.LimitReader(cs.r, sniffBuffSize))
|
||||
|
||||
// Don't try to detect the content type based on possibly incomplete data.
|
||||
if cs.err != nil {
|
||||
return "", false
|
||||
}
|
||||
|
||||
cs.ctype = http.DetectContentType(cs.start)
|
||||
return cs.ctype, true
|
||||
}
|
||||
|
||||
// DetermineContentType determines the content type of the supplied reader.
|
||||
// If the content type is already known, it can be specified via ctype.
|
||||
// Otherwise, the content of media will be sniffed to determine the content type.
|
||||
// If media implements googleapi.ContentTyper (deprecated), this will be used
|
||||
// instead of sniffing the content.
|
||||
// After calling DetectContentType the caller must not perform further reads on
|
||||
// media, but rather read from the Reader that is returned.
|
||||
func DetermineContentType(media io.Reader, ctype string) (io.Reader, string) {
|
||||
// Note: callers could avoid calling DetectContentType if ctype != "",
|
||||
// but doing the check inside this function reduces the amount of
|
||||
// generated code.
|
||||
if ctype != "" {
|
||||
return media, ctype
|
||||
}
|
||||
|
||||
// For backwards compatibility, allow clients to set content
|
||||
// type by providing a ContentTyper for media.
|
||||
if typer, ok := media.(googleapi.ContentTyper); ok {
|
||||
return media, typer.ContentType()
|
||||
}
|
||||
|
||||
sniffer := newContentSniffer(media)
|
||||
if ctype, ok := sniffer.ContentType(); ok {
|
||||
return sniffer, ctype
|
||||
}
|
||||
// If content type could not be sniffed, reads from sniffer will eventually fail with an error.
|
||||
return sniffer, ""
|
||||
}
|
||||
|
||||
type typeReader struct {
|
||||
io.Reader
|
||||
typ string
|
||||
@@ -217,12 +136,13 @@ func PrepareUpload(media io.Reader, chunkSize int) (r io.Reader, mb *MediaBuffer
|
||||
// code only.
|
||||
type MediaInfo struct {
|
||||
// At most one of Media and MediaBuffer will be set.
|
||||
media io.Reader
|
||||
buffer *MediaBuffer
|
||||
singleChunk bool
|
||||
mType string
|
||||
size int64 // mediaSize, if known. Used only for calls to progressUpdater_.
|
||||
progressUpdater googleapi.ProgressUpdater
|
||||
media io.Reader
|
||||
buffer *MediaBuffer
|
||||
singleChunk bool
|
||||
mType string
|
||||
size int64 // mediaSize, if known. Used only for calls to progressUpdater_.
|
||||
progressUpdater googleapi.ProgressUpdater
|
||||
chunkRetryDeadline time.Duration
|
||||
}
|
||||
|
||||
// NewInfoFromMedia should be invoked from the Media method of a call. It returns a
|
||||
@@ -232,8 +152,12 @@ func NewInfoFromMedia(r io.Reader, options []googleapi.MediaOption) *MediaInfo {
|
||||
mi := &MediaInfo{}
|
||||
opts := googleapi.ProcessMediaOptions(options)
|
||||
if !opts.ForceEmptyContentType {
|
||||
r, mi.mType = DetermineContentType(r, opts.ContentType)
|
||||
mi.mType = opts.ContentType
|
||||
if mi.mType == "" {
|
||||
r, mi.mType = gax.DetermineContentType(r)
|
||||
}
|
||||
}
|
||||
mi.chunkRetryDeadline = opts.ChunkRetryDeadline
|
||||
mi.media, mi.buffer, mi.singleChunk = PrepareUpload(r, opts.ChunkSize)
|
||||
return mi
|
||||
}
|
||||
@@ -242,7 +166,11 @@ func NewInfoFromMedia(r io.Reader, options []googleapi.MediaOption) *MediaInfo {
|
||||
// call. It returns a MediaInfo using the given reader, size and media type.
|
||||
func NewInfoFromResumableMedia(r io.ReaderAt, size int64, mediaType string) *MediaInfo {
|
||||
rdr := ReaderAtToReader(r, size)
|
||||
rdr, mType := DetermineContentType(rdr, mediaType)
|
||||
mType := mediaType
|
||||
if mType == "" {
|
||||
rdr, mType = gax.DetermineContentType(rdr)
|
||||
}
|
||||
|
||||
return &MediaInfo{
|
||||
size: size,
|
||||
mType: mType,
|
||||
@@ -286,13 +214,12 @@ func (mi *MediaInfo) UploadRequest(reqHeaders http.Header, body io.Reader) (newB
|
||||
// be retried because the data is stored in the MediaBuffer.
|
||||
media, _, _, _ = mi.buffer.Chunk()
|
||||
}
|
||||
toCleanup := []io.Closer{}
|
||||
if media != nil {
|
||||
fb := readerFunc(body)
|
||||
fm := readerFunc(media)
|
||||
combined, ctype := CombineBodyMedia(body, "application/json", media, mi.mType)
|
||||
toCleanup := []io.Closer{
|
||||
combined,
|
||||
}
|
||||
toCleanup = append(toCleanup, combined)
|
||||
if fb != nil && fm != nil {
|
||||
getBody = func() (io.ReadCloser, error) {
|
||||
rb := ioutil.NopCloser(fb())
|
||||
@@ -306,18 +233,30 @@ func (mi *MediaInfo) UploadRequest(reqHeaders http.Header, body io.Reader) (newB
|
||||
return r, nil
|
||||
}
|
||||
}
|
||||
cleanup = func() {
|
||||
for _, closer := range toCleanup {
|
||||
_ = closer.Close()
|
||||
}
|
||||
|
||||
}
|
||||
reqHeaders.Set("Content-Type", ctype)
|
||||
body = combined
|
||||
}
|
||||
if mi.buffer != nil && mi.mType != "" && !mi.singleChunk {
|
||||
// This happens when initiating a resumable upload session.
|
||||
// The initial request contains a JSON body rather than media.
|
||||
// It can be retried with a getBody function that re-creates the request body.
|
||||
fb := readerFunc(body)
|
||||
if fb != nil {
|
||||
getBody = func() (io.ReadCloser, error) {
|
||||
rb := ioutil.NopCloser(fb())
|
||||
toCleanup = append(toCleanup, rb)
|
||||
return rb, nil
|
||||
}
|
||||
}
|
||||
reqHeaders.Set("X-Upload-Content-Type", mi.mType)
|
||||
}
|
||||
// Ensure that any bodies created in getBody are cleaned up.
|
||||
cleanup = func() {
|
||||
for _, closer := range toCleanup {
|
||||
_ = closer.Close()
|
||||
}
|
||||
|
||||
}
|
||||
return body, getBody, cleanup
|
||||
}
|
||||
|
||||
@@ -356,6 +295,7 @@ func (mi *MediaInfo) ResumableUpload(locURI string) *ResumableUpload {
|
||||
mi.progressUpdater(curr, mi.size)
|
||||
}
|
||||
},
|
||||
ChunkRetryDeadline: mi.chunkRetryDeadline,
|
||||
}
|
||||
}
|
||||
|
||||
|
2
vendor/google.golang.org/api/internal/gensupport/params.go
generated
vendored
2
vendor/google.golang.org/api/internal/gensupport/params.go
generated
vendored
@@ -37,7 +37,7 @@ func (u URLParams) SetMulti(key string, values []string) {
|
||||
u[key] = values
|
||||
}
|
||||
|
||||
// Encode encodes the values into ``URL encoded'' form
|
||||
// Encode encodes the values into “URL encoded” form
|
||||
// ("bar=baz&foo=quux") sorted by key.
|
||||
func (u URLParams) Encode() string {
|
||||
return url.Values(u).Encode()
|
||||
|
128
vendor/google.golang.org/api/internal/gensupport/resumable.go
generated
vendored
128
vendor/google.golang.org/api/internal/gensupport/resumable.go
generated
vendored
@@ -10,34 +10,12 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
gax "github.com/googleapis/gax-go/v2"
|
||||
)
|
||||
|
||||
// Backoff is an interface around gax.Backoff's Pause method, allowing tests to provide their
|
||||
// own implementation.
|
||||
type Backoff interface {
|
||||
Pause() time.Duration
|
||||
}
|
||||
|
||||
// These are declared as global variables so that tests can overwrite them.
|
||||
var (
|
||||
retryDeadline = 32 * time.Second
|
||||
backoff = func() Backoff {
|
||||
return &gax.Backoff{Initial: 100 * time.Millisecond}
|
||||
}
|
||||
// isRetryable is a platform-specific hook, specified in retryable_linux.go
|
||||
syscallRetryable func(error) bool = func(err error) bool { return false }
|
||||
)
|
||||
|
||||
const (
|
||||
// statusTooManyRequests is returned by the storage API if the
|
||||
// per-project limits have been temporarily exceeded. The request
|
||||
// should be retried.
|
||||
// https://cloud.google.com/storage/docs/json_api/v1/status-codes#standardcodes
|
||||
statusTooManyRequests = 429
|
||||
"github.com/google/uuid"
|
||||
"google.golang.org/api/internal"
|
||||
)
|
||||
|
||||
// ResumableUpload is used by the generated APIs to provide resumable uploads.
|
||||
@@ -57,6 +35,18 @@ type ResumableUpload struct {
|
||||
|
||||
// Callback is an optional function that will be periodically called with the cumulative number of bytes uploaded.
|
||||
Callback func(int64)
|
||||
|
||||
// Retry optionally configures retries for requests made against the upload.
|
||||
Retry *RetryConfig
|
||||
|
||||
// ChunkRetryDeadline configures the per-chunk deadline after which no further
|
||||
// retries should happen.
|
||||
ChunkRetryDeadline time.Duration
|
||||
|
||||
// Track current request invocation ID and attempt count for retry metric
|
||||
// headers.
|
||||
invocationID string
|
||||
attempts int
|
||||
}
|
||||
|
||||
// Progress returns the number of bytes uploaded at this point.
|
||||
@@ -91,6 +81,10 @@ func (rx *ResumableUpload) doUploadRequest(ctx context.Context, data io.Reader,
|
||||
req.Header.Set("Content-Type", rx.MediaType)
|
||||
req.Header.Set("User-Agent", rx.UserAgent)
|
||||
|
||||
baseXGoogHeader := "gl-go/" + GoVersion() + " gdcl/" + internal.Version
|
||||
invocationHeader := fmt.Sprintf("gccl-invocation-id/%s gccl-attempt-count/%d", rx.invocationID, rx.attempts)
|
||||
req.Header.Set("X-Goog-Api-Client", strings.Join([]string{baseXGoogHeader, invocationHeader}, " "))
|
||||
|
||||
// Google's upload endpoint uses status code 308 for a
|
||||
// different purpose than the "308 Permanent Redirect"
|
||||
// since-standardized in RFC 7238. Because of the conflict in
|
||||
@@ -174,29 +168,69 @@ func (rx *ResumableUpload) Upload(ctx context.Context) (resp *http.Response, err
|
||||
}
|
||||
return nil, err
|
||||
}
|
||||
// This case is very unlikely but possible only if rx.ChunkRetryDeadline is
|
||||
// set to a very small value, in which case no requests will be sent before
|
||||
// the deadline. Return an error to avoid causing a panic.
|
||||
if resp == nil {
|
||||
return nil, fmt.Errorf("upload request to %v not sent, choose larger value for ChunkRetryDealine", rx.URI)
|
||||
}
|
||||
return resp, nil
|
||||
}
|
||||
// Configure retryable error criteria.
|
||||
errorFunc := rx.Retry.errorFunc()
|
||||
|
||||
// Configure per-chunk retry deadline.
|
||||
var retryDeadline time.Duration
|
||||
if rx.ChunkRetryDeadline != 0 {
|
||||
retryDeadline = rx.ChunkRetryDeadline
|
||||
} else {
|
||||
retryDeadline = defaultRetryDeadline
|
||||
}
|
||||
|
||||
// Send all chunks.
|
||||
for {
|
||||
var pause time.Duration
|
||||
|
||||
// Each chunk gets its own initialized-at-zero retry.
|
||||
bo := backoff()
|
||||
quitAfter := time.After(retryDeadline)
|
||||
// Each chunk gets its own initialized-at-zero backoff and invocation ID.
|
||||
bo := rx.Retry.backoff()
|
||||
quitAfterTimer := time.NewTimer(retryDeadline)
|
||||
rx.attempts = 1
|
||||
rx.invocationID = uuid.New().String()
|
||||
|
||||
// Retry loop for a single chunk.
|
||||
for {
|
||||
pauseTimer := time.NewTimer(pause)
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
quitAfterTimer.Stop()
|
||||
pauseTimer.Stop()
|
||||
if err == nil {
|
||||
err = ctx.Err()
|
||||
}
|
||||
return prepareReturn(resp, err)
|
||||
case <-time.After(pause):
|
||||
case <-quitAfter:
|
||||
case <-pauseTimer.C:
|
||||
case <-quitAfterTimer.C:
|
||||
pauseTimer.Stop()
|
||||
return prepareReturn(resp, err)
|
||||
}
|
||||
pauseTimer.Stop()
|
||||
|
||||
// Check for context cancellation or timeout once more. If more than one
|
||||
// case in the select statement above was satisfied at the same time, Go
|
||||
// will choose one arbitrarily.
|
||||
// That can cause an operation to go through even if the context was
|
||||
// canceled before or the timeout was reached.
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
quitAfterTimer.Stop()
|
||||
if err == nil {
|
||||
err = ctx.Err()
|
||||
}
|
||||
return prepareReturn(resp, err)
|
||||
case <-quitAfterTimer.C:
|
||||
return prepareReturn(resp, err)
|
||||
default:
|
||||
}
|
||||
|
||||
resp, err = rx.transferChunk(ctx)
|
||||
|
||||
@@ -206,10 +240,12 @@ func (rx *ResumableUpload) Upload(ctx context.Context) (resp *http.Response, err
|
||||
}
|
||||
|
||||
// Check if we should retry the request.
|
||||
if !shouldRetry(status, err) {
|
||||
if !errorFunc(status, err) {
|
||||
quitAfterTimer.Stop()
|
||||
break
|
||||
}
|
||||
|
||||
rx.attempts++
|
||||
pause = bo.Pause()
|
||||
if resp != nil && resp.Body != nil {
|
||||
resp.Body.Close()
|
||||
@@ -226,33 +262,3 @@ func (rx *ResumableUpload) Upload(ctx context.Context) (resp *http.Response, err
|
||||
return prepareReturn(resp, err)
|
||||
}
|
||||
}
|
||||
|
||||
// shouldRetry indicates whether an error is retryable for the purposes of this
|
||||
// package, following guidance from
|
||||
// https://cloud.google.com/storage/docs/exponential-backoff .
|
||||
func shouldRetry(status int, err error) bool {
|
||||
if 500 <= status && status <= 599 {
|
||||
return true
|
||||
}
|
||||
if status == statusTooManyRequests {
|
||||
return true
|
||||
}
|
||||
if err == io.ErrUnexpectedEOF {
|
||||
return true
|
||||
}
|
||||
// Transient network errors should be retried.
|
||||
if syscallRetryable(err) {
|
||||
return true
|
||||
}
|
||||
if err, ok := err.(interface{ Temporary() bool }); ok {
|
||||
if err.Temporary() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
// If Go 1.13 error unwrapping is available, use this to examine wrapped
|
||||
// errors.
|
||||
if err, ok := err.(interface{ Unwrap() error }); ok {
|
||||
return shouldRetry(status, err.Unwrap())
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
121
vendor/google.golang.org/api/internal/gensupport/retry.go
generated
vendored
Normal file
121
vendor/google.golang.org/api/internal/gensupport/retry.go
generated
vendored
Normal file
@@ -0,0 +1,121 @@
|
||||
// Copyright 2021 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package gensupport
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"net"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/googleapis/gax-go/v2"
|
||||
"google.golang.org/api/googleapi"
|
||||
)
|
||||
|
||||
// Backoff is an interface around gax.Backoff's Pause method, allowing tests to provide their
|
||||
// own implementation.
|
||||
type Backoff interface {
|
||||
Pause() time.Duration
|
||||
}
|
||||
|
||||
// These are declared as global variables so that tests can overwrite them.
|
||||
var (
|
||||
// Default per-chunk deadline for resumable uploads.
|
||||
defaultRetryDeadline = 32 * time.Second
|
||||
// Default backoff timer.
|
||||
backoff = func() Backoff {
|
||||
return &gax.Backoff{Initial: 100 * time.Millisecond}
|
||||
}
|
||||
// syscallRetryable is a platform-specific hook, specified in retryable_linux.go
|
||||
syscallRetryable func(error) bool = func(err error) bool { return false }
|
||||
)
|
||||
|
||||
const (
|
||||
// statusTooManyRequests is returned by the storage API if the
|
||||
// per-project limits have been temporarily exceeded. The request
|
||||
// should be retried.
|
||||
// https://cloud.google.com/storage/docs/json_api/v1/status-codes#standardcodes
|
||||
statusTooManyRequests = 429
|
||||
|
||||
// statusRequestTimeout is returned by the storage API if the
|
||||
// upload connection was broken. The request should be retried.
|
||||
statusRequestTimeout = 408
|
||||
)
|
||||
|
||||
// shouldRetry indicates whether an error is retryable for the purposes of this
|
||||
// package, unless a ShouldRetry func is specified by the RetryConfig instead.
|
||||
// It follows guidance from
|
||||
// https://cloud.google.com/storage/docs/exponential-backoff .
|
||||
func shouldRetry(status int, err error) bool {
|
||||
if 500 <= status && status <= 599 {
|
||||
return true
|
||||
}
|
||||
if status == statusTooManyRequests || status == statusRequestTimeout {
|
||||
return true
|
||||
}
|
||||
if err == io.ErrUnexpectedEOF {
|
||||
return true
|
||||
}
|
||||
// Transient network errors should be retried.
|
||||
if syscallRetryable(err) {
|
||||
return true
|
||||
}
|
||||
if err, ok := err.(interface{ Temporary() bool }); ok {
|
||||
if err.Temporary() {
|
||||
return true
|
||||
}
|
||||
}
|
||||
var opErr *net.OpError
|
||||
if errors.As(err, &opErr) {
|
||||
if strings.Contains(opErr.Error(), "use of closed network connection") {
|
||||
// TODO: check against net.ErrClosed (go 1.16+) instead of string
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
// If Go 1.13 error unwrapping is available, use this to examine wrapped
|
||||
// errors.
|
||||
if err, ok := err.(interface{ Unwrap() error }); ok {
|
||||
return shouldRetry(status, err.Unwrap())
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// RetryConfig allows configuration of backoff timing and retryable errors.
|
||||
type RetryConfig struct {
|
||||
Backoff *gax.Backoff
|
||||
ShouldRetry func(err error) bool
|
||||
}
|
||||
|
||||
// Get a new backoff object based on the configured values.
|
||||
func (r *RetryConfig) backoff() Backoff {
|
||||
if r == nil || r.Backoff == nil {
|
||||
return backoff()
|
||||
}
|
||||
return &gax.Backoff{
|
||||
Initial: r.Backoff.Initial,
|
||||
Max: r.Backoff.Max,
|
||||
Multiplier: r.Backoff.Multiplier,
|
||||
}
|
||||
}
|
||||
|
||||
// This is kind of hacky; it is necessary because ShouldRetry expects to
|
||||
// handle HTTP errors via googleapi.Error, but the error has not yet been
|
||||
// wrapped with a googleapi.Error at this layer, and the ErrorFunc type
|
||||
// in the manual layer does not pass in a status explicitly as it does
|
||||
// here. So, we must wrap error status codes in a googleapi.Error so that
|
||||
// ShouldRetry can parse this correctly.
|
||||
func (r *RetryConfig) errorFunc() func(status int, err error) bool {
|
||||
if r == nil || r.ShouldRetry == nil {
|
||||
return shouldRetry
|
||||
}
|
||||
return func(status int, err error) bool {
|
||||
if status >= 400 {
|
||||
return r.ShouldRetry(&googleapi.Error{Code: status})
|
||||
}
|
||||
return r.ShouldRetry(err)
|
||||
}
|
||||
}
|
79
vendor/google.golang.org/api/internal/gensupport/send.go
generated
vendored
79
vendor/google.golang.org/api/internal/gensupport/send.go
generated
vendored
@@ -8,10 +8,36 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/googleapis/gax-go/v2"
|
||||
)
|
||||
|
||||
// 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(target error) bool {
|
||||
return errors.Is(e.ctxErr, target) || errors.Is(e.wrappedErr, target)
|
||||
}
|
||||
|
||||
// SendRequest sends a single HTTP request using the given client.
|
||||
// If ctx is non-nil, it calls all hooks, then sends the request with
|
||||
// req.WithContext, then calls any functions returned by the hooks in
|
||||
@@ -50,7 +76,7 @@ func send(ctx context.Context, client *http.Client, req *http.Request) (*http.Re
|
||||
// If ctx is non-nil, it calls all hooks, then sends the request with
|
||||
// req.WithContext, then calls any functions returned by the hooks in
|
||||
// reverse order.
|
||||
func SendRequestWithRetry(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {
|
||||
func SendRequestWithRetry(ctx context.Context, client *http.Client, req *http.Request, retry *RetryConfig) (*http.Response, error) {
|
||||
// Disallow Accept-Encoding because it interferes with the automatic gzip handling
|
||||
// done by the default http.Transport. See https://github.com/google/google-api-go-client/issues/219.
|
||||
if _, ok := req.Header["Accept-Encoding"]; ok {
|
||||
@@ -59,33 +85,63 @@ func SendRequestWithRetry(ctx context.Context, client *http.Client, req *http.Re
|
||||
if ctx == nil {
|
||||
return client.Do(req)
|
||||
}
|
||||
return sendAndRetry(ctx, client, req)
|
||||
return sendAndRetry(ctx, client, req, retry)
|
||||
}
|
||||
|
||||
func sendAndRetry(ctx context.Context, client *http.Client, req *http.Request) (*http.Response, error) {
|
||||
func sendAndRetry(ctx context.Context, client *http.Client, req *http.Request, retry *RetryConfig) (*http.Response, error) {
|
||||
if client == nil {
|
||||
client = http.DefaultClient
|
||||
}
|
||||
|
||||
var resp *http.Response
|
||||
var err error
|
||||
attempts := 1
|
||||
invocationID := uuid.New().String()
|
||||
baseXGoogHeader := req.Header.Get("X-Goog-Api-Client")
|
||||
|
||||
// Loop to retry the request, up to the context deadline.
|
||||
var pause time.Duration
|
||||
bo := backoff()
|
||||
var bo Backoff
|
||||
if retry != nil && retry.Backoff != nil {
|
||||
bo = &gax.Backoff{
|
||||
Initial: retry.Backoff.Initial,
|
||||
Max: retry.Backoff.Max,
|
||||
Multiplier: retry.Backoff.Multiplier,
|
||||
}
|
||||
} else {
|
||||
bo = backoff()
|
||||
}
|
||||
|
||||
var errorFunc = retry.errorFunc()
|
||||
|
||||
for {
|
||||
t := time.NewTimer(pause)
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
// If we got an error, and the context has been canceled,
|
||||
// the context's error is probably more useful.
|
||||
if err == nil {
|
||||
err = ctx.Err()
|
||||
t.Stop()
|
||||
// If we got an error and the context has been canceled, return an error acknowledging
|
||||
// both the context cancelation and the service error.
|
||||
if err != nil {
|
||||
return resp, wrappedCallErr{ctx.Err(), err}
|
||||
}
|
||||
return resp, err
|
||||
case <-time.After(pause):
|
||||
return resp, ctx.Err()
|
||||
case <-t.C:
|
||||
}
|
||||
|
||||
if ctx.Err() != nil {
|
||||
// Check for context cancellation once more. If more than one case in a
|
||||
// select is satisfied at the same time, Go will choose one arbitrarily.
|
||||
// That can cause an operation to go through even if the context was
|
||||
// canceled before.
|
||||
if err != nil {
|
||||
return resp, wrappedCallErr{ctx.Err(), err}
|
||||
}
|
||||
return resp, ctx.Err()
|
||||
}
|
||||
invocationHeader := fmt.Sprintf("gccl-invocation-id/%s gccl-attempt-count/%d", invocationID, attempts)
|
||||
xGoogHeader := strings.Join([]string{invocationHeader, baseXGoogHeader}, " ")
|
||||
req.Header.Set("X-Goog-Api-Client", xGoogHeader)
|
||||
|
||||
resp, err = client.Do(req.WithContext(ctx))
|
||||
|
||||
var status int
|
||||
@@ -96,9 +152,10 @@ func sendAndRetry(ctx context.Context, client *http.Client, req *http.Request) (
|
||||
// Check if we can retry the request. A retry can only be done if the error
|
||||
// is retryable and the request body can be re-created using GetBody (this
|
||||
// will not be possible if the body was unbuffered).
|
||||
if req.GetBody == nil || !shouldRetry(status, err) {
|
||||
if req.GetBody == nil || !errorFunc(status, err) {
|
||||
break
|
||||
}
|
||||
attempts++
|
||||
var errBody error
|
||||
req.Body, errBody = req.GetBody()
|
||||
if errBody != nil {
|
||||
|
8
vendor/google.golang.org/api/internal/version.go
generated
vendored
Normal file
8
vendor/google.golang.org/api/internal/version.go
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
// Copyright 2022 Google LLC. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package internal
|
||||
|
||||
// Version is the current tagged release of the library.
|
||||
const Version = "0.114.0"
|
636
vendor/google.golang.org/api/monitoring/v3/monitoring-api.json
generated
vendored
636
vendor/google.golang.org/api/monitoring/v3/monitoring-api.json
generated
vendored
File diff suppressed because it is too large
Load Diff
3350
vendor/google.golang.org/api/monitoring/v3/monitoring-gen.go
generated
vendored
3350
vendor/google.golang.org/api/monitoring/v3/monitoring-gen.go
generated
vendored
File diff suppressed because it is too large
Load Diff
24
vendor/google.golang.org/api/option/credentials_go19.go
generated
vendored
24
vendor/google.golang.org/api/option/credentials_go19.go
generated
vendored
@@ -1,24 +0,0 @@
|
||||
// Copyright 2018 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build go1.9
|
||||
// +build go1.9
|
||||
|
||||
package option
|
||||
|
||||
import (
|
||||
"golang.org/x/oauth2/google"
|
||||
"google.golang.org/api/internal"
|
||||
)
|
||||
|
||||
type withCreds google.Credentials
|
||||
|
||||
func (w *withCreds) Apply(o *internal.DialSettings) {
|
||||
o.Credentials = (*google.Credentials)(w)
|
||||
}
|
||||
|
||||
// WithCredentials returns a ClientOption that authenticates API calls.
|
||||
func WithCredentials(creds *google.Credentials) ClientOption {
|
||||
return (*withCreds)(creds)
|
||||
}
|
23
vendor/google.golang.org/api/option/credentials_notgo19.go
generated
vendored
23
vendor/google.golang.org/api/option/credentials_notgo19.go
generated
vendored
@@ -1,23 +0,0 @@
|
||||
// Copyright 2018 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build !go1.9
|
||||
// +build !go1.9
|
||||
|
||||
package option
|
||||
|
||||
import (
|
||||
"golang.org/x/oauth2/google"
|
||||
"google.golang.org/api/internal"
|
||||
)
|
||||
|
||||
type withCreds google.DefaultCredentials
|
||||
|
||||
func (w *withCreds) Apply(o *internal.DialSettings) {
|
||||
o.Credentials = (*google.DefaultCredentials)(w)
|
||||
}
|
||||
|
||||
func WithCredentials(creds *google.DefaultCredentials) ClientOption {
|
||||
return (*withCreds)(creds)
|
||||
}
|
7
vendor/google.golang.org/api/option/internaloption/internaloption.go
generated
vendored
7
vendor/google.golang.org/api/option/internaloption/internaloption.go
generated
vendored
@@ -134,3 +134,10 @@ type withCreds google.Credentials
|
||||
func (w *withCreds) Apply(o *internal.DialSettings) {
|
||||
o.InternalCredentials = (*google.Credentials)(w)
|
||||
}
|
||||
|
||||
// EmbeddableAdapter is a no-op option.ClientOption that allow libraries to
|
||||
// create their own client options by embedding this type into their own
|
||||
// client-specific option wrapper. See example for usage.
|
||||
type EmbeddableAdapter struct{}
|
||||
|
||||
func (*EmbeddableAdapter) Apply(_ *internal.DialSettings) {}
|
||||
|
33
vendor/google.golang.org/api/option/option.go
generated
vendored
33
vendor/google.golang.org/api/option/option.go
generated
vendored
@@ -10,6 +10,7 @@ import (
|
||||
"net/http"
|
||||
|
||||
"golang.org/x/oauth2"
|
||||
"golang.org/x/oauth2/google"
|
||||
"google.golang.org/api/internal"
|
||||
"google.golang.org/api/internal/impersonate"
|
||||
"google.golang.org/grpc"
|
||||
@@ -81,6 +82,9 @@ func (w withEndpoint) Apply(o *internal.DialSettings) {
|
||||
|
||||
// WithScopes returns a ClientOption that overrides the default OAuth2 scopes
|
||||
// to be used for a service.
|
||||
//
|
||||
// If both WithScopes and WithTokenSource are used, scope settings from the
|
||||
// token source will be used instead.
|
||||
func WithScopes(scope ...string) ClientOption {
|
||||
return withScopes(scope)
|
||||
}
|
||||
@@ -92,7 +96,9 @@ func (w withScopes) Apply(o *internal.DialSettings) {
|
||||
copy(o.Scopes, w)
|
||||
}
|
||||
|
||||
// WithUserAgent returns a ClientOption that sets the User-Agent.
|
||||
// WithUserAgent returns a ClientOption that sets the User-Agent. This option
|
||||
// is incompatible with the [WithHTTPClient] option. If you wish to provide a
|
||||
// custom client you will need to add this header via RoundTripper middleware.
|
||||
func WithUserAgent(ua string) ClientOption {
|
||||
return withUA(ua)
|
||||
}
|
||||
@@ -144,8 +150,6 @@ func (w withGRPCDialOption) Apply(o *internal.DialSettings) {
|
||||
|
||||
// WithGRPCConnectionPool returns a ClientOption that creates a pool of gRPC
|
||||
// connections that requests will be balanced between.
|
||||
//
|
||||
// This is an EXPERIMENTAL API and may be changed or removed in the future.
|
||||
func WithGRPCConnectionPool(size int) ClientOption {
|
||||
return withGRPCConnectionPool(size)
|
||||
}
|
||||
@@ -288,10 +292,10 @@ func (w withClientCertSource) Apply(o *internal.DialSettings) {
|
||||
// service account SA2 while using delegate service accounts DSA1 and DSA2,
|
||||
// the following must be true:
|
||||
//
|
||||
// 1. Base service account SA1 has roles/iam.serviceAccountTokenCreator on
|
||||
// DSA1.
|
||||
// 2. DSA1 has roles/iam.serviceAccountTokenCreator on DSA2.
|
||||
// 3. DSA2 has roles/iam.serviceAccountTokenCreator on target SA2.
|
||||
// 1. Base service account SA1 has roles/iam.serviceAccountTokenCreator on
|
||||
// DSA1.
|
||||
// 2. DSA1 has roles/iam.serviceAccountTokenCreator on DSA2.
|
||||
// 3. DSA2 has roles/iam.serviceAccountTokenCreator on target SA2.
|
||||
//
|
||||
// The resulting impersonated credential will either have the default scopes of
|
||||
// the client being instantiating or the scopes from WithScopes if provided.
|
||||
@@ -306,9 +310,9 @@ func (w withClientCertSource) Apply(o *internal.DialSettings) {
|
||||
//
|
||||
// This is an EXPERIMENTAL API and may be changed or removed in the future.
|
||||
//
|
||||
// This option has been replaced by `impersonate` package:
|
||||
// Deprecated: This option has been replaced by `impersonate` package:
|
||||
// `google.golang.org/api/impersonate`. Please use the `impersonate` package
|
||||
// instead.
|
||||
// instead with the WithTokenSource option.
|
||||
func ImpersonateCredentials(target string, delegates ...string) ClientOption {
|
||||
return impersonateServiceAccount{
|
||||
target: target,
|
||||
@@ -328,3 +332,14 @@ func (i impersonateServiceAccount) Apply(o *internal.DialSettings) {
|
||||
o.ImpersonationConfig.Delegates = make([]string, len(i.delegates))
|
||||
copy(o.ImpersonationConfig.Delegates, i.delegates)
|
||||
}
|
||||
|
||||
type withCreds google.Credentials
|
||||
|
||||
func (w *withCreds) Apply(o *internal.DialSettings) {
|
||||
o.Credentials = (*google.Credentials)(w)
|
||||
}
|
||||
|
||||
// WithCredentials returns a ClientOption that authenticates API calls.
|
||||
func WithCredentials(creds *google.Credentials) ClientOption {
|
||||
return (*withCreds)(creds)
|
||||
}
|
||||
|
29
vendor/google.golang.org/api/tpu/v1/tpu-api.json
generated
vendored
29
vendor/google.golang.org/api/tpu/v1/tpu-api.json
generated
vendored
@@ -144,7 +144,7 @@
|
||||
],
|
||||
"parameters": {
|
||||
"filter": {
|
||||
"description": "A filter to narrow down results to a preferred subset. The filtering language accepts strings like \"displayName=tokyo\", and is documented in more detail in [AIP-160](https://google.aip.dev/160).",
|
||||
"description": "A filter to narrow down results to a preferred subset. The filtering language accepts strings like `\"displayName=tokyo\"`, and is documented in more detail in [AIP-160](https://google.aip.dev/160).",
|
||||
"location": "query",
|
||||
"type": "string"
|
||||
},
|
||||
@@ -659,7 +659,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"revision": "20210824",
|
||||
"revision": "20220725",
|
||||
"rootUrl": "https://tpu.googleapis.com/",
|
||||
"schemas": {
|
||||
"AcceleratorType": {
|
||||
@@ -678,7 +678,7 @@
|
||||
"type": "object"
|
||||
},
|
||||
"Empty": {
|
||||
"description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.",
|
||||
"description": "A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }",
|
||||
"id": "Empty",
|
||||
"properties": {},
|
||||
"type": "object"
|
||||
@@ -1043,44 +1043,37 @@
|
||||
"type": "object"
|
||||
},
|
||||
"OperationMetadata": {
|
||||
"description": "Represents the metadata of the long-running operation.",
|
||||
"description": "Metadata describing an Operation",
|
||||
"id": "OperationMetadata",
|
||||
"properties": {
|
||||
"apiVersion": {
|
||||
"description": "Output only. API version used to start the operation.",
|
||||
"readOnly": true,
|
||||
"description": "API version.",
|
||||
"type": "string"
|
||||
},
|
||||
"cancelRequested": {
|
||||
"description": "Output only. Identifies whether the user has requested cancellation of the operation. Operations that have been cancelled successfully have Operation.error value with a google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.",
|
||||
"readOnly": true,
|
||||
"description": "Specifies if cancellation was requested for the operation.",
|
||||
"type": "boolean"
|
||||
},
|
||||
"createTime": {
|
||||
"description": "Output only. The time the operation was created.",
|
||||
"description": "The time the operation was created.",
|
||||
"format": "google-datetime",
|
||||
"readOnly": true,
|
||||
"type": "string"
|
||||
},
|
||||
"endTime": {
|
||||
"description": "Output only. The time the operation finished running.",
|
||||
"description": "The time the operation finished running.",
|
||||
"format": "google-datetime",
|
||||
"readOnly": true,
|
||||
"type": "string"
|
||||
},
|
||||
"statusDetail": {
|
||||
"description": "Output only. Human-readable status of the operation, if any.",
|
||||
"readOnly": true,
|
||||
"description": "Human-readable status of the operation, if any.",
|
||||
"type": "string"
|
||||
},
|
||||
"target": {
|
||||
"description": "Output only. Server-defined resource path for the target of the operation.",
|
||||
"readOnly": true,
|
||||
"description": "Target of the operation - for example projects/project-1/connectivityTests/test-1",
|
||||
"type": "string"
|
||||
},
|
||||
"verb": {
|
||||
"description": "Output only. Name of the verb executed by the operation.",
|
||||
"readOnly": true,
|
||||
"description": "Name of the verb executed by the operation.",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
|
200
vendor/google.golang.org/api/tpu/v1/tpu-gen.go
generated
vendored
200
vendor/google.golang.org/api/tpu/v1/tpu-gen.go
generated
vendored
@@ -1,4 +1,4 @@
|
||||
// Copyright 2021 Google LLC.
|
||||
// Copyright 2023 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
@@ -8,31 +8,31 @@
|
||||
//
|
||||
// For product documentation, see: https://cloud.google.com/tpu/
|
||||
//
|
||||
// Creating a client
|
||||
// # Creating a client
|
||||
//
|
||||
// Usage example:
|
||||
//
|
||||
// import "google.golang.org/api/tpu/v1"
|
||||
// ...
|
||||
// ctx := context.Background()
|
||||
// tpuService, err := tpu.NewService(ctx)
|
||||
// import "google.golang.org/api/tpu/v1"
|
||||
// ...
|
||||
// ctx := context.Background()
|
||||
// tpuService, err := tpu.NewService(ctx)
|
||||
//
|
||||
// In this example, Google Application Default Credentials are used for authentication.
|
||||
//
|
||||
// For information on how to create and obtain Application Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
|
||||
//
|
||||
// Other authentication options
|
||||
// # Other authentication options
|
||||
//
|
||||
// To use an API key for authentication (note: some APIs do not support API keys), use option.WithAPIKey:
|
||||
//
|
||||
// tpuService, err := tpu.NewService(ctx, option.WithAPIKey("AIza..."))
|
||||
// tpuService, err := tpu.NewService(ctx, option.WithAPIKey("AIza..."))
|
||||
//
|
||||
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth flow), use option.WithTokenSource:
|
||||
//
|
||||
// config := &oauth2.Config{...}
|
||||
// // ...
|
||||
// token, err := config.Exchange(ctx, ...)
|
||||
// tpuService, err := tpu.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
|
||||
// config := &oauth2.Config{...}
|
||||
// // ...
|
||||
// token, err := config.Exchange(ctx, ...)
|
||||
// tpuService, err := tpu.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
|
||||
//
|
||||
// See https://godoc.org/google.golang.org/api/option/ for details on options.
|
||||
package tpu // import "google.golang.org/api/tpu/v1"
|
||||
@@ -50,6 +50,7 @@ import (
|
||||
"strings"
|
||||
|
||||
googleapi "google.golang.org/api/googleapi"
|
||||
internal "google.golang.org/api/internal"
|
||||
gensupport "google.golang.org/api/internal/gensupport"
|
||||
option "google.golang.org/api/option"
|
||||
internaloption "google.golang.org/api/option/internaloption"
|
||||
@@ -86,7 +87,7 @@ const (
|
||||
|
||||
// NewService creates a new Service.
|
||||
func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) {
|
||||
scopesOption := option.WithScopes(
|
||||
scopesOption := internaloption.WithDefaultScopes(
|
||||
"https://www.googleapis.com/auth/cloud-platform",
|
||||
)
|
||||
// NOTE: prepend, so we don't override user-specified scopes.
|
||||
@@ -245,8 +246,7 @@ func (s *AcceleratorType) MarshalJSON() ([]byte, error) {
|
||||
// duplicated empty messages in your APIs. A typical example is to use
|
||||
// it as the request or the response type of an API method. For
|
||||
// instance: service Foo { rpc Bar(google.protobuf.Empty) returns
|
||||
// (google.protobuf.Empty); } The JSON representation for `Empty` is
|
||||
// empty JSON object `{}`.
|
||||
// (google.protobuf.Empty); }
|
||||
type Empty struct {
|
||||
// ServerResponse contains the HTTP response code and headers from the
|
||||
// server.
|
||||
@@ -738,33 +738,29 @@ func (s *Operation) MarshalJSON() ([]byte, error) {
|
||||
return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
|
||||
}
|
||||
|
||||
// OperationMetadata: Represents the metadata of the long-running
|
||||
// operation.
|
||||
// OperationMetadata: Metadata describing an Operation
|
||||
type OperationMetadata struct {
|
||||
// ApiVersion: Output only. API version used to start the operation.
|
||||
// ApiVersion: API version.
|
||||
ApiVersion string `json:"apiVersion,omitempty"`
|
||||
|
||||
// CancelRequested: Output only. Identifies whether the user has
|
||||
// requested cancellation of the operation. Operations that have been
|
||||
// cancelled successfully have Operation.error value with a
|
||||
// google.rpc.Status.code of 1, corresponding to `Code.CANCELLED`.
|
||||
// CancelRequested: Specifies if cancellation was requested for the
|
||||
// operation.
|
||||
CancelRequested bool `json:"cancelRequested,omitempty"`
|
||||
|
||||
// CreateTime: Output only. The time the operation was created.
|
||||
// CreateTime: The time the operation was created.
|
||||
CreateTime string `json:"createTime,omitempty"`
|
||||
|
||||
// EndTime: Output only. The time the operation finished running.
|
||||
// EndTime: The time the operation finished running.
|
||||
EndTime string `json:"endTime,omitempty"`
|
||||
|
||||
// StatusDetail: Output only. Human-readable status of the operation, if
|
||||
// any.
|
||||
// StatusDetail: Human-readable status of the operation, if any.
|
||||
StatusDetail string `json:"statusDetail,omitempty"`
|
||||
|
||||
// Target: Output only. Server-defined resource path for the target of
|
||||
// the operation.
|
||||
// Target: Target of the operation - for example
|
||||
// projects/project-1/connectivityTests/test-1
|
||||
Target string `json:"target,omitempty"`
|
||||
|
||||
// Verb: Output only. Name of the verb executed by the operation.
|
||||
// Verb: Name of the verb executed by the operation.
|
||||
Verb string `json:"verb,omitempty"`
|
||||
|
||||
// ForceSendFields is a list of field names (e.g. "ApiVersion") to
|
||||
@@ -1044,7 +1040,7 @@ func (c *ProjectsLocationsGetCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsGetCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -1082,17 +1078,17 @@ func (c *ProjectsLocationsGetCall) Do(opts ...googleapi.CallOption) (*Location,
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Location{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -1147,8 +1143,8 @@ type ProjectsLocationsListCall struct {
|
||||
// List: Lists information about the supported locations for this
|
||||
// service.
|
||||
//
|
||||
// - name: The resource that owns the locations collection, if
|
||||
// applicable.
|
||||
// - name: The resource that owns the locations collection, if
|
||||
// applicable.
|
||||
func (r *ProjectsLocationsService) List(name string) *ProjectsLocationsListCall {
|
||||
c := &ProjectsLocationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
|
||||
c.name = name
|
||||
@@ -1157,8 +1153,8 @@ func (r *ProjectsLocationsService) List(name string) *ProjectsLocationsListCall
|
||||
|
||||
// Filter sets the optional parameter "filter": A filter to narrow down
|
||||
// results to a preferred subset. The filtering language accepts strings
|
||||
// like "displayName=tokyo", and is documented in more detail in AIP-160
|
||||
// (https://google.aip.dev/160).
|
||||
// like "displayName=tokyo", and is documented in more detail in
|
||||
// AIP-160 (https://google.aip.dev/160).
|
||||
func (c *ProjectsLocationsListCall) Filter(filter string) *ProjectsLocationsListCall {
|
||||
c.urlParams_.Set("filter", filter)
|
||||
return c
|
||||
@@ -1216,7 +1212,7 @@ func (c *ProjectsLocationsListCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsListCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -1254,17 +1250,17 @@ func (c *ProjectsLocationsListCall) Do(opts ...googleapi.CallOption) (*ListLocat
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &ListLocationsResponse{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -1287,7 +1283,7 @@ func (c *ProjectsLocationsListCall) Do(opts ...googleapi.CallOption) (*ListLocat
|
||||
// ],
|
||||
// "parameters": {
|
||||
// "filter": {
|
||||
// "description": "A filter to narrow down results to a preferred subset. The filtering language accepts strings like \"displayName=tokyo\", and is documented in more detail in [AIP-160](https://google.aip.dev/160).",
|
||||
// "description": "A filter to narrow down results to a preferred subset. The filtering language accepts strings like `\"displayName=tokyo\"`, and is documented in more detail in [AIP-160](https://google.aip.dev/160).",
|
||||
// "location": "query",
|
||||
// "type": "string"
|
||||
// },
|
||||
@@ -1399,7 +1395,7 @@ func (c *ProjectsLocationsAcceleratorTypesGetCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsAcceleratorTypesGetCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -1437,17 +1433,17 @@ func (c *ProjectsLocationsAcceleratorTypesGetCall) Do(opts ...googleapi.CallOpti
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &AcceleratorType{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -1571,7 +1567,7 @@ func (c *ProjectsLocationsAcceleratorTypesListCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsAcceleratorTypesListCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -1609,17 +1605,17 @@ func (c *ProjectsLocationsAcceleratorTypesListCall) Do(opts ...googleapi.CallOpt
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &ListAcceleratorTypesResponse{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -1757,7 +1753,7 @@ func (c *ProjectsLocationsNodesCreateCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsNodesCreateCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -1797,17 +1793,17 @@ func (c *ProjectsLocationsNodesCreateCall) Do(opts ...googleapi.CallOption) (*Op
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Operation{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -1902,7 +1898,7 @@ func (c *ProjectsLocationsNodesDeleteCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsNodesDeleteCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -1937,17 +1933,17 @@ func (c *ProjectsLocationsNodesDeleteCall) Do(opts ...googleapi.CallOption) (*Op
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Operation{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -2045,7 +2041,7 @@ func (c *ProjectsLocationsNodesGetCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsNodesGetCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -2083,17 +2079,17 @@ func (c *ProjectsLocationsNodesGetCall) Do(opts ...googleapi.CallOption) (*Node,
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Node{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -2205,7 +2201,7 @@ func (c *ProjectsLocationsNodesListCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsNodesListCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -2243,17 +2239,17 @@ func (c *ProjectsLocationsNodesListCall) Do(opts ...googleapi.CallOption) (*List
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &ListNodesResponse{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -2374,7 +2370,7 @@ func (c *ProjectsLocationsNodesReimageCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsNodesReimageCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -2414,17 +2410,17 @@ func (c *ProjectsLocationsNodesReimageCall) Do(opts ...googleapi.CallOption) (*O
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Operation{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -2516,7 +2512,7 @@ func (c *ProjectsLocationsNodesStartCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsNodesStartCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -2556,17 +2552,17 @@ func (c *ProjectsLocationsNodesStartCall) Do(opts ...googleapi.CallOption) (*Ope
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Operation{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -2659,7 +2655,7 @@ func (c *ProjectsLocationsNodesStopCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsNodesStopCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -2699,17 +2695,17 @@ func (c *ProjectsLocationsNodesStopCall) Do(opts ...googleapi.CallOption) (*Oper
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Operation{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -2808,7 +2804,7 @@ func (c *ProjectsLocationsOperationsCancelCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsOperationsCancelCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -2843,17 +2839,17 @@ func (c *ProjectsLocationsOperationsCancelCall) Do(opts ...googleapi.CallOption)
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Empty{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -2943,7 +2939,7 @@ func (c *ProjectsLocationsOperationsDeleteCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsOperationsDeleteCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -2978,17 +2974,17 @@ func (c *ProjectsLocationsOperationsDeleteCall) Do(opts ...googleapi.CallOption)
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Empty{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -3088,7 +3084,7 @@ func (c *ProjectsLocationsOperationsGetCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsOperationsGetCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -3126,17 +3122,17 @@ func (c *ProjectsLocationsOperationsGetCall) Do(opts ...googleapi.CallOption) (*
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &Operation{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -3264,7 +3260,7 @@ func (c *ProjectsLocationsOperationsListCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsOperationsListCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -3302,17 +3298,17 @@ func (c *ProjectsLocationsOperationsListCall) Do(opts ...googleapi.CallOption) (
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &ListOperationsResponse{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -3447,7 +3443,7 @@ func (c *ProjectsLocationsTensorflowVersionsGetCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsTensorflowVersionsGetCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -3485,17 +3481,17 @@ func (c *ProjectsLocationsTensorflowVersionsGetCall) Do(opts ...googleapi.CallOp
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &TensorFlowVersion{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
@@ -3619,7 +3615,7 @@ func (c *ProjectsLocationsTensorflowVersionsListCall) Header() http.Header {
|
||||
|
||||
func (c *ProjectsLocationsTensorflowVersionsListCall) doRequest(alt string) (*http.Response, error) {
|
||||
reqHeaders := make(http.Header)
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/20211027")
|
||||
reqHeaders.Set("x-goog-api-client", "gl-go/"+gensupport.GoVersion()+" gdcl/"+internal.Version)
|
||||
for k, v := range c.header_ {
|
||||
reqHeaders[k] = v
|
||||
}
|
||||
@@ -3657,17 +3653,17 @@ func (c *ProjectsLocationsTensorflowVersionsListCall) Do(opts ...googleapi.CallO
|
||||
if res.Body != nil {
|
||||
res.Body.Close()
|
||||
}
|
||||
return nil, &googleapi.Error{
|
||||
return nil, gensupport.WrapError(&googleapi.Error{
|
||||
Code: res.StatusCode,
|
||||
Header: res.Header,
|
||||
}
|
||||
})
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer googleapi.CloseBody(res)
|
||||
if err := googleapi.CheckResponse(res); err != nil {
|
||||
return nil, err
|
||||
return nil, gensupport.WrapError(err)
|
||||
}
|
||||
ret := &ListTensorFlowVersionsResponse{
|
||||
ServerResponse: googleapi.ServerResponse{
|
||||
|
26
vendor/google.golang.org/api/transport/http/configure_http2_go116.go
generated
vendored
26
vendor/google.golang.org/api/transport/http/configure_http2_go116.go
generated
vendored
@@ -1,26 +0,0 @@
|
||||
// Copyright 2021 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build go1.16
|
||||
// +build go1.16
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"golang.org/x/net/http2"
|
||||
)
|
||||
|
||||
// configureHTTP2 configures the ReadIdleTimeout HTTP/2 option for the
|
||||
// transport. This allows broken idle connections to be pruned more quickly,
|
||||
// preventing the client from attempting to re-use connections that will no
|
||||
// longer work.
|
||||
func configureHTTP2(trans *http.Transport) {
|
||||
http2Trans, err := http2.ConfigureTransports(trans)
|
||||
if err == nil {
|
||||
http2Trans.ReadIdleTimeout = time.Second * 31
|
||||
}
|
||||
}
|
17
vendor/google.golang.org/api/transport/http/configure_http2_not_go116.go
generated
vendored
17
vendor/google.golang.org/api/transport/http/configure_http2_not_go116.go
generated
vendored
@@ -1,17 +0,0 @@
|
||||
// Copyright 2021 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build !go1.16
|
||||
// +build !go1.16
|
||||
|
||||
package http
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// configureHTTP2 configures the ReadIdleTimeout HTTP/2 option for the
|
||||
// transport. The interface to do this is only available in Go 1.16 and up, so
|
||||
// this performs a no-op.
|
||||
func configureHTTP2(trans *http.Transport) {}
|
21
vendor/google.golang.org/api/transport/http/default_transport_go113.go
generated
vendored
21
vendor/google.golang.org/api/transport/http/default_transport_go113.go
generated
vendored
@@ -1,21 +0,0 @@
|
||||
// Copyright 2020 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build go1.13
|
||||
// +build go1.13
|
||||
|
||||
package http
|
||||
|
||||
import "net/http"
|
||||
|
||||
// clonedTransport returns the given RoundTripper as a cloned *http.Transport.
|
||||
// It returns nil if the RoundTripper can't be cloned or coerced to
|
||||
// *http.Transport.
|
||||
func clonedTransport(rt http.RoundTripper) *http.Transport {
|
||||
t, ok := rt.(*http.Transport)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return t.Clone()
|
||||
}
|
16
vendor/google.golang.org/api/transport/http/default_transport_not_go113.go
generated
vendored
16
vendor/google.golang.org/api/transport/http/default_transport_not_go113.go
generated
vendored
@@ -1,16 +0,0 @@
|
||||
// Copyright 2020 Google LLC.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build !go1.13
|
||||
// +build !go1.13
|
||||
|
||||
package http
|
||||
|
||||
import "net/http"
|
||||
|
||||
// clonedTransport returns the given RoundTripper as a cloned *http.Transport.
|
||||
// For versions of Go <1.13, this is not supported, so return nil.
|
||||
func clonedTransport(rt http.RoundTripper) *http.Transport {
|
||||
return nil
|
||||
}
|
37
vendor/google.golang.org/api/transport/http/dial.go
generated
vendored
37
vendor/google.golang.org/api/transport/http/dial.go
generated
vendored
@@ -16,13 +16,13 @@ import (
|
||||
"time"
|
||||
|
||||
"go.opencensus.io/plugin/ochttp"
|
||||
"golang.org/x/net/http2"
|
||||
"golang.org/x/oauth2"
|
||||
"google.golang.org/api/googleapi/transport"
|
||||
"google.golang.org/api/internal"
|
||||
"google.golang.org/api/internal/cert"
|
||||
"google.golang.org/api/option"
|
||||
"google.golang.org/api/transport/cert"
|
||||
"google.golang.org/api/transport/http/internal/propagation"
|
||||
"google.golang.org/api/transport/internal/dca"
|
||||
)
|
||||
|
||||
// NewClient returns an HTTP client for use communicating with a Google cloud
|
||||
@@ -33,7 +33,7 @@ func NewClient(ctx context.Context, opts ...option.ClientOption) (*http.Client,
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
clientCertSource, endpoint, err := dca.GetClientCertificateSourceAndEndpoint(settings)
|
||||
clientCertSource, endpoint, err := internal.GetClientCertificateSourceAndEndpoint(settings)
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
}
|
||||
@@ -65,7 +65,6 @@ func newTransport(ctx context.Context, base http.RoundTripper, settings *interna
|
||||
paramTransport := ¶meterTransport{
|
||||
base: base,
|
||||
userAgent: settings.UserAgent,
|
||||
quotaProject: settings.QuotaProject,
|
||||
requestReason: settings.RequestReason,
|
||||
}
|
||||
var trans http.RoundTripper = paramTransport
|
||||
@@ -74,6 +73,7 @@ func newTransport(ctx context.Context, base http.RoundTripper, settings *interna
|
||||
case settings.NoAuth:
|
||||
// Do nothing.
|
||||
case settings.APIKey != "":
|
||||
paramTransport.quotaProject = internal.GetQuotaProject(nil, settings.QuotaProject)
|
||||
trans = &transport.APIKey{
|
||||
Transport: trans,
|
||||
Key: settings.APIKey,
|
||||
@@ -83,10 +83,7 @@ func newTransport(ctx context.Context, base http.RoundTripper, settings *interna
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if paramTransport.quotaProject == "" {
|
||||
paramTransport.quotaProject = internal.QuotaProjectFromCreds(creds)
|
||||
}
|
||||
|
||||
paramTransport.quotaProject = internal.GetQuotaProject(creds, settings.QuotaProject)
|
||||
ts := creds.TokenSource
|
||||
if settings.ImpersonationConfig == nil && settings.TokenSource != nil {
|
||||
ts = settings.TokenSource
|
||||
@@ -175,13 +172,22 @@ func defaultBaseTransport(ctx context.Context, clientCertSource cert.Source) htt
|
||||
}
|
||||
}
|
||||
|
||||
// If possible, configure http2 transport in order to use ReadIdleTimeout
|
||||
// setting. This can only be done in Go 1.16 and up.
|
||||
configureHTTP2(trans)
|
||||
|
||||
return trans
|
||||
}
|
||||
|
||||
// configureHTTP2 configures the ReadIdleTimeout HTTP/2 option for the
|
||||
// transport. This allows broken idle connections to be pruned more quickly,
|
||||
// preventing the client from attempting to re-use connections that will no
|
||||
// longer work.
|
||||
func configureHTTP2(trans *http.Transport) {
|
||||
http2Trans, err := http2.ConfigureTransports(trans)
|
||||
if err == nil {
|
||||
http2Trans.ReadIdleTimeout = time.Second * 31
|
||||
}
|
||||
}
|
||||
|
||||
// fallbackBaseTransport is used in <go1.13 as well as in the rare case if
|
||||
// http.DefaultTransport has been reassigned something that's not a
|
||||
// *http.Transport.
|
||||
@@ -210,3 +216,14 @@ func addOCTransport(trans http.RoundTripper, settings *internal.DialSettings) ht
|
||||
Propagation: &propagation.HTTPFormat{},
|
||||
}
|
||||
}
|
||||
|
||||
// clonedTransport returns the given RoundTripper as a cloned *http.Transport.
|
||||
// It returns nil if the RoundTripper can't be cloned or coerced to
|
||||
// *http.Transport.
|
||||
func clonedTransport(rt http.RoundTripper) *http.Transport {
|
||||
t, ok := rt.(*http.Transport)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return t.Clone()
|
||||
}
|
||||
|
Reference in New Issue
Block a user