...
1
18
19
20 package stub
21
22 import (
23 "encoding/json"
24 "fmt"
25
26 "google.golang.org/grpc/balancer"
27 "google.golang.org/grpc/serviceconfig"
28 )
29
30
31
32
33 type BalancerFuncs struct {
34
35
36 Init func(*BalancerData)
37
38 ParseConfig func(json.RawMessage) (serviceconfig.LoadBalancingConfig, error)
39
40 UpdateClientConnState func(*BalancerData, balancer.ClientConnState) error
41 ResolverError func(*BalancerData, error)
42 Close func(*BalancerData)
43 ExitIdle func(*BalancerData)
44 }
45
46
47 type BalancerData struct {
48
49 ClientConn balancer.ClientConn
50
51 BuildOptions balancer.BuildOptions
52
53 Data any
54 }
55
56 type bal struct {
57 bf BalancerFuncs
58 bd *BalancerData
59 }
60
61 func (b *bal) UpdateClientConnState(c balancer.ClientConnState) error {
62 if b.bf.UpdateClientConnState != nil {
63 return b.bf.UpdateClientConnState(b.bd, c)
64 }
65 return nil
66 }
67
68 func (b *bal) ResolverError(e error) {
69 if b.bf.ResolverError != nil {
70 b.bf.ResolverError(b.bd, e)
71 }
72 }
73
74 func (b *bal) UpdateSubConnState(sc balancer.SubConn, scs balancer.SubConnState) {
75 panic(fmt.Sprintf("UpdateSubConnState(%v, %+v) called unexpectedly", sc, scs))
76 }
77
78 func (b *bal) Close() {
79 if b.bf.Close != nil {
80 b.bf.Close(b.bd)
81 }
82 }
83
84 func (b *bal) ExitIdle() {
85 if b.bf.ExitIdle != nil {
86 b.bf.ExitIdle(b.bd)
87 }
88 }
89
90 type bb struct {
91 name string
92 bf BalancerFuncs
93 }
94
95 func (bb bb) Build(cc balancer.ClientConn, opts balancer.BuildOptions) balancer.Balancer {
96 b := &bal{bf: bb.bf, bd: &BalancerData{ClientConn: cc, BuildOptions: opts}}
97 if b.bf.Init != nil {
98 b.bf.Init(b.bd)
99 }
100 return b
101 }
102
103 func (bb bb) Name() string { return bb.name }
104
105 func (bb bb) ParseConfig(lbCfg json.RawMessage) (serviceconfig.LoadBalancingConfig, error) {
106 if bb.bf.ParseConfig != nil {
107 return bb.bf.ParseConfig(lbCfg)
108 }
109 return nil, nil
110 }
111
112
113
114 func Register(name string, bf BalancerFuncs) {
115 balancer.Register(bb{name: name, bf: bf})
116 }
117
View as plain text