Skip to content

Commit 26b6bbd

Browse files
authored
Merge pull request #48 from kubescape/feature/finalize-jitter
Feature/finalize jitter
2 parents 2c4ab66 + 314c761 commit 26b6bbd

File tree

4 files changed

+11
-6
lines changed

4 files changed

+11
-6
lines changed

main.go

+1
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ func main() {
112112
Tracer: tracer,
113113
Interval: 60, // 60 seconds for now, TODO: make it configurable
114114
FinalizeTime: 0, // 0 seconds to disable finalization
115+
FinalizeJitter: 0, // 0 seconds to disable finalization jitter
115116
K8sConfig: k8sConfig,
116117
RecordStrategy: collector.RecordStrategyOnlyIfNotExists,
117118
NodeName: NodeName,

pkg/collector/collector.go

+2
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ type CollectorManagerConfig struct {
8686
Interval uint64
8787
// Finalize application profiles time
8888
FinalizeTime uint64
89+
// Finalize jitter
90+
FinalizeJitter uint64
8991
// Kubernetes configuration
9092
K8sConfig *rest.Config
9193
// Tracer object

pkg/collector/pod_finalizer.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66
"log"
7+
"math/rand"
78
"sync"
89
"time"
910

@@ -99,7 +100,7 @@ func (cm *CollectorManager) handlePodAddEvent(obj interface{}) {
99100
// Check if pod is ready
100101
if podReady {
101102
// Start finalization timer
102-
cm.startFinalizationTimer(cm.config.FinalizeTime, pod)
103+
cm.startFinalizationTimer(pod)
103104
}
104105
}
105106

@@ -165,15 +166,16 @@ func (cm *CollectorManager) handlePodUpdateEvent(oldObj, newObj interface{}) {
165166
}
166167

167168
// Timer is not running, add finalizer
168-
podState.FinalizationTimer = cm.startFinalizationTimer(cm.config.FinalizeTime, newPod)
169+
podState.FinalizationTimer = cm.startFinalizationTimer(newPod)
169170
} else if !newPodReady && oldPodReady {
170171
cm.stopTimer(&newPod.ObjectMeta)
171172
}
172173
}
173174

174175
// Timer function
175-
func (cm *CollectorManager) startFinalizationTimer(seconds uint64, pod *v1.Pod) *time.Timer {
176-
finalizationTimer := time.NewTimer(time.Duration(seconds) * time.Second)
176+
func (cm *CollectorManager) startFinalizationTimer(pod *v1.Pod) *time.Timer {
177+
jitter := time.Duration(rand.Intn(int(cm.config.FinalizeJitter))) * time.Second
178+
finalizationTimer := time.NewTimer(time.Duration(cm.config.FinalizeTime+uint64(jitter)) * time.Second)
177179

178180
// This goroutine waits for the timer to finish.
179181
go func() {
@@ -257,7 +259,7 @@ func (cm *CollectorManager) MarkPodRecording(pod, namespace string, attach bool)
257259

258260
if podReady {
259261
// Start finalization timer
260-
cm.startFinalizationTimer(cm.config.FinalizeTime, pod)
262+
cm.startFinalizationTimer(pod)
261263
}
262264
}
263265

pkg/watcher/watcher_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func TestWatcherBasic(t *testing.T) {
2222
fakeclient := fake.NewSimpleDynamicClientWithCustomListKinds(runtime.NewScheme(), map[schema.GroupVersionResource]string{
2323
gvr: "TestResourceList",
2424
})
25-
watcher := NewWatcher(fakeclient)
25+
watcher := NewWatcher(fakeclient, false)
2626

2727
_, err := fakeclient.Resource(gvr).Create(context.Background(), testResource, metav1.CreateOptions{})
2828
if err != nil {

0 commit comments

Comments
 (0)