]>
Commit | Line | Data |
---|---|---|
107c1cdb ND |
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 NewBalancerBuilderWithConfig(name, pb, Config{}) | |
49 | } | |
50 | ||
51 | // Config contains the config info about the base balancer builder. | |
52 | type Config struct { | |
53 | // HealthCheck indicates whether health checking should be enabled for this specific balancer. | |
54 | HealthCheck bool | |
55 | } | |
56 | ||
57 | // NewBalancerBuilderWithConfig returns a base balancer builder configured by the provided config. | |
58 | func NewBalancerBuilderWithConfig(name string, pb PickerBuilder, config Config) balancer.Builder { | |
59 | return &baseBuilder{ | |
60 | name: name, | |
61 | pickerBuilder: pb, | |
62 | config: config, | |
63 | } | |
64 | } |