8
8
"errors"
9
9
"fmt"
10
10
"maps"
11
+ "slices"
11
12
"strings"
12
13
"sync"
13
14
"time"
@@ -22,8 +23,9 @@ import (
22
23
const DefaultLimiterTimeout = 2 * time .Minute
23
24
24
25
type handlerTracker struct {
25
- cancel context.CancelFunc
26
- updates chan <- * sdk.ScalingPolicy
26
+ policyType string
27
+ cancel context.CancelFunc
28
+ updates chan <- * sdk.ScalingPolicy
27
29
}
28
30
29
31
type targetGetter interface {
@@ -250,8 +252,9 @@ func (m *Manager) processMessageAndUpdateHandlers(ctx context.Context, message I
250
252
upCh := make (chan * sdk.ScalingPolicy , 1 )
251
253
252
254
nht := & handlerTracker {
253
- updates : upCh ,
254
- cancel : handlerCancel ,
255
+ updates : upCh ,
256
+ cancel : handlerCancel ,
257
+ policyType : updatedPolicy .Type ,
255
258
}
256
259
257
260
m .log .Debug ("creating new policy handler" ,
@@ -304,21 +307,13 @@ func (m *Manager) stopHandlers() {
304
307
for source , handlers := range m .handlers {
305
308
for id := range handlers {
306
309
m .stopHandler (source , id )
310
+ delete (handlers , id )
307
311
}
312
+
308
313
delete (m .handlers , source )
309
314
}
310
315
}
311
316
312
- func (m * Manager ) addHandlerTracker (source SourceName , id PolicyID , nht * handlerTracker ) {
313
- m .handlersLock .Lock ()
314
- if m .handlers [source ] == nil {
315
- m .handlers [source ] = make (map [PolicyID ]* handlerTracker )
316
- }
317
-
318
- m.handlers [source ][id ] = nht
319
- m .handlersLock .Unlock ()
320
- }
321
-
322
317
// stopHandler stops a handler and removes it from the manager's internal
323
318
// state storage.
324
319
//
@@ -332,6 +327,30 @@ func (m *Manager) stopHandler(source SourceName, id PolicyID) {
332
327
close (ht .updates )
333
328
}
334
329
330
+ func (m * Manager ) StopHandlersByType (typesToStop ... string ) {
331
+ m .handlersLock .Lock ()
332
+ defer m .handlersLock .Unlock ()
333
+
334
+ for source , handlers := range m .handlers {
335
+ for id , tracker := range handlers {
336
+ if slices .Contains (typesToStop , tracker .policyType ) {
337
+ m .stopHandler (source , id )
338
+ delete (handlers , id )
339
+ }
340
+ }
341
+ }
342
+ }
343
+
344
+ func (m * Manager ) addHandlerTracker (source SourceName , id PolicyID , nht * handlerTracker ) {
345
+ m .handlersLock .Lock ()
346
+ if m .handlers [source ] == nil {
347
+ m .handlers [source ] = make (map [PolicyID ]* handlerTracker )
348
+ }
349
+
350
+ m.handlers [source ][id ] = nht
351
+ m .handlersLock .Unlock ()
352
+ }
353
+
335
354
// ReloadSources triggers a reload of all the policy sources.
336
355
func (m * Manager ) ReloadSources () {
337
356
0 commit comments