mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-29 04:22:24 -05:00 
			
		
		
		
	[chore]: Bump go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc (#3888)
This commit is contained in:
		
					parent
					
						
							
								85e17b3e78
							
						
					
				
			
			
				commit
				
					
						252a17a691
					
				
			
		
					 97 changed files with 3821 additions and 1018 deletions
				
			
		
							
								
								
									
										22
									
								
								vendor/google.golang.org/grpc/balancer/balancer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								vendor/google.golang.org/grpc/balancer/balancer.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -129,6 +129,13 @@ type State struct { | |||
| // brand new implementation of this interface. For the situations like | ||||
| // testing, the new implementation should embed this interface. This allows | ||||
| // gRPC to add new methods to this interface. | ||||
| // | ||||
| // NOTICE: This interface is intended to be implemented by gRPC, or intercepted | ||||
| // by custom load balancing polices.  Users should not need their own complete | ||||
| // implementation of this interface -- they should always delegate to a | ||||
| // ClientConn passed to Builder.Build() by embedding it in their | ||||
| // implementations. An embedded ClientConn must never be nil, or runtime panics | ||||
| // will occur. | ||||
| type ClientConn interface { | ||||
| 	// NewSubConn is called by balancer to create a new SubConn. | ||||
| 	// It doesn't block and wait for the connections to be established. | ||||
|  | @ -167,6 +174,17 @@ type ClientConn interface { | |||
| 	// | ||||
| 	// Deprecated: Use the Target field in the BuildOptions instead. | ||||
| 	Target() string | ||||
| 
 | ||||
| 	// MetricsRecorder provides the metrics recorder that balancers can use to | ||||
| 	// record metrics. Balancer implementations which do not register metrics on | ||||
| 	// metrics registry and record on them can ignore this method. The returned | ||||
| 	// MetricsRecorder is guaranteed to never be nil. | ||||
| 	MetricsRecorder() estats.MetricsRecorder | ||||
| 
 | ||||
| 	// EnforceClientConnEmbedding is included to force implementers to embed | ||||
| 	// another implementation of this interface, allowing gRPC to add methods | ||||
| 	// without breaking users. | ||||
| 	internal.EnforceClientConnEmbedding | ||||
| } | ||||
| 
 | ||||
| // BuildOptions contains additional information for Build. | ||||
|  | @ -198,10 +216,6 @@ type BuildOptions struct { | |||
| 	// same resolver.Target as passed to the resolver. See the documentation for | ||||
| 	// the resolver.Target type for details about what it contains. | ||||
| 	Target resolver.Target | ||||
| 	// MetricsRecorder is the metrics recorder that balancers can use to record | ||||
| 	// metrics. Balancer implementations which do not register metrics on | ||||
| 	// metrics registry and record on them can ignore this field. | ||||
| 	MetricsRecorder estats.MetricsRecorder | ||||
| } | ||||
| 
 | ||||
| // Builder creates a balancer. | ||||
|  |  | |||
							
								
								
									
										358
									
								
								vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										358
									
								
								vendor/google.golang.org/grpc/balancer/endpointsharding/endpointsharding.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,358 @@ | |||
| /* | ||||
|  * | ||||
|  * Copyright 2024 gRPC authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| // Package endpointsharding implements a load balancing policy that manages | ||||
| // homogeneous child policies each owning a single endpoint. | ||||
| // | ||||
| // # Experimental | ||||
| // | ||||
| // Notice: This package is EXPERIMENTAL and may be changed or removed in a | ||||
| // later release. | ||||
| package endpointsharding | ||||
| 
 | ||||
| import ( | ||||
| 	"errors" | ||||
| 	rand "math/rand/v2" | ||||
| 	"sync" | ||||
| 	"sync/atomic" | ||||
| 
 | ||||
| 	"google.golang.org/grpc/balancer" | ||||
| 	"google.golang.org/grpc/balancer/base" | ||||
| 	"google.golang.org/grpc/connectivity" | ||||
| 	"google.golang.org/grpc/resolver" | ||||
| ) | ||||
| 
 | ||||
| // ChildState is the balancer state of a child along with the endpoint which | ||||
| // identifies the child balancer. | ||||
| type ChildState struct { | ||||
| 	Endpoint resolver.Endpoint | ||||
| 	State    balancer.State | ||||
| 
 | ||||
| 	// Balancer exposes only the ExitIdler interface of the child LB policy. | ||||
| 	// Other methods of the child policy are called only by endpointsharding. | ||||
| 	Balancer balancer.ExitIdler | ||||
| } | ||||
| 
 | ||||
| // Options are the options to configure the behaviour of the | ||||
| // endpointsharding balancer. | ||||
| type Options struct { | ||||
| 	// DisableAutoReconnect allows the balancer to keep child balancer in the | ||||
| 	// IDLE state until they are explicitly triggered to exit using the | ||||
| 	// ChildState obtained from the endpointsharding picker. When set to false, | ||||
| 	// the endpointsharding balancer will automatically call ExitIdle on child | ||||
| 	// connections that report IDLE. | ||||
| 	DisableAutoReconnect bool | ||||
| } | ||||
| 
 | ||||
| // ChildBuilderFunc creates a new balancer with the ClientConn. It has the same | ||||
| // type as the balancer.Builder.Build method. | ||||
| type ChildBuilderFunc func(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer | ||||
| 
 | ||||
| // NewBalancer returns a load balancing policy that manages homogeneous child | ||||
| // policies each owning a single endpoint. The endpointsharding balancer | ||||
| // forwards the LoadBalancingConfig in ClientConn state updates to its children. | ||||
| func NewBalancer(cc balancer.ClientConn, opts balancer.BuildOptions, childBuilder ChildBuilderFunc, esOpts Options) balancer.Balancer { | ||||
| 	es := &endpointSharding{ | ||||
| 		cc:           cc, | ||||
| 		bOpts:        opts, | ||||
| 		esOpts:       esOpts, | ||||
| 		childBuilder: childBuilder, | ||||
| 	} | ||||
| 	es.children.Store(resolver.NewEndpointMap()) | ||||
| 	return es | ||||
| } | ||||
| 
 | ||||
| // endpointSharding is a balancer that wraps child balancers. It creates a child | ||||
| // balancer with child config for every unique Endpoint received. It updates the | ||||
| // child states on any update from parent or child. | ||||
| type endpointSharding struct { | ||||
| 	cc           balancer.ClientConn | ||||
| 	bOpts        balancer.BuildOptions | ||||
| 	esOpts       Options | ||||
| 	childBuilder ChildBuilderFunc | ||||
| 
 | ||||
| 	// childMu synchronizes calls to any single child. It must be held for all | ||||
| 	// calls into a child. To avoid deadlocks, do not acquire childMu while | ||||
| 	// holding mu. | ||||
| 	childMu  sync.Mutex | ||||
| 	children atomic.Pointer[resolver.EndpointMap] // endpoint -> *balancerWrapper | ||||
| 
 | ||||
| 	// inhibitChildUpdates is set during UpdateClientConnState/ResolverError | ||||
| 	// calls (calls to children will each produce an update, only want one | ||||
| 	// update). | ||||
| 	inhibitChildUpdates atomic.Bool | ||||
| 
 | ||||
| 	// mu synchronizes access to the state stored in balancerWrappers in the | ||||
| 	// children field. mu must not be held during calls into a child since | ||||
| 	// synchronous calls back from the child may require taking mu, causing a | ||||
| 	// deadlock. To avoid deadlocks, do not acquire childMu while holding mu. | ||||
| 	mu sync.Mutex | ||||
| } | ||||
| 
 | ||||
| // UpdateClientConnState creates a child for new endpoints and deletes children | ||||
| // for endpoints that are no longer present. It also updates all the children, | ||||
| // and sends a single synchronous update of the childrens' aggregated state at | ||||
| // the end of the UpdateClientConnState operation. If any endpoint has no | ||||
| // addresses it will ignore that endpoint. Otherwise, returns first error found | ||||
| // from a child, but fully processes the new update. | ||||
| func (es *endpointSharding) UpdateClientConnState(state balancer.ClientConnState) error { | ||||
| 	es.childMu.Lock() | ||||
| 	defer es.childMu.Unlock() | ||||
| 
 | ||||
| 	es.inhibitChildUpdates.Store(true) | ||||
| 	defer func() { | ||||
| 		es.inhibitChildUpdates.Store(false) | ||||
| 		es.updateState() | ||||
| 	}() | ||||
| 	var ret error | ||||
| 
 | ||||
| 	children := es.children.Load() | ||||
| 	newChildren := resolver.NewEndpointMap() | ||||
| 
 | ||||
| 	// Update/Create new children. | ||||
| 	for _, endpoint := range state.ResolverState.Endpoints { | ||||
| 		if _, ok := newChildren.Get(endpoint); ok { | ||||
| 			// Endpoint child was already created, continue to avoid duplicate | ||||
| 			// update. | ||||
| 			continue | ||||
| 		} | ||||
| 		var childBalancer *balancerWrapper | ||||
| 		if val, ok := children.Get(endpoint); ok { | ||||
| 			childBalancer = val.(*balancerWrapper) | ||||
| 			// Endpoint attributes may have changed, update the stored endpoint. | ||||
| 			es.mu.Lock() | ||||
| 			childBalancer.childState.Endpoint = endpoint | ||||
| 			es.mu.Unlock() | ||||
| 		} else { | ||||
| 			childBalancer = &balancerWrapper{ | ||||
| 				childState: ChildState{Endpoint: endpoint}, | ||||
| 				ClientConn: es.cc, | ||||
| 				es:         es, | ||||
| 			} | ||||
| 			childBalancer.childState.Balancer = childBalancer | ||||
| 			childBalancer.child = es.childBuilder(childBalancer, es.bOpts) | ||||
| 		} | ||||
| 		newChildren.Set(endpoint, childBalancer) | ||||
| 		if err := childBalancer.updateClientConnStateLocked(balancer.ClientConnState{ | ||||
| 			BalancerConfig: state.BalancerConfig, | ||||
| 			ResolverState: resolver.State{ | ||||
| 				Endpoints:  []resolver.Endpoint{endpoint}, | ||||
| 				Attributes: state.ResolverState.Attributes, | ||||
| 			}, | ||||
| 		}); err != nil && ret == nil { | ||||
| 			// Return first error found, and always commit full processing of | ||||
| 			// updating children. If desired to process more specific errors | ||||
| 			// across all endpoints, caller should make these specific | ||||
| 			// validations, this is a current limitation for simplicity sake. | ||||
| 			ret = err | ||||
| 		} | ||||
| 	} | ||||
| 	// Delete old children that are no longer present. | ||||
| 	for _, e := range children.Keys() { | ||||
| 		child, _ := children.Get(e) | ||||
| 		if _, ok := newChildren.Get(e); !ok { | ||||
| 			child.(*balancerWrapper).closeLocked() | ||||
| 		} | ||||
| 	} | ||||
| 	es.children.Store(newChildren) | ||||
| 	if newChildren.Len() == 0 { | ||||
| 		return balancer.ErrBadResolverState | ||||
| 	} | ||||
| 	return ret | ||||
| } | ||||
| 
 | ||||
| // ResolverError forwards the resolver error to all of the endpointSharding's | ||||
| // children and sends a single synchronous update of the childStates at the end | ||||
| // of the ResolverError operation. | ||||
| func (es *endpointSharding) ResolverError(err error) { | ||||
| 	es.childMu.Lock() | ||||
| 	defer es.childMu.Unlock() | ||||
| 	es.inhibitChildUpdates.Store(true) | ||||
| 	defer func() { | ||||
| 		es.inhibitChildUpdates.Store(false) | ||||
| 		es.updateState() | ||||
| 	}() | ||||
| 	children := es.children.Load() | ||||
| 	for _, child := range children.Values() { | ||||
| 		child.(*balancerWrapper).resolverErrorLocked(err) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (es *endpointSharding) UpdateSubConnState(balancer.SubConn, balancer.SubConnState) { | ||||
| 	// UpdateSubConnState is deprecated. | ||||
| } | ||||
| 
 | ||||
| func (es *endpointSharding) Close() { | ||||
| 	es.childMu.Lock() | ||||
| 	defer es.childMu.Unlock() | ||||
| 	children := es.children.Load() | ||||
| 	for _, child := range children.Values() { | ||||
| 		child.(*balancerWrapper).closeLocked() | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // updateState updates this component's state. It sends the aggregated state, | ||||
| // and a picker with round robin behavior with all the child states present if | ||||
| // needed. | ||||
| func (es *endpointSharding) updateState() { | ||||
| 	if es.inhibitChildUpdates.Load() { | ||||
| 		return | ||||
| 	} | ||||
| 	var readyPickers, connectingPickers, idlePickers, transientFailurePickers []balancer.Picker | ||||
| 
 | ||||
| 	es.mu.Lock() | ||||
| 	defer es.mu.Unlock() | ||||
| 
 | ||||
| 	children := es.children.Load() | ||||
| 	childStates := make([]ChildState, 0, children.Len()) | ||||
| 
 | ||||
| 	for _, child := range children.Values() { | ||||
| 		bw := child.(*balancerWrapper) | ||||
| 		childState := bw.childState | ||||
| 		childStates = append(childStates, childState) | ||||
| 		childPicker := childState.State.Picker | ||||
| 		switch childState.State.ConnectivityState { | ||||
| 		case connectivity.Ready: | ||||
| 			readyPickers = append(readyPickers, childPicker) | ||||
| 		case connectivity.Connecting: | ||||
| 			connectingPickers = append(connectingPickers, childPicker) | ||||
| 		case connectivity.Idle: | ||||
| 			idlePickers = append(idlePickers, childPicker) | ||||
| 		case connectivity.TransientFailure: | ||||
| 			transientFailurePickers = append(transientFailurePickers, childPicker) | ||||
| 			// connectivity.Shutdown shouldn't appear. | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Construct the round robin picker based off the aggregated state. Whatever | ||||
| 	// the aggregated state, use the pickers present that are currently in that | ||||
| 	// state only. | ||||
| 	var aggState connectivity.State | ||||
| 	var pickers []balancer.Picker | ||||
| 	if len(readyPickers) >= 1 { | ||||
| 		aggState = connectivity.Ready | ||||
| 		pickers = readyPickers | ||||
| 	} else if len(connectingPickers) >= 1 { | ||||
| 		aggState = connectivity.Connecting | ||||
| 		pickers = connectingPickers | ||||
| 	} else if len(idlePickers) >= 1 { | ||||
| 		aggState = connectivity.Idle | ||||
| 		pickers = idlePickers | ||||
| 	} else if len(transientFailurePickers) >= 1 { | ||||
| 		aggState = connectivity.TransientFailure | ||||
| 		pickers = transientFailurePickers | ||||
| 	} else { | ||||
| 		aggState = connectivity.TransientFailure | ||||
| 		pickers = []balancer.Picker{base.NewErrPicker(errors.New("no children to pick from"))} | ||||
| 	} // No children (resolver error before valid update). | ||||
| 	p := &pickerWithChildStates{ | ||||
| 		pickers:     pickers, | ||||
| 		childStates: childStates, | ||||
| 		next:        uint32(rand.IntN(len(pickers))), | ||||
| 	} | ||||
| 	es.cc.UpdateState(balancer.State{ | ||||
| 		ConnectivityState: aggState, | ||||
| 		Picker:            p, | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // pickerWithChildStates delegates to the pickers it holds in a round robin | ||||
| // fashion. It also contains the childStates of all the endpointSharding's | ||||
| // children. | ||||
| type pickerWithChildStates struct { | ||||
| 	pickers     []balancer.Picker | ||||
| 	childStates []ChildState | ||||
| 	next        uint32 | ||||
| } | ||||
| 
 | ||||
| func (p *pickerWithChildStates) Pick(info balancer.PickInfo) (balancer.PickResult, error) { | ||||
| 	nextIndex := atomic.AddUint32(&p.next, 1) | ||||
| 	picker := p.pickers[nextIndex%uint32(len(p.pickers))] | ||||
| 	return picker.Pick(info) | ||||
| } | ||||
| 
 | ||||
| // ChildStatesFromPicker returns the state of all the children managed by the | ||||
| // endpoint sharding balancer that created this picker. | ||||
| func ChildStatesFromPicker(picker balancer.Picker) []ChildState { | ||||
| 	p, ok := picker.(*pickerWithChildStates) | ||||
| 	if !ok { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return p.childStates | ||||
| } | ||||
| 
 | ||||
| // balancerWrapper is a wrapper of a balancer. It ID's a child balancer by | ||||
| // endpoint, and persists recent child balancer state. | ||||
| type balancerWrapper struct { | ||||
| 	// The following fields are initialized at build time and read-only after | ||||
| 	// that and therefore do not need to be guarded by a mutex. | ||||
| 
 | ||||
| 	// child contains the wrapped balancer. Access its methods only through | ||||
| 	// methods on balancerWrapper to ensure proper synchronization | ||||
| 	child               balancer.Balancer | ||||
| 	balancer.ClientConn // embed to intercept UpdateState, doesn't deal with SubConns | ||||
| 
 | ||||
| 	es *endpointSharding | ||||
| 
 | ||||
| 	// Access to the following fields is guarded by es.mu. | ||||
| 
 | ||||
| 	childState ChildState | ||||
| 	isClosed   bool | ||||
| } | ||||
| 
 | ||||
| func (bw *balancerWrapper) UpdateState(state balancer.State) { | ||||
| 	bw.es.mu.Lock() | ||||
| 	bw.childState.State = state | ||||
| 	bw.es.mu.Unlock() | ||||
| 	if state.ConnectivityState == connectivity.Idle && !bw.es.esOpts.DisableAutoReconnect { | ||||
| 		bw.ExitIdle() | ||||
| 	} | ||||
| 	bw.es.updateState() | ||||
| } | ||||
| 
 | ||||
| // ExitIdle pings an IDLE child balancer to exit idle in a new goroutine to | ||||
| // avoid deadlocks due to synchronous balancer state updates. | ||||
| func (bw *balancerWrapper) ExitIdle() { | ||||
| 	if ei, ok := bw.child.(balancer.ExitIdler); ok { | ||||
| 		go func() { | ||||
| 			bw.es.childMu.Lock() | ||||
| 			if !bw.isClosed { | ||||
| 				ei.ExitIdle() | ||||
| 			} | ||||
| 			bw.es.childMu.Unlock() | ||||
| 		}() | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // updateClientConnStateLocked delivers the ClientConnState to the child | ||||
| // balancer. Callers must hold the child mutex of the parent endpointsharding | ||||
| // balancer. | ||||
| func (bw *balancerWrapper) updateClientConnStateLocked(ccs balancer.ClientConnState) error { | ||||
| 	return bw.child.UpdateClientConnState(ccs) | ||||
| } | ||||
| 
 | ||||
| // closeLocked closes the child balancer. Callers must hold the child mutext of | ||||
| // the parent endpointsharding balancer. | ||||
| func (bw *balancerWrapper) closeLocked() { | ||||
| 	bw.child.Close() | ||||
| 	bw.isClosed = true | ||||
| } | ||||
| 
 | ||||
| func (bw *balancerWrapper) resolverErrorLocked(err error) { | ||||
| 	bw.child.ResolverError(err) | ||||
| } | ||||
							
								
								
									
										29
									
								
								vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								vendor/google.golang.org/grpc/balancer/pickfirst/pickfirstleaf/pickfirstleaf.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -54,9 +54,18 @@ func init() { | |||
| 	balancer.Register(pickfirstBuilder{}) | ||||
| } | ||||
| 
 | ||||
| // enableHealthListenerKeyType is a unique key type used in resolver attributes | ||||
| // to indicate whether the health listener usage is enabled. | ||||
| type enableHealthListenerKeyType struct{} | ||||
| type ( | ||||
| 	// enableHealthListenerKeyType is a unique key type used in resolver | ||||
| 	// attributes to indicate whether the health listener usage is enabled. | ||||
| 	enableHealthListenerKeyType struct{} | ||||
| 	// managedByPickfirstKeyType is an attribute key type to inform Outlier | ||||
| 	// Detection that the generic health listener is being used. | ||||
| 	// TODO: https://github.com/grpc/grpc-go/issues/7915 - Remove this when | ||||
| 	// implementing the dualstack design. This is a hack. Once Dualstack is | ||||
| 	// completed, outlier detection will stop sending ejection updates through | ||||
| 	// the connectivity listener. | ||||
| 	managedByPickfirstKeyType struct{} | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	logger = grpclog.Component("pick-first-leaf-lb") | ||||
|  | @ -111,7 +120,7 @@ func (pickfirstBuilder) Build(cc balancer.ClientConn, bo balancer.BuildOptions) | |||
| 	b := &pickfirstBalancer{ | ||||
| 		cc:              cc, | ||||
| 		target:          bo.Target.String(), | ||||
| 		metricsRecorder: bo.MetricsRecorder, // ClientConn will always create a Metrics Recorder. | ||||
| 		metricsRecorder: cc.MetricsRecorder(), | ||||
| 
 | ||||
| 		subConns:              resolver.NewAddressMap(), | ||||
| 		state:                 connectivity.Connecting, | ||||
|  | @ -140,6 +149,17 @@ func EnableHealthListener(state resolver.State) resolver.State { | |||
| 	return state | ||||
| } | ||||
| 
 | ||||
| // IsManagedByPickfirst returns whether an address belongs to a SubConn | ||||
| // managed by the pickfirst LB policy. | ||||
| // TODO: https://github.com/grpc/grpc-go/issues/7915 - This is a hack to disable | ||||
| // outlier_detection via the with connectivity listener when using pick_first. | ||||
| // Once Dualstack changes are complete, all SubConns will be created by | ||||
| // pick_first and outlier detection will only use the health listener for | ||||
| // ejection. This hack can then be removed. | ||||
| func IsManagedByPickfirst(addr resolver.Address) bool { | ||||
| 	return addr.BalancerAttributes.Value(managedByPickfirstKeyType{}) != nil | ||||
| } | ||||
| 
 | ||||
| type pfConfig struct { | ||||
| 	serviceconfig.LoadBalancingConfig `json:"-"` | ||||
| 
 | ||||
|  | @ -166,6 +186,7 @@ type scData struct { | |||
| } | ||||
| 
 | ||||
| func (b *pickfirstBalancer) newSCData(addr resolver.Address) (*scData, error) { | ||||
| 	addr.BalancerAttributes = addr.BalancerAttributes.WithValue(managedByPickfirstKeyType{}, true) | ||||
| 	sd := &scData{ | ||||
| 		rawConnectivityState: connectivity.Idle, | ||||
| 		effectiveState:       connectivity.Idle, | ||||
|  |  | |||
							
								
								
									
										78
									
								
								vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										78
									
								
								vendor/google.golang.org/grpc/balancer/roundrobin/roundrobin.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -22,12 +22,13 @@ | |||
| package roundrobin | ||||
| 
 | ||||
| import ( | ||||
| 	rand "math/rand/v2" | ||||
| 	"sync/atomic" | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"google.golang.org/grpc/balancer" | ||||
| 	"google.golang.org/grpc/balancer/base" | ||||
| 	"google.golang.org/grpc/balancer/endpointsharding" | ||||
| 	"google.golang.org/grpc/balancer/pickfirst/pickfirstleaf" | ||||
| 	"google.golang.org/grpc/grpclog" | ||||
| 	internalgrpclog "google.golang.org/grpc/internal/grpclog" | ||||
| ) | ||||
| 
 | ||||
| // Name is the name of round_robin balancer. | ||||
|  | @ -35,47 +36,44 @@ const Name = "round_robin" | |||
| 
 | ||||
| var logger = grpclog.Component("roundrobin") | ||||
| 
 | ||||
| // newBuilder creates a new roundrobin balancer builder. | ||||
| func newBuilder() balancer.Builder { | ||||
| 	return base.NewBalancerBuilder(Name, &rrPickerBuilder{}, base.Config{HealthCheck: true}) | ||||
| } | ||||
| 
 | ||||
| func init() { | ||||
| 	balancer.Register(newBuilder()) | ||||
| 	balancer.Register(builder{}) | ||||
| } | ||||
| 
 | ||||
| type rrPickerBuilder struct{} | ||||
| type builder struct{} | ||||
| 
 | ||||
| func (*rrPickerBuilder) Build(info base.PickerBuildInfo) balancer.Picker { | ||||
| 	logger.Infof("roundrobinPicker: Build called with info: %v", info) | ||||
| 	if len(info.ReadySCs) == 0 { | ||||
| 		return base.NewErrPicker(balancer.ErrNoSubConnAvailable) | ||||
| func (bb builder) Name() string { | ||||
| 	return Name | ||||
| } | ||||
| 
 | ||||
| func (bb builder) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer { | ||||
| 	childBuilder := balancer.Get(pickfirstleaf.Name).Build | ||||
| 	bal := &rrBalancer{ | ||||
| 		cc:       cc, | ||||
| 		Balancer: endpointsharding.NewBalancer(cc, opts, childBuilder, endpointsharding.Options{}), | ||||
| 	} | ||||
| 	scs := make([]balancer.SubConn, 0, len(info.ReadySCs)) | ||||
| 	for sc := range info.ReadySCs { | ||||
| 		scs = append(scs, sc) | ||||
| 	} | ||||
| 	return &rrPicker{ | ||||
| 		subConns: scs, | ||||
| 		// Start at a random index, as the same RR balancer rebuilds a new | ||||
| 		// picker when SubConn states change, and we don't want to apply excess | ||||
| 		// load to the first server in the list. | ||||
| 		next: uint32(rand.IntN(len(scs))), | ||||
| 	bal.logger = internalgrpclog.NewPrefixLogger(logger, fmt.Sprintf("[%p] ", bal)) | ||||
| 	bal.logger.Infof("Created") | ||||
| 	return bal | ||||
| } | ||||
| 
 | ||||
| type rrBalancer struct { | ||||
| 	balancer.Balancer | ||||
| 	cc     balancer.ClientConn | ||||
| 	logger *internalgrpclog.PrefixLogger | ||||
| } | ||||
| 
 | ||||
| func (b *rrBalancer) UpdateClientConnState(ccs balancer.ClientConnState) error { | ||||
| 	return b.Balancer.UpdateClientConnState(balancer.ClientConnState{ | ||||
| 		// Enable the health listener in pickfirst children for client side health | ||||
| 		// checks and outlier detection, if configured. | ||||
| 		ResolverState: pickfirstleaf.EnableHealthListener(ccs.ResolverState), | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| func (b *rrBalancer) ExitIdle() { | ||||
| 	// Should always be ok, as child is endpoint sharding. | ||||
| 	if ei, ok := b.Balancer.(balancer.ExitIdler); ok { | ||||
| 		ei.ExitIdle() | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| type rrPicker struct { | ||||
| 	// subConns is the snapshot of the roundrobin balancer when this picker was | ||||
| 	// created. The slice is immutable. Each Get() will do a round robin | ||||
| 	// selection from it and return the selected SubConn. | ||||
| 	subConns []balancer.SubConn | ||||
| 	next     uint32 | ||||
| } | ||||
| 
 | ||||
| func (p *rrPicker) Pick(balancer.PickInfo) (balancer.PickResult, error) { | ||||
| 	subConnsLen := uint32(len(p.subConns)) | ||||
| 	nextIndex := atomic.AddUint32(&p.next, 1) | ||||
| 
 | ||||
| 	sc := p.subConns[nextIndex%subConnsLen] | ||||
| 	return balancer.PickResult{SubConn: sc}, nil | ||||
| } | ||||
|  |  | |||
							
								
								
									
										2
									
								
								vendor/google.golang.org/grpc/balancer/subconn.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/grpc/balancer/subconn.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -44,7 +44,7 @@ import ( | |||
| // should only use a single address. | ||||
| // | ||||
| // NOTICE: This interface is intended to be implemented by gRPC, or intercepted | ||||
| // by custom load balancing poilices.  Users should not need their own complete | ||||
| // by custom load balancing polices.  Users should not need their own complete | ||||
| // implementation of this interface -- they should always delegate to a SubConn | ||||
| // returned by ClientConn.NewSubConn() by embedding it in their implementations. | ||||
| // An embedded SubConn must never be nil, or runtime panics will occur. | ||||
|  |  | |||
							
								
								
									
										82
									
								
								vendor/google.golang.org/grpc/balancer_wrapper.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										82
									
								
								vendor/google.golang.org/grpc/balancer_wrapper.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -26,6 +26,7 @@ import ( | |||
| 	"google.golang.org/grpc/balancer" | ||||
| 	"google.golang.org/grpc/codes" | ||||
| 	"google.golang.org/grpc/connectivity" | ||||
| 	"google.golang.org/grpc/experimental/stats" | ||||
| 	"google.golang.org/grpc/internal" | ||||
| 	"google.golang.org/grpc/internal/balancer/gracefulswitch" | ||||
| 	"google.golang.org/grpc/internal/channelz" | ||||
|  | @ -34,7 +35,15 @@ import ( | |||
| 	"google.golang.org/grpc/status" | ||||
| ) | ||||
| 
 | ||||
| var setConnectedAddress = internal.SetConnectedAddress.(func(*balancer.SubConnState, resolver.Address)) | ||||
| var ( | ||||
| 	setConnectedAddress = internal.SetConnectedAddress.(func(*balancer.SubConnState, resolver.Address)) | ||||
| 	// noOpRegisterHealthListenerFn is used when client side health checking is | ||||
| 	// disabled. It sends a single READY update on the registered listener. | ||||
| 	noOpRegisterHealthListenerFn = func(_ context.Context, listener func(balancer.SubConnState)) func() { | ||||
| 		listener(balancer.SubConnState{ConnectivityState: connectivity.Ready}) | ||||
| 		return func() {} | ||||
| 	} | ||||
| ) | ||||
| 
 | ||||
| // ccBalancerWrapper sits between the ClientConn and the Balancer. | ||||
| // | ||||
|  | @ -51,6 +60,7 @@ var setConnectedAddress = internal.SetConnectedAddress.(func(*balancer.SubConnSt | |||
| // It uses the gracefulswitch.Balancer internally to ensure that balancer | ||||
| // switches happen in a graceful manner. | ||||
| type ccBalancerWrapper struct { | ||||
| 	internal.EnforceClientConnEmbedding | ||||
| 	// The following fields are initialized when the wrapper is created and are | ||||
| 	// read-only afterwards, and therefore can be accessed without a mutex. | ||||
| 	cc               *ClientConn | ||||
|  | @ -84,7 +94,6 @@ func newCCBalancerWrapper(cc *ClientConn) *ccBalancerWrapper { | |||
| 			CustomUserAgent: cc.dopts.copts.UserAgent, | ||||
| 			ChannelzParent:  cc.channelz, | ||||
| 			Target:          cc.parsedTarget, | ||||
| 			MetricsRecorder: cc.metricsRecorderList, | ||||
| 		}, | ||||
| 		serializer:       grpcsync.NewCallbackSerializer(ctx), | ||||
| 		serializerCancel: cancel, | ||||
|  | @ -93,6 +102,10 @@ func newCCBalancerWrapper(cc *ClientConn) *ccBalancerWrapper { | |||
| 	return ccb | ||||
| } | ||||
| 
 | ||||
| func (ccb *ccBalancerWrapper) MetricsRecorder() stats.MetricsRecorder { | ||||
| 	return ccb.cc.metricsRecorderList | ||||
| } | ||||
| 
 | ||||
| // updateClientConnState is invoked by grpc to push a ClientConnState update to | ||||
| // the underlying balancer.  This is always executed from the serializer, so | ||||
| // it is safe to call into the balancer here. | ||||
|  | @ -277,10 +290,17 @@ type healthData struct { | |||
| 	// to the LB policy. This is stored to avoid sending updates when the | ||||
| 	// SubConn has already exited connectivity state READY. | ||||
| 	connectivityState connectivity.State | ||||
| 	// closeHealthProducer stores function to close the ref counted health | ||||
| 	// producer. The health producer is automatically closed when the SubConn | ||||
| 	// state changes. | ||||
| 	closeHealthProducer func() | ||||
| } | ||||
| 
 | ||||
| func newHealthData(s connectivity.State) *healthData { | ||||
| 	return &healthData{connectivityState: s} | ||||
| 	return &healthData{ | ||||
| 		connectivityState:   s, | ||||
| 		closeHealthProducer: func() {}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // updateState is invoked by grpc to push a subConn state update to the | ||||
|  | @ -400,7 +420,7 @@ func (acbw *acBalancerWrapper) GetOrBuildProducer(pb balancer.ProducerBuilder) ( | |||
| 		} | ||||
| 		acbw.producersMu.Unlock() | ||||
| 	} | ||||
| 	return pData.producer, grpcsync.OnceFunc(unref) | ||||
| 	return pData.producer, sync.OnceFunc(unref) | ||||
| } | ||||
| 
 | ||||
| func (acbw *acBalancerWrapper) closeProducers() { | ||||
|  | @ -413,6 +433,37 @@ func (acbw *acBalancerWrapper) closeProducers() { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| // healthProducerRegisterFn is a type alias for the health producer's function | ||||
| // for registering listeners. | ||||
| type healthProducerRegisterFn = func(context.Context, balancer.SubConn, string, func(balancer.SubConnState)) func() | ||||
| 
 | ||||
| // healthListenerRegFn returns a function to register a listener for health | ||||
| // updates. If client side health checks are disabled, the registered listener | ||||
| // will get a single READY (raw connectivity state) update. | ||||
| // | ||||
| // Client side health checking is enabled when all the following | ||||
| // conditions are satisfied: | ||||
| // 1. Health checking is not disabled using the dial option. | ||||
| // 2. The health package is imported. | ||||
| // 3. The health check config is present in the service config. | ||||
| func (acbw *acBalancerWrapper) healthListenerRegFn() func(context.Context, func(balancer.SubConnState)) func() { | ||||
| 	if acbw.ccb.cc.dopts.disableHealthCheck { | ||||
| 		return noOpRegisterHealthListenerFn | ||||
| 	} | ||||
| 	regHealthLisFn := internal.RegisterClientHealthCheckListener | ||||
| 	if regHealthLisFn == nil { | ||||
| 		// The health package is not imported. | ||||
| 		return noOpRegisterHealthListenerFn | ||||
| 	} | ||||
| 	cfg := acbw.ac.cc.healthCheckConfig() | ||||
| 	if cfg == nil { | ||||
| 		return noOpRegisterHealthListenerFn | ||||
| 	} | ||||
| 	return func(ctx context.Context, listener func(balancer.SubConnState)) func() { | ||||
| 		return regHealthLisFn.(healthProducerRegisterFn)(ctx, acbw, cfg.ServiceName, listener) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| // RegisterHealthListener accepts a health listener from the LB policy. It sends | ||||
| // updates to the health listener as long as the SubConn's connectivity state | ||||
| // doesn't change and a new health listener is not registered. To invalidate | ||||
|  | @ -421,6 +472,7 @@ func (acbw *acBalancerWrapper) closeProducers() { | |||
| func (acbw *acBalancerWrapper) RegisterHealthListener(listener func(balancer.SubConnState)) { | ||||
| 	acbw.healthMu.Lock() | ||||
| 	defer acbw.healthMu.Unlock() | ||||
| 	acbw.healthData.closeHealthProducer() | ||||
| 	// listeners should not be registered when the connectivity state | ||||
| 	// isn't Ready. This may happen when the balancer registers a listener | ||||
| 	// after the connectivityState is updated, but before it is notified | ||||
|  | @ -436,6 +488,7 @@ func (acbw *acBalancerWrapper) RegisterHealthListener(listener func(balancer.Sub | |||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	registerFn := acbw.healthListenerRegFn() | ||||
| 	acbw.ccb.serializer.TrySchedule(func(ctx context.Context) { | ||||
| 		if ctx.Err() != nil || acbw.ccb.balancer == nil { | ||||
| 			return | ||||
|  | @ -443,10 +496,25 @@ func (acbw *acBalancerWrapper) RegisterHealthListener(listener func(balancer.Sub | |||
| 		// Don't send updates if a new listener is registered. | ||||
| 		acbw.healthMu.Lock() | ||||
| 		defer acbw.healthMu.Unlock() | ||||
| 		curHD := acbw.healthData | ||||
| 		if curHD != hd { | ||||
| 		if acbw.healthData != hd { | ||||
| 			return | ||||
| 		} | ||||
| 		listener(balancer.SubConnState{ConnectivityState: connectivity.Ready}) | ||||
| 		// Serialize the health updates from the health producer with | ||||
| 		// other calls into the LB policy. | ||||
| 		listenerWrapper := func(scs balancer.SubConnState) { | ||||
| 			acbw.ccb.serializer.TrySchedule(func(ctx context.Context) { | ||||
| 				if ctx.Err() != nil || acbw.ccb.balancer == nil { | ||||
| 					return | ||||
| 				} | ||||
| 				acbw.healthMu.Lock() | ||||
| 				defer acbw.healthMu.Unlock() | ||||
| 				if acbw.healthData != hd { | ||||
| 					return | ||||
| 				} | ||||
| 				listener(scs) | ||||
| 			}) | ||||
| 		} | ||||
| 
 | ||||
| 		hd.closeHealthProducer = registerFn(ctx, listenerWrapper) | ||||
| 	}) | ||||
| } | ||||
|  |  | |||
							
								
								
									
										118
									
								
								vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										118
									
								
								vendor/google.golang.org/grpc/binarylog/grpc_binarylog_v1/binarylog.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -18,7 +18,7 @@ | |||
| 
 | ||||
| // Code generated by protoc-gen-go. DO NOT EDIT. | ||||
| // versions: | ||||
| // 	protoc-gen-go v1.35.1 | ||||
| // 	protoc-gen-go v1.36.4 | ||||
| // 	protoc        v5.27.1 | ||||
| // source: grpc/binlog/v1/binarylog.proto | ||||
| 
 | ||||
|  | @ -31,6 +31,7 @@ import ( | |||
| 	timestamppb "google.golang.org/protobuf/types/known/timestamppb" | ||||
| 	reflect "reflect" | ||||
| 	sync "sync" | ||||
| 	unsafe "unsafe" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
|  | @ -233,10 +234,7 @@ func (Address_Type) EnumDescriptor() ([]byte, []int) { | |||
| 
 | ||||
| // Log entry we store in binary logs | ||||
| type GrpcLogEntry struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	state protoimpl.MessageState `protogen:"open.v1"` | ||||
| 	// The timestamp of the binary log message | ||||
| 	Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` | ||||
| 	// Uniquely identifies a call. The value must not be 0 in order to disambiguate | ||||
|  | @ -255,7 +253,7 @@ type GrpcLogEntry struct { | |||
| 	// The logger uses one of the following fields to record the payload, | ||||
| 	// according to the type of the log entry. | ||||
| 	// | ||||
| 	// Types that are assignable to Payload: | ||||
| 	// Types that are valid to be assigned to Payload: | ||||
| 	// | ||||
| 	//	*GrpcLogEntry_ClientHeader | ||||
| 	//	*GrpcLogEntry_ServerHeader | ||||
|  | @ -269,7 +267,9 @@ type GrpcLogEntry struct { | |||
| 	// EVENT_TYPE_SERVER_HEADER normally or EVENT_TYPE_SERVER_TRAILER in | ||||
| 	// the case of trailers-only. On server side, peer is always | ||||
| 	// logged on EVENT_TYPE_CLIENT_HEADER. | ||||
| 	Peer *Address `protobuf:"bytes,11,opt,name=peer,proto3" json:"peer,omitempty"` | ||||
| 	Peer          *Address `protobuf:"bytes,11,opt,name=peer,proto3" json:"peer,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *GrpcLogEntry) Reset() { | ||||
|  | @ -337,37 +337,45 @@ func (x *GrpcLogEntry) GetLogger() GrpcLogEntry_Logger { | |||
| 	return GrpcLogEntry_LOGGER_UNKNOWN | ||||
| } | ||||
| 
 | ||||
| func (m *GrpcLogEntry) GetPayload() isGrpcLogEntry_Payload { | ||||
| 	if m != nil { | ||||
| 		return m.Payload | ||||
| func (x *GrpcLogEntry) GetPayload() isGrpcLogEntry_Payload { | ||||
| 	if x != nil { | ||||
| 		return x.Payload | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (x *GrpcLogEntry) GetClientHeader() *ClientHeader { | ||||
| 	if x, ok := x.GetPayload().(*GrpcLogEntry_ClientHeader); ok { | ||||
| 		return x.ClientHeader | ||||
| 	if x != nil { | ||||
| 		if x, ok := x.Payload.(*GrpcLogEntry_ClientHeader); ok { | ||||
| 			return x.ClientHeader | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (x *GrpcLogEntry) GetServerHeader() *ServerHeader { | ||||
| 	if x, ok := x.GetPayload().(*GrpcLogEntry_ServerHeader); ok { | ||||
| 		return x.ServerHeader | ||||
| 	if x != nil { | ||||
| 		if x, ok := x.Payload.(*GrpcLogEntry_ServerHeader); ok { | ||||
| 			return x.ServerHeader | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (x *GrpcLogEntry) GetMessage() *Message { | ||||
| 	if x, ok := x.GetPayload().(*GrpcLogEntry_Message); ok { | ||||
| 		return x.Message | ||||
| 	if x != nil { | ||||
| 		if x, ok := x.Payload.(*GrpcLogEntry_Message); ok { | ||||
| 			return x.Message | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (x *GrpcLogEntry) GetTrailer() *Trailer { | ||||
| 	if x, ok := x.GetPayload().(*GrpcLogEntry_Trailer); ok { | ||||
| 		return x.Trailer | ||||
| 	if x != nil { | ||||
| 		if x, ok := x.Payload.(*GrpcLogEntry_Trailer); ok { | ||||
| 			return x.Trailer | ||||
| 		} | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | @ -416,10 +424,7 @@ func (*GrpcLogEntry_Message) isGrpcLogEntry_Payload() {} | |||
| func (*GrpcLogEntry_Trailer) isGrpcLogEntry_Payload() {} | ||||
| 
 | ||||
| type ClientHeader struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	state protoimpl.MessageState `protogen:"open.v1"` | ||||
| 	// This contains only the metadata from the application. | ||||
| 	Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` | ||||
| 	// The name of the RPC method, which looks something like: | ||||
|  | @ -433,7 +438,9 @@ type ClientHeader struct { | |||
| 	// <host> or <host>:<port> . | ||||
| 	Authority string `protobuf:"bytes,3,opt,name=authority,proto3" json:"authority,omitempty"` | ||||
| 	// the RPC timeout | ||||
| 	Timeout *durationpb.Duration `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"` | ||||
| 	Timeout       *durationpb.Duration `protobuf:"bytes,4,opt,name=timeout,proto3" json:"timeout,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *ClientHeader) Reset() { | ||||
|  | @ -495,12 +502,11 @@ func (x *ClientHeader) GetTimeout() *durationpb.Duration { | |||
| } | ||||
| 
 | ||||
| type ServerHeader struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	state protoimpl.MessageState `protogen:"open.v1"` | ||||
| 	// This contains only the metadata from the application. | ||||
| 	Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` | ||||
| 	Metadata      *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *ServerHeader) Reset() { | ||||
|  | @ -541,10 +547,7 @@ func (x *ServerHeader) GetMetadata() *Metadata { | |||
| } | ||||
| 
 | ||||
| type Trailer struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	state protoimpl.MessageState `protogen:"open.v1"` | ||||
| 	// This contains only the metadata from the application. | ||||
| 	Metadata *Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` | ||||
| 	// The gRPC status code. | ||||
|  | @ -555,6 +558,8 @@ type Trailer struct { | |||
| 	// The value of the 'grpc-status-details-bin' metadata key. If | ||||
| 	// present, this is always an encoded 'google.rpc.Status' message. | ||||
| 	StatusDetails []byte `protobuf:"bytes,4,opt,name=status_details,json=statusDetails,proto3" json:"status_details,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *Trailer) Reset() { | ||||
|  | @ -617,15 +622,14 @@ func (x *Trailer) GetStatusDetails() []byte { | |||
| 
 | ||||
| // Message payload, used by CLIENT_MESSAGE and SERVER_MESSAGE | ||||
| type Message struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	state protoimpl.MessageState `protogen:"open.v1"` | ||||
| 	// Length of the message. It may not be the same as the length of the | ||||
| 	// data field, as the logging payload can be truncated or omitted. | ||||
| 	Length uint32 `protobuf:"varint,1,opt,name=length,proto3" json:"length,omitempty"` | ||||
| 	// May be truncated or omitted. | ||||
| 	Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` | ||||
| 	Data          []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *Message) Reset() { | ||||
|  | @ -694,11 +698,10 @@ func (x *Message) GetData() []byte { | |||
| // header is just a normal metadata key. | ||||
| // The pair will not count towards the size limit. | ||||
| type Metadata struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	state         protoimpl.MessageState `protogen:"open.v1"` | ||||
| 	Entry         []*MetadataEntry       `protobuf:"bytes,1,rep,name=entry,proto3" json:"entry,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	Entry []*MetadataEntry `protobuf:"bytes,1,rep,name=entry,proto3" json:"entry,omitempty"` | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *Metadata) Reset() { | ||||
|  | @ -740,12 +743,11 @@ func (x *Metadata) GetEntry() []*MetadataEntry { | |||
| 
 | ||||
| // A metadata key value pair | ||||
| type MetadataEntry struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	state         protoimpl.MessageState `protogen:"open.v1"` | ||||
| 	Key           string                 `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` | ||||
| 	Value         []byte                 `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	Key   string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` | ||||
| 	Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *MetadataEntry) Reset() { | ||||
|  | @ -794,14 +796,13 @@ func (x *MetadataEntry) GetValue() []byte { | |||
| 
 | ||||
| // Address information | ||||
| type Address struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	Type    Address_Type `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.binarylog.v1.Address_Type" json:"type,omitempty"` | ||||
| 	Address string       `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` | ||||
| 	state   protoimpl.MessageState `protogen:"open.v1"` | ||||
| 	Type    Address_Type           `protobuf:"varint,1,opt,name=type,proto3,enum=grpc.binarylog.v1.Address_Type" json:"type,omitempty"` | ||||
| 	Address string                 `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` | ||||
| 	// only for TYPE_IPV4 and TYPE_IPV6 | ||||
| 	IpPort uint32 `protobuf:"varint,3,opt,name=ip_port,json=ipPort,proto3" json:"ip_port,omitempty"` | ||||
| 	IpPort        uint32 `protobuf:"varint,3,opt,name=ip_port,json=ipPort,proto3" json:"ip_port,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *Address) Reset() { | ||||
|  | @ -857,7 +858,7 @@ func (x *Address) GetIpPort() uint32 { | |||
| 
 | ||||
| var File_grpc_binlog_v1_binarylog_proto protoreflect.FileDescriptor | ||||
| 
 | ||||
| var file_grpc_binlog_v1_binarylog_proto_rawDesc = []byte{ | ||||
| var file_grpc_binlog_v1_binarylog_proto_rawDesc = string([]byte{ | ||||
| 	0x0a, 0x1e, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x2f, 0x76, 0x31, | ||||
| 	0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||
| 	0x12, 0x11, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, | ||||
|  | @ -983,16 +984,16 @@ var file_grpc_binlog_v1_binarylog_proto_rawDesc = []byte{ | |||
| 	0x69, 0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x62, 0x69, | ||||
| 	0x6e, 0x61, 0x72, 0x79, 0x6c, 0x6f, 0x67, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, | ||||
| 	0x6f, 0x33, | ||||
| } | ||||
| }) | ||||
| 
 | ||||
| var ( | ||||
| 	file_grpc_binlog_v1_binarylog_proto_rawDescOnce sync.Once | ||||
| 	file_grpc_binlog_v1_binarylog_proto_rawDescData = file_grpc_binlog_v1_binarylog_proto_rawDesc | ||||
| 	file_grpc_binlog_v1_binarylog_proto_rawDescData []byte | ||||
| ) | ||||
| 
 | ||||
| func file_grpc_binlog_v1_binarylog_proto_rawDescGZIP() []byte { | ||||
| 	file_grpc_binlog_v1_binarylog_proto_rawDescOnce.Do(func() { | ||||
| 		file_grpc_binlog_v1_binarylog_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_binlog_v1_binarylog_proto_rawDescData) | ||||
| 		file_grpc_binlog_v1_binarylog_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_grpc_binlog_v1_binarylog_proto_rawDesc), len(file_grpc_binlog_v1_binarylog_proto_rawDesc))) | ||||
| 	}) | ||||
| 	return file_grpc_binlog_v1_binarylog_proto_rawDescData | ||||
| } | ||||
|  | @ -1051,7 +1052,7 @@ func file_grpc_binlog_v1_binarylog_proto_init() { | |||
| 	out := protoimpl.TypeBuilder{ | ||||
| 		File: protoimpl.DescBuilder{ | ||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||
| 			RawDescriptor: file_grpc_binlog_v1_binarylog_proto_rawDesc, | ||||
| 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_grpc_binlog_v1_binarylog_proto_rawDesc), len(file_grpc_binlog_v1_binarylog_proto_rawDesc)), | ||||
| 			NumEnums:      3, | ||||
| 			NumMessages:   8, | ||||
| 			NumExtensions: 0, | ||||
|  | @ -1063,7 +1064,6 @@ func file_grpc_binlog_v1_binarylog_proto_init() { | |||
| 		MessageInfos:      file_grpc_binlog_v1_binarylog_proto_msgTypes, | ||||
| 	}.Build() | ||||
| 	File_grpc_binlog_v1_binarylog_proto = out.File | ||||
| 	file_grpc_binlog_v1_binarylog_proto_rawDesc = nil | ||||
| 	file_grpc_binlog_v1_binarylog_proto_goTypes = nil | ||||
| 	file_grpc_binlog_v1_binarylog_proto_depIdxs = nil | ||||
| } | ||||
|  |  | |||
							
								
								
									
										47
									
								
								vendor/google.golang.org/grpc/clientconn.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										47
									
								
								vendor/google.golang.org/grpc/clientconn.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -118,12 +118,26 @@ func (dcs *defaultConfigSelector) SelectConfig(rpcInfo iresolver.RPCInfo) (*ires | |||
| 
 | ||||
| // NewClient creates a new gRPC "channel" for the target URI provided.  No I/O | ||||
| // is performed.  Use of the ClientConn for RPCs will automatically cause it to | ||||
| // connect.  Connect may be used to manually create a connection, but for most | ||||
| // users this is unnecessary. | ||||
| // connect.  The Connect method may be called to manually create a connection, | ||||
| // but for most users this should be unnecessary. | ||||
| // | ||||
| // The target name syntax is defined in | ||||
| // https://github.com/grpc/grpc/blob/master/doc/naming.md.  e.g. to use dns | ||||
| // resolver, a "dns:///" prefix should be applied to the target. | ||||
| // https://github.com/grpc/grpc/blob/master/doc/naming.md.  E.g. to use the dns | ||||
| // name resolver, a "dns:///" prefix may be applied to the target.  The default | ||||
| // name resolver will be used if no scheme is detected, or if the parsed scheme | ||||
| // is not a registered name resolver.  The default resolver is "dns" but can be | ||||
| // overridden using the resolver package's SetDefaultScheme. | ||||
| // | ||||
| // Examples: | ||||
| // | ||||
| //   - "foo.googleapis.com:8080" | ||||
| //   - "dns:///foo.googleapis.com:8080" | ||||
| //   - "dns:///foo.googleapis.com" | ||||
| //   - "dns:///10.0.0.213:8080" | ||||
| //   - "dns:///%5B2001:db8:85a3:8d3:1319:8a2e:370:7348%5D:443" | ||||
| //   - "dns://8.8.8.8/foo.googleapis.com:8080" | ||||
| //   - "dns://8.8.8.8/foo.googleapis.com" | ||||
| //   - "zookeeper://zk.example.com:9900/example_service" | ||||
| // | ||||
| // The DialOptions returned by WithBlock, WithTimeout, | ||||
| // WithReturnConnectionError, and FailOnNonTempDialError are ignored by this | ||||
|  | @ -181,7 +195,7 @@ func NewClient(target string, opts ...DialOption) (conn *ClientConn, err error) | |||
| 		} | ||||
| 		cc.dopts.defaultServiceConfig, _ = scpr.Config.(*ServiceConfig) | ||||
| 	} | ||||
| 	cc.mkp = cc.dopts.copts.KeepaliveParams | ||||
| 	cc.keepaliveParams = cc.dopts.copts.KeepaliveParams | ||||
| 
 | ||||
| 	if err = cc.initAuthority(); err != nil { | ||||
| 		return nil, err | ||||
|  | @ -225,7 +239,12 @@ func Dial(target string, opts ...DialOption) (*ClientConn, error) { | |||
| func DialContext(ctx context.Context, target string, opts ...DialOption) (conn *ClientConn, err error) { | ||||
| 	// At the end of this method, we kick the channel out of idle, rather than | ||||
| 	// waiting for the first rpc. | ||||
| 	opts = append([]DialOption{withDefaultScheme("passthrough")}, opts...) | ||||
| 	// | ||||
| 	// WithLocalDNSResolution dial option in `grpc.Dial` ensures that it | ||||
| 	// preserves behavior: when default scheme passthrough is used, skip | ||||
| 	// hostname resolution, when "dns" is used for resolution, perform | ||||
| 	// resolution on the client. | ||||
| 	opts = append([]DialOption{withDefaultScheme("passthrough"), WithLocalDNSResolution()}, opts...) | ||||
| 	cc, err := NewClient(target, opts...) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
|  | @ -618,7 +637,7 @@ type ClientConn struct { | |||
| 	balancerWrapper *ccBalancerWrapper         // Always recreated whenever entering idle to simplify Close. | ||||
| 	sc              *ServiceConfig             // Latest service config received from the resolver. | ||||
| 	conns           map[*addrConn]struct{}     // Set to nil on close. | ||||
| 	mkp             keepalive.ClientParameters // May be updated upon receipt of a GoAway. | ||||
| 	keepaliveParams keepalive.ClientParameters // May be updated upon receipt of a GoAway. | ||||
| 	// firstResolveEvent is used to track whether the name resolver sent us at | ||||
| 	// least one update. RPCs block on this event.  May be accessed without mu | ||||
| 	// if we know we cannot be asked to enter idle mode while accessing it (e.g. | ||||
|  | @ -867,7 +886,13 @@ func (cc *ClientConn) Target() string { | |||
| 	return cc.target | ||||
| } | ||||
| 
 | ||||
| // CanonicalTarget returns the canonical target string of the ClientConn. | ||||
| // CanonicalTarget returns the canonical target string used when creating cc. | ||||
| // | ||||
| // This always has the form "<scheme>://[authority]/<endpoint>".  For example: | ||||
| // | ||||
| //   - "dns:///example.com:42" | ||||
| //   - "dns://8.8.8.8/example.com:42" | ||||
| //   - "unix:///path/to/socket" | ||||
| func (cc *ClientConn) CanonicalTarget() string { | ||||
| 	return cc.parsedTarget.String() | ||||
| } | ||||
|  | @ -1210,8 +1235,8 @@ func (ac *addrConn) adjustParams(r transport.GoAwayReason) { | |||
| 	case transport.GoAwayTooManyPings: | ||||
| 		v := 2 * ac.dopts.copts.KeepaliveParams.Time | ||||
| 		ac.cc.mu.Lock() | ||||
| 		if v > ac.cc.mkp.Time { | ||||
| 			ac.cc.mkp.Time = v | ||||
| 		if v > ac.cc.keepaliveParams.Time { | ||||
| 			ac.cc.keepaliveParams.Time = v | ||||
| 		} | ||||
| 		ac.cc.mu.Unlock() | ||||
| 	} | ||||
|  | @ -1307,7 +1332,7 @@ func (ac *addrConn) tryAllAddrs(ctx context.Context, addrs []resolver.Address, c | |||
| 		ac.mu.Lock() | ||||
| 
 | ||||
| 		ac.cc.mu.RLock() | ||||
| 		ac.dopts.copts.KeepaliveParams = ac.cc.mkp | ||||
| 		ac.dopts.copts.KeepaliveParams = ac.cc.keepaliveParams | ||||
| 		ac.cc.mu.RUnlock() | ||||
| 
 | ||||
| 		copts := ac.dopts.copts | ||||
|  |  | |||
							
								
								
									
										6
									
								
								vendor/google.golang.org/grpc/credentials/tls.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/google.golang.org/grpc/credentials/tls.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -32,6 +32,8 @@ import ( | |||
| 	"google.golang.org/grpc/internal/envconfig" | ||||
| ) | ||||
| 
 | ||||
| const alpnFailureHelpMessage = "If you upgraded from a grpc-go version earlier than 1.67, your TLS connections may have stopped working due to ALPN enforcement. For more details, see: https://github.com/grpc/grpc-go/issues/434" | ||||
| 
 | ||||
| var logger = grpclog.Component("credentials") | ||||
| 
 | ||||
| // TLSInfo contains the auth information for a TLS authenticated connection. | ||||
|  | @ -128,7 +130,7 @@ func (c *tlsCreds) ClientHandshake(ctx context.Context, authority string, rawCon | |||
| 	if np == "" { | ||||
| 		if envconfig.EnforceALPNEnabled { | ||||
| 			conn.Close() | ||||
| 			return nil, nil, fmt.Errorf("credentials: cannot check peer: missing selected ALPN property") | ||||
| 			return nil, nil, fmt.Errorf("credentials: cannot check peer: missing selected ALPN property. %s", alpnFailureHelpMessage) | ||||
| 		} | ||||
| 		logger.Warningf("Allowing TLS connection to server %q with ALPN disabled. TLS connections to servers with ALPN disabled will be disallowed in future grpc-go releases", cfg.ServerName) | ||||
| 	} | ||||
|  | @ -158,7 +160,7 @@ func (c *tlsCreds) ServerHandshake(rawConn net.Conn) (net.Conn, AuthInfo, error) | |||
| 	if cs.NegotiatedProtocol == "" { | ||||
| 		if envconfig.EnforceALPNEnabled { | ||||
| 			conn.Close() | ||||
| 			return nil, nil, fmt.Errorf("credentials: cannot check peer: missing selected ALPN property") | ||||
| 			return nil, nil, fmt.Errorf("credentials: cannot check peer: missing selected ALPN property. %s", alpnFailureHelpMessage) | ||||
| 		} else if logger.V(2) { | ||||
| 			logger.Info("Allowing TLS connection from client with ALPN disabled. TLS connections with ALPN disabled will be disallowed in future grpc-go releases") | ||||
| 		} | ||||
|  |  | |||
							
								
								
									
										39
									
								
								vendor/google.golang.org/grpc/dialoptions.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										39
									
								
								vendor/google.golang.org/grpc/dialoptions.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -73,7 +73,7 @@ type dialOptions struct { | |||
| 	chainUnaryInts  []UnaryClientInterceptor | ||||
| 	chainStreamInts []StreamClientInterceptor | ||||
| 
 | ||||
| 	cp                          Compressor | ||||
| 	compressorV0                Compressor | ||||
| 	dc                          Decompressor | ||||
| 	bs                          internalbackoff.Strategy | ||||
| 	block                       bool | ||||
|  | @ -94,6 +94,8 @@ type dialOptions struct { | |||
| 	idleTimeout                 time.Duration | ||||
| 	defaultScheme               string | ||||
| 	maxCallAttempts             int | ||||
| 	enableLocalDNSResolution    bool // Specifies if target hostnames should be resolved when proxying is enabled. | ||||
| 	useProxy                    bool // Specifies if a server should be connected via proxy. | ||||
| } | ||||
| 
 | ||||
| // DialOption configures how we set up the connection. | ||||
|  | @ -256,7 +258,7 @@ func WithCodec(c Codec) DialOption { | |||
| // Deprecated: use UseCompressor instead.  Will be supported throughout 1.x. | ||||
| func WithCompressor(cp Compressor) DialOption { | ||||
| 	return newFuncDialOption(func(o *dialOptions) { | ||||
| 		o.cp = cp | ||||
| 		o.compressorV0 = cp | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
|  | @ -377,7 +379,22 @@ func WithInsecure() DialOption { | |||
| // later release. | ||||
| func WithNoProxy() DialOption { | ||||
| 	return newFuncDialOption(func(o *dialOptions) { | ||||
| 		o.copts.UseProxy = false | ||||
| 		o.useProxy = false | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
| // WithLocalDNSResolution forces local DNS name resolution even when a proxy is | ||||
| // specified in the environment.  By default, the server name is provided | ||||
| // directly to the proxy as part of the CONNECT handshake. This is ignored if | ||||
| // WithNoProxy is used. | ||||
| // | ||||
| // # Experimental | ||||
| // | ||||
| // Notice: This API is EXPERIMENTAL and may be changed or removed in a | ||||
| // later release. | ||||
| func WithLocalDNSResolution() DialOption { | ||||
| 	return newFuncDialOption(func(o *dialOptions) { | ||||
| 		o.enableLocalDNSResolution = true | ||||
| 	}) | ||||
| } | ||||
| 
 | ||||
|  | @ -428,6 +445,11 @@ func WithTimeout(d time.Duration) DialOption { | |||
| // returned by f, gRPC checks the error's Temporary() method to decide if it | ||||
| // should try to reconnect to the network address. | ||||
| // | ||||
| // Note that gRPC by default performs name resolution on the target passed to | ||||
| // NewClient. To bypass name resolution and cause the target string to be | ||||
| // passed directly to the dialer here instead, use the "passthrough" resolver | ||||
| // by specifying it in the target string, e.g. "passthrough:target". | ||||
| // | ||||
| // Note: All supported releases of Go (as of December 2023) override the OS | ||||
| // defaults for TCP keepalive time and interval to 15s. To enable TCP keepalive | ||||
| // with OS defaults for keepalive time and interval, use a net.Dialer that sets | ||||
|  | @ -662,14 +684,15 @@ func defaultDialOptions() dialOptions { | |||
| 		copts: transport.ConnectOptions{ | ||||
| 			ReadBufferSize:  defaultReadBufSize, | ||||
| 			WriteBufferSize: defaultWriteBufSize, | ||||
| 			UseProxy:        true, | ||||
| 			UserAgent:       grpcUA, | ||||
| 			BufferPool:      mem.DefaultBufferPool(), | ||||
| 		}, | ||||
| 		bs:              internalbackoff.DefaultExponential, | ||||
| 		idleTimeout:     30 * time.Minute, | ||||
| 		defaultScheme:   "dns", | ||||
| 		maxCallAttempts: defaultMaxCallAttempts, | ||||
| 		bs:                       internalbackoff.DefaultExponential, | ||||
| 		idleTimeout:              30 * time.Minute, | ||||
| 		defaultScheme:            "dns", | ||||
| 		maxCallAttempts:          defaultMaxCallAttempts, | ||||
| 		useProxy:                 true, | ||||
| 		enableLocalDNSResolution: false, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										35
									
								
								vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										35
									
								
								vendor/google.golang.org/grpc/health/grpc_health_v1/health.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -17,7 +17,7 @@ | |||
| 
 | ||||
| // Code generated by protoc-gen-go. DO NOT EDIT. | ||||
| // versions: | ||||
| // 	protoc-gen-go v1.35.1 | ||||
| // 	protoc-gen-go v1.36.4 | ||||
| // 	protoc        v5.27.1 | ||||
| // source: grpc/health/v1/health.proto | ||||
| 
 | ||||
|  | @ -28,6 +28,7 @@ import ( | |||
| 	protoimpl "google.golang.org/protobuf/runtime/protoimpl" | ||||
| 	reflect "reflect" | ||||
| 	sync "sync" | ||||
| 	unsafe "unsafe" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
|  | @ -90,11 +91,10 @@ func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) { | |||
| } | ||||
| 
 | ||||
| type HealthCheckRequest struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	state         protoimpl.MessageState `protogen:"open.v1"` | ||||
| 	Service       string                 `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *HealthCheckRequest) Reset() { | ||||
|  | @ -135,11 +135,10 @@ func (x *HealthCheckRequest) GetService() string { | |||
| } | ||||
| 
 | ||||
| type HealthCheckResponse struct { | ||||
| 	state         protoimpl.MessageState | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| 	state         protoimpl.MessageState            `protogen:"open.v1"` | ||||
| 	Status        HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"` | ||||
| 	unknownFields protoimpl.UnknownFields | ||||
| 
 | ||||
| 	Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"` | ||||
| 	sizeCache     protoimpl.SizeCache | ||||
| } | ||||
| 
 | ||||
| func (x *HealthCheckResponse) Reset() { | ||||
|  | @ -181,7 +180,7 @@ func (x *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus { | |||
| 
 | ||||
| var File_grpc_health_v1_health_proto protoreflect.FileDescriptor | ||||
| 
 | ||||
| var file_grpc_health_v1_health_proto_rawDesc = []byte{ | ||||
| var file_grpc_health_v1_health_proto_rawDesc = string([]byte{ | ||||
| 	0x0a, 0x1b, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x76, 0x31, | ||||
| 	0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x67, | ||||
| 	0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x22, 0x2e, 0x0a, | ||||
|  | @ -210,23 +209,24 @@ var file_grpc_health_v1_health_proto_rawDesc = []byte{ | |||
| 	0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, | ||||
| 	0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, | ||||
| 	0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, | ||||
| 	0x30, 0x01, 0x42, 0x61, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, | ||||
| 	0x30, 0x01, 0x42, 0x70, 0x0a, 0x11, 0x69, 0x6f, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, | ||||
| 	0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50, | ||||
| 	0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, | ||||
| 	0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x2f, 0x68, | ||||
| 	0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, | ||||
| 	0x68, 0x5f, 0x76, 0x31, 0xaa, 0x02, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x6c, | ||||
| 	0x74, 0x68, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| } | ||||
| 	0x68, 0x5f, 0x76, 0x31, 0xa2, 0x02, 0x0c, 0x47, 0x72, 0x70, 0x63, 0x48, 0x65, 0x61, 0x6c, 0x74, | ||||
| 	0x68, 0x56, 0x31, 0xaa, 0x02, 0x0e, 0x47, 0x72, 0x70, 0x63, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, | ||||
| 	0x68, 0x2e, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| }) | ||||
| 
 | ||||
| var ( | ||||
| 	file_grpc_health_v1_health_proto_rawDescOnce sync.Once | ||||
| 	file_grpc_health_v1_health_proto_rawDescData = file_grpc_health_v1_health_proto_rawDesc | ||||
| 	file_grpc_health_v1_health_proto_rawDescData []byte | ||||
| ) | ||||
| 
 | ||||
| func file_grpc_health_v1_health_proto_rawDescGZIP() []byte { | ||||
| 	file_grpc_health_v1_health_proto_rawDescOnce.Do(func() { | ||||
| 		file_grpc_health_v1_health_proto_rawDescData = protoimpl.X.CompressGZIP(file_grpc_health_v1_health_proto_rawDescData) | ||||
| 		file_grpc_health_v1_health_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_grpc_health_v1_health_proto_rawDesc), len(file_grpc_health_v1_health_proto_rawDesc))) | ||||
| 	}) | ||||
| 	return file_grpc_health_v1_health_proto_rawDescData | ||||
| } | ||||
|  | @ -260,7 +260,7 @@ func file_grpc_health_v1_health_proto_init() { | |||
| 	out := protoimpl.TypeBuilder{ | ||||
| 		File: protoimpl.DescBuilder{ | ||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||
| 			RawDescriptor: file_grpc_health_v1_health_proto_rawDesc, | ||||
| 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_grpc_health_v1_health_proto_rawDesc), len(file_grpc_health_v1_health_proto_rawDesc)), | ||||
| 			NumEnums:      1, | ||||
| 			NumMessages:   2, | ||||
| 			NumExtensions: 0, | ||||
|  | @ -272,7 +272,6 @@ func file_grpc_health_v1_health_proto_init() { | |||
| 		MessageInfos:      file_grpc_health_v1_health_proto_msgTypes, | ||||
| 	}.Build() | ||||
| 	File_grpc_health_v1_health_proto = out.File | ||||
| 	file_grpc_health_v1_health_proto_rawDesc = nil | ||||
| 	file_grpc_health_v1_health_proto_goTypes = nil | ||||
| 	file_grpc_health_v1_health_proto_depIdxs = nil | ||||
| } | ||||
|  |  | |||
							
								
								
									
										10
									
								
								vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/google.golang.org/grpc/internal/balancer/gracefulswitch/gracefulswitch.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -109,8 +109,9 @@ func (gsb *Balancer) switchTo(builder balancer.Builder) (*balancerWrapper, error | |||
| 		return nil, errBalancerClosed | ||||
| 	} | ||||
| 	bw := &balancerWrapper{ | ||||
| 		builder: builder, | ||||
| 		gsb:     gsb, | ||||
| 		ClientConn: gsb.cc, | ||||
| 		builder:    builder, | ||||
| 		gsb:        gsb, | ||||
| 		lastState: balancer.State{ | ||||
| 			ConnectivityState: connectivity.Connecting, | ||||
| 			Picker:            base.NewErrPicker(balancer.ErrNoSubConnAvailable), | ||||
|  | @ -293,6 +294,7 @@ func (gsb *Balancer) Close() { | |||
| // State updates from the wrapped balancer can result in invocation of the | ||||
| // graceful switch logic. | ||||
| type balancerWrapper struct { | ||||
| 	balancer.ClientConn | ||||
| 	balancer.Balancer | ||||
| 	gsb     *Balancer | ||||
| 	builder balancer.Builder | ||||
|  | @ -413,7 +415,3 @@ func (bw *balancerWrapper) UpdateAddresses(sc balancer.SubConn, addrs []resolver | |||
| 	bw.gsb.mu.Unlock() | ||||
| 	bw.gsb.cc.UpdateAddresses(sc, addrs) | ||||
| } | ||||
| 
 | ||||
| func (bw *balancerWrapper) Target() string { | ||||
| 	return bw.gsb.cc.Target() | ||||
| } | ||||
|  |  | |||
							
								
								
									
										2
									
								
								vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/grpc/internal/envconfig/envconfig.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -49,7 +49,7 @@ var ( | |||
| 	// XDSFallbackSupport is the env variable that controls whether support for | ||||
| 	// xDS fallback is turned on. If this is unset or is false, only the first | ||||
| 	// xDS server in the list of server configs will be used. | ||||
| 	XDSFallbackSupport = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FALLBACK", false) | ||||
| 	XDSFallbackSupport = boolFromEnv("GRPC_EXPERIMENTAL_XDS_FALLBACK", true) | ||||
| 	// NewPickFirstEnabled is set if the new pickfirst leaf policy is to be used | ||||
| 	// instead of the exiting pickfirst implementation. This can be enabled by | ||||
| 	// setting the environment variable "GRPC_EXPERIMENTAL_ENABLE_NEW_PICK_FIRST" | ||||
|  |  | |||
							
								
								
									
										10
									
								
								vendor/google.golang.org/grpc/internal/envconfig/xds.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/google.golang.org/grpc/internal/envconfig/xds.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -53,4 +53,14 @@ var ( | |||
| 
 | ||||
| 	// C2PResolverTestOnlyTrafficDirectorURI is the TD URI for testing. | ||||
| 	C2PResolverTestOnlyTrafficDirectorURI = os.Getenv("GRPC_TEST_ONLY_GOOGLE_C2P_RESOLVER_TRAFFIC_DIRECTOR_URI") | ||||
| 
 | ||||
| 	// XDSDualstackEndpointsEnabled is true if gRPC should read the | ||||
| 	// "additional addresses" in the xDS endpoint resource. | ||||
| 	XDSDualstackEndpointsEnabled = boolFromEnv("GRPC_EXPERIMENTAL_XDS_DUALSTACK_ENDPOINTS", true) | ||||
| 
 | ||||
| 	// XDSSystemRootCertsEnabled is true when xDS enabled gRPC clients can use | ||||
| 	// the system's default root certificates for TLS certificate validation. | ||||
| 	// For more details, see: | ||||
| 	// https://github.com/grpc/proposal/blob/master/A82-xds-system-root-certs.md. | ||||
| 	XDSSystemRootCertsEnabled = boolFromEnv("GRPC_EXPERIMENTAL_XDS_SYSTEM_ROOT_CERTS", false) | ||||
| ) | ||||
|  |  | |||
							
								
								
									
										32
									
								
								vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										32
									
								
								vendor/google.golang.org/grpc/internal/grpcsync/oncefunc.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -1,32 +0,0 @@ | |||
| /* | ||||
|  * | ||||
|  * Copyright 2022 gRPC authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| package grpcsync | ||||
| 
 | ||||
| import ( | ||||
| 	"sync" | ||||
| ) | ||||
| 
 | ||||
| // OnceFunc returns a function wrapping f which ensures f is only executed | ||||
| // once even if the returned function is executed multiple times. | ||||
| func OnceFunc(f func()) func() { | ||||
| 	var once sync.Once | ||||
| 	return func() { | ||||
| 		once.Do(f) | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										27
									
								
								vendor/google.golang.org/grpc/internal/internal.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										27
									
								
								vendor/google.golang.org/grpc/internal/internal.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -31,6 +31,10 @@ import ( | |||
| var ( | ||||
| 	// HealthCheckFunc is used to provide client-side LB channel health checking | ||||
| 	HealthCheckFunc HealthChecker | ||||
| 	// RegisterClientHealthCheckListener is used to provide a listener for | ||||
| 	// updates from the client-side health checking service. It returns a | ||||
| 	// function that can be called to stop the health producer. | ||||
| 	RegisterClientHealthCheckListener any // func(ctx context.Context, sc balancer.SubConn, serviceName string, listener func(balancer.SubConnState)) func() | ||||
| 	// BalancerUnregister is exported by package balancer to unregister a balancer. | ||||
| 	BalancerUnregister func(name string) | ||||
| 	// KeepaliveMinPingTime is the minimum ping interval.  This must be 10s by | ||||
|  | @ -60,6 +64,9 @@ var ( | |||
| 	// gRPC server. An xDS-enabled server needs to know what type of credentials | ||||
| 	// is configured on the underlying gRPC server. This is set by server.go. | ||||
| 	GetServerCredentials any // func (*grpc.Server) credentials.TransportCredentials | ||||
| 	// MetricsRecorderForServer returns the MetricsRecorderList derived from a | ||||
| 	// server's stats handlers. | ||||
| 	MetricsRecorderForServer any // func (*grpc.Server) estats.MetricsRecorder | ||||
| 	// CanonicalString returns the canonical string of the code defined here: | ||||
| 	// https://github.com/grpc/grpc/blob/master/doc/statuscodes.md. | ||||
| 	// | ||||
|  | @ -147,6 +154,20 @@ var ( | |||
| 	// other features, including the CSDS service. | ||||
| 	NewXDSResolverWithConfigForTesting any // func([]byte) (resolver.Builder, error) | ||||
| 
 | ||||
| 	// NewXDSResolverWithPoolForTesting creates a new xDS resolver builder | ||||
| 	// using the provided xDS pool instead of creating a new one using the | ||||
| 	// bootstrap configuration specified by the supported environment variables. | ||||
| 	// The resolver.Builder is meant to be used in conjunction with the | ||||
| 	// grpc.WithResolvers DialOption. The resolver.Builder does not take | ||||
| 	// ownership of the provided xDS client and it is the responsibility of the | ||||
| 	// caller to close the client when no longer required. | ||||
| 	// | ||||
| 	// Testing Only | ||||
| 	// | ||||
| 	// This function should ONLY be used for testing and may not work with some | ||||
| 	// other features, including the CSDS service. | ||||
| 	NewXDSResolverWithPoolForTesting any // func(*xdsclient.Pool) (resolver.Builder, error) | ||||
| 
 | ||||
| 	// NewXDSResolverWithClientForTesting creates a new xDS resolver builder | ||||
| 	// using the provided xDS client instead of creating a new one using the | ||||
| 	// bootstrap configuration specified by the supported environment variables. | ||||
|  | @ -273,3 +294,9 @@ const RLSLoadBalancingPolicyName = "rls_experimental" | |||
| type EnforceSubConnEmbedding interface { | ||||
| 	enforceSubConnEmbedding() | ||||
| } | ||||
| 
 | ||||
| // EnforceClientConnEmbedding is used to enforce proper ClientConn implementation | ||||
| // embedding. | ||||
| type EnforceClientConnEmbedding interface { | ||||
| 	enforceClientConnEmbedding() | ||||
| } | ||||
|  |  | |||
							
								
								
									
										54
									
								
								vendor/google.golang.org/grpc/internal/proxyattributes/proxyattributes.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								vendor/google.golang.org/grpc/internal/proxyattributes/proxyattributes.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | |||
| /* | ||||
|  * | ||||
|  * Copyright 2024 gRPC authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| // Package proxyattributes contains functions for getting and setting proxy | ||||
| // attributes like the CONNECT address and user info. | ||||
| package proxyattributes | ||||
| 
 | ||||
| import ( | ||||
| 	"net/url" | ||||
| 
 | ||||
| 	"google.golang.org/grpc/resolver" | ||||
| ) | ||||
| 
 | ||||
| type keyType string | ||||
| 
 | ||||
| const proxyOptionsKey = keyType("grpc.resolver.delegatingresolver.proxyOptions") | ||||
| 
 | ||||
| // Options holds the proxy connection details needed during the CONNECT | ||||
| // handshake. | ||||
| type Options struct { | ||||
| 	User        *url.Userinfo | ||||
| 	ConnectAddr string | ||||
| } | ||||
| 
 | ||||
| // Set returns a copy of addr with opts set in its attributes. | ||||
| func Set(addr resolver.Address, opts Options) resolver.Address { | ||||
| 	addr.Attributes = addr.Attributes.WithValue(proxyOptionsKey, opts) | ||||
| 	return addr | ||||
| } | ||||
| 
 | ||||
| // Get returns the Options for the proxy [resolver.Address] and a boolean | ||||
| // value representing if the attribute is present or not. The returned data | ||||
| // should not be mutated. | ||||
| func Get(addr resolver.Address) (Options, bool) { | ||||
| 	if a := addr.Attributes.Value(proxyOptionsKey); a != nil { | ||||
| 		return a.(Options), true | ||||
| 	} | ||||
| 	return Options{}, false | ||||
| } | ||||
							
								
								
									
										329
									
								
								vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										329
									
								
								vendor/google.golang.org/grpc/internal/resolver/delegatingresolver/delegatingresolver.go
									
										
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,329 @@ | |||
| /* | ||||
|  * | ||||
|  * Copyright 2024 gRPC authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| // Package delegatingresolver implements a resolver capable of resolving both | ||||
| // target URIs and proxy addresses. | ||||
| package delegatingresolver | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| 	"sync" | ||||
| 
 | ||||
| 	"google.golang.org/grpc/grpclog" | ||||
| 	"google.golang.org/grpc/internal/proxyattributes" | ||||
| 	"google.golang.org/grpc/resolver" | ||||
| 	"google.golang.org/grpc/serviceconfig" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	logger = grpclog.Component("delegating-resolver") | ||||
| 	// HTTPSProxyFromEnvironment will be overwritten in the tests | ||||
| 	HTTPSProxyFromEnvironment = http.ProxyFromEnvironment | ||||
| ) | ||||
| 
 | ||||
| // delegatingResolver manages both target URI and proxy address resolution by | ||||
| // delegating these tasks to separate child resolvers. Essentially, it acts as | ||||
| // a intermediary between the gRPC ClientConn and the child resolvers. | ||||
| // | ||||
| // It implements the [resolver.Resolver] interface. | ||||
| type delegatingResolver struct { | ||||
| 	target         resolver.Target     // parsed target URI to be resolved | ||||
| 	cc             resolver.ClientConn // gRPC ClientConn | ||||
| 	targetResolver resolver.Resolver   // resolver for the target URI, based on its scheme | ||||
| 	proxyResolver  resolver.Resolver   // resolver for the proxy URI; nil if no proxy is configured | ||||
| 	proxyURL       *url.URL            // proxy URL, derived from proxy environment and target | ||||
| 
 | ||||
| 	mu                  sync.Mutex         // protects all the fields below | ||||
| 	targetResolverState *resolver.State    // state of the target resolver | ||||
| 	proxyAddrs          []resolver.Address // resolved proxy addresses; empty if no proxy is configured | ||||
| } | ||||
| 
 | ||||
| // nopResolver is a resolver that does nothing. | ||||
| type nopResolver struct{} | ||||
| 
 | ||||
| func (nopResolver) ResolveNow(resolver.ResolveNowOptions) {} | ||||
| 
 | ||||
| func (nopResolver) Close() {} | ||||
| 
 | ||||
| // proxyURLForTarget determines the proxy URL for the given address based on | ||||
| // the environment. It can return the following: | ||||
| //   - nil URL, nil error: No proxy is configured or the address is excluded | ||||
| //     using the `NO_PROXY` environment variable or if req.URL.Host is | ||||
| //     "localhost" (with or without // a port number) | ||||
| //   - nil URL, non-nil error: An error occurred while retrieving the proxy URL. | ||||
| //   - non-nil URL, nil error: A proxy is configured, and the proxy URL was | ||||
| //     retrieved successfully without any errors. | ||||
| func proxyURLForTarget(address string) (*url.URL, error) { | ||||
| 	req := &http.Request{URL: &url.URL{ | ||||
| 		Scheme: "https", | ||||
| 		Host:   address, | ||||
| 	}} | ||||
| 	return HTTPSProxyFromEnvironment(req) | ||||
| } | ||||
| 
 | ||||
| // New creates a new delegating resolver that can create up to two child | ||||
| // resolvers: | ||||
| //   - one to resolve the proxy address specified using the supported | ||||
| //     environment variables. This uses the registered resolver for the "dns" | ||||
| //     scheme. | ||||
| //   - one to resolve the target URI using the resolver specified by the scheme | ||||
| //     in the target URI or specified by the user using the WithResolvers dial | ||||
| //     option. As a special case, if the target URI's scheme is "dns" and a | ||||
| //     proxy is specified using the supported environment variables, the target | ||||
| //     URI's path portion is used as the resolved address unless target | ||||
| //     resolution is enabled using the dial option. | ||||
| func New(target resolver.Target, cc resolver.ClientConn, opts resolver.BuildOptions, targetResolverBuilder resolver.Builder, targetResolutionEnabled bool) (resolver.Resolver, error) { | ||||
| 	r := &delegatingResolver{ | ||||
| 		target: target, | ||||
| 		cc:     cc, | ||||
| 	} | ||||
| 
 | ||||
| 	var err error | ||||
| 	r.proxyURL, err = proxyURLForTarget(target.Endpoint()) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("delegating_resolver: failed to determine proxy URL for target %s: %v", target, err) | ||||
| 	} | ||||
| 
 | ||||
| 	// proxy is not configured or proxy address excluded using `NO_PROXY` env | ||||
| 	// var, so only target resolver is used. | ||||
| 	if r.proxyURL == nil { | ||||
| 		return targetResolverBuilder.Build(target, cc, opts) | ||||
| 	} | ||||
| 
 | ||||
| 	if logger.V(2) { | ||||
| 		logger.Infof("Proxy URL detected : %s", r.proxyURL) | ||||
| 	} | ||||
| 
 | ||||
| 	// When the scheme is 'dns' and target resolution on client is not enabled, | ||||
| 	// resolution should be handled by the proxy, not the client. Therefore, we | ||||
| 	// bypass the target resolver and store the unresolved target address. | ||||
| 	if target.URL.Scheme == "dns" && !targetResolutionEnabled { | ||||
| 		state := resolver.State{ | ||||
| 			Addresses: []resolver.Address{{Addr: target.Endpoint()}}, | ||||
| 			Endpoints: []resolver.Endpoint{{Addresses: []resolver.Address{{Addr: target.Endpoint()}}}}, | ||||
| 		} | ||||
| 		r.targetResolverState = &state | ||||
| 	} else { | ||||
| 		wcc := &wrappingClientConn{ | ||||
| 			stateListener: r.updateTargetResolverState, | ||||
| 			parent:        r, | ||||
| 		} | ||||
| 		if r.targetResolver, err = targetResolverBuilder.Build(target, wcc, opts); err != nil { | ||||
| 			return nil, fmt.Errorf("delegating_resolver: unable to build the resolver for target %s: %v", target, err) | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if r.proxyResolver, err = r.proxyURIResolver(opts); err != nil { | ||||
| 		return nil, fmt.Errorf("delegating_resolver: failed to build resolver for proxy URL %q: %v", r.proxyURL, err) | ||||
| 	} | ||||
| 
 | ||||
| 	if r.targetResolver == nil { | ||||
| 		r.targetResolver = nopResolver{} | ||||
| 	} | ||||
| 	if r.proxyResolver == nil { | ||||
| 		r.proxyResolver = nopResolver{} | ||||
| 	} | ||||
| 	return r, nil | ||||
| } | ||||
| 
 | ||||
| // proxyURIResolver creates a resolver for resolving proxy URIs using the | ||||
| // "dns" scheme. It adjusts the proxyURL to conform to the "dns:///" format and | ||||
| // builds a resolver with a wrappingClientConn to capture resolved addresses. | ||||
| func (r *delegatingResolver) proxyURIResolver(opts resolver.BuildOptions) (resolver.Resolver, error) { | ||||
| 	proxyBuilder := resolver.Get("dns") | ||||
| 	if proxyBuilder == nil { | ||||
| 		panic("delegating_resolver: resolver for proxy not found for scheme dns") | ||||
| 	} | ||||
| 	url := *r.proxyURL | ||||
| 	url.Scheme = "dns" | ||||
| 	url.Path = "/" + r.proxyURL.Host | ||||
| 	url.Host = "" // Clear the Host field to conform to the "dns:///" format | ||||
| 
 | ||||
| 	proxyTarget := resolver.Target{URL: url} | ||||
| 	wcc := &wrappingClientConn{ | ||||
| 		stateListener: r.updateProxyResolverState, | ||||
| 		parent:        r, | ||||
| 	} | ||||
| 	return proxyBuilder.Build(proxyTarget, wcc, opts) | ||||
| } | ||||
| 
 | ||||
| func (r *delegatingResolver) ResolveNow(o resolver.ResolveNowOptions) { | ||||
| 	r.targetResolver.ResolveNow(o) | ||||
| 	r.proxyResolver.ResolveNow(o) | ||||
| } | ||||
| 
 | ||||
| func (r *delegatingResolver) Close() { | ||||
| 	r.targetResolver.Close() | ||||
| 	r.targetResolver = nil | ||||
| 
 | ||||
| 	r.proxyResolver.Close() | ||||
| 	r.proxyResolver = nil | ||||
| } | ||||
| 
 | ||||
| // updateClientConnStateLocked creates a list of combined addresses by | ||||
| // pairing each proxy address with every target address. For each pair, it | ||||
| // generates a new [resolver.Address] using the proxy address, and adding the | ||||
| // target address as the attribute along with user info. It returns nil if | ||||
| // either resolver has not sent update even once and returns the error from | ||||
| // ClientConn update once both resolvers have sent update atleast once. | ||||
| func (r *delegatingResolver) updateClientConnStateLocked() error { | ||||
| 	if r.targetResolverState == nil || r.proxyAddrs == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	curState := *r.targetResolverState | ||||
| 	// If multiple resolved proxy addresses are present, we send only the | ||||
| 	// unresolved proxy host and let net.Dial handle the proxy host name | ||||
| 	// resolution when creating the transport. Sending all resolved addresses | ||||
| 	// would increase the number of addresses passed to the ClientConn and | ||||
| 	// subsequently to load balancing (LB) policies like Round Robin, leading | ||||
| 	// to additional TCP connections. However, if there's only one resolved | ||||
| 	// proxy address, we send it directly, as it doesn't affect the address | ||||
| 	// count returned by the target resolver and the address count sent to the | ||||
| 	// ClientConn. | ||||
| 	var proxyAddr resolver.Address | ||||
| 	if len(r.proxyAddrs) == 1 { | ||||
| 		proxyAddr = r.proxyAddrs[0] | ||||
| 	} else { | ||||
| 		proxyAddr = resolver.Address{Addr: r.proxyURL.Host} | ||||
| 	} | ||||
| 	var addresses []resolver.Address | ||||
| 	for _, targetAddr := range (*r.targetResolverState).Addresses { | ||||
| 		addresses = append(addresses, proxyattributes.Set(proxyAddr, proxyattributes.Options{ | ||||
| 			User:        r.proxyURL.User, | ||||
| 			ConnectAddr: targetAddr.Addr, | ||||
| 		})) | ||||
| 	} | ||||
| 
 | ||||
| 	// Create a list of combined endpoints by pairing all proxy endpoints | ||||
| 	// with every target endpoint. Each time, it constructs a new | ||||
| 	// [resolver.Endpoint] using the all addresses from all the proxy endpoint | ||||
| 	// and the target addresses from one endpoint. The target address and user | ||||
| 	// information from the proxy URL are added as attributes to the proxy | ||||
| 	// address.The resulting list of addresses is then grouped into endpoints, | ||||
| 	// covering all combinations of proxy and target endpoints. | ||||
| 	var endpoints []resolver.Endpoint | ||||
| 	for _, endpt := range (*r.targetResolverState).Endpoints { | ||||
| 		var addrs []resolver.Address | ||||
| 		for _, proxyAddr := range r.proxyAddrs { | ||||
| 			for _, targetAddr := range endpt.Addresses { | ||||
| 				addrs = append(addrs, proxyattributes.Set(proxyAddr, proxyattributes.Options{ | ||||
| 					User:        r.proxyURL.User, | ||||
| 					ConnectAddr: targetAddr.Addr, | ||||
| 				})) | ||||
| 			} | ||||
| 		} | ||||
| 		endpoints = append(endpoints, resolver.Endpoint{Addresses: addrs}) | ||||
| 	} | ||||
| 	// Use the targetResolverState for its service config and attributes | ||||
| 	// contents. The state update is only sent after both the target and proxy | ||||
| 	// resolvers have sent their updates, and curState has been updated with | ||||
| 	// the combined addresses. | ||||
| 	curState.Addresses = addresses | ||||
| 	curState.Endpoints = endpoints | ||||
| 	return r.cc.UpdateState(curState) | ||||
| } | ||||
| 
 | ||||
| // updateProxyResolverState updates the proxy resolver state by storing proxy | ||||
| // addresses and endpoints, marking the resolver as ready, and triggering a | ||||
| // state update if both proxy and target resolvers are ready. If the ClientConn | ||||
| // returns a non-nil error, it calls `ResolveNow()` on the target resolver.  It | ||||
| // is a StateListener function of wrappingClientConn passed to the proxy resolver. | ||||
| func (r *delegatingResolver) updateProxyResolverState(state resolver.State) error { | ||||
| 	r.mu.Lock() | ||||
| 	defer r.mu.Unlock() | ||||
| 	if logger.V(2) { | ||||
| 		logger.Infof("Addresses received from proxy resolver: %s", state.Addresses) | ||||
| 	} | ||||
| 	if len(state.Endpoints) > 0 { | ||||
| 		// We expect exactly one address per endpoint because the proxy | ||||
| 		// resolver uses "dns" resolution. | ||||
| 		r.proxyAddrs = make([]resolver.Address, 0, len(state.Endpoints)) | ||||
| 		for _, endpoint := range state.Endpoints { | ||||
| 			r.proxyAddrs = append(r.proxyAddrs, endpoint.Addresses...) | ||||
| 		} | ||||
| 	} else if state.Addresses != nil { | ||||
| 		r.proxyAddrs = state.Addresses | ||||
| 	} else { | ||||
| 		r.proxyAddrs = []resolver.Address{} // ensure proxyAddrs is non-nil to indicate an update has been received | ||||
| 	} | ||||
| 	err := r.updateClientConnStateLocked() | ||||
| 	// Another possible approach was to block until updates are received from | ||||
| 	// both resolvers. But this is not used because calling `New()` triggers | ||||
| 	// `Build()`  for the first resolver, which calls `UpdateState()`. And the | ||||
| 	// second resolver hasn't sent an update yet, so it would cause `New()` to | ||||
| 	// block indefinitely. | ||||
| 	if err != nil { | ||||
| 		r.targetResolver.ResolveNow(resolver.ResolveNowOptions{}) | ||||
| 	} | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // updateTargetResolverState updates the target resolver state by storing target | ||||
| // addresses, endpoints, and service config, marking the resolver as ready, and | ||||
| // triggering a state update if both resolvers are ready. If the ClientConn | ||||
| // returns a non-nil error, it calls `ResolveNow()` on the proxy resolver. It | ||||
| // is a StateListener function of wrappingClientConn passed to the target resolver. | ||||
| func (r *delegatingResolver) updateTargetResolverState(state resolver.State) error { | ||||
| 	r.mu.Lock() | ||||
| 	defer r.mu.Unlock() | ||||
| 
 | ||||
| 	if logger.V(2) { | ||||
| 		logger.Infof("Addresses received from target resolver: %v", state.Addresses) | ||||
| 	} | ||||
| 	r.targetResolverState = &state | ||||
| 	err := r.updateClientConnStateLocked() | ||||
| 	if err != nil { | ||||
| 		r.proxyResolver.ResolveNow(resolver.ResolveNowOptions{}) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // wrappingClientConn serves as an intermediary between the parent ClientConn | ||||
| // and the child resolvers created here. It implements the resolver.ClientConn | ||||
| // interface and is passed in that capacity to the child resolvers. | ||||
| type wrappingClientConn struct { | ||||
| 	// Callback to deliver resolver state updates | ||||
| 	stateListener func(state resolver.State) error | ||||
| 	parent        *delegatingResolver | ||||
| } | ||||
| 
 | ||||
| // UpdateState receives resolver state updates and forwards them to the | ||||
| // appropriate listener function (either for the proxy or target resolver). | ||||
| func (wcc *wrappingClientConn) UpdateState(state resolver.State) error { | ||||
| 	return wcc.stateListener(state) | ||||
| } | ||||
| 
 | ||||
| // ReportError intercepts errors from the child resolvers and passes them to ClientConn. | ||||
| func (wcc *wrappingClientConn) ReportError(err error) { | ||||
| 	wcc.parent.cc.ReportError(err) | ||||
| } | ||||
| 
 | ||||
| // NewAddress intercepts the new resolved address from the child resolvers and | ||||
| // passes them to ClientConn. | ||||
| func (wcc *wrappingClientConn) NewAddress(addrs []resolver.Address) { | ||||
| 	wcc.UpdateState(resolver.State{Addresses: addrs}) | ||||
| } | ||||
| 
 | ||||
| // ParseServiceConfig parses the provided service config and returns an | ||||
| // object that provides the parsed config. | ||||
| func (wcc *wrappingClientConn) ParseServiceConfig(serviceConfigJSON string) *serviceconfig.ParseResult { | ||||
| 	return wcc.parent.cc.ParseServiceConfig(serviceConfigJSON) | ||||
| } | ||||
							
								
								
									
										2
									
								
								vendor/google.golang.org/grpc/internal/transport/handler_server.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/grpc/internal/transport/handler_server.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -498,5 +498,5 @@ func mapRecvMsgError(err error) error { | |||
| 	if strings.Contains(err.Error(), "body closed by handler") { | ||||
| 		return status.Error(codes.Canceled, err.Error()) | ||||
| 	} | ||||
| 	return connectionErrorf(true, err, err.Error()) | ||||
| 	return connectionErrorf(true, err, "%s", err.Error()) | ||||
| } | ||||
|  |  | |||
							
								
								
									
										9
									
								
								vendor/google.golang.org/grpc/internal/transport/http2_client.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/google.golang.org/grpc/internal/transport/http2_client.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -43,6 +43,7 @@ import ( | |||
| 	"google.golang.org/grpc/internal/grpcsync" | ||||
| 	"google.golang.org/grpc/internal/grpcutil" | ||||
| 	imetadata "google.golang.org/grpc/internal/metadata" | ||||
| 	"google.golang.org/grpc/internal/proxyattributes" | ||||
| 	istatus "google.golang.org/grpc/internal/status" | ||||
| 	isyscall "google.golang.org/grpc/internal/syscall" | ||||
| 	"google.golang.org/grpc/internal/transport/networktype" | ||||
|  | @ -153,7 +154,7 @@ type http2Client struct { | |||
| 	logger       *grpclog.PrefixLogger | ||||
| } | ||||
| 
 | ||||
| func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr resolver.Address, useProxy bool, grpcUA string) (net.Conn, error) { | ||||
| func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error), addr resolver.Address, grpcUA string) (net.Conn, error) { | ||||
| 	address := addr.Addr | ||||
| 	networkType, ok := networktype.Get(addr) | ||||
| 	if fn != nil { | ||||
|  | @ -177,8 +178,8 @@ func dial(ctx context.Context, fn func(context.Context, string) (net.Conn, error | |||
| 	if !ok { | ||||
| 		networkType, address = parseDialTarget(address) | ||||
| 	} | ||||
| 	if networkType == "tcp" && useProxy { | ||||
| 		return proxyDial(ctx, address, grpcUA) | ||||
| 	if opts, present := proxyattributes.Get(addr); present { | ||||
| 		return proxyDial(ctx, addr, grpcUA, opts) | ||||
| 	} | ||||
| 	return internal.NetDialerWithTCPKeepalive().DialContext(ctx, networkType, address) | ||||
| } | ||||
|  | @ -217,7 +218,7 @@ func NewHTTP2Client(connectCtx, ctx context.Context, addr resolver.Address, opts | |||
| 	// address specific arbitrary data to reach custom dialers and credential handshakers. | ||||
| 	connectCtx = icredentials.NewClientHandshakeInfoContext(connectCtx, credentials.ClientHandshakeInfo{Attributes: addr.Attributes}) | ||||
| 
 | ||||
| 	conn, err := dial(connectCtx, opts.Dialer, addr, opts.UseProxy, opts.UserAgent) | ||||
| 	conn, err := dial(connectCtx, opts.Dialer, addr, opts.UserAgent) | ||||
| 	if err != nil { | ||||
| 		if opts.FailOnNonTempDialError { | ||||
| 			return nil, connectionErrorf(isTemporary(err), err, "transport: error while dialing: %v", err) | ||||
|  |  | |||
							
								
								
									
										4
									
								
								vendor/google.golang.org/grpc/internal/transport/http2_server.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/google.golang.org/grpc/internal/transport/http2_server.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -564,7 +564,7 @@ func (t *http2Server) operateHeaders(ctx context.Context, frame *http2.MetaHeade | |||
| 			t.logger.Infof("Aborting the stream early: %v", errMsg) | ||||
| 		} | ||||
| 		t.controlBuf.put(&earlyAbortStream{ | ||||
| 			httpStatus:     405, | ||||
| 			httpStatus:     http.StatusMethodNotAllowed, | ||||
| 			streamID:       streamID, | ||||
| 			contentSubtype: s.contentSubtype, | ||||
| 			status:         status.New(codes.Internal, errMsg), | ||||
|  | @ -585,7 +585,7 @@ func (t *http2Server) operateHeaders(ctx context.Context, frame *http2.MetaHeade | |||
| 				stat = status.New(codes.PermissionDenied, err.Error()) | ||||
| 			} | ||||
| 			t.controlBuf.put(&earlyAbortStream{ | ||||
| 				httpStatus:     200, | ||||
| 				httpStatus:     http.StatusOK, | ||||
| 				streamID:       s.id, | ||||
| 				contentSubtype: s.contentSubtype, | ||||
| 				status:         stat, | ||||
|  |  | |||
							
								
								
									
										62
									
								
								vendor/google.golang.org/grpc/internal/transport/proxy.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										62
									
								
								vendor/google.golang.org/grpc/internal/transport/proxy.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -30,34 +30,16 @@ import ( | |||
| 	"net/url" | ||||
| 
 | ||||
| 	"google.golang.org/grpc/internal" | ||||
| 	"google.golang.org/grpc/internal/proxyattributes" | ||||
| 	"google.golang.org/grpc/resolver" | ||||
| ) | ||||
| 
 | ||||
| const proxyAuthHeaderKey = "Proxy-Authorization" | ||||
| 
 | ||||
| var ( | ||||
| 	// The following variable will be overwritten in the tests. | ||||
| 	httpProxyFromEnvironment = http.ProxyFromEnvironment | ||||
| ) | ||||
| 
 | ||||
| func mapAddress(address string) (*url.URL, error) { | ||||
| 	req := &http.Request{ | ||||
| 		URL: &url.URL{ | ||||
| 			Scheme: "https", | ||||
| 			Host:   address, | ||||
| 		}, | ||||
| 	} | ||||
| 	url, err := httpProxyFromEnvironment(req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return url, nil | ||||
| } | ||||
| 
 | ||||
| // To read a response from a net.Conn, http.ReadResponse() takes a bufio.Reader. | ||||
| // It's possible that this reader reads more than what's need for the response and stores | ||||
| // those bytes in the buffer. | ||||
| // bufConn wraps the original net.Conn and the bufio.Reader to make sure we don't lose the | ||||
| // bytes in the buffer. | ||||
| // It's possible that this reader reads more than what's need for the response | ||||
| // and stores those bytes in the buffer. bufConn wraps the original net.Conn | ||||
| // and the bufio.Reader to make sure we don't lose the bytes in the buffer. | ||||
| type bufConn struct { | ||||
| 	net.Conn | ||||
| 	r io.Reader | ||||
|  | @ -72,7 +54,7 @@ func basicAuth(username, password string) string { | |||
| 	return base64.StdEncoding.EncodeToString([]byte(auth)) | ||||
| } | ||||
| 
 | ||||
| func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr string, proxyURL *url.URL, grpcUA string) (_ net.Conn, err error) { | ||||
| func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, grpcUA string, opts proxyattributes.Options) (_ net.Conn, err error) { | ||||
| 	defer func() { | ||||
| 		if err != nil { | ||||
| 			conn.Close() | ||||
|  | @ -81,15 +63,14 @@ func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr stri | |||
| 
 | ||||
| 	req := &http.Request{ | ||||
| 		Method: http.MethodConnect, | ||||
| 		URL:    &url.URL{Host: backendAddr}, | ||||
| 		URL:    &url.URL{Host: opts.ConnectAddr}, | ||||
| 		Header: map[string][]string{"User-Agent": {grpcUA}}, | ||||
| 	} | ||||
| 	if t := proxyURL.User; t != nil { | ||||
| 		u := t.Username() | ||||
| 		p, _ := t.Password() | ||||
| 	if user := opts.User; user != nil { | ||||
| 		u := user.Username() | ||||
| 		p, _ := user.Password() | ||||
| 		req.Header.Add(proxyAuthHeaderKey, "Basic "+basicAuth(u, p)) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := sendHTTPRequest(ctx, req, conn); err != nil { | ||||
| 		return nil, fmt.Errorf("failed to write the HTTP request: %v", err) | ||||
| 	} | ||||
|  | @ -117,28 +98,13 @@ func doHTTPConnectHandshake(ctx context.Context, conn net.Conn, backendAddr stri | |||
| 	return conn, nil | ||||
| } | ||||
| 
 | ||||
| // proxyDial dials, connecting to a proxy first if necessary. Checks if a proxy | ||||
| // is necessary, dials, does the HTTP CONNECT handshake, and returns the | ||||
| // connection. | ||||
| func proxyDial(ctx context.Context, addr string, grpcUA string) (net.Conn, error) { | ||||
| 	newAddr := addr | ||||
| 	proxyURL, err := mapAddress(addr) | ||||
| // proxyDial establishes a TCP connection to the specified address and performs an HTTP CONNECT handshake. | ||||
| func proxyDial(ctx context.Context, addr resolver.Address, grpcUA string, opts proxyattributes.Options) (net.Conn, error) { | ||||
| 	conn, err := internal.NetDialerWithTCPKeepalive().DialContext(ctx, "tcp", addr.Addr) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if proxyURL != nil { | ||||
| 		newAddr = proxyURL.Host | ||||
| 	} | ||||
| 
 | ||||
| 	conn, err := internal.NetDialerWithTCPKeepalive().DialContext(ctx, "tcp", newAddr) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	if proxyURL == nil { | ||||
| 		// proxy is disabled if proxyURL is nil. | ||||
| 		return conn, err | ||||
| 	} | ||||
| 	return doHTTPConnectHandshake(ctx, conn, addr, proxyURL, grpcUA) | ||||
| 	return doHTTPConnectHandshake(ctx, conn, grpcUA, opts) | ||||
| } | ||||
| 
 | ||||
| func sendHTTPRequest(ctx context.Context, req *http.Request, conn net.Conn) error { | ||||
|  |  | |||
							
								
								
									
										2
									
								
								vendor/google.golang.org/grpc/internal/transport/transport.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/grpc/internal/transport/transport.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -502,8 +502,6 @@ type ConnectOptions struct { | |||
| 	ChannelzParent *channelz.SubChannel | ||||
| 	// MaxHeaderListSize sets the max (uncompressed) size of header list that is prepared to be received. | ||||
| 	MaxHeaderListSize *uint32 | ||||
| 	// UseProxy specifies if a proxy should be used. | ||||
| 	UseProxy bool | ||||
| 	// The mem.BufferPool to use when reading/writing to the wire. | ||||
| 	BufferPool mem.BufferPool | ||||
| } | ||||
|  |  | |||
							
								
								
									
										2
									
								
								vendor/google.golang.org/grpc/picker_wrapper.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/grpc/picker_wrapper.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -123,7 +123,7 @@ func (pw *pickerWrapper) pick(ctx context.Context, failfast bool, info balancer. | |||
| 				if lastPickErr != nil { | ||||
| 					errStr = "latest balancer error: " + lastPickErr.Error() | ||||
| 				} else { | ||||
| 					errStr = fmt.Sprintf("received context error while waiting for new LB policy update: %s", ctx.Err().Error()) | ||||
| 					errStr = fmt.Sprintf("%v while waiting for connections to become ready", ctx.Err()) | ||||
| 				} | ||||
| 				switch ctx.Err() { | ||||
| 				case context.DeadlineExceeded: | ||||
|  |  | |||
							
								
								
									
										3
									
								
								vendor/google.golang.org/grpc/resolver/resolver.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/google.golang.org/grpc/resolver/resolver.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -30,6 +30,7 @@ import ( | |||
| 
 | ||||
| 	"google.golang.org/grpc/attributes" | ||||
| 	"google.golang.org/grpc/credentials" | ||||
| 	"google.golang.org/grpc/experimental/stats" | ||||
| 	"google.golang.org/grpc/internal" | ||||
| 	"google.golang.org/grpc/serviceconfig" | ||||
| ) | ||||
|  | @ -175,6 +176,8 @@ type BuildOptions struct { | |||
| 	// Authority is the effective authority of the clientconn for which the | ||||
| 	// resolver is built. | ||||
| 	Authority string | ||||
| 	// MetricsRecorder is the metrics recorder to do recording. | ||||
| 	MetricsRecorder stats.MetricsRecorder | ||||
| } | ||||
| 
 | ||||
| // An Endpoint is one network endpoint, or server, which may have multiple | ||||
|  |  | |||
							
								
								
									
										13
									
								
								vendor/google.golang.org/grpc/resolver_wrapper.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/google.golang.org/grpc/resolver_wrapper.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -26,6 +26,7 @@ import ( | |||
| 	"google.golang.org/grpc/internal/channelz" | ||||
| 	"google.golang.org/grpc/internal/grpcsync" | ||||
| 	"google.golang.org/grpc/internal/pretty" | ||||
| 	"google.golang.org/grpc/internal/resolver/delegatingresolver" | ||||
| 	"google.golang.org/grpc/resolver" | ||||
| 	"google.golang.org/grpc/serviceconfig" | ||||
| ) | ||||
|  | @ -76,9 +77,19 @@ func (ccr *ccResolverWrapper) start() error { | |||
| 			CredsBundle:          ccr.cc.dopts.copts.CredsBundle, | ||||
| 			Dialer:               ccr.cc.dopts.copts.Dialer, | ||||
| 			Authority:            ccr.cc.authority, | ||||
| 			MetricsRecorder:      ccr.cc.metricsRecorderList, | ||||
| 		} | ||||
| 		var err error | ||||
| 		ccr.resolver, err = ccr.cc.resolverBuilder.Build(ccr.cc.parsedTarget, ccr, opts) | ||||
| 		// The delegating resolver is used unless: | ||||
| 		//   - A custom dialer is provided via WithContextDialer dialoption or | ||||
| 		//   - Proxy usage is disabled through WithNoProxy dialoption. | ||||
| 		// In these cases, the resolver is built based on the scheme of target, | ||||
| 		// using the appropriate resolver builder. | ||||
| 		if ccr.cc.dopts.copts.Dialer != nil || !ccr.cc.dopts.useProxy { | ||||
| 			ccr.resolver, err = ccr.cc.resolverBuilder.Build(ccr.cc.parsedTarget, ccr, opts) | ||||
| 		} else { | ||||
| 			ccr.resolver, err = delegatingresolver.New(ccr.cc.parsedTarget, ccr, opts, ccr.cc.resolverBuilder, ccr.cc.dopts.enableLocalDNSResolution) | ||||
| 		} | ||||
| 		errCh <- err | ||||
| 	}) | ||||
| 	return <-errCh | ||||
|  |  | |||
							
								
								
									
										83
									
								
								vendor/google.golang.org/grpc/rpc_util.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										83
									
								
								vendor/google.golang.org/grpc/rpc_util.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -151,7 +151,7 @@ func (d *gzipDecompressor) Type() string { | |||
| 
 | ||||
| // callInfo contains all related configuration and information about an RPC. | ||||
| type callInfo struct { | ||||
| 	compressorType        string | ||||
| 	compressorName        string | ||||
| 	failFast              bool | ||||
| 	maxReceiveMessageSize *int | ||||
| 	maxSendMessageSize    *int | ||||
|  | @ -222,7 +222,7 @@ type HeaderCallOption struct { | |||
| 
 | ||||
| func (o HeaderCallOption) before(*callInfo) error { return nil } | ||||
| func (o HeaderCallOption) after(_ *callInfo, attempt *csAttempt) { | ||||
| 	*o.HeaderAddr, _ = attempt.s.Header() | ||||
| 	*o.HeaderAddr, _ = attempt.transportStream.Header() | ||||
| } | ||||
| 
 | ||||
| // Trailer returns a CallOptions that retrieves the trailer metadata | ||||
|  | @ -244,7 +244,7 @@ type TrailerCallOption struct { | |||
| 
 | ||||
| func (o TrailerCallOption) before(*callInfo) error { return nil } | ||||
| func (o TrailerCallOption) after(_ *callInfo, attempt *csAttempt) { | ||||
| 	*o.TrailerAddr = attempt.s.Trailer() | ||||
| 	*o.TrailerAddr = attempt.transportStream.Trailer() | ||||
| } | ||||
| 
 | ||||
| // Peer returns a CallOption that retrieves peer information for a unary RPC. | ||||
|  | @ -266,7 +266,7 @@ type PeerCallOption struct { | |||
| 
 | ||||
| func (o PeerCallOption) before(*callInfo) error { return nil } | ||||
| func (o PeerCallOption) after(_ *callInfo, attempt *csAttempt) { | ||||
| 	if x, ok := peer.FromContext(attempt.s.Context()); ok { | ||||
| 	if x, ok := peer.FromContext(attempt.transportStream.Context()); ok { | ||||
| 		*o.PeerAddr = *x | ||||
| 	} | ||||
| } | ||||
|  | @ -435,7 +435,7 @@ type CompressorCallOption struct { | |||
| } | ||||
| 
 | ||||
| func (o CompressorCallOption) before(c *callInfo) error { | ||||
| 	c.compressorType = o.CompressorType | ||||
| 	c.compressorName = o.CompressorType | ||||
| 	return nil | ||||
| } | ||||
| func (o CompressorCallOption) after(*callInfo, *csAttempt) {} | ||||
|  | @ -692,9 +692,9 @@ func encode(c baseCodec, msg any) (mem.BufferSlice, error) { | |||
| 	if err != nil { | ||||
| 		return nil, status.Errorf(codes.Internal, "grpc: error while marshaling: %v", err.Error()) | ||||
| 	} | ||||
| 	if uint(b.Len()) > math.MaxUint32 { | ||||
| 	if bufSize := uint(b.Len()); bufSize > math.MaxUint32 { | ||||
| 		b.Free() | ||||
| 		return nil, status.Errorf(codes.ResourceExhausted, "grpc: message too large (%d bytes)", len(b)) | ||||
| 		return nil, status.Errorf(codes.ResourceExhausted, "grpc: message too large (%d bytes)", bufSize) | ||||
| 	} | ||||
| 	return b, nil | ||||
| } | ||||
|  | @ -828,30 +828,13 @@ func recvAndDecompress(p *parser, s recvCompressor, dc Decompressor, maxReceiveM | |||
| 		return nil, st.Err() | ||||
| 	} | ||||
| 
 | ||||
| 	var size int | ||||
| 	if pf.isCompressed() { | ||||
| 		defer compressed.Free() | ||||
| 
 | ||||
| 		// To match legacy behavior, if the decompressor is set by WithDecompressor or RPCDecompressor, | ||||
| 		// use this decompressor as the default. | ||||
| 		if dc != nil { | ||||
| 			var uncompressedBuf []byte | ||||
| 			uncompressedBuf, err = dc.Do(compressed.Reader()) | ||||
| 			if err == nil { | ||||
| 				out = mem.BufferSlice{mem.SliceBuffer(uncompressedBuf)} | ||||
| 			} | ||||
| 			size = len(uncompressedBuf) | ||||
| 		} else { | ||||
| 			out, size, err = decompress(compressor, compressed, maxReceiveMessageSize, p.bufferPool) | ||||
| 		} | ||||
| 		out, err = decompress(compressor, compressed, dc, maxReceiveMessageSize, p.bufferPool) | ||||
| 		if err != nil { | ||||
| 			return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", err) | ||||
| 		} | ||||
| 		if size > maxReceiveMessageSize { | ||||
| 			out.Free() | ||||
| 			// TODO: Revisit the error code. Currently keep it consistent with java | ||||
| 			// implementation. | ||||
| 			return nil, status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max (%d vs. %d)", size, maxReceiveMessageSize) | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} else { | ||||
| 		out = compressed | ||||
|  | @ -866,20 +849,46 @@ func recvAndDecompress(p *parser, s recvCompressor, dc Decompressor, maxReceiveM | |||
| 	return out, nil | ||||
| } | ||||
| 
 | ||||
| // Using compressor, decompress d, returning data and size. | ||||
| // Optionally, if data will be over maxReceiveMessageSize, just return the size. | ||||
| func decompress(compressor encoding.Compressor, d mem.BufferSlice, maxReceiveMessageSize int, pool mem.BufferPool) (mem.BufferSlice, int, error) { | ||||
| 	dcReader, err := compressor.Decompress(d.Reader()) | ||||
| 	if err != nil { | ||||
| 		return nil, 0, err | ||||
| // decompress processes the given data by decompressing it using either a custom decompressor or a standard compressor. | ||||
| // If a custom decompressor is provided, it takes precedence. The function validates that the decompressed data | ||||
| // does not exceed the specified maximum size and returns an error if this limit is exceeded. | ||||
| // On success, it returns the decompressed data. Otherwise, it returns an error if decompression fails or the data exceeds the size limit. | ||||
| func decompress(compressor encoding.Compressor, d mem.BufferSlice, dc Decompressor, maxReceiveMessageSize int, pool mem.BufferPool) (mem.BufferSlice, error) { | ||||
| 	if dc != nil { | ||||
| 		uncompressed, err := dc.Do(d.Reader()) | ||||
| 		if err != nil { | ||||
| 			return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the received message: %v", err) | ||||
| 		} | ||||
| 		if len(uncompressed) > maxReceiveMessageSize { | ||||
| 			return nil, status.Errorf(codes.ResourceExhausted, "grpc: message after decompression larger than max (%d vs. %d)", len(uncompressed), maxReceiveMessageSize) | ||||
| 		} | ||||
| 		return mem.BufferSlice{mem.SliceBuffer(uncompressed)}, nil | ||||
| 	} | ||||
| 	if compressor != nil { | ||||
| 		dcReader, err := compressor.Decompress(d.Reader()) | ||||
| 		if err != nil { | ||||
| 			return nil, status.Errorf(codes.Internal, "grpc: failed to decompress the message: %v", err) | ||||
| 		} | ||||
| 
 | ||||
| 	out, err := mem.ReadAll(io.LimitReader(dcReader, int64(maxReceiveMessageSize)+1), pool) | ||||
| 	if err != nil { | ||||
| 		out.Free() | ||||
| 		return nil, 0, err | ||||
| 		out, err := mem.ReadAll(io.LimitReader(dcReader, int64(maxReceiveMessageSize)), pool) | ||||
| 		if err != nil { | ||||
| 			out.Free() | ||||
| 			return nil, status.Errorf(codes.Internal, "grpc: failed to read decompressed data: %v", err) | ||||
| 		} | ||||
| 
 | ||||
| 		if out.Len() == maxReceiveMessageSize && !atEOF(dcReader) { | ||||
| 			out.Free() | ||||
| 			return nil, status.Errorf(codes.ResourceExhausted, "grpc: received message after decompression larger than max %d", maxReceiveMessageSize) | ||||
| 		} | ||||
| 		return out, nil | ||||
| 	} | ||||
| 	return out, out.Len(), nil | ||||
| 	return nil, status.Errorf(codes.Internal, "grpc: no decompressor available for compressed payload") | ||||
| } | ||||
| 
 | ||||
| // atEOF reads data from r and returns true if zero bytes could be read and r.Read returns EOF. | ||||
| func atEOF(dcReader io.Reader) bool { | ||||
| 	n, err := dcReader.Read(make([]byte, 1)) | ||||
| 	return n == 0 && err == io.EOF | ||||
| } | ||||
| 
 | ||||
| type recvCompressor interface { | ||||
|  |  | |||
							
								
								
									
										33
									
								
								vendor/google.golang.org/grpc/server.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/google.golang.org/grpc/server.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -37,12 +37,14 @@ import ( | |||
| 	"google.golang.org/grpc/credentials" | ||||
| 	"google.golang.org/grpc/encoding" | ||||
| 	"google.golang.org/grpc/encoding/proto" | ||||
| 	estats "google.golang.org/grpc/experimental/stats" | ||||
| 	"google.golang.org/grpc/grpclog" | ||||
| 	"google.golang.org/grpc/internal" | ||||
| 	"google.golang.org/grpc/internal/binarylog" | ||||
| 	"google.golang.org/grpc/internal/channelz" | ||||
| 	"google.golang.org/grpc/internal/grpcsync" | ||||
| 	"google.golang.org/grpc/internal/grpcutil" | ||||
| 	istats "google.golang.org/grpc/internal/stats" | ||||
| 	"google.golang.org/grpc/internal/transport" | ||||
| 	"google.golang.org/grpc/keepalive" | ||||
| 	"google.golang.org/grpc/mem" | ||||
|  | @ -82,6 +84,9 @@ func init() { | |||
| 	internal.BinaryLogger = binaryLogger | ||||
| 	internal.JoinServerOptions = newJoinServerOption | ||||
| 	internal.BufferPool = bufferPool | ||||
| 	internal.MetricsRecorderForServer = func(srv *Server) estats.MetricsRecorder { | ||||
| 		return istats.NewMetricsRecorderList(srv.opts.statsHandlers) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| var statusOK = status.New(codes.OK, "") | ||||
|  | @ -643,7 +648,7 @@ func (s *Server) serverWorker() { | |||
| // connections to reduce the time spent overall on runtime.morestack. | ||||
| func (s *Server) initServerWorkers() { | ||||
| 	s.serverWorkerChannel = make(chan func()) | ||||
| 	s.serverWorkerChannelClose = grpcsync.OnceFunc(func() { | ||||
| 	s.serverWorkerChannelClose = sync.OnceFunc(func() { | ||||
| 		close(s.serverWorkerChannel) | ||||
| 	}) | ||||
| 	for i := uint32(0); i < s.opts.numServerWorkers; i++ { | ||||
|  | @ -1360,8 +1365,16 @@ func (s *Server) processUnaryRPC(ctx context.Context, stream *transport.ServerSt | |||
| 		} | ||||
| 		return err | ||||
| 	} | ||||
| 	defer d.Free() | ||||
| 	freed := false | ||||
| 	dataFree := func() { | ||||
| 		if !freed { | ||||
| 			d.Free() | ||||
| 			freed = true | ||||
| 		} | ||||
| 	} | ||||
| 	defer dataFree() | ||||
| 	df := func(v any) error { | ||||
| 		defer dataFree() | ||||
| 		if err := s.getCodec(stream.ContentSubtype()).Unmarshal(d, v); err != nil { | ||||
| 			return status.Errorf(codes.Internal, "grpc: error unmarshalling request: %v", err) | ||||
| 		} | ||||
|  | @ -1637,10 +1650,10 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv | |||
| 	// If dc is set and matches the stream's compression, use it.  Otherwise, try | ||||
| 	// to find a matching registered compressor for decomp. | ||||
| 	if rc := stream.RecvCompress(); s.opts.dc != nil && s.opts.dc.Type() == rc { | ||||
| 		ss.dc = s.opts.dc | ||||
| 		ss.decompressorV0 = s.opts.dc | ||||
| 	} else if rc != "" && rc != encoding.Identity { | ||||
| 		ss.decomp = encoding.GetCompressor(rc) | ||||
| 		if ss.decomp == nil { | ||||
| 		ss.decompressorV1 = encoding.GetCompressor(rc) | ||||
| 		if ss.decompressorV1 == nil { | ||||
| 			st := status.Newf(codes.Unimplemented, "grpc: Decompressor is not installed for grpc-encoding %q", rc) | ||||
| 			ss.s.WriteStatus(st) | ||||
| 			return st.Err() | ||||
|  | @ -1652,12 +1665,12 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv | |||
| 	// | ||||
| 	// NOTE: this needs to be ahead of all handling, https://github.com/grpc/grpc-go/issues/686. | ||||
| 	if s.opts.cp != nil { | ||||
| 		ss.cp = s.opts.cp | ||||
| 		ss.compressorV0 = s.opts.cp | ||||
| 		ss.sendCompressorName = s.opts.cp.Type() | ||||
| 	} else if rc := stream.RecvCompress(); rc != "" && rc != encoding.Identity { | ||||
| 		// Legacy compressor not specified; attempt to respond with same encoding. | ||||
| 		ss.comp = encoding.GetCompressor(rc) | ||||
| 		if ss.comp != nil { | ||||
| 		ss.compressorV1 = encoding.GetCompressor(rc) | ||||
| 		if ss.compressorV1 != nil { | ||||
| 			ss.sendCompressorName = rc | ||||
| 		} | ||||
| 	} | ||||
|  | @ -1668,7 +1681,7 @@ func (s *Server) processStreamingRPC(ctx context.Context, stream *transport.Serv | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	ss.ctx = newContextWithRPCInfo(ss.ctx, false, ss.codec, ss.cp, ss.comp) | ||||
| 	ss.ctx = newContextWithRPCInfo(ss.ctx, false, ss.codec, ss.compressorV0, ss.compressorV1) | ||||
| 
 | ||||
| 	if trInfo != nil { | ||||
| 		trInfo.tr.LazyLog(&trInfo.firstLine, false) | ||||
|  | @ -1922,7 +1935,7 @@ func (s *Server) stop(graceful bool) { | |||
| 	s.conns = nil | ||||
| 
 | ||||
| 	if s.opts.numServerWorkers > 0 { | ||||
| 		// Closing the channel (only once, via grpcsync.OnceFunc) after all the | ||||
| 		// Closing the channel (only once, via sync.OnceFunc) after all the | ||||
| 		// connections have been closed above ensures that there are no | ||||
| 		// goroutines executing the callback passed to st.HandleStreams (where | ||||
| 		// the channel is written to). | ||||
|  |  | |||
							
								
								
									
										17
									
								
								vendor/google.golang.org/grpc/service_config.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								vendor/google.golang.org/grpc/service_config.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -268,18 +268,21 @@ func parseServiceConfig(js string, maxAttempts int) *serviceconfig.ParseResult { | |||
| 	return &serviceconfig.ParseResult{Config: &sc} | ||||
| } | ||||
| 
 | ||||
| func isValidRetryPolicy(jrp *jsonRetryPolicy) bool { | ||||
| 	return jrp.MaxAttempts > 1 && | ||||
| 		jrp.InitialBackoff > 0 && | ||||
| 		jrp.MaxBackoff > 0 && | ||||
| 		jrp.BackoffMultiplier > 0 && | ||||
| 		len(jrp.RetryableStatusCodes) > 0 | ||||
| } | ||||
| 
 | ||||
| func convertRetryPolicy(jrp *jsonRetryPolicy, maxAttempts int) (p *internalserviceconfig.RetryPolicy, err error) { | ||||
| 	if jrp == nil { | ||||
| 		return nil, nil | ||||
| 	} | ||||
| 
 | ||||
| 	if jrp.MaxAttempts <= 1 || | ||||
| 		jrp.InitialBackoff <= 0 || | ||||
| 		jrp.MaxBackoff <= 0 || | ||||
| 		jrp.BackoffMultiplier <= 0 || | ||||
| 		len(jrp.RetryableStatusCodes) == 0 { | ||||
| 		logger.Warningf("grpc: ignoring retry policy %v due to illegal configuration", jrp) | ||||
| 		return nil, nil | ||||
| 	if !isValidRetryPolicy(jrp) { | ||||
| 		return nil, fmt.Errorf("invalid retry policy (%+v): ", jrp) | ||||
| 	} | ||||
| 
 | ||||
| 	if jrp.MaxAttempts < maxAttempts { | ||||
|  |  | |||
							
								
								
									
										296
									
								
								vendor/google.golang.org/grpc/stream.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										296
									
								
								vendor/google.golang.org/grpc/stream.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -258,9 +258,9 @@ func newClientStream(ctx context.Context, desc *StreamDesc, cc *ClientConn, meth | |||
| } | ||||
| 
 | ||||
| func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *ClientConn, method string, mc serviceconfig.MethodConfig, onCommit, doneFunc func(), opts ...CallOption) (_ iresolver.ClientStream, err error) { | ||||
| 	c := defaultCallInfo() | ||||
| 	callInfo := defaultCallInfo() | ||||
| 	if mc.WaitForReady != nil { | ||||
| 		c.failFast = !*mc.WaitForReady | ||||
| 		callInfo.failFast = !*mc.WaitForReady | ||||
| 	} | ||||
| 
 | ||||
| 	// Possible context leak: | ||||
|  | @ -281,20 +281,20 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client | |||
| 	}() | ||||
| 
 | ||||
| 	for _, o := range opts { | ||||
| 		if err := o.before(c); err != nil { | ||||
| 		if err := o.before(callInfo); err != nil { | ||||
| 			return nil, toRPCErr(err) | ||||
| 		} | ||||
| 	} | ||||
| 	c.maxSendMessageSize = getMaxSize(mc.MaxReqSize, c.maxSendMessageSize, defaultClientMaxSendMessageSize) | ||||
| 	c.maxReceiveMessageSize = getMaxSize(mc.MaxRespSize, c.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize) | ||||
| 	if err := setCallInfoCodec(c); err != nil { | ||||
| 	callInfo.maxSendMessageSize = getMaxSize(mc.MaxReqSize, callInfo.maxSendMessageSize, defaultClientMaxSendMessageSize) | ||||
| 	callInfo.maxReceiveMessageSize = getMaxSize(mc.MaxRespSize, callInfo.maxReceiveMessageSize, defaultClientMaxReceiveMessageSize) | ||||
| 	if err := setCallInfoCodec(callInfo); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	callHdr := &transport.CallHdr{ | ||||
| 		Host:           cc.authority, | ||||
| 		Method:         method, | ||||
| 		ContentSubtype: c.contentSubtype, | ||||
| 		ContentSubtype: callInfo.contentSubtype, | ||||
| 		DoneFunc:       doneFunc, | ||||
| 	} | ||||
| 
 | ||||
|  | @ -302,22 +302,22 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client | |||
| 	// set.  In that case, also find the compressor from the encoding package. | ||||
| 	// Otherwise, use the compressor configured by the WithCompressor DialOption, | ||||
| 	// if set. | ||||
| 	var cp Compressor | ||||
| 	var comp encoding.Compressor | ||||
| 	if ct := c.compressorType; ct != "" { | ||||
| 	var compressorV0 Compressor | ||||
| 	var compressorV1 encoding.Compressor | ||||
| 	if ct := callInfo.compressorName; ct != "" { | ||||
| 		callHdr.SendCompress = ct | ||||
| 		if ct != encoding.Identity { | ||||
| 			comp = encoding.GetCompressor(ct) | ||||
| 			if comp == nil { | ||||
| 			compressorV1 = encoding.GetCompressor(ct) | ||||
| 			if compressorV1 == nil { | ||||
| 				return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct) | ||||
| 			} | ||||
| 		} | ||||
| 	} else if cc.dopts.cp != nil { | ||||
| 		callHdr.SendCompress = cc.dopts.cp.Type() | ||||
| 		cp = cc.dopts.cp | ||||
| 	} else if cc.dopts.compressorV0 != nil { | ||||
| 		callHdr.SendCompress = cc.dopts.compressorV0.Type() | ||||
| 		compressorV0 = cc.dopts.compressorV0 | ||||
| 	} | ||||
| 	if c.creds != nil { | ||||
| 		callHdr.Creds = c.creds | ||||
| 	if callInfo.creds != nil { | ||||
| 		callHdr.Creds = callInfo.creds | ||||
| 	} | ||||
| 
 | ||||
| 	cs := &clientStream{ | ||||
|  | @ -325,12 +325,12 @@ func newClientStreamWithParams(ctx context.Context, desc *StreamDesc, cc *Client | |||
| 		ctx:          ctx, | ||||
| 		methodConfig: &mc, | ||||
| 		opts:         opts, | ||||
| 		callInfo:     c, | ||||
| 		callInfo:     callInfo, | ||||
| 		cc:           cc, | ||||
| 		desc:         desc, | ||||
| 		codec:        c.codec, | ||||
| 		cp:           cp, | ||||
| 		comp:         comp, | ||||
| 		codec:        callInfo.codec, | ||||
| 		compressorV0: compressorV0, | ||||
| 		compressorV1: compressorV1, | ||||
| 		cancel:       cancel, | ||||
| 		firstAttempt: true, | ||||
| 		onCommit:     onCommit, | ||||
|  | @ -412,7 +412,7 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error) | |||
| 		return nil, ErrClientConnClosing | ||||
| 	} | ||||
| 
 | ||||
| 	ctx := newContextWithRPCInfo(cs.ctx, cs.callInfo.failFast, cs.callInfo.codec, cs.cp, cs.comp) | ||||
| 	ctx := newContextWithRPCInfo(cs.ctx, cs.callInfo.failFast, cs.callInfo.codec, cs.compressorV0, cs.compressorV1) | ||||
| 	method := cs.callHdr.Method | ||||
| 	var beginTime time.Time | ||||
| 	shs := cs.cc.dopts.copts.StatsHandlers | ||||
|  | @ -454,12 +454,12 @@ func (cs *clientStream) newAttemptLocked(isTransparent bool) (*csAttempt, error) | |||
| 	} | ||||
| 
 | ||||
| 	return &csAttempt{ | ||||
| 		ctx:           ctx, | ||||
| 		beginTime:     beginTime, | ||||
| 		cs:            cs, | ||||
| 		dc:            cs.cc.dopts.dc, | ||||
| 		statsHandlers: shs, | ||||
| 		trInfo:        trInfo, | ||||
| 		ctx:            ctx, | ||||
| 		beginTime:      beginTime, | ||||
| 		cs:             cs, | ||||
| 		decompressorV0: cs.cc.dopts.dc, | ||||
| 		statsHandlers:  shs, | ||||
| 		trInfo:         trInfo, | ||||
| 	}, nil | ||||
| } | ||||
| 
 | ||||
|  | @ -467,7 +467,7 @@ func (a *csAttempt) getTransport() error { | |||
| 	cs := a.cs | ||||
| 
 | ||||
| 	var err error | ||||
| 	a.t, a.pickResult, err = cs.cc.getTransport(a.ctx, cs.callInfo.failFast, cs.callHdr.Method) | ||||
| 	a.transport, a.pickResult, err = cs.cc.getTransport(a.ctx, cs.callInfo.failFast, cs.callHdr.Method) | ||||
| 	if err != nil { | ||||
| 		if de, ok := err.(dropError); ok { | ||||
| 			err = de.error | ||||
|  | @ -476,7 +476,7 @@ func (a *csAttempt) getTransport() error { | |||
| 		return err | ||||
| 	} | ||||
| 	if a.trInfo != nil { | ||||
| 		a.trInfo.firstLine.SetRemoteAddr(a.t.RemoteAddr()) | ||||
| 		a.trInfo.firstLine.SetRemoteAddr(a.transport.RemoteAddr()) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | @ -503,7 +503,7 @@ func (a *csAttempt) newStream() error { | |||
| 		a.ctx = metadata.NewOutgoingContext(a.ctx, md) | ||||
| 	} | ||||
| 
 | ||||
| 	s, err := a.t.NewStream(a.ctx, cs.callHdr) | ||||
| 	s, err := a.transport.NewStream(a.ctx, cs.callHdr) | ||||
| 	if err != nil { | ||||
| 		nse, ok := err.(*transport.NewStreamError) | ||||
| 		if !ok { | ||||
|  | @ -518,9 +518,9 @@ func (a *csAttempt) newStream() error { | |||
| 		// Unwrap and convert error. | ||||
| 		return toRPCErr(nse.Err) | ||||
| 	} | ||||
| 	a.s = s | ||||
| 	a.transportStream = s | ||||
| 	a.ctx = s.Context() | ||||
| 	a.p = &parser{r: s, bufferPool: a.cs.cc.dopts.copts.BufferPool} | ||||
| 	a.parser = &parser{r: s, bufferPool: a.cs.cc.dopts.copts.BufferPool} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
|  | @ -532,9 +532,9 @@ type clientStream struct { | |||
| 	cc       *ClientConn | ||||
| 	desc     *StreamDesc | ||||
| 
 | ||||
| 	codec baseCodec | ||||
| 	cp    Compressor | ||||
| 	comp  encoding.Compressor | ||||
| 	codec        baseCodec | ||||
| 	compressorV0 Compressor | ||||
| 	compressorV1 encoding.Compressor | ||||
| 
 | ||||
| 	cancel context.CancelFunc // cancels all attempts | ||||
| 
 | ||||
|  | @ -583,17 +583,17 @@ type replayOp struct { | |||
| // csAttempt implements a single transport stream attempt within a | ||||
| // clientStream. | ||||
| type csAttempt struct { | ||||
| 	ctx        context.Context | ||||
| 	cs         *clientStream | ||||
| 	t          transport.ClientTransport | ||||
| 	s          *transport.ClientStream | ||||
| 	p          *parser | ||||
| 	pickResult balancer.PickResult | ||||
| 	ctx             context.Context | ||||
| 	cs              *clientStream | ||||
| 	transport       transport.ClientTransport | ||||
| 	transportStream *transport.ClientStream | ||||
| 	parser          *parser | ||||
| 	pickResult      balancer.PickResult | ||||
| 
 | ||||
| 	finished  bool | ||||
| 	dc        Decompressor | ||||
| 	decomp    encoding.Compressor | ||||
| 	decompSet bool | ||||
| 	finished        bool | ||||
| 	decompressorV0  Decompressor | ||||
| 	decompressorV1  encoding.Compressor | ||||
| 	decompressorSet bool | ||||
| 
 | ||||
| 	mu sync.Mutex // guards trInfo.tr | ||||
| 	// trInfo may be nil (if EnableTracing is false). | ||||
|  | @ -639,14 +639,14 @@ func (a *csAttempt) shouldRetry(err error) (bool, error) { | |||
| 		// RPC is finished or committed or was dropped by the picker; cannot retry. | ||||
| 		return false, err | ||||
| 	} | ||||
| 	if a.s == nil && a.allowTransparentRetry { | ||||
| 	if a.transportStream == nil && a.allowTransparentRetry { | ||||
| 		return true, nil | ||||
| 	} | ||||
| 	// Wait for the trailers. | ||||
| 	unprocessed := false | ||||
| 	if a.s != nil { | ||||
| 		<-a.s.Done() | ||||
| 		unprocessed = a.s.Unprocessed() | ||||
| 	if a.transportStream != nil { | ||||
| 		<-a.transportStream.Done() | ||||
| 		unprocessed = a.transportStream.Unprocessed() | ||||
| 	} | ||||
| 	if cs.firstAttempt && unprocessed { | ||||
| 		// First attempt, stream unprocessed: transparently retry. | ||||
|  | @ -658,14 +658,14 @@ func (a *csAttempt) shouldRetry(err error) (bool, error) { | |||
| 
 | ||||
| 	pushback := 0 | ||||
| 	hasPushback := false | ||||
| 	if a.s != nil { | ||||
| 		if !a.s.TrailersOnly() { | ||||
| 	if a.transportStream != nil { | ||||
| 		if !a.transportStream.TrailersOnly() { | ||||
| 			return false, err | ||||
| 		} | ||||
| 
 | ||||
| 		// TODO(retry): Move down if the spec changes to not check server pushback | ||||
| 		// before considering this a failure for throttling. | ||||
| 		sps := a.s.Trailer()["grpc-retry-pushback-ms"] | ||||
| 		sps := a.transportStream.Trailer()["grpc-retry-pushback-ms"] | ||||
| 		if len(sps) == 1 { | ||||
| 			var e error | ||||
| 			if pushback, e = strconv.Atoi(sps[0]); e != nil || pushback < 0 { | ||||
|  | @ -682,8 +682,8 @@ func (a *csAttempt) shouldRetry(err error) (bool, error) { | |||
| 	} | ||||
| 
 | ||||
| 	var code codes.Code | ||||
| 	if a.s != nil { | ||||
| 		code = a.s.Status().Code() | ||||
| 	if a.transportStream != nil { | ||||
| 		code = a.transportStream.Status().Code() | ||||
| 	} else { | ||||
| 		code = status.Code(err) | ||||
| 	} | ||||
|  | @ -756,8 +756,8 @@ func (cs *clientStream) Context() context.Context { | |||
| 	cs.commitAttempt() | ||||
| 	// No need to lock before using attempt, since we know it is committed and | ||||
| 	// cannot change. | ||||
| 	if cs.attempt.s != nil { | ||||
| 		return cs.attempt.s.Context() | ||||
| 	if cs.attempt.transportStream != nil { | ||||
| 		return cs.attempt.transportStream.Context() | ||||
| 	} | ||||
| 	return cs.ctx | ||||
| } | ||||
|  | @ -794,9 +794,9 @@ func (cs *clientStream) withRetry(op func(a *csAttempt) error, onSuccess func()) | |||
| 			continue | ||||
| 		} | ||||
| 		if err == io.EOF { | ||||
| 			<-a.s.Done() | ||||
| 			<-a.transportStream.Done() | ||||
| 		} | ||||
| 		if err == nil || (err == io.EOF && a.s.Status().Code() == codes.OK) { | ||||
| 		if err == nil || (err == io.EOF && a.transportStream.Status().Code() == codes.OK) { | ||||
| 			onSuccess() | ||||
| 			cs.mu.Unlock() | ||||
| 			return err | ||||
|  | @ -812,7 +812,7 @@ func (cs *clientStream) Header() (metadata.MD, error) { | |||
| 	var m metadata.MD | ||||
| 	err := cs.withRetry(func(a *csAttempt) error { | ||||
| 		var err error | ||||
| 		m, err = a.s.Header() | ||||
| 		m, err = a.transportStream.Header() | ||||
| 		return toRPCErr(err) | ||||
| 	}, cs.commitAttemptLocked) | ||||
| 
 | ||||
|  | @ -856,10 +856,10 @@ func (cs *clientStream) Trailer() metadata.MD { | |||
| 	// directions -- it will prevent races and should not meaningfully impact | ||||
| 	// performance. | ||||
| 	cs.commitAttempt() | ||||
| 	if cs.attempt.s == nil { | ||||
| 	if cs.attempt.transportStream == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return cs.attempt.s.Trailer() | ||||
| 	return cs.attempt.transportStream.Trailer() | ||||
| } | ||||
| 
 | ||||
| func (cs *clientStream) replayBufferLocked(attempt *csAttempt) error { | ||||
|  | @ -904,7 +904,7 @@ func (cs *clientStream) SendMsg(m any) (err error) { | |||
| 	} | ||||
| 
 | ||||
| 	// load hdr, payload, data | ||||
| 	hdr, data, payload, pf, err := prepareMsg(m, cs.codec, cs.cp, cs.comp, cs.cc.dopts.copts.BufferPool) | ||||
| 	hdr, data, payload, pf, err := prepareMsg(m, cs.codec, cs.compressorV0, cs.compressorV1, cs.cc.dopts.copts.BufferPool) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | @ -992,7 +992,7 @@ func (cs *clientStream) CloseSend() error { | |||
| 	} | ||||
| 	cs.sentLast = true | ||||
| 	op := func(a *csAttempt) error { | ||||
| 		a.s.Write(nil, nil, &transport.WriteOptions{Last: true}) | ||||
| 		a.transportStream.Write(nil, nil, &transport.WriteOptions{Last: true}) | ||||
| 		// Always return nil; io.EOF is the only error that might make sense | ||||
| 		// instead, but there is no need to signal the client to call RecvMsg | ||||
| 		// as the only use left for the stream after CloseSend is to call | ||||
|  | @ -1030,7 +1030,7 @@ func (cs *clientStream) finish(err error) { | |||
| 	if cs.attempt != nil { | ||||
| 		cs.attempt.finish(err) | ||||
| 		// after functions all rely upon having a stream. | ||||
| 		if cs.attempt.s != nil { | ||||
| 		if cs.attempt.transportStream != nil { | ||||
| 			for _, o := range cs.opts { | ||||
| 				o.after(cs.callInfo, cs.attempt) | ||||
| 			} | ||||
|  | @ -1084,7 +1084,7 @@ func (a *csAttempt) sendMsg(m any, hdr []byte, payld mem.BufferSlice, dataLength | |||
| 		} | ||||
| 		a.mu.Unlock() | ||||
| 	} | ||||
| 	if err := a.s.Write(hdr, payld, &transport.WriteOptions{Last: !cs.desc.ClientStreams}); err != nil { | ||||
| 	if err := a.transportStream.Write(hdr, payld, &transport.WriteOptions{Last: !cs.desc.ClientStreams}); err != nil { | ||||
| 		if !cs.desc.ClientStreams { | ||||
| 			// For non-client-streaming RPCs, we return nil instead of EOF on error | ||||
| 			// because the generated code requires it.  finish is not called; RecvMsg() | ||||
|  | @ -1108,25 +1108,25 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { | |||
| 		defer payInfo.free() | ||||
| 	} | ||||
| 
 | ||||
| 	if !a.decompSet { | ||||
| 	if !a.decompressorSet { | ||||
| 		// Block until we receive headers containing received message encoding. | ||||
| 		if ct := a.s.RecvCompress(); ct != "" && ct != encoding.Identity { | ||||
| 			if a.dc == nil || a.dc.Type() != ct { | ||||
| 		if ct := a.transportStream.RecvCompress(); ct != "" && ct != encoding.Identity { | ||||
| 			if a.decompressorV0 == nil || a.decompressorV0.Type() != ct { | ||||
| 				// No configured decompressor, or it does not match the incoming | ||||
| 				// message encoding; attempt to find a registered compressor that does. | ||||
| 				a.dc = nil | ||||
| 				a.decomp = encoding.GetCompressor(ct) | ||||
| 				a.decompressorV0 = nil | ||||
| 				a.decompressorV1 = encoding.GetCompressor(ct) | ||||
| 			} | ||||
| 		} else { | ||||
| 			// No compression is used; disable our decompressor. | ||||
| 			a.dc = nil | ||||
| 			a.decompressorV0 = nil | ||||
| 		} | ||||
| 		// Only initialize this state once per stream. | ||||
| 		a.decompSet = true | ||||
| 		a.decompressorSet = true | ||||
| 	} | ||||
| 	if err := recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decomp, false); err != nil { | ||||
| 	if err := recv(a.parser, cs.codec, a.transportStream, a.decompressorV0, m, *cs.callInfo.maxReceiveMessageSize, payInfo, a.decompressorV1, false); err != nil { | ||||
| 		if err == io.EOF { | ||||
| 			if statusErr := a.s.Status().Err(); statusErr != nil { | ||||
| 			if statusErr := a.transportStream.Status().Err(); statusErr != nil { | ||||
| 				return statusErr | ||||
| 			} | ||||
| 			return io.EOF // indicates successful end of stream. | ||||
|  | @ -1157,8 +1157,8 @@ func (a *csAttempt) recvMsg(m any, payInfo *payloadInfo) (err error) { | |||
| 	} | ||||
| 	// Special handling for non-server-stream rpcs. | ||||
| 	// This recv expects EOF or errors, so we don't collect inPayload. | ||||
| 	if err := recv(a.p, cs.codec, a.s, a.dc, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decomp, false); err == io.EOF { | ||||
| 		return a.s.Status().Err() // non-server streaming Recv returns nil on success | ||||
| 	if err := recv(a.parser, cs.codec, a.transportStream, a.decompressorV0, m, *cs.callInfo.maxReceiveMessageSize, nil, a.decompressorV1, false); err == io.EOF { | ||||
| 		return a.transportStream.Status().Err() // non-server streaming Recv returns nil on success | ||||
| 	} else if err != nil { | ||||
| 		return toRPCErr(err) | ||||
| 	} | ||||
|  | @ -1177,20 +1177,20 @@ func (a *csAttempt) finish(err error) { | |||
| 		err = nil | ||||
| 	} | ||||
| 	var tr metadata.MD | ||||
| 	if a.s != nil { | ||||
| 		a.s.Close(err) | ||||
| 		tr = a.s.Trailer() | ||||
| 	if a.transportStream != nil { | ||||
| 		a.transportStream.Close(err) | ||||
| 		tr = a.transportStream.Trailer() | ||||
| 	} | ||||
| 
 | ||||
| 	if a.pickResult.Done != nil { | ||||
| 		br := false | ||||
| 		if a.s != nil { | ||||
| 			br = a.s.BytesReceived() | ||||
| 		if a.transportStream != nil { | ||||
| 			br = a.transportStream.BytesReceived() | ||||
| 		} | ||||
| 		a.pickResult.Done(balancer.DoneInfo{ | ||||
| 			Err:           err, | ||||
| 			Trailer:       tr, | ||||
| 			BytesSent:     a.s != nil, | ||||
| 			BytesSent:     a.transportStream != nil, | ||||
| 			BytesReceived: br, | ||||
| 			ServerLoad:    balancerload.Parse(tr), | ||||
| 		}) | ||||
|  | @ -1272,7 +1272,7 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin | |||
| 	// if set. | ||||
| 	var cp Compressor | ||||
| 	var comp encoding.Compressor | ||||
| 	if ct := c.compressorType; ct != "" { | ||||
| 	if ct := c.compressorName; ct != "" { | ||||
| 		callHdr.SendCompress = ct | ||||
| 		if ct != encoding.Identity { | ||||
| 			comp = encoding.GetCompressor(ct) | ||||
|  | @ -1280,9 +1280,9 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin | |||
| 				return nil, status.Errorf(codes.Internal, "grpc: Compressor is not installed for requested grpc-encoding %q", ct) | ||||
| 			} | ||||
| 		} | ||||
| 	} else if ac.cc.dopts.cp != nil { | ||||
| 		callHdr.SendCompress = ac.cc.dopts.cp.Type() | ||||
| 		cp = ac.cc.dopts.cp | ||||
| 	} else if ac.cc.dopts.compressorV0 != nil { | ||||
| 		callHdr.SendCompress = ac.cc.dopts.compressorV0.Type() | ||||
| 		cp = ac.cc.dopts.compressorV0 | ||||
| 	} | ||||
| 	if c.creds != nil { | ||||
| 		callHdr.Creds = c.creds | ||||
|  | @ -1290,26 +1290,26 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin | |||
| 
 | ||||
| 	// Use a special addrConnStream to avoid retry. | ||||
| 	as := &addrConnStream{ | ||||
| 		callHdr:  callHdr, | ||||
| 		ac:       ac, | ||||
| 		ctx:      ctx, | ||||
| 		cancel:   cancel, | ||||
| 		opts:     opts, | ||||
| 		callInfo: c, | ||||
| 		desc:     desc, | ||||
| 		codec:    c.codec, | ||||
| 		cp:       cp, | ||||
| 		comp:     comp, | ||||
| 		t:        t, | ||||
| 		callHdr:          callHdr, | ||||
| 		ac:               ac, | ||||
| 		ctx:              ctx, | ||||
| 		cancel:           cancel, | ||||
| 		opts:             opts, | ||||
| 		callInfo:         c, | ||||
| 		desc:             desc, | ||||
| 		codec:            c.codec, | ||||
| 		sendCompressorV0: cp, | ||||
| 		sendCompressorV1: comp, | ||||
| 		transport:        t, | ||||
| 	} | ||||
| 
 | ||||
| 	s, err := as.t.NewStream(as.ctx, as.callHdr) | ||||
| 	s, err := as.transport.NewStream(as.ctx, as.callHdr) | ||||
| 	if err != nil { | ||||
| 		err = toRPCErr(err) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	as.s = s | ||||
| 	as.p = &parser{r: s, bufferPool: ac.dopts.copts.BufferPool} | ||||
| 	as.transportStream = s | ||||
| 	as.parser = &parser{r: s, bufferPool: ac.dopts.copts.BufferPool} | ||||
| 	ac.incrCallsStarted() | ||||
| 	if desc != unaryStreamDesc { | ||||
| 		// Listen on stream context to cleanup when the stream context is | ||||
|  | @ -1335,29 +1335,31 @@ func newNonRetryClientStream(ctx context.Context, desc *StreamDesc, method strin | |||
| } | ||||
| 
 | ||||
| type addrConnStream struct { | ||||
| 	s         *transport.ClientStream | ||||
| 	ac        *addrConn | ||||
| 	callHdr   *transport.CallHdr | ||||
| 	cancel    context.CancelFunc | ||||
| 	opts      []CallOption | ||||
| 	callInfo  *callInfo | ||||
| 	t         transport.ClientTransport | ||||
| 	ctx       context.Context | ||||
| 	sentLast  bool | ||||
| 	desc      *StreamDesc | ||||
| 	codec     baseCodec | ||||
| 	cp        Compressor | ||||
| 	comp      encoding.Compressor | ||||
| 	decompSet bool | ||||
| 	dc        Decompressor | ||||
| 	decomp    encoding.Compressor | ||||
| 	p         *parser | ||||
| 	mu        sync.Mutex | ||||
| 	finished  bool | ||||
| 	transportStream  *transport.ClientStream | ||||
| 	ac               *addrConn | ||||
| 	callHdr          *transport.CallHdr | ||||
| 	cancel           context.CancelFunc | ||||
| 	opts             []CallOption | ||||
| 	callInfo         *callInfo | ||||
| 	transport        transport.ClientTransport | ||||
| 	ctx              context.Context | ||||
| 	sentLast         bool | ||||
| 	desc             *StreamDesc | ||||
| 	codec            baseCodec | ||||
| 	sendCompressorV0 Compressor | ||||
| 	sendCompressorV1 encoding.Compressor | ||||
| 	decompressorSet  bool | ||||
| 	decompressorV0   Decompressor | ||||
| 	decompressorV1   encoding.Compressor | ||||
| 	parser           *parser | ||||
| 
 | ||||
| 	// mu guards finished and is held for the entire finish method. | ||||
| 	mu       sync.Mutex | ||||
| 	finished bool | ||||
| } | ||||
| 
 | ||||
| func (as *addrConnStream) Header() (metadata.MD, error) { | ||||
| 	m, err := as.s.Header() | ||||
| 	m, err := as.transportStream.Header() | ||||
| 	if err != nil { | ||||
| 		as.finish(toRPCErr(err)) | ||||
| 	} | ||||
|  | @ -1365,7 +1367,7 @@ func (as *addrConnStream) Header() (metadata.MD, error) { | |||
| } | ||||
| 
 | ||||
| func (as *addrConnStream) Trailer() metadata.MD { | ||||
| 	return as.s.Trailer() | ||||
| 	return as.transportStream.Trailer() | ||||
| } | ||||
| 
 | ||||
| func (as *addrConnStream) CloseSend() error { | ||||
|  | @ -1375,7 +1377,7 @@ func (as *addrConnStream) CloseSend() error { | |||
| 	} | ||||
| 	as.sentLast = true | ||||
| 
 | ||||
| 	as.s.Write(nil, nil, &transport.WriteOptions{Last: true}) | ||||
| 	as.transportStream.Write(nil, nil, &transport.WriteOptions{Last: true}) | ||||
| 	// Always return nil; io.EOF is the only error that might make sense | ||||
| 	// instead, but there is no need to signal the client to call RecvMsg | ||||
| 	// as the only use left for the stream after CloseSend is to call | ||||
|  | @ -1384,7 +1386,7 @@ func (as *addrConnStream) CloseSend() error { | |||
| } | ||||
| 
 | ||||
| func (as *addrConnStream) Context() context.Context { | ||||
| 	return as.s.Context() | ||||
| 	return as.transportStream.Context() | ||||
| } | ||||
| 
 | ||||
| func (as *addrConnStream) SendMsg(m any) (err error) { | ||||
|  | @ -1406,7 +1408,7 @@ func (as *addrConnStream) SendMsg(m any) (err error) { | |||
| 	} | ||||
| 
 | ||||
| 	// load hdr, payload, data | ||||
| 	hdr, data, payload, pf, err := prepareMsg(m, as.codec, as.cp, as.comp, as.ac.dopts.copts.BufferPool) | ||||
| 	hdr, data, payload, pf, err := prepareMsg(m, as.codec, as.sendCompressorV0, as.sendCompressorV1, as.ac.dopts.copts.BufferPool) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | @ -1425,7 +1427,7 @@ func (as *addrConnStream) SendMsg(m any) (err error) { | |||
| 		return status.Errorf(codes.ResourceExhausted, "trying to send message larger than max (%d vs. %d)", payload.Len(), *as.callInfo.maxSendMessageSize) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := as.s.Write(hdr, payload, &transport.WriteOptions{Last: !as.desc.ClientStreams}); err != nil { | ||||
| 	if err := as.transportStream.Write(hdr, payload, &transport.WriteOptions{Last: !as.desc.ClientStreams}); err != nil { | ||||
| 		if !as.desc.ClientStreams { | ||||
| 			// For non-client-streaming RPCs, we return nil instead of EOF on error | ||||
| 			// because the generated code requires it.  finish is not called; RecvMsg() | ||||
|  | @ -1446,25 +1448,25 @@ func (as *addrConnStream) RecvMsg(m any) (err error) { | |||
| 		} | ||||
| 	}() | ||||
| 
 | ||||
| 	if !as.decompSet { | ||||
| 	if !as.decompressorSet { | ||||
| 		// Block until we receive headers containing received message encoding. | ||||
| 		if ct := as.s.RecvCompress(); ct != "" && ct != encoding.Identity { | ||||
| 			if as.dc == nil || as.dc.Type() != ct { | ||||
| 		if ct := as.transportStream.RecvCompress(); ct != "" && ct != encoding.Identity { | ||||
| 			if as.decompressorV0 == nil || as.decompressorV0.Type() != ct { | ||||
| 				// No configured decompressor, or it does not match the incoming | ||||
| 				// message encoding; attempt to find a registered compressor that does. | ||||
| 				as.dc = nil | ||||
| 				as.decomp = encoding.GetCompressor(ct) | ||||
| 				as.decompressorV0 = nil | ||||
| 				as.decompressorV1 = encoding.GetCompressor(ct) | ||||
| 			} | ||||
| 		} else { | ||||
| 			// No compression is used; disable our decompressor. | ||||
| 			as.dc = nil | ||||
| 			as.decompressorV0 = nil | ||||
| 		} | ||||
| 		// Only initialize this state once per stream. | ||||
| 		as.decompSet = true | ||||
| 		as.decompressorSet = true | ||||
| 	} | ||||
| 	if err := recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp, false); err != nil { | ||||
| 	if err := recv(as.parser, as.codec, as.transportStream, as.decompressorV0, m, *as.callInfo.maxReceiveMessageSize, nil, as.decompressorV1, false); err != nil { | ||||
| 		if err == io.EOF { | ||||
| 			if statusErr := as.s.Status().Err(); statusErr != nil { | ||||
| 			if statusErr := as.transportStream.Status().Err(); statusErr != nil { | ||||
| 				return statusErr | ||||
| 			} | ||||
| 			return io.EOF // indicates successful end of stream. | ||||
|  | @ -1479,8 +1481,8 @@ func (as *addrConnStream) RecvMsg(m any) (err error) { | |||
| 
 | ||||
| 	// Special handling for non-server-stream rpcs. | ||||
| 	// This recv expects EOF or errors, so we don't collect inPayload. | ||||
| 	if err := recv(as.p, as.codec, as.s, as.dc, m, *as.callInfo.maxReceiveMessageSize, nil, as.decomp, false); err == io.EOF { | ||||
| 		return as.s.Status().Err() // non-server streaming Recv returns nil on success | ||||
| 	if err := recv(as.parser, as.codec, as.transportStream, as.decompressorV0, m, *as.callInfo.maxReceiveMessageSize, nil, as.decompressorV1, false); err == io.EOF { | ||||
| 		return as.transportStream.Status().Err() // non-server streaming Recv returns nil on success | ||||
| 	} else if err != nil { | ||||
| 		return toRPCErr(err) | ||||
| 	} | ||||
|  | @ -1498,8 +1500,8 @@ func (as *addrConnStream) finish(err error) { | |||
| 		// Ending a stream with EOF indicates a success. | ||||
| 		err = nil | ||||
| 	} | ||||
| 	if as.s != nil { | ||||
| 		as.s.Close(err) | ||||
| 	if as.transportStream != nil { | ||||
| 		as.transportStream.Close(err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err != nil { | ||||
|  | @ -1570,10 +1572,10 @@ type serverStream struct { | |||
| 	p     *parser | ||||
| 	codec baseCodec | ||||
| 
 | ||||
| 	cp     Compressor | ||||
| 	dc     Decompressor | ||||
| 	comp   encoding.Compressor | ||||
| 	decomp encoding.Compressor | ||||
| 	compressorV0   Compressor | ||||
| 	compressorV1   encoding.Compressor | ||||
| 	decompressorV0 Decompressor | ||||
| 	decompressorV1 encoding.Compressor | ||||
| 
 | ||||
| 	sendCompressorName string | ||||
| 
 | ||||
|  | @ -1669,12 +1671,12 @@ func (ss *serverStream) SendMsg(m any) (err error) { | |||
| 	// Server handler could have set new compressor by calling SetSendCompressor. | ||||
| 	// In case it is set, we need to use it for compressing outbound message. | ||||
| 	if sendCompressorsName := ss.s.SendCompress(); sendCompressorsName != ss.sendCompressorName { | ||||
| 		ss.comp = encoding.GetCompressor(sendCompressorsName) | ||||
| 		ss.compressorV1 = encoding.GetCompressor(sendCompressorsName) | ||||
| 		ss.sendCompressorName = sendCompressorsName | ||||
| 	} | ||||
| 
 | ||||
| 	// load hdr, payload, data | ||||
| 	hdr, data, payload, pf, err := prepareMsg(m, ss.codec, ss.cp, ss.comp, ss.p.bufferPool) | ||||
| 	hdr, data, payload, pf, err := prepareMsg(m, ss.codec, ss.compressorV0, ss.compressorV1, ss.p.bufferPool) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | @ -1755,7 +1757,7 @@ func (ss *serverStream) RecvMsg(m any) (err error) { | |||
| 		payInfo = &payloadInfo{} | ||||
| 		defer payInfo.free() | ||||
| 	} | ||||
| 	if err := recv(ss.p, ss.codec, ss.s, ss.dc, m, ss.maxReceiveMessageSize, payInfo, ss.decomp, true); err != nil { | ||||
| 	if err := recv(ss.p, ss.codec, ss.s, ss.decompressorV0, m, ss.maxReceiveMessageSize, payInfo, ss.decompressorV1, true); err != nil { | ||||
| 		if err == io.EOF { | ||||
| 			if len(ss.binlogs) != 0 { | ||||
| 				chc := &binarylog.ClientHalfClose{} | ||||
|  | @ -1766,7 +1768,7 @@ func (ss *serverStream) RecvMsg(m any) (err error) { | |||
| 			return err | ||||
| 		} | ||||
| 		if err == io.ErrUnexpectedEOF { | ||||
| 			err = status.Errorf(codes.Internal, io.ErrUnexpectedEOF.Error()) | ||||
| 			err = status.Error(codes.Internal, io.ErrUnexpectedEOF.Error()) | ||||
| 		} | ||||
| 		return toRPCErr(err) | ||||
| 	} | ||||
|  |  | |||
							
								
								
									
										2
									
								
								vendor/google.golang.org/grpc/version.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/grpc/version.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -19,4 +19,4 @@ | |||
| package grpc | ||||
| 
 | ||||
| // Version is the current grpc version. | ||||
| const Version = "1.69.4" | ||||
| const Version = "1.71.0" | ||||
|  |  | |||
							
								
								
									
										5
									
								
								vendor/google.golang.org/protobuf/encoding/protojson/decode.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/google.golang.org/protobuf/encoding/protojson/decode.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -192,11 +192,6 @@ func (d decoder) unmarshalMessage(m protoreflect.Message, skipTypeURL bool) erro | |||
| 				fd = fieldDescs.ByTextName(name) | ||||
| 			} | ||||
| 		} | ||||
| 		if flags.ProtoLegacyWeak { | ||||
| 			if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() { | ||||
| 				fd = nil // reset since the weak reference is not linked in | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		if fd == nil { | ||||
| 			// Field is unknown. | ||||
|  |  | |||
							
								
								
									
										5
									
								
								vendor/google.golang.org/protobuf/encoding/prototext/decode.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/google.golang.org/protobuf/encoding/prototext/decode.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -185,11 +185,6 @@ func (d decoder) unmarshalMessage(m protoreflect.Message, checkDelims bool) erro | |||
| 		} else if xtErr != nil && xtErr != protoregistry.NotFound { | ||||
| 			return d.newError(tok.Pos(), "unable to resolve [%s]: %v", tok.RawString(), xtErr) | ||||
| 		} | ||||
| 		if flags.ProtoLegacyWeak { | ||||
| 			if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() { | ||||
| 				fd = nil // reset since the weak reference is not linked in | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// Handle unknown fields. | ||||
| 		if fd == nil { | ||||
|  |  | |||
							
								
								
									
										8
									
								
								vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -26,7 +26,7 @@ var byteType = reflect.TypeOf(byte(0)) | |||
| // The type is the underlying field type (e.g., a repeated field may be | ||||
| // represented by []T, but the Go type passed in is just T). | ||||
| // A list of enum value descriptors must be provided for enum fields. | ||||
| // This does not populate the Enum or Message (except for weak message). | ||||
| // This does not populate the Enum or Message. | ||||
| // | ||||
| // This function is a best effort attempt; parsing errors are ignored. | ||||
| func Unmarshal(tag string, goType reflect.Type, evs protoreflect.EnumValueDescriptors) protoreflect.FieldDescriptor { | ||||
|  | @ -109,9 +109,6 @@ func Unmarshal(tag string, goType reflect.Type, evs protoreflect.EnumValueDescri | |||
| 			} | ||||
| 		case s == "packed": | ||||
| 			f.L1.EditionFeatures.IsPacked = true | ||||
| 		case strings.HasPrefix(s, "weak="): | ||||
| 			f.L1.IsWeak = true | ||||
| 			f.L1.Message = filedesc.PlaceholderMessage(protoreflect.FullName(s[len("weak="):])) | ||||
| 		case strings.HasPrefix(s, "def="): | ||||
| 			// The default tag is special in that everything afterwards is the | ||||
| 			// default regardless of the presence of commas. | ||||
|  | @ -183,9 +180,6 @@ func Marshal(fd protoreflect.FieldDescriptor, enumName string) string { | |||
| 		// the exact same semantics from the previous generator. | ||||
| 		tag = append(tag, "json="+jsonName) | ||||
| 	} | ||||
| 	if fd.IsWeak() { | ||||
| 		tag = append(tag, "weak="+string(fd.Message().FullName())) | ||||
| 	} | ||||
| 	// The previous implementation does not tag extension fields as proto3, | ||||
| 	// even when the field is defined in a proto3 file. Match that behavior | ||||
| 	// for consistency. | ||||
|  |  | |||
							
								
								
									
										9
									
								
								vendor/google.golang.org/protobuf/internal/filedesc/desc.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/google.golang.org/protobuf/internal/filedesc/desc.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -19,7 +19,6 @@ import ( | |||
| 	"google.golang.org/protobuf/internal/pragma" | ||||
| 	"google.golang.org/protobuf/internal/strs" | ||||
| 	"google.golang.org/protobuf/reflect/protoreflect" | ||||
| 	"google.golang.org/protobuf/reflect/protoregistry" | ||||
| ) | ||||
| 
 | ||||
| // Edition is an Enum for proto2.Edition | ||||
|  | @ -275,7 +274,6 @@ type ( | |||
| 		Kind             protoreflect.Kind | ||||
| 		StringName       stringName | ||||
| 		IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto | ||||
| 		IsWeak           bool // promoted from google.protobuf.FieldOptions | ||||
| 		IsLazy           bool // promoted from google.protobuf.FieldOptions | ||||
| 		Default          defaultValue | ||||
| 		ContainingOneof  protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields | ||||
|  | @ -369,7 +367,7 @@ func (fd *Field) IsPacked() bool { | |||
| 	return fd.L1.EditionFeatures.IsPacked | ||||
| } | ||||
| func (fd *Field) IsExtension() bool { return false } | ||||
| func (fd *Field) IsWeak() bool      { return fd.L1.IsWeak } | ||||
| func (fd *Field) IsWeak() bool      { return false } | ||||
| func (fd *Field) IsLazy() bool      { return fd.L1.IsLazy } | ||||
| func (fd *Field) IsList() bool      { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() } | ||||
| func (fd *Field) IsMap() bool       { return fd.Message() != nil && fd.Message().IsMapEntry() } | ||||
|  | @ -396,11 +394,6 @@ func (fd *Field) Enum() protoreflect.EnumDescriptor { | |||
| 	return fd.L1.Enum | ||||
| } | ||||
| func (fd *Field) Message() protoreflect.MessageDescriptor { | ||||
| 	if fd.L1.IsWeak { | ||||
| 		if d, _ := protoregistry.GlobalFiles.FindDescriptorByName(fd.L1.Message.FullName()); d != nil { | ||||
| 			return d.(protoreflect.MessageDescriptor) | ||||
| 		} | ||||
| 	} | ||||
| 	return fd.L1.Message | ||||
| } | ||||
| func (fd *Field) IsMapEntry() bool { | ||||
|  |  | |||
							
								
								
									
										9
									
								
								vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -32,11 +32,6 @@ func (file *File) resolveMessages() { | |||
| 		for j := range md.L2.Fields.List { | ||||
| 			fd := &md.L2.Fields.List[j] | ||||
| 
 | ||||
| 			// Weak fields are resolved upon actual use. | ||||
| 			if fd.L1.IsWeak { | ||||
| 				continue | ||||
| 			} | ||||
| 
 | ||||
| 			// Resolve message field dependency. | ||||
| 			switch fd.L1.Kind { | ||||
| 			case protoreflect.EnumKind: | ||||
|  | @ -150,8 +145,6 @@ func (fd *File) unmarshalFull(b []byte) { | |||
| 			switch num { | ||||
| 			case genid.FileDescriptorProto_PublicDependency_field_number: | ||||
| 				fd.L2.Imports[v].IsPublic = true | ||||
| 			case genid.FileDescriptorProto_WeakDependency_field_number: | ||||
| 				fd.L2.Imports[v].IsWeak = true | ||||
| 			} | ||||
| 		case protowire.BytesType: | ||||
| 			v, m := protowire.ConsumeBytes(b) | ||||
|  | @ -502,8 +495,6 @@ func (fd *Field) unmarshalOptions(b []byte) { | |||
| 			switch num { | ||||
| 			case genid.FieldOptions_Packed_field_number: | ||||
| 				fd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v) | ||||
| 			case genid.FieldOptions_Weak_field_number: | ||||
| 				fd.L1.IsWeak = protowire.DecodeBool(v) | ||||
| 			case genid.FieldOptions_Lazy_field_number: | ||||
| 				fd.L1.IsLazy = protowire.DecodeBool(v) | ||||
| 			case FieldOptions_EnforceUTF8: | ||||
|  |  | |||
							
								
								
									
										2
									
								
								vendor/google.golang.org/protobuf/internal/filetype/build.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/protobuf/internal/filetype/build.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -63,7 +63,7 @@ type Builder struct { | |||
| 	// message declarations in "flattened ordering". | ||||
| 	// | ||||
| 	// Dependencies are Go types for enums or messages referenced by | ||||
| 	// message fields (excluding weak fields), for parent extended messages of | ||||
| 	// message fields, for parent extended messages of | ||||
| 	// extension fields, for enums or messages referenced by extension fields, | ||||
| 	// and for input and output messages referenced by service methods. | ||||
| 	// Dependencies must come after declarations, but the ordering of | ||||
|  |  | |||
							
								
								
									
										7
									
								
								vendor/google.golang.org/protobuf/internal/flags/flags.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/google.golang.org/protobuf/internal/flags/flags.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -6,7 +6,7 @@ | |||
| package flags | ||||
| 
 | ||||
| // ProtoLegacy specifies whether to enable support for legacy functionality | ||||
| // such as MessageSets, weak fields, and various other obscure behavior | ||||
| // such as MessageSets, and various other obscure behavior | ||||
| // that is necessary to maintain backwards compatibility with proto1 or | ||||
| // the pre-release variants of proto2 and proto3. | ||||
| // | ||||
|  | @ -22,8 +22,3 @@ const ProtoLegacy = protoLegacy | |||
| // extension fields at unmarshal time, but defers creating the message | ||||
| // structure until the extension is first accessed. | ||||
| const LazyUnmarshalExtensions = ProtoLegacy | ||||
| 
 | ||||
| // ProtoLegacyWeak specifies whether to enable support for weak fields. | ||||
| // This flag was split out of ProtoLegacy in preparation for removing | ||||
| // support for weak fields (independent of the other protolegacy features). | ||||
| const ProtoLegacyWeak = ProtoLegacy | ||||
|  |  | |||
							
								
								
									
										5
									
								
								vendor/google.golang.org/protobuf/internal/genid/goname.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/google.golang.org/protobuf/internal/genid/goname.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -11,15 +11,10 @@ const ( | |||
| 	SizeCache_goname  = "sizeCache" | ||||
| 	SizeCacheA_goname = "XXX_sizecache" | ||||
| 
 | ||||
| 	WeakFields_goname  = "weakFields" | ||||
| 	WeakFieldsA_goname = "XXX_weak" | ||||
| 
 | ||||
| 	UnknownFields_goname  = "unknownFields" | ||||
| 	UnknownFieldsA_goname = "XXX_unrecognized" | ||||
| 
 | ||||
| 	ExtensionFields_goname  = "extensionFields" | ||||
| 	ExtensionFieldsA_goname = "XXX_InternalExtensions" | ||||
| 	ExtensionFieldsB_goname = "XXX_extensions" | ||||
| 
 | ||||
| 	WeakFieldPrefix_goname = "XXX_weak_" | ||||
| ) | ||||
|  |  | |||
							
								
								
									
										75
									
								
								vendor/google.golang.org/protobuf/internal/impl/codec_field.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										75
									
								
								vendor/google.golang.org/protobuf/internal/impl/codec_field.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -5,15 +5,12 @@ | |||
| package impl | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"reflect" | ||||
| 	"sync" | ||||
| 
 | ||||
| 	"google.golang.org/protobuf/encoding/protowire" | ||||
| 	"google.golang.org/protobuf/internal/errors" | ||||
| 	"google.golang.org/protobuf/proto" | ||||
| 	"google.golang.org/protobuf/reflect/protoreflect" | ||||
| 	"google.golang.org/protobuf/reflect/protoregistry" | ||||
| 	"google.golang.org/protobuf/runtime/protoiface" | ||||
| ) | ||||
| 
 | ||||
|  | @ -121,78 +118,6 @@ func (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func makeWeakMessageFieldCoder(fd protoreflect.FieldDescriptor) pointerCoderFuncs { | ||||
| 	var once sync.Once | ||||
| 	var messageType protoreflect.MessageType | ||||
| 	lazyInit := func() { | ||||
| 		once.Do(func() { | ||||
| 			messageName := fd.Message().FullName() | ||||
| 			messageType, _ = protoregistry.GlobalTypes.FindMessageByName(messageName) | ||||
| 		}) | ||||
| 	} | ||||
| 
 | ||||
| 	return pointerCoderFuncs{ | ||||
| 		size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { | ||||
| 			m, ok := p.WeakFields().get(f.num) | ||||
| 			if !ok { | ||||
| 				return 0 | ||||
| 			} | ||||
| 			lazyInit() | ||||
| 			if messageType == nil { | ||||
| 				panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName())) | ||||
| 			} | ||||
| 			return sizeMessage(m, f.tagsize, opts) | ||||
| 		}, | ||||
| 		marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { | ||||
| 			m, ok := p.WeakFields().get(f.num) | ||||
| 			if !ok { | ||||
| 				return b, nil | ||||
| 			} | ||||
| 			lazyInit() | ||||
| 			if messageType == nil { | ||||
| 				panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName())) | ||||
| 			} | ||||
| 			return appendMessage(b, m, f.wiretag, opts) | ||||
| 		}, | ||||
| 		unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { | ||||
| 			fs := p.WeakFields() | ||||
| 			m, ok := fs.get(f.num) | ||||
| 			if !ok { | ||||
| 				lazyInit() | ||||
| 				if messageType == nil { | ||||
| 					return unmarshalOutput{}, errUnknown | ||||
| 				} | ||||
| 				m = messageType.New().Interface() | ||||
| 				fs.set(f.num, m) | ||||
| 			} | ||||
| 			return consumeMessage(b, m, wtyp, opts) | ||||
| 		}, | ||||
| 		isInit: func(p pointer, f *coderFieldInfo) error { | ||||
| 			m, ok := p.WeakFields().get(f.num) | ||||
| 			if !ok { | ||||
| 				return nil | ||||
| 			} | ||||
| 			return proto.CheckInitialized(m) | ||||
| 		}, | ||||
| 		merge: func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { | ||||
| 			sm, ok := src.WeakFields().get(f.num) | ||||
| 			if !ok { | ||||
| 				return | ||||
| 			} | ||||
| 			dm, ok := dst.WeakFields().get(f.num) | ||||
| 			if !ok { | ||||
| 				lazyInit() | ||||
| 				if messageType == nil { | ||||
| 					panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName())) | ||||
| 				} | ||||
| 				dm = messageType.New().Interface() | ||||
| 				dst.WeakFields().set(f.num, dm) | ||||
| 			} | ||||
| 			opts.Merge(dm, sm) | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func makeMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { | ||||
| 	if mi := getMessageInfo(ft); mi != nil { | ||||
| 		funcs := pointerCoderFuncs{ | ||||
|  |  | |||
							
								
								
									
										3
									
								
								vendor/google.golang.org/protobuf/internal/impl/codec_message.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/google.golang.org/protobuf/internal/impl/codec_message.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -119,9 +119,6 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) { | |||
| 			} | ||||
| 		case isOneof: | ||||
| 			fieldOffset = offsetOf(fs) | ||||
| 		case fd.IsWeak(): | ||||
| 			fieldOffset = si.weakOffset | ||||
| 			funcs = makeWeakMessageFieldCoder(fd) | ||||
| 		default: | ||||
| 			fieldOffset = offsetOf(fs) | ||||
| 			childMessage, funcs = fieldCoder(fd, ft) | ||||
|  |  | |||
							
								
								
									
										3
									
								
								vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -46,9 +46,6 @@ func (mi *MessageInfo) makeOpaqueCoderMethods(t reflect.Type, si opaqueStructInf | |||
| 		switch { | ||||
| 		case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): | ||||
| 			fieldOffset = offsetOf(fs) | ||||
| 		case fd.IsWeak(): | ||||
| 			fieldOffset = si.weakOffset | ||||
| 			funcs = makeWeakMessageFieldCoder(fd) | ||||
| 		case fd.Message() != nil && !fd.IsMap(): | ||||
| 			fieldOffset = offsetOf(fs) | ||||
| 			if fd.IsList() { | ||||
|  |  | |||
							
								
								
									
										2
									
								
								vendor/google.golang.org/protobuf/internal/impl/lazy.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/protobuf/internal/impl/lazy.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -131,7 +131,7 @@ func (mi *MessageInfo) skipField(b []byte, f *coderFieldInfo, wtyp protowire.Typ | |||
| 	fmi := f.validation.mi | ||||
| 	if fmi == nil { | ||||
| 		fd := mi.Desc.Fields().ByNumber(f.num) | ||||
| 		if fd == nil || !fd.IsWeak() { | ||||
| 		if fd == nil { | ||||
| 			return out, ValidationUnknown | ||||
| 		} | ||||
| 		messageName := fd.Message().FullName() | ||||
|  |  | |||
							
								
								
									
										5
									
								
								vendor/google.golang.org/protobuf/internal/impl/legacy_message.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/google.golang.org/protobuf/internal/impl/legacy_message.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -310,12 +310,9 @@ func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey, | |||
| 	fd.L0.Parent = md | ||||
| 	fd.L0.Index = n | ||||
| 
 | ||||
| 	if fd.L1.IsWeak || fd.L1.EditionFeatures.IsPacked { | ||||
| 	if fd.L1.EditionFeatures.IsPacked { | ||||
| 		fd.L1.Options = func() protoreflect.ProtoMessage { | ||||
| 			opts := descopts.Field.ProtoReflect().New() | ||||
| 			if fd.L1.IsWeak { | ||||
| 				opts.Set(opts.Descriptor().Fields().ByName("weak"), protoreflect.ValueOfBool(true)) | ||||
| 			} | ||||
| 			if fd.L1.EditionFeatures.IsPacked { | ||||
| 				opts.Set(opts.Descriptor().Fields().ByName("packed"), protoreflect.ValueOfBool(fd.L1.EditionFeatures.IsPacked)) | ||||
| 			} | ||||
|  |  | |||
							
								
								
									
										13
									
								
								vendor/google.golang.org/protobuf/internal/impl/message.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								vendor/google.golang.org/protobuf/internal/impl/message.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -14,7 +14,6 @@ import ( | |||
| 
 | ||||
| 	"google.golang.org/protobuf/internal/genid" | ||||
| 	"google.golang.org/protobuf/reflect/protoreflect" | ||||
| 	"google.golang.org/protobuf/reflect/protoregistry" | ||||
| ) | ||||
| 
 | ||||
| // MessageInfo provides protobuf related functionality for a given Go type | ||||
|  | @ -120,7 +119,6 @@ type ( | |||
| 
 | ||||
| var ( | ||||
| 	sizecacheType       = reflect.TypeOf(SizeCache(0)) | ||||
| 	weakFieldsType      = reflect.TypeOf(WeakFields(nil)) | ||||
| 	unknownFieldsAType  = reflect.TypeOf(unknownFieldsA(nil)) | ||||
| 	unknownFieldsBType  = reflect.TypeOf(unknownFieldsB(nil)) | ||||
| 	extensionFieldsType = reflect.TypeOf(ExtensionFields(nil)) | ||||
|  | @ -129,8 +127,6 @@ var ( | |||
| type structInfo struct { | ||||
| 	sizecacheOffset offset | ||||
| 	sizecacheType   reflect.Type | ||||
| 	weakOffset      offset | ||||
| 	weakType        reflect.Type | ||||
| 	unknownOffset   offset | ||||
| 	unknownType     reflect.Type | ||||
| 	extensionOffset offset | ||||
|  | @ -148,7 +144,6 @@ type structInfo struct { | |||
| func (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo { | ||||
| 	si := structInfo{ | ||||
| 		sizecacheOffset: invalidOffset, | ||||
| 		weakOffset:      invalidOffset, | ||||
| 		unknownOffset:   invalidOffset, | ||||
| 		extensionOffset: invalidOffset, | ||||
| 		lazyOffset:      invalidOffset, | ||||
|  | @ -168,11 +163,6 @@ fieldLoop: | |||
| 				si.sizecacheOffset = offsetOf(f) | ||||
| 				si.sizecacheType = f.Type | ||||
| 			} | ||||
| 		case genid.WeakFields_goname, genid.WeakFieldsA_goname: | ||||
| 			if f.Type == weakFieldsType { | ||||
| 				si.weakOffset = offsetOf(f) | ||||
| 				si.weakType = f.Type | ||||
| 			} | ||||
| 		case genid.UnknownFields_goname, genid.UnknownFieldsA_goname: | ||||
| 			if f.Type == unknownFieldsAType || f.Type == unknownFieldsBType { | ||||
| 				si.unknownOffset = offsetOf(f) | ||||
|  | @ -256,9 +246,6 @@ func (mi *MessageInfo) Message(i int) protoreflect.MessageType { | |||
| 	mi.init() | ||||
| 	fd := mi.Desc.Fields().Get(i) | ||||
| 	switch { | ||||
| 	case fd.IsWeak(): | ||||
| 		mt, _ := protoregistry.GlobalTypes.FindMessageByName(fd.Message().FullName()) | ||||
| 		return mt | ||||
| 	case fd.IsMap(): | ||||
| 		return mapEntryType{fd.Message(), mi.fieldTypes[fd.Number()]} | ||||
| 	default: | ||||
|  |  | |||
							
								
								
									
										5
									
								
								vendor/google.golang.org/protobuf/internal/impl/message_opaque.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/google.golang.org/protobuf/internal/impl/message_opaque.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -56,9 +56,6 @@ func opaqueInitHook(mi *MessageInfo) bool { | |||
| 		usePresence, _ := usePresenceForField(si, fd) | ||||
| 
 | ||||
| 		switch { | ||||
| 		case fd.IsWeak(): | ||||
| 			// Weak fields are no different for opaque. | ||||
| 			fi = fieldInfoForWeakMessage(fd, si.weakOffset) | ||||
| 		case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): | ||||
| 			// Oneofs are no different for opaque. | ||||
| 			fi = fieldInfoForOneof(fd, si.oneofsByName[fd.ContainingOneof().Name()], mi.Exporter, si.oneofWrappersByNumber[fd.Number()]) | ||||
|  | @ -620,8 +617,6 @@ func usePresenceForField(si opaqueStructInfo, fd protoreflect.FieldDescriptor) ( | |||
| 	switch { | ||||
| 	case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): | ||||
| 		return false, false | ||||
| 	case fd.IsWeak(): | ||||
| 		return false, false | ||||
| 	case fd.IsMap(): | ||||
| 		return false, false | ||||
| 	case fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind: | ||||
|  |  | |||
							
								
								
									
										5
									
								
								vendor/google.golang.org/protobuf/internal/impl/message_reflect.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/google.golang.org/protobuf/internal/impl/message_reflect.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -72,8 +72,6 @@ func (mi *MessageInfo) makeKnownFieldsFunc(si structInfo) { | |||
| 			fi = fieldInfoForMap(fd, fs, mi.Exporter) | ||||
| 		case fd.IsList(): | ||||
| 			fi = fieldInfoForList(fd, fs, mi.Exporter) | ||||
| 		case fd.IsWeak(): | ||||
| 			fi = fieldInfoForWeakMessage(fd, si.weakOffset) | ||||
| 		case fd.Message() != nil: | ||||
| 			fi = fieldInfoForMessage(fd, fs, mi.Exporter) | ||||
| 		default: | ||||
|  | @ -219,9 +217,6 @@ func (mi *MessageInfo) makeFieldTypes(si structInfo) { | |||
| 			} | ||||
| 		case fd.Message() != nil: | ||||
| 			ft = fs.Type | ||||
| 			if fd.IsWeak() { | ||||
| 				ft = nil | ||||
| 			} | ||||
| 			isMessage = true | ||||
| 		} | ||||
| 		if isMessage && ft != nil && ft.Kind() != reflect.Ptr { | ||||
|  |  | |||
							
								
								
									
										76
									
								
								vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										76
									
								
								vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -8,11 +8,8 @@ import ( | |||
| 	"fmt" | ||||
| 	"math" | ||||
| 	"reflect" | ||||
| 	"sync" | ||||
| 
 | ||||
| 	"google.golang.org/protobuf/internal/flags" | ||||
| 	"google.golang.org/protobuf/reflect/protoreflect" | ||||
| 	"google.golang.org/protobuf/reflect/protoregistry" | ||||
| ) | ||||
| 
 | ||||
| type fieldInfo struct { | ||||
|  | @ -332,79 +329,6 @@ func fieldInfoForScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| func fieldInfoForWeakMessage(fd protoreflect.FieldDescriptor, weakOffset offset) fieldInfo { | ||||
| 	if !flags.ProtoLegacyWeak { | ||||
| 		panic("no support for proto1 weak fields") | ||||
| 	} | ||||
| 
 | ||||
| 	var once sync.Once | ||||
| 	var messageType protoreflect.MessageType | ||||
| 	lazyInit := func() { | ||||
| 		once.Do(func() { | ||||
| 			messageName := fd.Message().FullName() | ||||
| 			messageType, _ = protoregistry.GlobalTypes.FindMessageByName(messageName) | ||||
| 			if messageType == nil { | ||||
| 				panic(fmt.Sprintf("weak message %v for field %v is not linked in", messageName, fd.FullName())) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| 
 | ||||
| 	num := fd.Number() | ||||
| 	return fieldInfo{ | ||||
| 		fieldDesc: fd, | ||||
| 		has: func(p pointer) bool { | ||||
| 			if p.IsNil() { | ||||
| 				return false | ||||
| 			} | ||||
| 			_, ok := p.Apply(weakOffset).WeakFields().get(num) | ||||
| 			return ok | ||||
| 		}, | ||||
| 		clear: func(p pointer) { | ||||
| 			p.Apply(weakOffset).WeakFields().clear(num) | ||||
| 		}, | ||||
| 		get: func(p pointer) protoreflect.Value { | ||||
| 			lazyInit() | ||||
| 			if p.IsNil() { | ||||
| 				return protoreflect.ValueOfMessage(messageType.Zero()) | ||||
| 			} | ||||
| 			m, ok := p.Apply(weakOffset).WeakFields().get(num) | ||||
| 			if !ok { | ||||
| 				return protoreflect.ValueOfMessage(messageType.Zero()) | ||||
| 			} | ||||
| 			return protoreflect.ValueOfMessage(m.ProtoReflect()) | ||||
| 		}, | ||||
| 		set: func(p pointer, v protoreflect.Value) { | ||||
| 			lazyInit() | ||||
| 			m := v.Message() | ||||
| 			if m.Descriptor() != messageType.Descriptor() { | ||||
| 				if got, want := m.Descriptor().FullName(), messageType.Descriptor().FullName(); got != want { | ||||
| 					panic(fmt.Sprintf("field %v has mismatching message descriptor: got %v, want %v", fd.FullName(), got, want)) | ||||
| 				} | ||||
| 				panic(fmt.Sprintf("field %v has mismatching message descriptor: %v", fd.FullName(), m.Descriptor().FullName())) | ||||
| 			} | ||||
| 			p.Apply(weakOffset).WeakFields().set(num, m.Interface()) | ||||
| 		}, | ||||
| 		mutable: func(p pointer) protoreflect.Value { | ||||
| 			lazyInit() | ||||
| 			fs := p.Apply(weakOffset).WeakFields() | ||||
| 			m, ok := fs.get(num) | ||||
| 			if !ok { | ||||
| 				m = messageType.New().Interface() | ||||
| 				fs.set(num, m) | ||||
| 			} | ||||
| 			return protoreflect.ValueOfMessage(m.ProtoReflect()) | ||||
| 		}, | ||||
| 		newMessage: func() protoreflect.Message { | ||||
| 			lazyInit() | ||||
| 			return messageType.New() | ||||
| 		}, | ||||
| 		newField: func() protoreflect.Value { | ||||
| 			lazyInit() | ||||
| 			return protoreflect.ValueOfMessage(messageType.New()) | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func fieldInfoForMessage(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { | ||||
| 	ft := fs.Type | ||||
| 	conv := NewConverter(ft, fd) | ||||
|  |  | |||
							
								
								
									
										1
									
								
								vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -111,7 +111,6 @@ func (p pointer) StringSlice() *[]string                { return (*[]string)(p.p | |||
| func (p pointer) Bytes() *[]byte                        { return (*[]byte)(p.p) } | ||||
| func (p pointer) BytesPtr() **[]byte                    { return (**[]byte)(p.p) } | ||||
| func (p pointer) BytesSlice() *[][]byte                 { return (*[][]byte)(p.p) } | ||||
| func (p pointer) WeakFields() *weakFields               { return (*weakFields)(p.p) } | ||||
| func (p pointer) Extensions() *map[int32]ExtensionField { return (*map[int32]ExtensionField)(p.p) } | ||||
| func (p pointer) LazyInfoPtr() **protolazy.XXX_lazyUnmarshalInfo { | ||||
| 	return (**protolazy.XXX_lazyUnmarshalInfo)(p.p) | ||||
|  |  | |||
							
								
								
									
										24
									
								
								vendor/google.golang.org/protobuf/internal/impl/validate.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								vendor/google.golang.org/protobuf/internal/impl/validate.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -211,9 +211,7 @@ func newValidationInfo(fd protoreflect.FieldDescriptor, ft reflect.Type) validat | |||
| 		switch fd.Kind() { | ||||
| 		case protoreflect.MessageKind: | ||||
| 			vi.typ = validationTypeMessage | ||||
| 			if !fd.IsWeak() { | ||||
| 				vi.mi = getMessageInfo(ft) | ||||
| 			} | ||||
| 			vi.mi = getMessageInfo(ft) | ||||
| 		case protoreflect.GroupKind: | ||||
| 			vi.typ = validationTypeGroup | ||||
| 			vi.mi = getMessageInfo(ft) | ||||
|  | @ -320,26 +318,6 @@ State: | |||
| 				} | ||||
| 				if f != nil { | ||||
| 					vi = f.validation | ||||
| 					if vi.typ == validationTypeMessage && vi.mi == nil { | ||||
| 						// Probable weak field. | ||||
| 						// | ||||
| 						// TODO: Consider storing the results of this lookup somewhere | ||||
| 						// rather than recomputing it on every validation. | ||||
| 						fd := st.mi.Desc.Fields().ByNumber(num) | ||||
| 						if fd == nil || !fd.IsWeak() { | ||||
| 							break | ||||
| 						} | ||||
| 						messageName := fd.Message().FullName() | ||||
| 						messageType, err := protoregistry.GlobalTypes.FindMessageByName(messageName) | ||||
| 						switch err { | ||||
| 						case nil: | ||||
| 							vi.mi, _ = messageType.(*MessageInfo) | ||||
| 						case protoregistry.NotFound: | ||||
| 							vi.typ = validationTypeBytes | ||||
| 						default: | ||||
| 							return out, ValidationUnknown | ||||
| 						} | ||||
| 					} | ||||
| 					break | ||||
| 				} | ||||
| 				// Possible extension field. | ||||
|  |  | |||
							
								
								
									
										74
									
								
								vendor/google.golang.org/protobuf/internal/impl/weak.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										74
									
								
								vendor/google.golang.org/protobuf/internal/impl/weak.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -1,74 +0,0 @@ | |||
| // Copyright 2019 The Go Authors. All rights reserved. | ||||
| // Use of this source code is governed by a BSD-style | ||||
| // license that can be found in the LICENSE file. | ||||
| 
 | ||||
| package impl | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"google.golang.org/protobuf/reflect/protoreflect" | ||||
| 	"google.golang.org/protobuf/reflect/protoregistry" | ||||
| ) | ||||
| 
 | ||||
| // weakFields adds methods to the exported WeakFields type for internal use. | ||||
| // | ||||
| // The exported type is an alias to an unnamed type, so methods can't be | ||||
| // defined directly on it. | ||||
| type weakFields WeakFields | ||||
| 
 | ||||
| func (w weakFields) get(num protoreflect.FieldNumber) (protoreflect.ProtoMessage, bool) { | ||||
| 	m, ok := w[int32(num)] | ||||
| 	return m, ok | ||||
| } | ||||
| 
 | ||||
| func (w *weakFields) set(num protoreflect.FieldNumber, m protoreflect.ProtoMessage) { | ||||
| 	if *w == nil { | ||||
| 		*w = make(weakFields) | ||||
| 	} | ||||
| 	(*w)[int32(num)] = m | ||||
| } | ||||
| 
 | ||||
| func (w *weakFields) clear(num protoreflect.FieldNumber) { | ||||
| 	delete(*w, int32(num)) | ||||
| } | ||||
| 
 | ||||
| func (Export) HasWeak(w WeakFields, num protoreflect.FieldNumber) bool { | ||||
| 	_, ok := w[int32(num)] | ||||
| 	return ok | ||||
| } | ||||
| 
 | ||||
| func (Export) ClearWeak(w *WeakFields, num protoreflect.FieldNumber) { | ||||
| 	delete(*w, int32(num)) | ||||
| } | ||||
| 
 | ||||
| func (Export) GetWeak(w WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName) protoreflect.ProtoMessage { | ||||
| 	if m, ok := w[int32(num)]; ok { | ||||
| 		return m | ||||
| 	} | ||||
| 	mt, _ := protoregistry.GlobalTypes.FindMessageByName(name) | ||||
| 	if mt == nil { | ||||
| 		panic(fmt.Sprintf("message %v for weak field is not linked in", name)) | ||||
| 	} | ||||
| 	return mt.Zero().Interface() | ||||
| } | ||||
| 
 | ||||
| func (Export) SetWeak(w *WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName, m protoreflect.ProtoMessage) { | ||||
| 	if m != nil { | ||||
| 		mt, _ := protoregistry.GlobalTypes.FindMessageByName(name) | ||||
| 		if mt == nil { | ||||
| 			panic(fmt.Sprintf("message %v for weak field is not linked in", name)) | ||||
| 		} | ||||
| 		if mt != m.ProtoReflect().Type() { | ||||
| 			panic(fmt.Sprintf("invalid message type for weak field: got %T, want %T", m, mt.Zero().Interface())) | ||||
| 		} | ||||
| 	} | ||||
| 	if m == nil || !m.ProtoReflect().IsValid() { | ||||
| 		delete(*w, int32(num)) | ||||
| 		return | ||||
| 	} | ||||
| 	if *w == nil { | ||||
| 		*w = make(weakFields) | ||||
| 	} | ||||
| 	(*w)[int32(num)] = m | ||||
| } | ||||
							
								
								
									
										2
									
								
								vendor/google.golang.org/protobuf/internal/version/version.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/protobuf/internal/version/version.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -52,7 +52,7 @@ import ( | |||
| const ( | ||||
| 	Major      = 1 | ||||
| 	Minor      = 36 | ||||
| 	Patch      = 3 | ||||
| 	Patch      = 5 | ||||
| 	PreRelease = "" | ||||
| ) | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										5
									
								
								vendor/google.golang.org/protobuf/proto/decode.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/google.golang.org/protobuf/proto/decode.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -8,7 +8,6 @@ import ( | |||
| 	"google.golang.org/protobuf/encoding/protowire" | ||||
| 	"google.golang.org/protobuf/internal/encoding/messageset" | ||||
| 	"google.golang.org/protobuf/internal/errors" | ||||
| 	"google.golang.org/protobuf/internal/flags" | ||||
| 	"google.golang.org/protobuf/internal/genid" | ||||
| 	"google.golang.org/protobuf/internal/pragma" | ||||
| 	"google.golang.org/protobuf/reflect/protoreflect" | ||||
|  | @ -172,10 +171,6 @@ func (o UnmarshalOptions) unmarshalMessageSlow(b []byte, m protoreflect.Message) | |||
| 		var err error | ||||
| 		if fd == nil { | ||||
| 			err = errUnknown | ||||
| 		} else if flags.ProtoLegacyWeak { | ||||
| 			if fd.IsWeak() && fd.Message().IsPlaceholder() { | ||||
| 				err = errUnknown // weak referent is not linked in | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// Parse the field value. | ||||
|  |  | |||
							
								
								
									
										12
									
								
								vendor/google.golang.org/protobuf/reflect/protoreflect/type.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/google.golang.org/protobuf/reflect/protoreflect/type.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -68,7 +68,7 @@ type Descriptor interface { | |||
| 	// dependency is not resolved, in which case only name information is known. | ||||
| 	// | ||||
| 	// Placeholder types may only be returned by the following accessors | ||||
| 	// as a result of unresolved dependencies or weak imports: | ||||
| 	// as a result of unresolved dependencies: | ||||
| 	// | ||||
| 	//	╔═══════════════════════════════════╤═════════════════════╗ | ||||
| 	//	║ Accessor                          │ Descriptor          ║ | ||||
|  | @ -168,11 +168,7 @@ type FileImport struct { | |||
| 	// The current file and the imported file must be within proto package. | ||||
| 	IsPublic bool | ||||
| 
 | ||||
| 	// IsWeak reports whether this is a weak import, which does not impose | ||||
| 	// a direct dependency on the target file. | ||||
| 	// | ||||
| 	// Weak imports are a legacy proto1 feature. Equivalent behavior is | ||||
| 	// achieved using proto2 extension fields or proto3 Any messages. | ||||
| 	// Deprecated: support for weak fields has been removed. | ||||
| 	IsWeak bool | ||||
| } | ||||
| 
 | ||||
|  | @ -325,9 +321,7 @@ type FieldDescriptor interface { | |||
| 	// specified in the source .proto file. | ||||
| 	HasOptionalKeyword() bool | ||||
| 
 | ||||
| 	// IsWeak reports whether this is a weak field, which does not impose a | ||||
| 	// direct dependency on the target type. | ||||
| 	// If true, then Message returns a placeholder type. | ||||
| 	// Deprecated: support for weak fields has been removed. | ||||
| 	IsWeak() bool | ||||
| 
 | ||||
| 	// IsPacked reports whether repeated primitive numeric kinds should be | ||||
|  |  | |||
							
								
								
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -122,6 +122,7 @@ import ( | |||
| 	reflect "reflect" | ||||
| 	strings "strings" | ||||
| 	sync "sync" | ||||
| 	unsafe "unsafe" | ||||
| ) | ||||
| 
 | ||||
| // `Any` contains an arbitrary serialized protocol buffer message along with a | ||||
|  | @ -411,7 +412,7 @@ func (x *Any) GetValue() []byte { | |||
| 
 | ||||
| var File_google_protobuf_any_proto protoreflect.FileDescriptor | ||||
| 
 | ||||
| var file_google_protobuf_any_proto_rawDesc = []byte{ | ||||
| var file_google_protobuf_any_proto_rawDesc = string([]byte{ | ||||
| 	0x0a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, | ||||
| 	0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f, | ||||
| 	0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x22, 0x36, 0x0a, 0x03, | ||||
|  | @ -427,16 +428,16 @@ var file_google_protobuf_any_proto_rawDesc = []byte{ | |||
| 	0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, | ||||
| 	0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, | ||||
| 	0x6f, 0x74, 0x6f, 0x33, | ||||
| } | ||||
| }) | ||||
| 
 | ||||
| var ( | ||||
| 	file_google_protobuf_any_proto_rawDescOnce sync.Once | ||||
| 	file_google_protobuf_any_proto_rawDescData = file_google_protobuf_any_proto_rawDesc | ||||
| 	file_google_protobuf_any_proto_rawDescData []byte | ||||
| ) | ||||
| 
 | ||||
| func file_google_protobuf_any_proto_rawDescGZIP() []byte { | ||||
| 	file_google_protobuf_any_proto_rawDescOnce.Do(func() { | ||||
| 		file_google_protobuf_any_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_any_proto_rawDescData) | ||||
| 		file_google_protobuf_any_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_any_proto_rawDesc), len(file_google_protobuf_any_proto_rawDesc))) | ||||
| 	}) | ||||
| 	return file_google_protobuf_any_proto_rawDescData | ||||
| } | ||||
|  | @ -462,7 +463,7 @@ func file_google_protobuf_any_proto_init() { | |||
| 	out := protoimpl.TypeBuilder{ | ||||
| 		File: protoimpl.DescBuilder{ | ||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||
| 			RawDescriptor: file_google_protobuf_any_proto_rawDesc, | ||||
| 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_any_proto_rawDesc), len(file_google_protobuf_any_proto_rawDesc)), | ||||
| 			NumEnums:      0, | ||||
| 			NumMessages:   1, | ||||
| 			NumExtensions: 0, | ||||
|  | @ -473,7 +474,6 @@ func file_google_protobuf_any_proto_init() { | |||
| 		MessageInfos:      file_google_protobuf_any_proto_msgTypes, | ||||
| 	}.Build() | ||||
| 	File_google_protobuf_any_proto = out.File | ||||
| 	file_google_protobuf_any_proto_rawDesc = nil | ||||
| 	file_google_protobuf_any_proto_goTypes = nil | ||||
| 	file_google_protobuf_any_proto_depIdxs = nil | ||||
| } | ||||
|  |  | |||
							
								
								
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -80,6 +80,7 @@ import ( | |||
| 	reflect "reflect" | ||||
| 	sync "sync" | ||||
| 	time "time" | ||||
| 	unsafe "unsafe" | ||||
| ) | ||||
| 
 | ||||
| // A Duration represents a signed, fixed-length span of time represented | ||||
|  | @ -288,7 +289,7 @@ func (x *Duration) GetNanos() int32 { | |||
| 
 | ||||
| var File_google_protobuf_duration_proto protoreflect.FileDescriptor | ||||
| 
 | ||||
| var file_google_protobuf_duration_proto_rawDesc = []byte{ | ||||
| var file_google_protobuf_duration_proto_rawDesc = string([]byte{ | ||||
| 	0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, | ||||
| 	0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||
| 	0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, | ||||
|  | @ -305,16 +306,16 @@ var file_google_protobuf_duration_proto_rawDesc = []byte{ | |||
| 	0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, | ||||
| 	0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, | ||||
| 	0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| } | ||||
| }) | ||||
| 
 | ||||
| var ( | ||||
| 	file_google_protobuf_duration_proto_rawDescOnce sync.Once | ||||
| 	file_google_protobuf_duration_proto_rawDescData = file_google_protobuf_duration_proto_rawDesc | ||||
| 	file_google_protobuf_duration_proto_rawDescData []byte | ||||
| ) | ||||
| 
 | ||||
| func file_google_protobuf_duration_proto_rawDescGZIP() []byte { | ||||
| 	file_google_protobuf_duration_proto_rawDescOnce.Do(func() { | ||||
| 		file_google_protobuf_duration_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_duration_proto_rawDescData) | ||||
| 		file_google_protobuf_duration_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_duration_proto_rawDesc), len(file_google_protobuf_duration_proto_rawDesc))) | ||||
| 	}) | ||||
| 	return file_google_protobuf_duration_proto_rawDescData | ||||
| } | ||||
|  | @ -340,7 +341,7 @@ func file_google_protobuf_duration_proto_init() { | |||
| 	out := protoimpl.TypeBuilder{ | ||||
| 		File: protoimpl.DescBuilder{ | ||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||
| 			RawDescriptor: file_google_protobuf_duration_proto_rawDesc, | ||||
| 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_duration_proto_rawDesc), len(file_google_protobuf_duration_proto_rawDesc)), | ||||
| 			NumEnums:      0, | ||||
| 			NumMessages:   1, | ||||
| 			NumExtensions: 0, | ||||
|  | @ -351,7 +352,6 @@ func file_google_protobuf_duration_proto_init() { | |||
| 		MessageInfos:      file_google_protobuf_duration_proto_msgTypes, | ||||
| 	}.Build() | ||||
| 	File_google_protobuf_duration_proto = out.File | ||||
| 	file_google_protobuf_duration_proto_rawDesc = nil | ||||
| 	file_google_protobuf_duration_proto_goTypes = nil | ||||
| 	file_google_protobuf_duration_proto_depIdxs = nil | ||||
| } | ||||
|  |  | |||
							
								
								
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/fieldmaskpb/field_mask.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/fieldmaskpb/field_mask.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -83,6 +83,7 @@ import ( | |||
| 	sort "sort" | ||||
| 	strings "strings" | ||||
| 	sync "sync" | ||||
| 	unsafe "unsafe" | ||||
| ) | ||||
| 
 | ||||
| // `FieldMask` represents a set of symbolic field paths, for example: | ||||
|  | @ -503,7 +504,7 @@ func (x *FieldMask) GetPaths() []string { | |||
| 
 | ||||
| var File_google_protobuf_field_mask_proto protoreflect.FileDescriptor | ||||
| 
 | ||||
| var file_google_protobuf_field_mask_proto_rawDesc = []byte{ | ||||
| var file_google_protobuf_field_mask_proto_rawDesc = string([]byte{ | ||||
| 	0x0a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, | ||||
| 	0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, | ||||
| 	0x74, 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||
|  | @ -519,16 +520,16 @@ var file_google_protobuf_field_mask_proto_rawDesc = []byte{ | |||
| 	0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, | ||||
| 	0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, | ||||
| 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| } | ||||
| }) | ||||
| 
 | ||||
| var ( | ||||
| 	file_google_protobuf_field_mask_proto_rawDescOnce sync.Once | ||||
| 	file_google_protobuf_field_mask_proto_rawDescData = file_google_protobuf_field_mask_proto_rawDesc | ||||
| 	file_google_protobuf_field_mask_proto_rawDescData []byte | ||||
| ) | ||||
| 
 | ||||
| func file_google_protobuf_field_mask_proto_rawDescGZIP() []byte { | ||||
| 	file_google_protobuf_field_mask_proto_rawDescOnce.Do(func() { | ||||
| 		file_google_protobuf_field_mask_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_field_mask_proto_rawDescData) | ||||
| 		file_google_protobuf_field_mask_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_field_mask_proto_rawDesc), len(file_google_protobuf_field_mask_proto_rawDesc))) | ||||
| 	}) | ||||
| 	return file_google_protobuf_field_mask_proto_rawDescData | ||||
| } | ||||
|  | @ -554,7 +555,7 @@ func file_google_protobuf_field_mask_proto_init() { | |||
| 	out := protoimpl.TypeBuilder{ | ||||
| 		File: protoimpl.DescBuilder{ | ||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||
| 			RawDescriptor: file_google_protobuf_field_mask_proto_rawDesc, | ||||
| 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_field_mask_proto_rawDesc), len(file_google_protobuf_field_mask_proto_rawDesc)), | ||||
| 			NumEnums:      0, | ||||
| 			NumMessages:   1, | ||||
| 			NumExtensions: 0, | ||||
|  | @ -565,7 +566,6 @@ func file_google_protobuf_field_mask_proto_init() { | |||
| 		MessageInfos:      file_google_protobuf_field_mask_proto_msgTypes, | ||||
| 	}.Build() | ||||
| 	File_google_protobuf_field_mask_proto = out.File | ||||
| 	file_google_protobuf_field_mask_proto_rawDesc = nil | ||||
| 	file_google_protobuf_field_mask_proto_goTypes = nil | ||||
| 	file_google_protobuf_field_mask_proto_depIdxs = nil | ||||
| } | ||||
|  |  | |||
							
								
								
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/structpb/struct.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -128,6 +128,7 @@ import ( | |||
| 	reflect "reflect" | ||||
| 	sync "sync" | ||||
| 	utf8 "unicode/utf8" | ||||
| 	unsafe "unsafe" | ||||
| ) | ||||
| 
 | ||||
| // `NullValue` is a singleton enumeration to represent the null value for the | ||||
|  | @ -671,7 +672,7 @@ func (x *ListValue) GetValues() []*Value { | |||
| 
 | ||||
| var File_google_protobuf_struct_proto protoreflect.FileDescriptor | ||||
| 
 | ||||
| var file_google_protobuf_struct_proto_rawDesc = []byte{ | ||||
| var file_google_protobuf_struct_proto_rawDesc = string([]byte{ | ||||
| 	0x0a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, | ||||
| 	0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, | ||||
| 	0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x22, | ||||
|  | @ -719,16 +720,16 @@ var file_google_protobuf_struct_proto_rawDesc = []byte{ | |||
| 	0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, | ||||
| 	0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, | ||||
| 	0x6f, 0x33, | ||||
| } | ||||
| }) | ||||
| 
 | ||||
| var ( | ||||
| 	file_google_protobuf_struct_proto_rawDescOnce sync.Once | ||||
| 	file_google_protobuf_struct_proto_rawDescData = file_google_protobuf_struct_proto_rawDesc | ||||
| 	file_google_protobuf_struct_proto_rawDescData []byte | ||||
| ) | ||||
| 
 | ||||
| func file_google_protobuf_struct_proto_rawDescGZIP() []byte { | ||||
| 	file_google_protobuf_struct_proto_rawDescOnce.Do(func() { | ||||
| 		file_google_protobuf_struct_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_struct_proto_rawDescData) | ||||
| 		file_google_protobuf_struct_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_struct_proto_rawDesc), len(file_google_protobuf_struct_proto_rawDesc))) | ||||
| 	}) | ||||
| 	return file_google_protobuf_struct_proto_rawDescData | ||||
| } | ||||
|  | @ -773,7 +774,7 @@ func file_google_protobuf_struct_proto_init() { | |||
| 	out := protoimpl.TypeBuilder{ | ||||
| 		File: protoimpl.DescBuilder{ | ||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||
| 			RawDescriptor: file_google_protobuf_struct_proto_rawDesc, | ||||
| 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_struct_proto_rawDesc), len(file_google_protobuf_struct_proto_rawDesc)), | ||||
| 			NumEnums:      1, | ||||
| 			NumMessages:   4, | ||||
| 			NumExtensions: 0, | ||||
|  | @ -785,7 +786,6 @@ func file_google_protobuf_struct_proto_init() { | |||
| 		MessageInfos:      file_google_protobuf_struct_proto_msgTypes, | ||||
| 	}.Build() | ||||
| 	File_google_protobuf_struct_proto = out.File | ||||
| 	file_google_protobuf_struct_proto_rawDesc = nil | ||||
| 	file_google_protobuf_struct_proto_goTypes = nil | ||||
| 	file_google_protobuf_struct_proto_depIdxs = nil | ||||
| } | ||||
|  |  | |||
							
								
								
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -78,6 +78,7 @@ import ( | |||
| 	reflect "reflect" | ||||
| 	sync "sync" | ||||
| 	time "time" | ||||
| 	unsafe "unsafe" | ||||
| ) | ||||
| 
 | ||||
| // A Timestamp represents a point in time independent of any time zone or local | ||||
|  | @ -297,7 +298,7 @@ func (x *Timestamp) GetNanos() int32 { | |||
| 
 | ||||
| var File_google_protobuf_timestamp_proto protoreflect.FileDescriptor | ||||
| 
 | ||||
| var file_google_protobuf_timestamp_proto_rawDesc = []byte{ | ||||
| var file_google_protobuf_timestamp_proto_rawDesc = string([]byte{ | ||||
| 	0x0a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, | ||||
| 	0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, | ||||
| 	0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, | ||||
|  | @ -314,16 +315,16 @@ var file_google_protobuf_timestamp_proto_rawDesc = []byte{ | |||
| 	0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, | ||||
| 	0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, | ||||
| 	0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| } | ||||
| }) | ||||
| 
 | ||||
| var ( | ||||
| 	file_google_protobuf_timestamp_proto_rawDescOnce sync.Once | ||||
| 	file_google_protobuf_timestamp_proto_rawDescData = file_google_protobuf_timestamp_proto_rawDesc | ||||
| 	file_google_protobuf_timestamp_proto_rawDescData []byte | ||||
| ) | ||||
| 
 | ||||
| func file_google_protobuf_timestamp_proto_rawDescGZIP() []byte { | ||||
| 	file_google_protobuf_timestamp_proto_rawDescOnce.Do(func() { | ||||
| 		file_google_protobuf_timestamp_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_timestamp_proto_rawDescData) | ||||
| 		file_google_protobuf_timestamp_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_timestamp_proto_rawDesc), len(file_google_protobuf_timestamp_proto_rawDesc))) | ||||
| 	}) | ||||
| 	return file_google_protobuf_timestamp_proto_rawDescData | ||||
| } | ||||
|  | @ -349,7 +350,7 @@ func file_google_protobuf_timestamp_proto_init() { | |||
| 	out := protoimpl.TypeBuilder{ | ||||
| 		File: protoimpl.DescBuilder{ | ||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||
| 			RawDescriptor: file_google_protobuf_timestamp_proto_rawDesc, | ||||
| 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_timestamp_proto_rawDesc), len(file_google_protobuf_timestamp_proto_rawDesc)), | ||||
| 			NumEnums:      0, | ||||
| 			NumMessages:   1, | ||||
| 			NumExtensions: 0, | ||||
|  | @ -360,7 +361,6 @@ func file_google_protobuf_timestamp_proto_init() { | |||
| 		MessageInfos:      file_google_protobuf_timestamp_proto_msgTypes, | ||||
| 	}.Build() | ||||
| 	File_google_protobuf_timestamp_proto = out.File | ||||
| 	file_google_protobuf_timestamp_proto_rawDesc = nil | ||||
| 	file_google_protobuf_timestamp_proto_goTypes = nil | ||||
| 	file_google_protobuf_timestamp_proto_depIdxs = nil | ||||
| } | ||||
|  |  | |||
							
								
								
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/google.golang.org/protobuf/types/known/wrapperspb/wrappers.pb.go
									
										
									
										generated
									
									
										vendored
									
									
								
							|  | @ -48,6 +48,7 @@ import ( | |||
| 	protoimpl "google.golang.org/protobuf/runtime/protoimpl" | ||||
| 	reflect "reflect" | ||||
| 	sync "sync" | ||||
| 	unsafe "unsafe" | ||||
| ) | ||||
| 
 | ||||
| // Wrapper message for `double`. | ||||
|  | @ -529,7 +530,7 @@ func (x *BytesValue) GetValue() []byte { | |||
| 
 | ||||
| var File_google_protobuf_wrappers_proto protoreflect.FileDescriptor | ||||
| 
 | ||||
| var file_google_protobuf_wrappers_proto_rawDesc = []byte{ | ||||
| var file_google_protobuf_wrappers_proto_rawDesc = string([]byte{ | ||||
| 	0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, | ||||
| 	0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, | ||||
| 	0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, | ||||
|  | @ -563,16 +564,16 @@ var file_google_protobuf_wrappers_proto_rawDesc = []byte{ | |||
| 	0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, | ||||
| 	0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, | ||||
| 	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, | ||||
| } | ||||
| }) | ||||
| 
 | ||||
| var ( | ||||
| 	file_google_protobuf_wrappers_proto_rawDescOnce sync.Once | ||||
| 	file_google_protobuf_wrappers_proto_rawDescData = file_google_protobuf_wrappers_proto_rawDesc | ||||
| 	file_google_protobuf_wrappers_proto_rawDescData []byte | ||||
| ) | ||||
| 
 | ||||
| func file_google_protobuf_wrappers_proto_rawDescGZIP() []byte { | ||||
| 	file_google_protobuf_wrappers_proto_rawDescOnce.Do(func() { | ||||
| 		file_google_protobuf_wrappers_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_wrappers_proto_rawDescData) | ||||
| 		file_google_protobuf_wrappers_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_wrappers_proto_rawDesc), len(file_google_protobuf_wrappers_proto_rawDesc))) | ||||
| 	}) | ||||
| 	return file_google_protobuf_wrappers_proto_rawDescData | ||||
| } | ||||
|  | @ -606,7 +607,7 @@ func file_google_protobuf_wrappers_proto_init() { | |||
| 	out := protoimpl.TypeBuilder{ | ||||
| 		File: protoimpl.DescBuilder{ | ||||
| 			GoPackagePath: reflect.TypeOf(x{}).PkgPath(), | ||||
| 			RawDescriptor: file_google_protobuf_wrappers_proto_rawDesc, | ||||
| 			RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_wrappers_proto_rawDesc), len(file_google_protobuf_wrappers_proto_rawDesc)), | ||||
| 			NumEnums:      0, | ||||
| 			NumMessages:   9, | ||||
| 			NumExtensions: 0, | ||||
|  | @ -617,7 +618,6 @@ func file_google_protobuf_wrappers_proto_init() { | |||
| 		MessageInfos:      file_google_protobuf_wrappers_proto_msgTypes, | ||||
| 	}.Build() | ||||
| 	File_google_protobuf_wrappers_proto = out.File | ||||
| 	file_google_protobuf_wrappers_proto_rawDesc = nil | ||||
| 	file_google_protobuf_wrappers_proto_goTypes = nil | ||||
| 	file_google_protobuf_wrappers_proto_depIdxs = nil | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue