in clusterloader2/pkg/measurement/common/wait_for_controlled_pods.go [364:410]
func (w *waitForControlledPodsRunningMeasurement) handleObject(oldObj, newObj interface{}) {
var oldRuntimeObj runtime.Object
var newRuntimeObj runtime.Object
var ok bool
oldRuntimeObj, ok = oldObj.(runtime.Object)
if oldObj != nil && !ok {
klog.Errorf("%s: uncastable old object: %v", w, oldObj)
return
}
newRuntimeObj, ok = newObj.(runtime.Object)
if newObj != nil && !ok {
klog.Errorf("%s: uncastable new object: %v", w, newObj)
return
}
// Acquire the lock before defining defered function to ensure it
// will be called under the same lock.
w.lock.Lock()
defer w.lock.Unlock()
defer func() {
if err := w.updateCacheLocked(oldRuntimeObj, newRuntimeObj); err != nil {
klog.Errorf("%s: error when updating cache: %v", w, err)
}
}()
isEqual, err := runtimeobjects.IsEqualRuntimeObjectsSpec(oldRuntimeObj, newRuntimeObj)
if err != nil {
klog.Errorf("%s: comparing specs error: %v", w, err)
return
}
if isEqual {
// Skip updates without changes in the spec.
return
}
if !w.isRunning {
return
}
if err := w.deleteObjectLocked(oldRuntimeObj); err != nil {
klog.Errorf("%s: delete checker error: %v", w, err)
}
if err := w.handleObjectLocked(oldRuntimeObj, newRuntimeObj); err != nil {
klog.Errorf("%s: create checker error: %v", w, err)
}
}