MCPcopy Index your code
hub / github.com/GoEdgeLab/EdgeNode / changeAPINodeAddrs

Method changeAPINodeAddrs

internal/nodes/node.go:1183–1246  ·  view source on GitHub ↗

检查API节点地址

(apiNodeAddrs []*serverconfigs.NetworkAddressConfig)

Source from the content-addressed store, hash-verified

1181
1182// 检查API节点地址
1183func (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 }

Callers 1

onReloadMethod · 0.95

Calls 8

ErrorFunction · 0.92
EqualStringsFunction · 0.92
LoadAPIConfigFunction · 0.92
SharedRPCFunction · 0.92
TestEndpointsMethod · 0.80
UpdateConfigMethod · 0.80
InitMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected