-
Notifications
You must be signed in to change notification settings - Fork 1
/
event.go
85 lines (71 loc) · 1.79 KB
/
event.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
package event
import (
"github.com/deepfabric/prophet/metadata"
"github.com/deepfabric/prophet/pb/rpcpb"
)
var (
// EventInit event init
EventInit uint32 = 1 << 1
// EventResource event resource event
EventResource uint32 = 1 << 2
// EventContainer event container create
EventContainer uint32 = 1 << 3
// EventFlagAll all event
EventFlagAll = 0xffffffff
)
// Snapshot cache snapshot
type Snapshot struct {
Resources []metadata.Resource
Containers []metadata.Container
Leaders map[uint64]uint64
}
// MatchEvent returns the flag has the target event
func MatchEvent(event, flag uint32) bool {
return event == 0 || event&flag != 0
}
// NewInitEvent create init event
func NewInitEvent(snap Snapshot) (*rpcpb.InitEventData, error) {
resp := &rpcpb.InitEventData{}
for _, v := range snap.Containers {
data, err := v.Marshal()
if err != nil {
return nil, err
}
resp.Containers = append(resp.Containers, data)
}
for _, v := range snap.Resources {
data, err := v.Marshal()
if err != nil {
return nil, err
}
resp.Resources = append(resp.Resources, data)
resp.Leaders = append(resp.Leaders, snap.Leaders[v.ID()])
}
return resp, nil
}
// NewResourceEvent create resource event
func NewResourceEvent(target metadata.Resource, leaderID uint64) rpcpb.EventNotify {
value, err := target.Marshal()
if err != nil {
return rpcpb.EventNotify{}
}
return rpcpb.EventNotify{
Type: EventResource,
ResourceEvent: &rpcpb.ResourceEventData{
Data: value,
},
}
}
// NewContainerEvent create container event
func NewContainerEvent(target metadata.Container) rpcpb.EventNotify {
value, err := target.Marshal()
if err != nil {
return rpcpb.EventNotify{}
}
return rpcpb.EventNotify{
Type: EventContainer,
ContainerEvent: &rpcpb.ContainerEventData{
Data: value,
},
}
}