Home | History | Annotate | Download | only in base
      1 /*
      2  *
      3  * Copyright 2017 gRPC authors.
      4  *
      5  * Licensed under the Apache License, Version 2.0 (the "License");
      6  * you may not use this file except in compliance with the License.
      7  * You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  *
     17  */
     18 
     19 // Package base defines a balancer base that can be used to build balancers with
     20 // different picking algorithms.
     21 //
     22 // The base balancer creates a new SubConn for each resolved address. The
     23 // provided picker will only be notified about READY SubConns.
     24 //
     25 // This package is the base of round_robin balancer, its purpose is to be used
     26 // to build round_robin like balancers with complex picking algorithms.
     27 // Balancers with more complicated logic should try to implement a balancer
     28 // builder from scratch.
     29 //
     30 // All APIs in this package are experimental.
     31 package base
     32 
     33 import (
     34 	"google.golang.org/grpc/balancer"
     35 	"google.golang.org/grpc/resolver"
     36 )
     37 
     38 // PickerBuilder creates balancer.Picker.
     39 type PickerBuilder interface {
     40 	// Build takes a slice of ready SubConns, and returns a picker that will be
     41 	// used by gRPC to pick a SubConn.
     42 	Build(readySCs map[resolver.Address]balancer.SubConn) balancer.Picker
     43 }
     44 
     45 // NewBalancerBuilder returns a balancer builder. The balancers
     46 // built by this builder will use the picker builder to build pickers.
     47 func NewBalancerBuilder(name string, pb PickerBuilder) balancer.Builder {
     48 	return &baseBuilder{
     49 		name:          name,
     50 		pickerBuilder: pb,
     51 	}
     52 }
     53