检查API节点地址
(apiNodeAddrs []*serverconfigs.NetworkAddressConfig)
| 1181 | |
| 1182 | // 检查API节点地址 |
| 1183 | func (this *Node) changeAPINodeAddrs(apiNodeAddrs []*serverconfigs.NetworkAddressConfig) { |
| 1184 | var addrs = []string{} |
| 1185 | for _, addr := range apiNodeAddrs { |
| 1186 | err := addr.Init() |
| 1187 | if err != nil { |
| 1188 | remotelogs.Error("NODE", "changeAPINodeAddrs: validate api node address '"+configutils.QuoteIP(addr.Host)+":"+addr.PortRange+"' failed: "+err.Error()) |
| 1189 | } else { |
| 1190 | addrs = append(addrs, addr.FullAddresses()...) |
| 1191 | } |
| 1192 | } |
| 1193 | sort.Strings(addrs) |
| 1194 | |
| 1195 | if utils.EqualStrings(this.lastAPINodeAddrs, addrs) { |
| 1196 | return |
| 1197 | } |
| 1198 | |
| 1199 | this.lastAPINodeAddrs = addrs |
| 1200 | |
| 1201 | config, err := configs.LoadAPIConfig() |
| 1202 | if err != nil { |
| 1203 | remotelogs.Error("NODE", "changeAPINodeAddrs: "+err.Error()) |
| 1204 | return |
| 1205 | } |
| 1206 | if config == nil { |
| 1207 | return |
| 1208 | } |
| 1209 | var oldEndpoints = config.RPCEndpoints |
| 1210 | |
| 1211 | rpcClient, err := rpc.SharedRPC() |
| 1212 | if err != nil { |
| 1213 | return |
| 1214 | } |
| 1215 | if len(addrs) > 0 { |
| 1216 | this.lastAPINodeVersion++ |
| 1217 | var v = this.lastAPINodeVersion |
| 1218 | |
| 1219 | // 异步检测,防止阻塞 |
| 1220 | go func(v int64) { |
| 1221 | // 测试新的API节点地址 |
| 1222 | if rpcClient.TestEndpoints(addrs) { |
| 1223 | config.RPCEndpoints = addrs |
| 1224 | } else { |
| 1225 | config.RPCEndpoints = oldEndpoints |
| 1226 | this.lastAPINodeAddrs = nil // 恢复为空,以便于下次更新重试 |
| 1227 | } |
| 1228 | |
| 1229 | // 检查测试中间有无新的变更 |
| 1230 | if v != this.lastAPINodeVersion { |
| 1231 | return |
| 1232 | } |
| 1233 | |
| 1234 | err = rpcClient.UpdateConfig(config) |
| 1235 | if err != nil { |
| 1236 | remotelogs.Error("NODE", "changeAPINodeAddrs: update rpc config failed: "+err.Error()) |
| 1237 | } |
| 1238 | }(v) |
| 1239 | return |
| 1240 | } |
no test coverage detected