base.go raw

   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 returns a picker that will be used by gRPC to pick a SubConn.
  41  	Build(info PickerBuildInfo) balancer.Picker
  42  }
  43  
  44  // PickerBuildInfo contains information needed by the picker builder to
  45  // construct a picker.
  46  type PickerBuildInfo struct {
  47  	// ReadySCs is a map from all ready SubConns to the Addresses used to
  48  	// create them.
  49  	ReadySCs map[balancer.SubConn]SubConnInfo
  50  }
  51  
  52  // SubConnInfo contains information about a SubConn created by the base
  53  // balancer.
  54  type SubConnInfo struct {
  55  	Address resolver.Address // the address used to create this SubConn
  56  }
  57  
  58  // Config contains the config info about the base balancer builder.
  59  type Config struct {
  60  	// HealthCheck indicates whether health checking should be enabled for this specific balancer.
  61  	HealthCheck bool
  62  }
  63  
  64  // NewBalancerBuilder returns a base balancer builder configured by the provided config.
  65  func NewBalancerBuilder(name string, pb PickerBuilder, config Config) balancer.Builder {
  66  	return &baseBuilder{
  67  		name:          name,
  68  		pickerBuilder: pb,
  69  		config:        config,
  70  	}
  71  }
  72