-
Notifications
You must be signed in to change notification settings - Fork 13
/
ha_membership.go
52 lines (43 loc) · 1.16 KB
/
ha_membership.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
package kubernetes
import (
"github.com/Trendyol/go-dcp/config"
"github.com/Trendyol/go-dcp/helpers"
"github.com/Trendyol/go-dcp/logger"
"github.com/Trendyol/go-dcp/membership"
"github.com/asaskevich/EventBus"
)
type haMembership struct {
info *membership.Model
infoChan chan *membership.Model
bus EventBus.Bus
}
func (h *haMembership) GetInfo() *membership.Model {
if h.info != nil {
return h.info
}
return <-h.infoChan
}
func (h *haMembership) Close() {
err := h.bus.Unsubscribe(helpers.MembershipChangedBusEventName, h.membershipChangedListener)
if err != nil {
logger.Log.Error("error while unsubscribe: %v", err)
}
}
func (h *haMembership) membershipChangedListener(model *membership.Model) {
h.info = model
go func() {
h.infoChan <- model
}()
}
func NewHaMembership(_ *config.Dcp, bus EventBus.Bus) membership.Membership {
ham := &haMembership{
infoChan: make(chan *membership.Model),
bus: bus,
}
err := bus.SubscribeAsync(helpers.MembershipChangedBusEventName, ham.membershipChangedListener, true)
if err != nil {
logger.Log.Error("error while subscribe membership changed event, err: %v", err)
panic(err)
}
return ham
}