Skip to content

Commit 3825a76

Browse files
authored
fix: stop locking when reading from triggers
We can read lock when registering a trigger to see if that trigger needs to be added, and only lock when the trigger needs to be added. This will allow for more bandwidth when processing objects. Signed-off-by: Donnie Adams <[email protected]>
1 parent ecccd81 commit 3825a76

File tree

1 file changed

+27
-5
lines changed

1 file changed

+27
-5
lines changed

pkg/router/trigger.go

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,31 +57,53 @@ func (m *triggers) invokeTriggers(req Request) {
5757
}
5858

5959
func (m *triggers) register(gvk schema.GroupVersionKind, key string, targetGVK schema.GroupVersionKind, mr objectMatcher) {
60-
m.lock.Lock()
61-
defer m.lock.Unlock()
60+
matcherKey := mr.String()
61+
if !m.shouldAddTrigger(gvk, key, targetGVK, matcherKey) {
62+
return
63+
}
6264

6365
target := enqueueTarget{
6466
key: key,
6567
gvk: gvk,
6668
}
69+
70+
m.lock.Lock()
71+
defer m.lock.Unlock()
72+
6773
matchers, ok := m.matchers[groupVersionKind{targetGVK}]
6874
if !ok {
69-
matchers = map[enqueueTarget]map[string]objectMatcher{}
75+
matchers = make(map[enqueueTarget]map[string]objectMatcher, 1)
7076
m.matchers[groupVersionKind{targetGVK}] = matchers
7177
}
7278

73-
matcherKey := mr.String()
7479
if _, ok := matchers[target][matcherKey]; ok {
7580
return
7681
}
7782

7883
if matchers[target] == nil {
79-
matchers[target] = map[string]objectMatcher{}
84+
matchers[target] = make(map[string]objectMatcher, 1)
8085
}
8186

8287
matchers[target][matcherKey] = mr
8388
}
8489

90+
func (m *triggers) shouldAddTrigger(gvk schema.GroupVersionKind, key string, targetGVK schema.GroupVersionKind, matcherKey string) bool {
91+
m.lock.RLock()
92+
defer m.lock.RUnlock()
93+
94+
target := enqueueTarget{
95+
key: key,
96+
gvk: gvk,
97+
}
98+
matchers, ok := m.matchers[groupVersionKind{targetGVK}]
99+
if !ok {
100+
return true
101+
}
102+
103+
_, ok = matchers[target][matcherKey]
104+
return !ok
105+
}
106+
85107
func (m *triggers) Trigger(req Request) {
86108
if !req.FromTrigger {
87109
m.invokeTriggers(req)

0 commit comments

Comments
 (0)