utils.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package balancer
  2. import (
  3. "fmt"
  4. "net/url"
  5. "sort"
  6. "sync/atomic"
  7. "time"
  8. "google.golang.org/grpc/balancer"
  9. "google.golang.org/grpc/resolver"
  10. )
  11. func scToString(sc balancer.SubConn) string {
  12. return fmt.Sprintf("%p", sc)
  13. }
  14. func scsToStrings(scs map[resolver.Address]balancer.SubConn) (ss []string) {
  15. ss = make([]string, 0, len(scs))
  16. for a, sc := range scs {
  17. ss = append(ss, fmt.Sprintf("%s (%s)", a.Addr, scToString(sc)))
  18. }
  19. sort.Strings(ss)
  20. return ss
  21. }
  22. func addrsToStrings(addrs []resolver.Address) (ss []string) {
  23. ss = make([]string, len(addrs))
  24. for i := range addrs {
  25. ss[i] = addrs[i].Addr
  26. }
  27. sort.Strings(ss)
  28. return ss
  29. }
  30. func epsToAddrs(eps ...string) (addrs []resolver.Address) {
  31. addrs = make([]resolver.Address, 0, len(eps))
  32. for _, ep := range eps {
  33. u, err := url.Parse(ep)
  34. if err != nil {
  35. addrs = append(addrs, resolver.Address{Addr: ep, Type: resolver.Backend})
  36. continue
  37. }
  38. addrs = append(addrs, resolver.Address{Addr: u.Host, Type: resolver.Backend})
  39. }
  40. return addrs
  41. }
  42. var genN = new(uint32)
  43. func genName() string {
  44. now := time.Now().UnixNano()
  45. return fmt.Sprintf("%X%X", now, atomic.AddUint32(genN, 1))
  46. }