mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-01 00:23:56 +08:00 
			
		
		
		
	vendor: initial vendor
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
		
							
								
								
									
										171
									
								
								vendor/google.golang.org/grpc/balancer/base/balancer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										171
									
								
								vendor/google.golang.org/grpc/balancer/base/balancer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,171 @@ | ||||
| /* | ||||
|  * | ||||
|  * Copyright 2017 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 base | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
|  | ||||
| 	"google.golang.org/grpc/balancer" | ||||
| 	"google.golang.org/grpc/connectivity" | ||||
| 	"google.golang.org/grpc/grpclog" | ||||
| 	"google.golang.org/grpc/resolver" | ||||
| ) | ||||
|  | ||||
| type baseBuilder struct { | ||||
| 	name          string | ||||
| 	pickerBuilder PickerBuilder | ||||
| 	config        Config | ||||
| } | ||||
|  | ||||
| func (bb *baseBuilder) Build(cc balancer.ClientConn, opt balancer.BuildOptions) balancer.Balancer { | ||||
| 	return &baseBalancer{ | ||||
| 		cc:            cc, | ||||
| 		pickerBuilder: bb.pickerBuilder, | ||||
|  | ||||
| 		subConns: make(map[resolver.Address]balancer.SubConn), | ||||
| 		scStates: make(map[balancer.SubConn]connectivity.State), | ||||
| 		csEvltr:  &balancer.ConnectivityStateEvaluator{}, | ||||
| 		// Initialize picker to a picker that always return | ||||
| 		// ErrNoSubConnAvailable, because when state of a SubConn changes, we | ||||
| 		// may call UpdateBalancerState with this picker. | ||||
| 		picker: NewErrPicker(balancer.ErrNoSubConnAvailable), | ||||
| 		config: bb.config, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (bb *baseBuilder) Name() string { | ||||
| 	return bb.name | ||||
| } | ||||
|  | ||||
| type baseBalancer struct { | ||||
| 	cc            balancer.ClientConn | ||||
| 	pickerBuilder PickerBuilder | ||||
|  | ||||
| 	csEvltr *balancer.ConnectivityStateEvaluator | ||||
| 	state   connectivity.State | ||||
|  | ||||
| 	subConns map[resolver.Address]balancer.SubConn | ||||
| 	scStates map[balancer.SubConn]connectivity.State | ||||
| 	picker   balancer.Picker | ||||
| 	config   Config | ||||
| } | ||||
|  | ||||
| func (b *baseBalancer) HandleResolvedAddrs(addrs []resolver.Address, err error) { | ||||
| 	if err != nil { | ||||
| 		grpclog.Infof("base.baseBalancer: HandleResolvedAddrs called with error %v", err) | ||||
| 		return | ||||
| 	} | ||||
| 	grpclog.Infoln("base.baseBalancer: got new resolved addresses: ", addrs) | ||||
| 	// addrsSet is the set converted from addrs, it's used for quick lookup of an address. | ||||
| 	addrsSet := make(map[resolver.Address]struct{}) | ||||
| 	for _, a := range addrs { | ||||
| 		addrsSet[a] = struct{}{} | ||||
| 		if _, ok := b.subConns[a]; !ok { | ||||
| 			// a is a new address (not existing in b.subConns). | ||||
| 			sc, err := b.cc.NewSubConn([]resolver.Address{a}, balancer.NewSubConnOptions{HealthCheckEnabled: b.config.HealthCheck}) | ||||
| 			if err != nil { | ||||
| 				grpclog.Warningf("base.baseBalancer: failed to create new SubConn: %v", err) | ||||
| 				continue | ||||
| 			} | ||||
| 			b.subConns[a] = sc | ||||
| 			b.scStates[sc] = connectivity.Idle | ||||
| 			sc.Connect() | ||||
| 		} | ||||
| 	} | ||||
| 	for a, sc := range b.subConns { | ||||
| 		// a was removed by resolver. | ||||
| 		if _, ok := addrsSet[a]; !ok { | ||||
| 			b.cc.RemoveSubConn(sc) | ||||
| 			delete(b.subConns, a) | ||||
| 			// Keep the state of this sc in b.scStates until sc's state becomes Shutdown. | ||||
| 			// The entry will be deleted in HandleSubConnStateChange. | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // regeneratePicker takes a snapshot of the balancer, and generates a picker | ||||
| // from it. The picker is | ||||
| //  - errPicker with ErrTransientFailure if the balancer is in TransientFailure, | ||||
| //  - built by the pickerBuilder with all READY SubConns otherwise. | ||||
| func (b *baseBalancer) regeneratePicker() { | ||||
| 	if b.state == connectivity.TransientFailure { | ||||
| 		b.picker = NewErrPicker(balancer.ErrTransientFailure) | ||||
| 		return | ||||
| 	} | ||||
| 	readySCs := make(map[resolver.Address]balancer.SubConn) | ||||
|  | ||||
| 	// Filter out all ready SCs from full subConn map. | ||||
| 	for addr, sc := range b.subConns { | ||||
| 		if st, ok := b.scStates[sc]; ok && st == connectivity.Ready { | ||||
| 			readySCs[addr] = sc | ||||
| 		} | ||||
| 	} | ||||
| 	b.picker = b.pickerBuilder.Build(readySCs) | ||||
| } | ||||
|  | ||||
| func (b *baseBalancer) HandleSubConnStateChange(sc balancer.SubConn, s connectivity.State) { | ||||
| 	grpclog.Infof("base.baseBalancer: handle SubConn state change: %p, %v", sc, s) | ||||
| 	oldS, ok := b.scStates[sc] | ||||
| 	if !ok { | ||||
| 		grpclog.Infof("base.baseBalancer: got state changes for an unknown SubConn: %p, %v", sc, s) | ||||
| 		return | ||||
| 	} | ||||
| 	b.scStates[sc] = s | ||||
| 	switch s { | ||||
| 	case connectivity.Idle: | ||||
| 		sc.Connect() | ||||
| 	case connectivity.Shutdown: | ||||
| 		// When an address was removed by resolver, b called RemoveSubConn but | ||||
| 		// kept the sc's state in scStates. Remove state for this sc here. | ||||
| 		delete(b.scStates, sc) | ||||
| 	} | ||||
|  | ||||
| 	oldAggrState := b.state | ||||
| 	b.state = b.csEvltr.RecordTransition(oldS, s) | ||||
|  | ||||
| 	// Regenerate picker when one of the following happens: | ||||
| 	//  - this sc became ready from not-ready | ||||
| 	//  - this sc became not-ready from ready | ||||
| 	//  - the aggregated state of balancer became TransientFailure from non-TransientFailure | ||||
| 	//  - the aggregated state of balancer became non-TransientFailure from TransientFailure | ||||
| 	if (s == connectivity.Ready) != (oldS == connectivity.Ready) || | ||||
| 		(b.state == connectivity.TransientFailure) != (oldAggrState == connectivity.TransientFailure) { | ||||
| 		b.regeneratePicker() | ||||
| 	} | ||||
|  | ||||
| 	b.cc.UpdateBalancerState(b.state, b.picker) | ||||
| } | ||||
|  | ||||
| // Close is a nop because base balancer doesn't have internal state to clean up, | ||||
| // and it doesn't need to call RemoveSubConn for the SubConns. | ||||
| func (b *baseBalancer) Close() { | ||||
| } | ||||
|  | ||||
| // NewErrPicker returns a picker that always returns err on Pick(). | ||||
| func NewErrPicker(err error) balancer.Picker { | ||||
| 	return &errPicker{err: err} | ||||
| } | ||||
|  | ||||
| type errPicker struct { | ||||
| 	err error // Pick() always returns this err. | ||||
| } | ||||
|  | ||||
| func (p *errPicker) Pick(ctx context.Context, opts balancer.PickOptions) (balancer.SubConn, func(balancer.DoneInfo), error) { | ||||
| 	return nil, nil, p.err | ||||
| } | ||||
							
								
								
									
										64
									
								
								vendor/google.golang.org/grpc/balancer/base/base.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								vendor/google.golang.org/grpc/balancer/base/base.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | ||||
| /* | ||||
|  * | ||||
|  * Copyright 2017 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 base defines a balancer base that can be used to build balancers with | ||||
| // different picking algorithms. | ||||
| // | ||||
| // The base balancer creates a new SubConn for each resolved address. The | ||||
| // provided picker will only be notified about READY SubConns. | ||||
| // | ||||
| // This package is the base of round_robin balancer, its purpose is to be used | ||||
| // to build round_robin like balancers with complex picking algorithms. | ||||
| // Balancers with more complicated logic should try to implement a balancer | ||||
| // builder from scratch. | ||||
| // | ||||
| // All APIs in this package are experimental. | ||||
| package base | ||||
|  | ||||
| import ( | ||||
| 	"google.golang.org/grpc/balancer" | ||||
| 	"google.golang.org/grpc/resolver" | ||||
| ) | ||||
|  | ||||
| // PickerBuilder creates balancer.Picker. | ||||
| type PickerBuilder interface { | ||||
| 	// Build takes a slice of ready SubConns, and returns a picker that will be | ||||
| 	// used by gRPC to pick a SubConn. | ||||
| 	Build(readySCs map[resolver.Address]balancer.SubConn) balancer.Picker | ||||
| } | ||||
|  | ||||
| // NewBalancerBuilder returns a balancer builder. The balancers | ||||
| // built by this builder will use the picker builder to build pickers. | ||||
| func NewBalancerBuilder(name string, pb PickerBuilder) balancer.Builder { | ||||
| 	return NewBalancerBuilderWithConfig(name, pb, Config{}) | ||||
| } | ||||
|  | ||||
| // Config contains the config info about the base balancer builder. | ||||
| type Config struct { | ||||
| 	// HealthCheck indicates whether health checking should be enabled for this specific balancer. | ||||
| 	HealthCheck bool | ||||
| } | ||||
|  | ||||
| // NewBalancerBuilderWithConfig returns a base balancer builder configured by the provided config. | ||||
| func NewBalancerBuilderWithConfig(name string, pb PickerBuilder, config Config) balancer.Builder { | ||||
| 	return &baseBuilder{ | ||||
| 		name:          name, | ||||
| 		pickerBuilder: pb, | ||||
| 		config:        config, | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Tonis Tiigi
					Tonis Tiigi