MCPcopy Create free account
hub / github.com/datastax/cql-proxy / buildNodes

Method buildNodes

proxy/proxy.go:387–471  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

385)
386
387func (p *Proxy) buildNodes() (err error) {
388 numPeers := len(p.config.Peers)
389 nodes := make([]*node, 0, numPeers+1)
390
391 var localAddr *net.IPAddr
392 if len(p.config.RPCAddr) > 0 {
393 localAddr, err = net.ResolveIPAddr("ip", p.config.RPCAddr)
394 if err != nil {
395 return fmt.Errorf("invalid RPC address: %w", err)
396 }
397 } else if numPeers > 0 {
398 return errors.New("peers provided, but RPC address is not set")
399 }
400
401 localDC := p.config.DC
402 if len(localDC) == 0 {
403 localDC = p.cluster.Info.LocalDC
404 p.logger.Info("no local DC configured using DC from the first successful contact point",
405 zap.String("dc", localDC))
406 }
407
408 var localTokens []string
409 calculateTokens := false
410 if len(p.config.Tokens) > 0 {
411 localTokens = p.config.Tokens
412 } else {
413 calculateTokens = true
414 localTokens = []string{strconv.FormatInt(math.MinInt64, 10)}
415 }
416
417 p.localNode = &node{
418 addr: localAddr,
419 dc: localDC,
420 tokens: localTokens,
421 }
422 nodes = append(nodes, p.localNode)
423
424 for i, peer := range p.config.Peers {
425 if len(peer.RPCAddr) == 0 {
426 return fmt.Errorf("no 'rpc-address' provided for peer #%d", i+1)
427 }
428 addr, err := net.ResolveIPAddr("ip", peer.RPCAddr)
429 if err != nil {
430 return fmt.Errorf("invalid peer address: %w", err)
431 }
432 if compareIPAddr(localAddr, addr) == 0 {
433 p.logger.Info("ignoring local address in peers configuration", zap.Stringer("localAddr", localAddr))
434 continue
435 }
436 dc := peer.DC
437 if len(dc) == 0 {
438 dc = localDC
439 }
440 if !calculateTokens && len(peer.Tokens) == 0 {
441 return errors.New("tokens must be provided for all peer proxies if tokens are provided for this proxy")
442 }
443 nodes = append(nodes, &node{
444 addr: addr,

Callers 1

ConnectMethod · 0.95

Calls 3

compareIPAddrFunction · 0.85
StringMethod · 0.45
AddMethod · 0.45

Tested by

no test coverage detected