aboutsummaryrefslogtreecommitdiff
path: root/weed/pb/server_address.go
diff options
context:
space:
mode:
authorNico D'Cotta <45274424+Cottand@users.noreply.github.com>2023-08-24 16:08:56 +0200
committerGitHub <noreply@github.com>2023-08-24 07:08:56 -0700
commit796b7508f33916f7fa734e3df2ceea9a80415ade (patch)
tree4bc3913d93e1e328fd8f7275b11452e61d8175d2 /weed/pb/server_address.go
parent5251b4d50ea55c5f0a2fbc60206785bf80775bac (diff)
downloadseaweedfs-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.go37
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 {