From 1e01358ea280b6681a3bede7730d61afb1575690 Mon Sep 17 00:00:00 2001 From: vinay kulkarni Date: Wed, 8 Mar 2023 03:28:46 +0000 Subject: [PATCH] Initialize pod resource allocation checkpoint manager to noop This avoids accidentally introducing null pointer access if manager functions were called outside of InPlacePodVerticalScaling feature gate. --- pkg/kubelet/status/state/state_checkpoint.go | 47 ++++++++++++++++++++ pkg/kubelet/status/status_manager.go | 3 ++ 2 files changed, 50 insertions(+) diff --git a/pkg/kubelet/status/state/state_checkpoint.go b/pkg/kubelet/status/state/state_checkpoint.go index 844d0649b4c..f0f5b2b7696 100644 --- a/pkg/kubelet/status/state/state_checkpoint.go +++ b/pkg/kubelet/status/state/state_checkpoint.go @@ -177,3 +177,50 @@ func (sc *stateCheckpoint) ClearState() error { sc.cache.ClearState() return sc.storeState() } + +type noopStateCheckpoint struct{} + +// NewNoopStateCheckpoint creates a dummy state checkpoint manager +func NewNoopStateCheckpoint() State { + return &noopStateCheckpoint{} +} + +func (sc *noopStateCheckpoint) GetContainerResourceAllocation(_ string, _ string) (v1.ResourceList, bool) { + return nil, false +} + +func (sc *noopStateCheckpoint) GetPodResourceAllocation() PodResourceAllocation { + return nil +} + +func (sc *noopStateCheckpoint) GetPodResizeStatus(_ string) (v1.PodResizeStatus, bool) { + return "", false +} + +func (sc *noopStateCheckpoint) GetResizeStatus() PodResizeStatus { + return nil +} + +func (sc *noopStateCheckpoint) SetContainerResourceAllocation(_ string, _ string, _ v1.ResourceList) error { + return nil +} + +func (sc *noopStateCheckpoint) SetPodResourceAllocation(_ PodResourceAllocation) error { + return nil +} + +func (sc *noopStateCheckpoint) SetPodResizeStatus(_ string, _ v1.PodResizeStatus) error { + return nil +} + +func (sc *noopStateCheckpoint) SetResizeStatus(_ PodResizeStatus) error { + return nil +} + +func (sc *noopStateCheckpoint) Delete(_ string, _ string) error { + return nil +} + +func (sc *noopStateCheckpoint) ClearState() error { + return nil +} diff --git a/pkg/kubelet/status/status_manager.go b/pkg/kubelet/status/status_manager.go index f036a05b1fe..fa975c9490d 100644 --- a/pkg/kubelet/status/status_manager.go +++ b/pkg/kubelet/status/status_manager.go @@ -186,6 +186,9 @@ func isPodStatusByKubeletEqual(oldStatus, status *v1.PodStatus) bool { } func (m *manager) Start() { + // Initialize m.state to no-op state checkpoint manager + m.state = state.NewNoopStateCheckpoint() + // Create pod allocation checkpoint manager even if client is nil so as to allow local get/set of AllocatedResources & Resize if utilfeature.DefaultFeatureGate.Enabled(features.InPlacePodVerticalScaling) { stateImpl, err := state.NewStateCheckpoint(m.stateFileDirectory, podStatusManagerStateFile)