|
4 | 4 | "context"
|
5 | 5 | "fmt"
|
6 | 6 | "log"
|
| 7 | + "math/rand" |
7 | 8 | "sync"
|
8 | 9 | "time"
|
9 | 10 |
|
@@ -99,7 +100,7 @@ func (cm *CollectorManager) handlePodAddEvent(obj interface{}) {
|
99 | 100 | // Check if pod is ready
|
100 | 101 | if podReady {
|
101 | 102 | // Start finalization timer
|
102 |
| - cm.startFinalizationTimer(cm.config.FinalizeTime, pod) |
| 103 | + cm.startFinalizationTimer(pod) |
103 | 104 | }
|
104 | 105 | }
|
105 | 106 |
|
@@ -165,15 +166,16 @@ func (cm *CollectorManager) handlePodUpdateEvent(oldObj, newObj interface{}) {
|
165 | 166 | }
|
166 | 167 |
|
167 | 168 | // Timer is not running, add finalizer
|
168 |
| - podState.FinalizationTimer = cm.startFinalizationTimer(cm.config.FinalizeTime, newPod) |
| 169 | + podState.FinalizationTimer = cm.startFinalizationTimer(newPod) |
169 | 170 | } else if !newPodReady && oldPodReady {
|
170 | 171 | cm.stopTimer(&newPod.ObjectMeta)
|
171 | 172 | }
|
172 | 173 | }
|
173 | 174 |
|
174 | 175 | // 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) |
177 | 179 |
|
178 | 180 | // This goroutine waits for the timer to finish.
|
179 | 181 | go func() {
|
@@ -257,7 +259,7 @@ func (cm *CollectorManager) MarkPodRecording(pod, namespace string, attach bool)
|
257 | 259 |
|
258 | 260 | if podReady {
|
259 | 261 | // Start finalization timer
|
260 |
| - cm.startFinalizationTimer(cm.config.FinalizeTime, pod) |
| 262 | + cm.startFinalizationTimer(pod) |
261 | 263 | }
|
262 | 264 | }
|
263 | 265 |
|
|
0 commit comments