Skip to content

Commit aa4ddb9

Browse files
author
OpenShift Bot
authored
Merge pull request #10648 from DirectXMan12/bug/idling-cache-deleted
Merged by openshift-bot
2 parents 66ead38 + 5d00a3b commit aa4ddb9

File tree

2 files changed

+45
-16
lines changed

2 files changed

+45
-16
lines changed

pkg/cmd/cli/cmd/idle.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -548,7 +548,7 @@ func (o *IdleOptions) RunIdle(f *clientcmd.Factory) error {
548548
for scaleRef, svcName := range byScalable {
549549
obj, scale, err := scaleAnnotater.GetObjectWithScale(svcName.Namespace, scaleRef)
550550
if err != nil {
551-
fmt.Fprintf(o.errOut, "error: unable to get scale for %s %s/%s, not marking that scalable as idled\n", scaleRef.Kind, svcName.Namespace, scaleRef.Name)
551+
fmt.Fprintf(o.errOut, "error: unable to get scale for %s %s/%s, not marking that scalable as idled: %v\n", scaleRef.Kind, svcName.Namespace, scaleRef.Name, err)
552552
svcInfo := byService[svcName]
553553
delete(svcInfo.scaleRefs, scaleRef)
554554
hadError = true
@@ -625,7 +625,7 @@ func (o *IdleOptions) RunIdle(f *clientcmd.Factory) error {
625625
if !o.dryRun {
626626
info.scale.Spec.Replicas = 0
627627
if err := scaleAnnotater.UpdateObjectScale(info.namespace, scaleRef, info.obj, info.scale); err != nil {
628-
fmt.Fprintf(o.errOut, "error: unable to scale %s %s/%s to 0, but still listed as target for unidling\n", scaleRef.Kind, info.namespace, scaleRef.Name)
628+
fmt.Fprintf(o.errOut, "error: unable to scale %s %s/%s to 0, but still listed as target for unidling: %v\n", scaleRef.Kind, info.namespace, scaleRef.Name, err)
629629
hadError = true
630630
continue
631631
}

pkg/unidling/controller/controller.go

+43-14
Original file line numberDiff line numberDiff line change
@@ -104,20 +104,10 @@ func NewUnidlingController(scaleNS kextclient.ScalesGetter, endptsNS kclient.End
104104
&kapi.Event{},
105105
resyncPeriod,
106106
framework.ResourceEventHandlerFuncs{
107-
AddFunc: func(obj interface{}) {
108-
event := obj.(*kapi.Event)
109-
unidlingController.enqueueEvent(event)
110-
},
111-
UpdateFunc: func(oldObj interface{}, newObj interface{}) {
112-
// retrigger on new last-seen times
113-
event := newObj.(*kapi.Event)
114-
unidlingController.enqueueEvent(event)
115-
},
116-
DeleteFunc: func(obj interface{}) {
117-
// this is just to clean up our cache of the last seen times
118-
event := obj.(*kapi.Event)
119-
unidlingController.clearEventFromCache(event)
120-
},
107+
AddFunc: unidlingController.addEvent,
108+
UpdateFunc: unidlingController.updateEvent,
109+
// this is just to clean up our cache of the last seen times
110+
DeleteFunc: unidlingController.checkAndClearFromCache,
121111
},
122112
)
123113

@@ -126,6 +116,45 @@ func NewUnidlingController(scaleNS kextclient.ScalesGetter, endptsNS kclient.End
126116
return unidlingController
127117
}
128118

119+
func (c *UnidlingController) addEvent(obj interface{}) {
120+
evt, ok := obj.(*kapi.Event)
121+
if !ok {
122+
utilruntime.HandleError(fmt.Errorf("got non-Event object in event action: %v", obj))
123+
return
124+
}
125+
126+
c.enqueueEvent(evt)
127+
}
128+
129+
func (c *UnidlingController) updateEvent(oldObj, newObj interface{}) {
130+
evt, ok := newObj.(*kapi.Event)
131+
if !ok {
132+
utilruntime.HandleError(fmt.Errorf("got non-Event object in event action: %v", newObj))
133+
return
134+
}
135+
136+
c.enqueueEvent(evt)
137+
}
138+
139+
func (c *UnidlingController) checkAndClearFromCache(obj interface{}) {
140+
evt, objIsEvent := obj.(*kapi.Event)
141+
if !objIsEvent {
142+
tombstone, objIsTombstone := obj.(cache.DeletedFinalStateUnknown)
143+
if !objIsTombstone {
144+
utilruntime.HandleError(fmt.Errorf("got non-event, non-tombstone object in event action: %v", obj))
145+
return
146+
}
147+
148+
evt, objIsEvent = tombstone.Obj.(*kapi.Event)
149+
if !objIsEvent {
150+
utilruntime.HandleError(fmt.Errorf("tombstone contained object that is not an Event in event action: %v", obj))
151+
return
152+
}
153+
}
154+
155+
c.clearEventFromCache(evt)
156+
}
157+
129158
// clearEventFromCache removes the entry for the given event from the lastFiredCache.
130159
func (c *UnidlingController) clearEventFromCache(event *kapi.Event) {
131160
if event.Reason != unidlingapi.NeedPodsReason {

0 commit comments

Comments
 (0)