-
Notifications
You must be signed in to change notification settings - Fork 24
/
service-discovery.go
70 lines (57 loc) · 1.9 KB
/
service-discovery.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package distcache
import (
"errors"
stdlog "log"
"github.com/fluxninja/aperture/v2/pkg/log"
"github.com/fluxninja/aperture/v2/pkg/peers"
)
// ServiceDiscovery holds fields needed to implement Olric's Service Discovery interface.
type ServiceDiscovery struct {
discovery *peers.PeerDiscovery
addr string
serviceName string
}
// Initialize initializes the plugin: registers some internal data structures, clients etc.
// This method is not implemented.
func (s *ServiceDiscovery) Initialize() error {
return nil
}
// SetLogger sets an appropriate logger.
// This method is not implemented.
func (s *ServiceDiscovery) SetLogger(l *stdlog.Logger) {
}
// SetConfig registers plugin configuration.
// This method is not implemented.
func (s *ServiceDiscovery) SetConfig(cfg map[string]interface{}) error {
return nil
}
// DiscoverPeers returns a list of known Olric nodes.
func (s *ServiceDiscovery) DiscoverPeers() ([]string, error) {
peers := []string{}
peerInfos := s.discovery.GetPeers()
for _, peerInfo := range peerInfos.Peers {
if olricMemberlistAddr, ok := peerInfo.Services[s.serviceName]; ok {
log.Info().Msgf("DiscoverPeers peer: %s", olricMemberlistAddr)
peers = append(peers, olricMemberlistAddr)
}
}
if len(peers) == 0 {
return nil, errors.New("no peers found")
}
return peers, nil
}
// Register registers this node to a service discovery directory.
// This method is not implemented.
func (s *ServiceDiscovery) Register() error {
s.discovery.RegisterService(s.serviceName, s.addr)
return nil
}
// Deregister removes this node from a service discovery directory.
// This method is not implemented.
func (s *ServiceDiscovery) Deregister() error {
s.discovery.DeregisterService(s.serviceName)
return nil
}
// Close stops underlying goroutines, if there is any. It should be a blocking call.
// This method is not implemented.
func (s *ServiceDiscovery) Close() error { return nil }