|
@@ -73,45 +73,46 @@ func (mgr *ServerManager) RegisterServer() error {
|
|
|
prefix := fmt.Sprintf("%s%s/", EtcdServersPrefix, mgr.serverName)
|
|
|
var (
|
|
|
addr string
|
|
|
- key string
|
|
|
+ keys []string
|
|
|
)
|
|
|
-
|
|
|
if serverInstance.tcpsvr != nil {
|
|
|
addr := os.Getenv(EnvTCPProxy)
|
|
|
if addr == "" {
|
|
|
addr, _ = fixHostIp(*confTCPHost)
|
|
|
}
|
|
|
- key = fmt.Sprintf("%s%s/%s", prefix, FlagTCPHost, addr)
|
|
|
+ keys = append(keys, fmt.Sprintf("%s%s/%s", prefix, FlagTCPHost, addr))
|
|
|
}
|
|
|
if serverInstance.rpcsvr != nil {
|
|
|
addr, _ := fixHostIp(*confRPCHost)
|
|
|
- key = fmt.Sprintf("%s%s/%s", prefix, FlagRPCHost, addr)
|
|
|
+ keys = append(keys, fmt.Sprintf("%s%s/%s", prefix, FlagRPCHost, addr))
|
|
|
}
|
|
|
if serverInstance.udpsvr != nil {
|
|
|
addr := os.Getenv(EnvUDPProxy)
|
|
|
if addr == "" {
|
|
|
addr, _ = fixHostIp(*confUDPHost)
|
|
|
}
|
|
|
- key = fmt.Sprintf("%s%s/%s", prefix, FlagUDPHost, addr)
|
|
|
+ keys = append(keys, fmt.Sprintf("%s%s/%s", prefix, FlagUDPHost, addr))
|
|
|
}
|
|
|
if serverInstance.httpsvr != nil {
|
|
|
addr := os.Getenv(EnvHTTPProxy)
|
|
|
if addr == "" {
|
|
|
addr, _ = fixHostIp(*confHTTPHost)
|
|
|
}
|
|
|
- key = fmt.Sprintf("%s%s/%s", prefix, FlagHTTPHost, addr)
|
|
|
- }
|
|
|
- _, err = mgr.cli.Put(ctx, key, addr, clientv3.WithLease(resp.ID))
|
|
|
- if err != nil {
|
|
|
- return nil
|
|
|
+ keys = append(keys, fmt.Sprintf("%s%s/%s", prefix, FlagHTTPHost, addr))
|
|
|
}
|
|
|
- mgr.leaseId = resp.ID
|
|
|
- leaseRespChan, err := mgr.cli.KeepAlive(ctx, resp.ID)
|
|
|
- if err != nil {
|
|
|
- return err
|
|
|
+ for _, key := range keys {
|
|
|
+ _, err = mgr.cli.Put(ctx, key, addr, clientv3.WithLease(resp.ID))
|
|
|
+ if err != nil {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+ mgr.leaseId = resp.ID
|
|
|
+ leaseRespChan, err := mgr.cli.KeepAlive(ctx, resp.ID)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ mgr.keepAliveChan = leaseRespChan
|
|
|
}
|
|
|
- mgr.keepAliveChan = leaseRespChan
|
|
|
- // print common key info
|
|
|
+ // print common keys info
|
|
|
Log.Infof("RegisterServer is done. leaseId is %v\n", mgr.leaseId)
|
|
|
go func() {
|
|
|
for leaseResp := range mgr.keepAliveChan {
|
|
@@ -126,21 +127,24 @@ func (mgr *ServerManager) UpdateServerHosts() error {
|
|
|
if serverInstance == nil {
|
|
|
return errorf(errServerNotInit)
|
|
|
}
|
|
|
-
|
|
|
prefix := EtcdServersPrefix
|
|
|
response, err := mgr.cli.Get(context.Background(), prefix, clientv3.WithPrefix())
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- servers := make(map[string](map[string][]string))
|
|
|
-
|
|
|
- for _, server := range response.Kvs {
|
|
|
- name := strings.Split(string(server.Key), "/")[EtcdServersPrefixCnt+1]
|
|
|
- servers[name] = make(map[string][]string)
|
|
|
- host := strings.Split(string(server.Key), "/")[EtcdServersPrefixCnt+2]
|
|
|
- servers[name][host] = []string{}
|
|
|
- addr := strings.Split(string(server.Key), "/")[EtcdServersPrefixCnt+3]
|
|
|
+ servers := make(map[string]map[string][]string)
|
|
|
+ for _, kvs := range response.Kvs {
|
|
|
+ key := string(kvs.Key)
|
|
|
+ name := strings.Split(key, "/")[EtcdServersPrefixCnt+1]
|
|
|
+ host := strings.Split(key, "/")[EtcdServersPrefixCnt+2]
|
|
|
+ addr := strings.Split(key, "/")[EtcdServersPrefixCnt+3]
|
|
|
+ if _, ok := servers[name]; !ok {
|
|
|
+ servers[name] = make(map[string][]string)
|
|
|
+ }
|
|
|
+ if _, ok := servers[name][host];!ok {
|
|
|
+ servers[name][host] = []string{}
|
|
|
+ }
|
|
|
servers[name][host] = append(servers[name][host], addr)
|
|
|
}
|
|
|
mgr.mapServers = servers
|