diff options
| author | Nico D'Cotta <45274424+Cottand@users.noreply.github.com> | 2023-08-24 16:08:56 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-24 07:08:56 -0700 |
| commit | 796b7508f33916f7fa734e3df2ceea9a80415ade (patch) | |
| tree | 4bc3913d93e1e328fd8f7275b11452e61d8175d2 /weed/pb/server_address.go | |
| parent | 5251b4d50ea55c5f0a2fbc60206785bf80775bac (diff) | |
| download | seaweedfs-796b7508f33916f7fa734e3df2ceea9a80415ade.tar.xz seaweedfs-796b7508f33916f7fa734e3df2ceea9a80415ade.zip | |
Implement SRV lookups for filer (#4767)
Diffstat (limited to 'weed/pb/server_address.go')
| -rw-r--r-- | weed/pb/server_address.go | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/weed/pb/server_address.go b/weed/pb/server_address.go index 56d0dba24..a0aa79ae4 100644 --- a/weed/pb/server_address.go +++ b/weed/pb/server_address.go @@ -11,6 +11,7 @@ import ( type ServerAddress string type ServerAddresses string +type ServerSrvAddress string func NewServerAddress(host string, port int, grpcPort int) ServerAddress { if grpcPort == 0 || grpcPort == port+10000 { @@ -76,6 +77,42 @@ func (sa ServerAddress) ToGrpcAddress() string { return ServerToGrpcAddress(string(sa)) } +// LookUp may return an error for some records along with successful lookups - make sure you do not +// discard `addresses` even if `err == nil` +func (r ServerSrvAddress) LookUp() (addresses []ServerAddress, err error) { + _, records, lookupErr := net.LookupSRV("", "", string(r)) + if lookupErr != nil { + err = fmt.Errorf("lookup SRV address %s: %v", r, lookupErr) + } + for _, srv := range records { + address := fmt.Sprintf("%s:%d", srv.Target, srv.Port) + addresses = append(addresses, ServerAddress(address)) + } + return +} + +// ToServiceDiscovery expects one of: a comma-separated list of ip:port, like +// +// 10.0.0.1:9999,10.0.0.2:24:9999 +// +// OR an SRV Record prepended with 'dnssrv+', like: +// +// dnssrv+_grpc._tcp.master.consul +// dnssrv+_grpc._tcp.headless.default.svc.cluster.local +// dnssrv+seaweed-master.master.consul +func (sa ServerAddresses) ToServiceDiscovery() (sd *ServerDiscovery) { + sd = &ServerDiscovery{} + prefix := "dnssrv+" + if strings.HasPrefix(string(sa), prefix) { + trimmed := strings.TrimPrefix(string(sa), prefix) + srv := ServerSrvAddress(trimmed) + sd.srvRecord = &srv + } else { + sd.list = sa.ToAddresses() + } + return +} + func (sa ServerAddresses) ToAddresses() (addresses []ServerAddress) { parts := strings.Split(string(sa), ",") for _, address := range parts { |
