8
8
clientv3 "go.etcd.io/etcd/client/v3"
9
9
"google.golang.org/grpc/resolver"
10
10
"learning_tools/etcd/register"
11
+ "log"
11
12
"sync"
12
13
)
13
14
@@ -43,30 +44,33 @@ func (d *Discovery) Build(target resolver.Target, cc resolver.ClientConn, opts r
43
44
return nil , err
44
45
}
45
46
for _ , v := range res .Kvs {
46
- d .AddNode (v .Key , v .Value )
47
+ if err = d .AddNode (v .Key , v .Value ); err != nil {
48
+ log .Println (err )
49
+ continue
50
+ }
47
51
}
48
52
go func (dd * Discovery ) {
49
53
dd .watcher ()
50
54
}(d )
51
55
return d , err
52
56
}
53
57
54
- func (d * Discovery ) AddNode (key , val []byte ) {
58
+ func (d * Discovery ) AddNode (key , val []byte ) error {
55
59
var data = new (register.Options )
56
60
err := json .Unmarshal (val , data )
57
61
if err != nil {
58
- return
62
+ return err
59
63
}
60
64
addr := resolver.Address {Addr : data .Node .Address }
61
65
addr = SetNodeInfo (addr , data )
62
66
d .Node .Store (string (key ), addr )
63
- d .cc .UpdateState (resolver.State {Addresses : d .GetAddress ()})
67
+ return d .cc .UpdateState (resolver.State {Addresses : d .GetAddress ()})
64
68
}
65
69
66
- func (d * Discovery ) DelNode (key []byte ) {
70
+ func (d * Discovery ) DelNode (key []byte ) error {
67
71
keyStr := string (key )
68
72
d .Node .Delete (keyStr )
69
- d .cc .UpdateState (resolver.State {Addresses : d .GetAddress ()})
73
+ return d .cc .UpdateState (resolver.State {Addresses : d .GetAddress ()})
70
74
}
71
75
72
76
func (d * Discovery ) GetAddress () []resolver.Address {
@@ -89,9 +93,13 @@ func (d *Discovery) watcher() {
89
93
for _ , ev := range res .Events {
90
94
switch ev .Type {
91
95
case mvccpb .PUT : //新增或修改
92
- d .AddNode (ev .Kv .Key , ev .Kv .Value )
96
+ if err := d .AddNode (ev .Kv .Key , ev .Kv .Value ); err != nil {
97
+ log .Println (err )
98
+ }
93
99
case mvccpb .DELETE : //删除
94
- d .DelNode (ev .Kv .Key )
100
+ if err := d .DelNode (ev .Kv .Key ); err != nil {
101
+ log .Println (err )
102
+ }
95
103
}
96
104
}
97
105
}
0 commit comments