-
Notifications
You must be signed in to change notification settings - Fork 13
/
discovery.go
111 lines (97 loc) · 2.67 KB
/
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package cluster
import (
golog "log"
"strings"
"github.com/buraksezer/olric/pkg/service_discovery"
"github.com/pkg/errors"
"github.com/tochemey/goakt/discovery"
)
// discoveryProvider wraps the Cluster engine discovery and implements
// service_discovery.ServiceDiscovery
type discoveryProvider struct {
provider discovery.Provider
log *golog.Logger
}
// enforce compilation error
var _ service_discovery.ServiceDiscovery = &discoveryProvider{}
// Initialize implementation
func (d *discoveryProvider) Initialize() error {
// check whether the provider is set or not
if d.provider == nil {
return errors.New("discovery provider is not set")
}
// call the initialize method of the provider
if err := d.provider.Initialize(); err != nil {
if !errors.Is(err, discovery.ErrAlreadyInitialized) {
return err
}
}
return nil
}
// SetConfig implementation
func (d *discoveryProvider) SetConfig(c map[string]any) error {
// check whether the id is provided or not
id, ok := c["id"]
if !ok {
return errors.New("discovery provider id is not set")
}
// validate the id
idVal := id.(string)
if !strings.EqualFold(idVal, d.provider.ID()) {
return errors.New("invalid discovery provider id")
}
// let us extract the options
options, ok := c["options"]
if !ok {
return errors.New("discovery provider options is not set")
}
// let us cast the options to disco Meta
meta := options.(discovery.Config)
// call the underlying provider
if err := d.provider.SetConfig(meta); err != nil {
if !errors.Is(err, discovery.ErrAlreadyInitialized) {
return err
}
}
return nil
}
// SetLogger implementation
func (d *discoveryProvider) SetLogger(l *golog.Logger) {
d.log = l
}
// Register implementation
func (d *discoveryProvider) Register() error {
// check whether the provider is set or not
if d.provider == nil {
return errors.New("discovery provider is not set")
}
// call the provider register
if err := d.provider.Register(); err != nil {
if !errors.Is(err, discovery.ErrAlreadyRegistered) {
return err
}
}
return nil
}
// Deregister implementation
func (d *discoveryProvider) Deregister() error {
// check whether the provider is set or not
if d.provider == nil {
return errors.New("discovery provider is not set")
}
// call the provider de-register
return d.provider.Deregister()
}
// DiscoverPeers implementation
func (d *discoveryProvider) DiscoverPeers() ([]string, error) {
// check whether the provider is set or not
if d.provider == nil {
return nil, errors.New("discovery provider is not set")
}
// call the provider discover peers
return d.provider.DiscoverPeers()
}
// Close implementation
func (d *discoveryProvider) Close() error {
return nil
}