Skip to content

Commit 055ada2

Browse files
committed
fix: load balance logic
1 parent 7bd525d commit 055ada2

File tree

5 files changed

+73
-4
lines changed

5 files changed

+73
-4
lines changed

gmicro/app/app.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,11 @@ func (a *App) buildInstance() (*registry.ServiceInstance, error) {
198198
//if a.opts.registrar == nil {
199199
// a.opts.registrar = a.opts.defaultRegistrar()
200200
//}
201+
//这的地方的 Metadata 有一个功能是 加权负载均衡用的
201202
return &registry.ServiceInstance{
202203
ID: a.opts.id,
203204
Name: a.opts.name,
204205
Endpoints: endpoints,
206+
//Metadata: map[string]string{"weight": "20"},
205207
}, nil
206208
}

gmicro/server/rpcserver/resolver/direct/builder.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func init() {
1616
NewBuilder creates a directBuilder which is used to factory direct resolvers.
1717
example:
1818
19-
direct://<authority>/127.0.0.1:9000
19+
direct://<authority>/127.0.0.1:9000,127.0.0.2:9000
2020
2121
到达这样一个目的
2222
*/

gmicro/server/rpcserver/selector/node/ewma/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ func (n *Node) Pick() selector.DoneFunc {
166166
success = 0
167167
}
168168
} else if errors.Is(context.DeadlineExceeded, di.Err) || errors.Is(context.Canceled, di.Err) ||
169-
errors.FromGrpcErrorCode(di.Err) == int(codes.Unavailable) || errors.FromGrpcErrorCode(di.Err) == int(codes.DeadlineExceeded) {
169+
errors.FromGrpcErrorCode(di.Err) == codes.Unavailable || errors.FromGrpcErrorCode(di.Err) == codes.DeadlineExceeded {
170170
success = 0
171171
}
172172
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package wrr
2+
3+
//
4+
//import (
5+
// "context"
6+
// "reflect"
7+
// "testing"
8+
//
9+
// "github.com/CoderI421/gframework/gmicro/server/rpcserver/registry"
10+
// "github.com/CoderI421/gframework/gmicro/server/rpcserver/selector"
11+
// "github.com/CoderI421/gframework/gmicro/server/rpcserver/selector/filter"
12+
//)
13+
//
14+
//func TestWrr(t *testing.T) {
15+
// wrr := New()
16+
// var nodes []selector.Node
17+
// nodes = append(nodes, selector.NewNode(
18+
// "http",
19+
// "127.0.0.1:8080",
20+
// &registry.ServiceInstance{
21+
// ID: "127.0.0.1:8080",
22+
// Version: "v2.0.0",
23+
// Metadata: map[string]string{"weight": "10"},
24+
// }))
25+
// nodes = append(nodes, selector.NewNode(
26+
// "http",
27+
// "127.0.0.1:9090",
28+
// &registry.ServiceInstance{
29+
// ID: "127.0.0.1:9090",
30+
// Version: "v2.0.0",
31+
// Metadata: map[string]string{"weight": "20"},
32+
// }))
33+
// wrr.Apply(nodes)
34+
// var count1, count2 int
35+
// for i := 0; i < 90; i++ {
36+
// n, done, err := wrr.Select(context.Background(), selector.WithNodeFilter(filter.Version("v2.0.0")))
37+
// if err != nil {
38+
// t.Errorf("expect no error, got %v", err)
39+
// }
40+
// if done == nil {
41+
// t.Errorf("expect done callback, got nil")
42+
// }
43+
// if n == nil {
44+
// t.Errorf("expect node, got nil")
45+
// }
46+
// done(context.Background(), selector.DoneInfo{})
47+
// if n.Address() == "127.0.0.1:8080" {
48+
// count1++
49+
// } else if n.Address() == "127.0.0.1:9090" {
50+
// count2++
51+
// }
52+
// }
53+
// if !reflect.DeepEqual(count1, 30) {
54+
// t.Errorf("expect 30, got %d", count1)
55+
// }
56+
// if !reflect.DeepEqual(count2, 60) {
57+
// t.Errorf("expect 60, got %d", count2)
58+
// }
59+
//}
60+
//
61+
//func TestEmpty(t *testing.T) {
62+
// b := &Balancer{}
63+
// _, _, err := b.Pick(context.Background(), []selector.WeightedNode{})
64+
// if err == nil {
65+
// t.Errorf("expect no error, got %v", err)
66+
// }
67+
//}

pkg/errors/errors.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ func FromGrpcError(e error) error {
159159
}
160160
}
161161

162-
func FromGrpcErrorCode(e error) int {
162+
func FromGrpcErrorCode(e error) gCode.Code {
163163
if e == nil {
164164
return 100002
165165
}
@@ -169,7 +169,7 @@ func FromGrpcErrorCode(e error) int {
169169
return 100002
170170
}
171171

172-
return int(st.Code())
172+
return st.Code()
173173
}
174174

175175
func ToGrpcError(e error) error {

0 commit comments

Comments
 (0)