From b9947d5808056e61113eac32b94e4ad74c5c158e Mon Sep 17 00:00:00 2001 From: Francesco Romani Date: Wed, 11 Sep 2024 09:42:18 +0200 Subject: [PATCH] deferred: tuned: clarify comments and logs document better the logic about processing edits Signed-off-by: Francesco Romani --- pkg/tuned/controller.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/tuned/controller.go b/pkg/tuned/controller.go index b3eec521e..e60952978 100644 --- a/pkg/tuned/controller.go +++ b/pkg/tuned/controller.go @@ -1032,8 +1032,14 @@ func (c *Controller) changeSyncerTuneD(change Change) (synced bool, err error) { c.daemon.recommendedProfile = change.recommendedProfile klog.V(1).Infof("recommended TuneD profile updated from %q to %q [inplaceUpdate=%v nodeRestart=%v]", prevRecommended, change.recommendedProfile, inplaceUpdate, change.nodeRestart) - if change.deferredMode == util.DeferUpdate && !inplaceUpdate && c.daemon.recoveredRecommendedProfile == change.recommendedProfile { - klog.V(1).Infof("recommended TuneD profile changed; skip TuneD reload [deferred=%v recoveredRecommended=%v]", change.deferredMode, c.daemon.recoveredRecommendedProfile) + // if we get this far, it's either because we detected a node restart or the profile changed (not in-place, thus not-edit). + // So first: if this is a edit (replacing, not in-place), we do further logic. If it's a node restart, we just go ahead and process it. + // Handling then edits. Id we need to defer only edits, and we are re-processing a profile which we already applied, then we must + // not reload tuned, otherwise we're missing the point entirely about deferred updates. + // See the test "Profile deferred when applied should trigger changes when applied fist, then deferred when edited, if tuned restart should be kept deferred" + // See the commit 3655f22656d4a3aa9f471099305dcd78a9c80320 + if !inplaceUpdate && change.deferredMode == util.DeferUpdate && c.daemon.recoveredRecommendedProfile == change.recommendedProfile { + klog.V(1).Infof("reprocessing profile already in effect; this seems a daemon reload. Skip TuneD reload [deferred=%v recoveredRecommended=%v]", change.deferredMode, c.daemon.recoveredRecommendedProfile) // Reset because we need only once the first time we process the TuneD k8s object. Let's avoid stale data. c.daemon.recoveredRecommendedProfile = "" } else { @@ -1042,7 +1048,7 @@ func (c *Controller) changeSyncerTuneD(change Change) (synced bool, err error) { } } else if util.IsImmediateUpdate(change.deferredMode) && (c.daemon.status&scDeferred != 0) { klog.V(1).Infof("detected deferred update changed to immediate after object update") - changeRecommend = true + reload = true } else { klog.V(1).Infof("recommended profile (%s) matches current configuration", c.daemon.recommendedProfile) // We do not need to reload the TuneD daemon, however, someone may have tampered with the k8s Profile status for this node.