-
Notifications
You must be signed in to change notification settings - Fork 2
/
delta.go
65 lines (52 loc) · 1.07 KB
/
delta.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
package kubelinter
import (
"sync"
"github.com/castai/kvisor/cmd/controller/kube"
"github.com/samber/lo"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/types"
)
func newDeltaState() *deltaState {
return &deltaState{
objectMap: make(map[types.UID]kube.Object),
mu: sync.Mutex{},
}
}
type deltaState struct {
objectMap map[types.UID]kube.Object
mu sync.Mutex
}
func (d *deltaState) insert(objs ...kube.Object) {
d.mu.Lock()
defer d.mu.Unlock()
for _, o := range objs {
key := o.GetUID()
if _, ok := d.objectMap[key]; !ok {
d.objectMap[key] = o
}
}
}
func (d *deltaState) upsert(o kube.Object) {
d.mu.Lock()
defer d.mu.Unlock()
// Skip linting pod updates.
switch o.(type) {
case *v1.Pod:
return
}
key := o.GetUID()
d.objectMap[key] = o
}
func (d *deltaState) delete(o kube.Object) {
d.mu.Lock()
defer d.mu.Unlock()
delete(d.objectMap, o.GetUID())
}
func (d *deltaState) flush() []kube.Object {
d.mu.Lock()
defer d.mu.Unlock()
defer func() {
d.objectMap = make(map[types.UID]kube.Object)
}()
return lo.Values(d.objectMap)
}