mirror of https://github.com/grpc/grpc-go.git
				
				
				
			fix some other issues
This commit is contained in:
		
							parent
							
								
									ac49e6fc55
								
							
						
					
					
						commit
						766825a8b4
					
				| 
						 | 
				
			
			@ -70,6 +70,7 @@ type addrInfo struct {
 | 
			
		|||
type balancer struct {
 | 
			
		||||
	r      naming.Resolver
 | 
			
		||||
	mu     sync.Mutex
 | 
			
		||||
	w      naming.Watcher
 | 
			
		||||
	addrCh chan []grpc.Address
 | 
			
		||||
	rbs    []remoteBalancerInfo
 | 
			
		||||
	addrs  []addrInfo
 | 
			
		||||
| 
						 | 
				
			
			@ -86,6 +87,9 @@ func (b *balancer) watchAddrUpdates(w naming.Watcher, ch chan remoteBalancerInfo
 | 
			
		|||
	var bAddr remoteBalancerInfo
 | 
			
		||||
	b.mu.Lock()
 | 
			
		||||
	defer b.mu.Unlock()
 | 
			
		||||
	if b.done {
 | 
			
		||||
		return grpc.ErrClientConnClosing
 | 
			
		||||
	}
 | 
			
		||||
	if len(b.rbs) > 0 {
 | 
			
		||||
		bAddr = b.rbs[0]
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -120,10 +124,6 @@ func (b *balancer) watchAddrUpdates(w naming.Watcher, ch chan remoteBalancerInfo
 | 
			
		|||
			grpclog.Println("Unknown update.Op ", update.Op)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if b.done {
 | 
			
		||||
		close(ch)
 | 
			
		||||
		return grpc.ErrClientConnClosing
 | 
			
		||||
	}
 | 
			
		||||
	// TODO: Fall back to the basic round-robin load balancing if the resulting address is
 | 
			
		||||
	// not a load balancer.
 | 
			
		||||
	if len(b.rbs) > 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -160,7 +160,6 @@ func (b *balancer) processServerList(l *lbpb.ServerList) {
 | 
			
		|||
	b.mu.Lock()
 | 
			
		||||
	defer b.mu.Unlock()
 | 
			
		||||
	if b.done {
 | 
			
		||||
		close(b.addrCh)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if len(sl) > 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -235,18 +234,20 @@ func (b *balancer) Start(target string, config grpc.BalancerConfig) error {
 | 
			
		|||
		return grpc.ErrClientConnClosing
 | 
			
		||||
	}
 | 
			
		||||
	b.addrCh = make(chan []grpc.Address)
 | 
			
		||||
	b.mu.Unlock()
 | 
			
		||||
	w, err := b.r.Resolve(target)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		b.mu.Unlock()
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	b.w = w
 | 
			
		||||
	b.mu.Unlock()
 | 
			
		||||
	balancerAddrCh := make(chan remoteBalancerInfo, 1)
 | 
			
		||||
	// Spawn a goroutine to monitor the name resolution of remote load balancer.
 | 
			
		||||
	go func() {
 | 
			
		||||
		for {
 | 
			
		||||
			if err := b.watchAddrUpdates(w, balancerAddrCh); err != nil {
 | 
			
		||||
				w.Close()
 | 
			
		||||
				grpclog.Printf("grpc: the naming watcher stops working due to %v.\n", err)
 | 
			
		||||
				close(balancerAddrCh)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
| 
						 | 
				
			
			@ -432,5 +433,11 @@ func (b *balancer) Close() error {
 | 
			
		|||
	if b.waitCh != nil {
 | 
			
		||||
		close(b.waitCh)
 | 
			
		||||
	}
 | 
			
		||||
	if b.addrCh != nil {
 | 
			
		||||
		close(b.addrCh)
 | 
			
		||||
	}
 | 
			
		||||
	if b.w != nil {
 | 
			
		||||
		b.w.Close()
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue