From e06abce75f112f84b3881efd0ed3480b2b1ce31c Mon Sep 17 00:00:00 2001 From: Swati Sehgal Date: Tue, 28 Oct 2025 20:59:54 +0000 Subject: [PATCH] node: mm-mgr: Refactor to use logger parameter instead of context This change completes the contextual logging migration for the memory manager by updating the Manager interface and all implementations to accept logr.Logger parameters instead of context.Context. Key changes: - Update Manager interface methods to accept logr.Logger: * AddContainer, RemoveContainer, GetMemoryNUMANodes * GetAllocatableMemory, GetMemory (removed context entirely) - Update Policy interface methods to accept logr.Logger instead of context.Context - Pass logger to NewManager() and policy constructors (NewPolicyStatic, NewPolicyNone, NewPolicyBestEffort) - Update internal_container_lifecycle to use klog.TODO() when calling memory manager methods - Update fake manager to accept and use logger parameter - Update all test code to pass logger instead of context This aligns with the contextual logging migration pattern where: - Functions that need a logger accept logr.Logger parameter directly - Logger is passed from the boundary (e.g., Start()) down to implementation - klog.TODO() is used temporarily in call sites where logger is not yet available - Context is only used where truly needed (e.g., Start() method) This follows the same pattern as recent migrations in: - pkg/kubelet/cm/topologymanager (#134174) - pkg/kubelet/cm/devicemanager (#134293) - pkg/kubelet/cm/cpumanager (#125912) Related to the initial memory manager contextual logging work in #130727. Signed-off-by: Swati Sehgal --- pkg/kubelet/cm/container_manager_linux.go | 6 +- pkg/kubelet/cm/container_manager_stub.go | 2 +- pkg/kubelet/cm/container_manager_windows.go | 4 +- pkg/kubelet/cm/fake_container_manager.go | 2 +- .../cm/internal_container_lifecycle.go | 4 +- .../cm/internal_container_lifecycle_linux.go | 4 +- .../cm/internal_container_lifecycle_test.go | 3 +- .../internal_container_lifecycle_windows.go | 3 +- .../cm/memorymanager/fake_memory_manager.go | 36 +++++------ .../cm/memorymanager/memory_manager.go | 59 +++++++++---------- .../cm/memorymanager/memory_manager_test.go | 51 ++++++++-------- pkg/kubelet/cm/memorymanager/policy.go | 15 +++-- .../cm/memorymanager/policy_best_effort.go | 31 +++++----- pkg/kubelet/cm/memorymanager/policy_none.go | 17 +++--- pkg/kubelet/cm/memorymanager/policy_static.go | 36 +++++------ .../cm/memorymanager/policy_static_test.go | 36 +++++------ 16 files changed, 143 insertions(+), 166 deletions(-) diff --git a/pkg/kubelet/cm/container_manager_linux.go b/pkg/kubelet/cm/container_manager_linux.go index 27cf99b88dd..c61067fffab 100644 --- a/pkg/kubelet/cm/container_manager_linux.go +++ b/pkg/kubelet/cm/container_manager_linux.go @@ -344,7 +344,7 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I cm.topologyManager.AddHintProvider(logger, cm.cpuManager) cm.memoryManager, err = memorymanager.NewManager( - context.TODO(), + logger, nodeConfig.MemoryManagerPolicy, machineInfo, cm.GetNodeAllocatableReservation(), @@ -997,7 +997,7 @@ func (cm *containerManagerImpl) GetMemory(podUID, containerName string) []*podre // This is tempporary as part of migration of memory manager to Contextual logging. // Direct context to be passed when container manager is migrated. - return containerMemoryFromBlock(cm.memoryManager.GetMemory(context.TODO(), podUID, containerName)) + return containerMemoryFromBlock(cm.memoryManager.GetMemory(podUID, containerName)) } func (cm *containerManagerImpl) GetAllocatableMemory() []*podresourcesapi.ContainerMemory { @@ -1007,7 +1007,7 @@ func (cm *containerManagerImpl) GetAllocatableMemory() []*podresourcesapi.Contai // This is tempporary as part of migration of memory manager to Contextual logging. // Direct context to be passed when container manager is migrated. - return containerMemoryFromBlock(cm.memoryManager.GetAllocatableMemory(context.TODO())) + return containerMemoryFromBlock(cm.memoryManager.GetAllocatableMemory()) } func (cm *containerManagerImpl) GetDynamicResources(pod *v1.Pod, container *v1.Container) []*podresourcesapi.DynamicResource { diff --git a/pkg/kubelet/cm/container_manager_stub.go b/pkg/kubelet/cm/container_manager_stub.go index f4cff89c60d..53d884acaa2 100644 --- a/pkg/kubelet/cm/container_manager_stub.go +++ b/pkg/kubelet/cm/container_manager_stub.go @@ -51,7 +51,7 @@ var _ ContainerManager = &containerManagerStub{} func (cm *containerManagerStub) Start(ctx context.Context, _ *v1.Node, _ ActivePodsFunc, _ GetNodeFunc, _ config.SourcesReady, _ status.PodStatusProvider, _ internalapi.RuntimeService, _ bool) error { klog.V(2).InfoS("Starting stub container manager") - cm.memoryManager = memorymanager.NewFakeManager(ctx) + cm.memoryManager = memorymanager.NewFakeManager(klog.FromContext(ctx)) cm.cpuManager = cpumanager.NewFakeManager(klog.FromContext(ctx)) return nil } diff --git a/pkg/kubelet/cm/container_manager_windows.go b/pkg/kubelet/cm/container_manager_windows.go index daa591d7853..b98020df108 100644 --- a/pkg/kubelet/cm/container_manager_windows.go +++ b/pkg/kubelet/cm/container_manager_windows.go @@ -141,7 +141,7 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I cm.topologyManager = topologymanager.NewFakeManager() cm.cpuManager = cpumanager.NewFakeManager(klog.TODO()) - cm.memoryManager = memorymanager.NewFakeManager(context.TODO()) + cm.memoryManager = memorymanager.NewFakeManager(klog.TODO()) if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.WindowsCPUAndMemoryAffinity) { klog.InfoS("Creating topology manager") @@ -174,7 +174,7 @@ func NewContainerManager(mountUtil mount.Interface, cadvisorInterface cadvisor.I klog.InfoS("Creating memory manager") cm.memoryManager, err = memorymanager.NewManager( - context.TODO(), + klog.TODO(), nodeConfig.MemoryManagerPolicy, machineInfo, cm.GetNodeAllocatableReservation(), diff --git a/pkg/kubelet/cm/fake_container_manager.go b/pkg/kubelet/cm/fake_container_manager.go index d389ecee908..a178f37358e 100644 --- a/pkg/kubelet/cm/fake_container_manager.go +++ b/pkg/kubelet/cm/fake_container_manager.go @@ -56,7 +56,7 @@ func NewFakeContainerManager() *FakeContainerManager { return &FakeContainerManager{ PodContainerManager: NewFakePodContainerManager(), cpuManager: cpumanager.NewFakeManager(klog.TODO()), - memoryManager: memorymanager.NewFakeManager(context.TODO()), + memoryManager: memorymanager.NewFakeManager(klog.TODO()), } } diff --git a/pkg/kubelet/cm/internal_container_lifecycle.go b/pkg/kubelet/cm/internal_container_lifecycle.go index 27004f1adcd..fbf07b311c4 100644 --- a/pkg/kubelet/cm/internal_container_lifecycle.go +++ b/pkg/kubelet/cm/internal_container_lifecycle.go @@ -17,8 +17,6 @@ limitations under the License. package cm import ( - "context" - v1 "k8s.io/api/core/v1" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" "k8s.io/klog/v2" @@ -46,7 +44,7 @@ func (i *internalContainerLifecycleImpl) PreStartContainer(pod *v1.Pod, containe } if i.memoryManager != nil { - i.memoryManager.AddContainer(context.TODO(), pod, container, containerID) + i.memoryManager.AddContainer(klog.TODO(), pod, container, containerID) } i.topologyManager.AddContainer(pod, container, containerID) diff --git a/pkg/kubelet/cm/internal_container_lifecycle_linux.go b/pkg/kubelet/cm/internal_container_lifecycle_linux.go index 43e2717ccdd..ce6b62b8bc1 100644 --- a/pkg/kubelet/cm/internal_container_lifecycle_linux.go +++ b/pkg/kubelet/cm/internal_container_lifecycle_linux.go @@ -20,13 +20,13 @@ limitations under the License. package cm import ( - "context" "strconv" "strings" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" + "k8s.io/klog/v2" ) func (i *internalContainerLifecycleImpl) PreCreateContainer(pod *v1.Pod, container *v1.Container, containerConfig *runtimeapi.ContainerConfig) error { @@ -38,7 +38,7 @@ func (i *internalContainerLifecycleImpl) PreCreateContainer(pod *v1.Pod, contain } if i.memoryManager != nil { - numaNodes := i.memoryManager.GetMemoryNUMANodes(context.TODO(), pod, container) + numaNodes := i.memoryManager.GetMemoryNUMANodes(klog.TODO(), pod, container) if numaNodes.Len() > 0 { var affinity []string for _, numaNode := range sets.List(numaNodes) { diff --git a/pkg/kubelet/cm/internal_container_lifecycle_test.go b/pkg/kubelet/cm/internal_container_lifecycle_test.go index 1b2dd9b22c2..10dd4101c89 100644 --- a/pkg/kubelet/cm/internal_container_lifecycle_test.go +++ b/pkg/kubelet/cm/internal_container_lifecycle_test.go @@ -17,7 +17,6 @@ limitations under the License. package cm import ( - "context" "testing" "github.com/go-logr/logr" @@ -42,7 +41,7 @@ type mockMemoryManager struct { memorymanager.Manager } -func (memoryManager *mockMemoryManager) AddContainer(context.Context, *v1.Pod, *v1.Container, string) { +func (memoryManager *mockMemoryManager) AddContainer(logr.Logger, *v1.Pod, *v1.Container, string) { memoryManager.called = true } diff --git a/pkg/kubelet/cm/internal_container_lifecycle_windows.go b/pkg/kubelet/cm/internal_container_lifecycle_windows.go index 35c7f48f95d..feb63089ee0 100644 --- a/pkg/kubelet/cm/internal_container_lifecycle_windows.go +++ b/pkg/kubelet/cm/internal_container_lifecycle_windows.go @@ -20,7 +20,6 @@ limitations under the License. package cm import ( - "context" "fmt" v1 "k8s.io/api/core/v1" @@ -48,7 +47,7 @@ func (i *internalContainerLifecycleImpl) PreCreateContainer(pod *v1.Pod, contain var numaNodes sets.Set[int] if i.memoryManager != nil { - numaNodes = i.memoryManager.GetMemoryNUMANodes(context.TODO(), pod, container) + numaNodes = i.memoryManager.GetMemoryNUMANodes(klog.TODO(), pod, container) } // Gather all CPUs associated with the selected NUMA nodes diff --git a/pkg/kubelet/cm/memorymanager/fake_memory_manager.go b/pkg/kubelet/cm/memorymanager/fake_memory_manager.go index 6664730abcc..e589c78f573 100644 --- a/pkg/kubelet/cm/memorymanager/fake_memory_manager.go +++ b/pkg/kubelet/cm/memorymanager/fake_memory_manager.go @@ -39,46 +39,39 @@ func (m *fakeManager) Start(ctx context.Context, activePods ActivePodsFunc, sour return nil } -func (m *fakeManager) Policy(ctx context.Context) Policy { - logger := klog.FromContext(ctx) +func (m *fakeManager) Policy(logger klog.Logger) Policy { logger.Info("Policy()") - return NewPolicyNone(ctx) + return NewPolicyNone(logger) } func (m *fakeManager) Allocate(pod *v1.Pod, container *v1.Container) error { - ctx := context.TODO() - logger := klog.FromContext(ctx) + logger := klog.TODO() logger.Info("Allocate", "pod", klog.KObj(pod), "containerName", container.Name) return nil } -func (m *fakeManager) AddContainer(ctx context.Context, pod *v1.Pod, container *v1.Container, containerID string) { - logger := klog.FromContext(ctx) +func (m *fakeManager) AddContainer(logger klog.Logger, pod *v1.Pod, container *v1.Container, containerID string) { logger.Info("Add container", "pod", klog.KObj(pod), "containerName", container.Name, "containerID", containerID) } -func (m *fakeManager) GetMemoryNUMANodes(ctx context.Context, pod *v1.Pod, container *v1.Container) sets.Set[int] { - logger := klog.FromContext(ctx) +func (m *fakeManager) GetMemoryNUMANodes(logger klog.Logger, pod *v1.Pod, container *v1.Container) sets.Set[int] { logger.Info("Get MemoryNUMANodes", "pod", klog.KObj(pod), "containerName", container.Name) return nil } -func (m *fakeManager) RemoveContainer(ctx context.Context, containerID string) error { - logger := klog.FromContext(ctx) +func (m *fakeManager) RemoveContainer(logger klog.Logger, containerID string) error { logger.Info("RemoveContainer", "containerID", containerID) return nil } func (m *fakeManager) GetTopologyHints(pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint { - ctx := context.TODO() - logger := klog.FromContext(ctx) + logger := klog.TODO() logger.Info("Get Topology Hints", "pod", klog.KObj(pod), "containerName", container.Name) return map[string][]topologymanager.TopologyHint{} } func (m *fakeManager) GetPodTopologyHints(pod *v1.Pod) map[string][]topologymanager.TopologyHint { - ctx := context.TODO() - logger := klog.FromContext(ctx) + logger := klog.TODO() logger.Info("Get Pod Topology Hints", "pod", klog.KObj(pod)) return map[string][]topologymanager.TopologyHint{} } @@ -88,24 +81,23 @@ func (m *fakeManager) State() state.Reader { } // GetAllocatableMemory returns the amount of allocatable memory for each NUMA node -func (m *fakeManager) GetAllocatableMemory(ctx context.Context) []state.Block { - logger := klog.FromContext(ctx) +func (m *fakeManager) GetAllocatableMemory() []state.Block { + logger := klog.TODO() logger.Info("Get Allocatable Memory") return []state.Block{} } // GetMemory returns the memory allocated by a container from NUMA nodes -func (m *fakeManager) GetMemory(ctx context.Context, podUID, containerName string) []state.Block { - logger := klog.LoggerWithValues(klog.FromContext(ctx), "podUID", podUID, "containerName", containerName) +func (m *fakeManager) GetMemory(podUID, containerName string) []state.Block { + logger := klog.LoggerWithValues(klog.TODO(), "podUID", podUID, "containerName", containerName) logger.Info("Get Memory") return []state.Block{} } // NewFakeManager creates empty/fake memory manager -func NewFakeManager(ctx context.Context) Manager { - logger := klog.LoggerWithName(klog.FromContext(ctx), "memory-mgr.fake") +func NewFakeManager(logger klog.Logger) Manager { + logger = klog.LoggerWithName(logger, "memory-mgr.fake") return &fakeManager{ - // logger: logger, state: state.NewMemoryState(logger), } } diff --git a/pkg/kubelet/cm/memorymanager/memory_manager.go b/pkg/kubelet/cm/memorymanager/memory_manager.go index 572f58599a0..585ebff1013 100644 --- a/pkg/kubelet/cm/memorymanager/memory_manager.go +++ b/pkg/kubelet/cm/memorymanager/memory_manager.go @@ -61,7 +61,7 @@ type Manager interface { // AddContainer adds the mapping between container ID to pod UID and the container name // The mapping used to remove the memory allocation during the container removal - AddContainer(ctx context.Context, p *v1.Pod, c *v1.Container, containerID string) + AddContainer(logger klog.Logger, p *v1.Pod, c *v1.Container, containerID string) // Allocate is called to pre-allocate memory resources during Pod admission. // This must be called at some point prior to the AddContainer() call for a container, e.g. at pod admission time. @@ -69,7 +69,7 @@ type Manager interface { // RemoveContainer is called after Kubelet decides to kill or delete a // container. After this call, any memory allocated to the container is freed. - RemoveContainer(ctx context.Context, containerID string) error + RemoveContainer(logger klog.Logger, containerID string) error // State returns a read-only interface to the internal memory manager state. State() state.Reader @@ -85,13 +85,13 @@ type Manager interface { GetPodTopologyHints(*v1.Pod) map[string][]topologymanager.TopologyHint // GetMemoryNUMANodes provides NUMA nodes that are used to allocate the container memory - GetMemoryNUMANodes(ctx context.Context, pod *v1.Pod, container *v1.Container) sets.Set[int] + GetMemoryNUMANodes(logger klog.Logger, pod *v1.Pod, container *v1.Container) sets.Set[int] // GetAllocatableMemory returns the amount of allocatable memory for each NUMA node - GetAllocatableMemory(ctx context.Context) []state.Block + GetAllocatableMemory() []state.Block // GetMemory returns the memory allocated by a container from NUMA nodes - GetMemory(ctx context.Context, podUID, containerName string) []state.Block + GetMemory(podUID, containerName string) []state.Block } type manager struct { @@ -132,13 +132,13 @@ type manager struct { var _ Manager = &manager{} // NewManager returns new instance of the memory manager -func NewManager(ctx context.Context, policyName string, machineInfo *cadvisorapi.MachineInfo, nodeAllocatableReservation v1.ResourceList, reservedMemory []kubeletconfig.MemoryReservation, stateFileDirectory string, affinity topologymanager.Store) (Manager, error) { +func NewManager(logger klog.Logger, policyName string, machineInfo *cadvisorapi.MachineInfo, nodeAllocatableReservation v1.ResourceList, reservedMemory []kubeletconfig.MemoryReservation, stateFileDirectory string, affinity topologymanager.Store) (Manager, error) { var policy Policy switch policyType(policyName) { case policyTypeNone: - policy = NewPolicyNone(ctx) + policy = NewPolicyNone(logger) case PolicyTypeStatic: if runtime.GOOS == "windows" { @@ -150,7 +150,7 @@ func NewManager(ctx context.Context, policyName string, machineInfo *cadvisorapi return nil, err } - policy, err = NewPolicyStatic(ctx, machineInfo, systemReserved, affinity) + policy, err = NewPolicyStatic(logger, machineInfo, systemReserved, affinity) if err != nil { return nil, err } @@ -161,7 +161,7 @@ func NewManager(ctx context.Context, policyName string, machineInfo *cadvisorapi if err != nil { return nil, err } - policy, err = NewPolicyBestEffort(ctx, machineInfo, systemReserved, affinity) + policy, err = NewPolicyBestEffort(logger, machineInfo, systemReserved, affinity) if err != nil { return nil, err } @@ -198,20 +198,20 @@ func (m *manager) Start(ctx context.Context, activePods ActivePodsFunc, sourcesR } m.state = stateImpl - err = m.policy.Start(ctx, m.state) + err = m.policy.Start(logger, m.state) if err != nil { logger.Error(err, "Policy start error") return err } - m.allocatableMemory = m.policy.GetAllocatableMemory(ctx, m.state) + m.allocatableMemory = m.policy.GetAllocatableMemory(m.state) logger.V(4).Info("memorymanager started", "policy", m.policy.Name()) return nil } // AddContainer saves the value of requested memory for the guaranteed pod under the state and set memory affinity according to the topolgy manager -func (m *manager) AddContainer(ctx context.Context, pod *v1.Pod, container *v1.Container, containerID string) { +func (m *manager) AddContainer(logger klog.Logger, pod *v1.Pod, container *v1.Container, containerID string) { m.Lock() defer m.Unlock() @@ -234,13 +234,13 @@ func (m *manager) AddContainer(ctx context.Context, pod *v1.Pod, container *v1.C continue } - m.policyRemoveContainerByRef(string(pod.UID), initContainer.Name) + m.policyRemoveContainerByRef(logger, string(pod.UID), initContainer.Name) } } // GetMemoryNUMANodes provides NUMA nodes that used to allocate the container memory -func (m *manager) GetMemoryNUMANodes(ctx context.Context, pod *v1.Pod, container *v1.Container) sets.Set[int] { - logger := klog.LoggerWithValues(klog.FromContext(ctx), "pod", klog.KObj(pod), "containerName", container.Name) +func (m *manager) GetMemoryNUMANodes(logger klog.Logger, pod *v1.Pod, container *v1.Container) sets.Set[int] { + logger = klog.LoggerWithValues(logger, "pod", klog.KObj(pod), "containerName", container.Name) // Get NUMA node affinity of blocks assigned to the container during Allocate() numaNodes := sets.New[int]() @@ -262,17 +262,14 @@ func (m *manager) GetMemoryNUMANodes(ctx context.Context, pod *v1.Pod, container // Allocate is called to pre-allocate memory resources during Pod admission. func (m *manager) Allocate(pod *v1.Pod, container *v1.Container) error { - // Garbage collect any stranded resources before allocation - ctx := context.TODO() - logger := klog.FromContext(ctx) - + logger := klog.TODO() m.removeStaleState(logger) m.Lock() defer m.Unlock() // Call down into the policy to assign this container memory if required. - if err := m.policy.Allocate(ctx, m.state, pod, container); err != nil { + if err := m.policy.Allocate(logger, m.state, pod, container); err != nil { logger.Error(err, "Allocate error", "pod", klog.KObj(pod), "containerName", container.Name) return err } @@ -280,8 +277,8 @@ func (m *manager) Allocate(pod *v1.Pod, container *v1.Container) error { } // RemoveContainer removes the container from the state -func (m *manager) RemoveContainer(ctx context.Context, containerID string) error { - logger := klog.LoggerWithValues(klog.FromContext(ctx), "containerID", containerID) +func (m *manager) RemoveContainer(logger klog.Logger, containerID string) error { + logger = klog.LoggerWithValues(logger, "containerID", containerID) m.Lock() defer m.Unlock() @@ -293,7 +290,7 @@ func (m *manager) RemoveContainer(ctx context.Context, containerID string) error return nil } - m.policyRemoveContainerByRef(podUID, containerName) + m.policyRemoveContainerByRef(logger, podUID, containerName) return nil } @@ -311,7 +308,7 @@ func (m *manager) GetPodTopologyHints(pod *v1.Pod) map[string][]topologymanager. // Garbage collect any stranded resources before providing TopologyHints m.removeStaleState(klog.FromContext(ctx)) // Delegate to active policy - return m.policy.GetPodTopologyHints(context.TODO(), m.state, pod) + return m.policy.GetPodTopologyHints(klog.TODO(), m.state, pod) } // GetTopologyHints returns the topology hints for the topology manager @@ -319,7 +316,7 @@ func (m *manager) GetTopologyHints(pod *v1.Pod, container *v1.Container) map[str // Garbage collect any stranded resources before providing TopologyHints m.removeStaleState(klog.TODO()) // Delegate to active policy - return m.policy.GetTopologyHints(context.TODO(), m.state, pod, container) + return m.policy.GetTopologyHints(klog.TODO(), m.state, pod, container) } // TODO: move the method to the upper level, to re-use it under the CPU and memory managers @@ -358,7 +355,7 @@ func (m *manager) removeStaleState(logger klog.Logger) { for containerName := range assignments[podUID] { if _, ok := activeContainers[podUID][containerName]; !ok { logger.V(2).Info("RemoveStaleState removing state", "podUID", podUID, "containerName", containerName) - m.policyRemoveContainerByRef(podUID, containerName) + m.policyRemoveContainerByRef(logger, podUID, containerName) } } } @@ -366,13 +363,13 @@ func (m *manager) removeStaleState(logger klog.Logger) { m.containerMap.Visit(func(podUID, containerName, containerID string) { if _, ok := activeContainers[podUID][containerName]; !ok { logger.V(2).Info("RemoveStaleState removing state", "podUID", podUID, "containerName", containerName) - m.policyRemoveContainerByRef(podUID, containerName) + m.policyRemoveContainerByRef(logger, podUID, containerName) } }) } -func (m *manager) policyRemoveContainerByRef(podUID string, containerName string) { - m.policy.RemoveContainer(context.TODO(), m.state, podUID, containerName) +func (m *manager) policyRemoveContainerByRef(logger klog.Logger, podUID string, containerName string) { + m.policy.RemoveContainer(logger, m.state, podUID, containerName) m.containerMap.RemoveByContainerRef(podUID, containerName) } @@ -470,11 +467,11 @@ func getSystemReservedMemory(machineInfo *cadvisorapi.MachineInfo, nodeAllocatab } // GetAllocatableMemory returns the amount of allocatable memory for each NUMA node -func (m *manager) GetAllocatableMemory(ctx context.Context) []state.Block { +func (m *manager) GetAllocatableMemory() []state.Block { return m.allocatableMemory } // GetMemory returns the memory allocated by a container from NUMA nodes -func (m *manager) GetMemory(ctx context.Context, podUID, containerName string) []state.Block { +func (m *manager) GetMemory(podUID, containerName string) []state.Block { return m.state.GetMemoryBlocks(podUID, containerName) } diff --git a/pkg/kubelet/cm/memorymanager/memory_manager_test.go b/pkg/kubelet/cm/memorymanager/memory_manager_test.go index fa5a9aa4479..6844710fecd 100644 --- a/pkg/kubelet/cm/memorymanager/memory_manager_test.go +++ b/pkg/kubelet/cm/memorymanager/memory_manager_test.go @@ -27,6 +27,7 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" "github.com/stretchr/testify/assert" + "k8s.io/klog/v2" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" @@ -71,17 +72,17 @@ type testMemoryManager struct { activePods []*v1.Pod } -func returnPolicyByName(ctx context.Context, testCase testMemoryManager) Policy { +func returnPolicyByName(logger klog.Logger, testCase testMemoryManager) Policy { switch testCase.policyName { case policyTypeMock: return &mockPolicy{ err: fmt.Errorf("fake reg error"), } case PolicyTypeStatic: - policy, _ := NewPolicyStatic(ctx, &testCase.machineInfo, testCase.reserved, topologymanager.NewFakeManager()) + policy, _ := NewPolicyStatic(logger, &testCase.machineInfo, testCase.reserved, topologymanager.NewFakeManager()) return policy case policyTypeNone: - return NewPolicyNone(ctx) + return NewPolicyNone(logger) } return nil } @@ -94,27 +95,27 @@ func (p *mockPolicy) Name() string { return string(policyTypeMock) } -func (p *mockPolicy) Start(context.Context, state.State) error { +func (p *mockPolicy) Start(klog.Logger, state.State) error { return p.err } -func (p *mockPolicy) Allocate(context.Context, state.State, *v1.Pod, *v1.Container) error { +func (p *mockPolicy) Allocate(klog.Logger, state.State, *v1.Pod, *v1.Container) error { return p.err } -func (p *mockPolicy) RemoveContainer(context.Context, state.State, string, string) { +func (p *mockPolicy) RemoveContainer(klog.Logger, state.State, string, string) { } -func (p *mockPolicy) GetTopologyHints(context.Context, state.State, *v1.Pod, *v1.Container) map[string][]topologymanager.TopologyHint { +func (p *mockPolicy) GetTopologyHints(klog.Logger, state.State, *v1.Pod, *v1.Container) map[string][]topologymanager.TopologyHint { return nil } -func (p *mockPolicy) GetPodTopologyHints(context.Context, state.State, *v1.Pod) map[string][]topologymanager.TopologyHint { +func (p *mockPolicy) GetPodTopologyHints(klog.Logger, state.State, *v1.Pod) map[string][]topologymanager.TopologyHint { return nil } // GetAllocatableMemory returns the amount of allocatable memory for each NUMA node -func (p *mockPolicy) GetAllocatableMemory(context.Context, state.State) []state.Block { +func (p *mockPolicy) GetAllocatableMemory(state.State) []state.Block { return []state.Block{} } @@ -491,7 +492,7 @@ func TestGetSystemReservedMemory(t *testing.T) { } func TestRemoveStaleState(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) machineInfo := returnMachineInfo() testCases := []testMemoryManager{ { @@ -903,7 +904,7 @@ func TestRemoveStaleState(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.description, func(t *testing.T) { mgr := &manager{ - policy: returnPolicyByName(tCtx, testCase), + policy: returnPolicyByName(logger, testCase), state: state.NewMemoryState(logger), containerMap: containermap.NewContainerMap(), containerRuntime: mockRuntimeService{ @@ -931,7 +932,7 @@ func TestRemoveStaleState(t *testing.T) { } func TestAddContainer(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) machineInfo := returnMachineInfo() reserved := systemReservedMemory{ 0: map[v1.ResourceName]uint64{ @@ -1396,7 +1397,7 @@ func TestAddContainer(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.description, func(t *testing.T) { mgr := &manager{ - policy: returnPolicyByName(tCtx, testCase), + policy: returnPolicyByName(logger, testCase), state: state.NewMemoryState(logger), containerMap: containermap.NewContainerMap(), containerRuntime: mockRuntimeService{ @@ -1418,7 +1419,7 @@ func TestAddContainer(t *testing.T) { t.Errorf("Memory Manager Allocate() error (%v), expected error: %v, but got: %v", testCase.description, testCase.expectedAllocateError, err) } - mgr.AddContainer(tCtx, pod, container, "fakeID") + mgr.AddContainer(logger, pod, container, "fakeID") _, _, err = mgr.containerMap.GetContainerRef("fakeID") if !reflect.DeepEqual(err, testCase.expectedAddContainerError) { t.Errorf("Memory Manager AddContainer() error (%v), expected error: %v, but got: %v", @@ -1435,7 +1436,7 @@ func TestAddContainer(t *testing.T) { } func TestRemoveContainer(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) machineInfo := returnMachineInfo() reserved := systemReservedMemory{ 0: map[v1.ResourceName]uint64{ @@ -1873,7 +1874,7 @@ func TestRemoveContainer(t *testing.T) { iniContainerMap.Add("fakePod1", "fakeContainer1", "fakeID1") iniContainerMap.Add("fakePod1", "fakeContainer2", "fakeID2") mgr := &manager{ - policy: returnPolicyByName(tCtx, testCase), + policy: returnPolicyByName(logger, testCase), state: state.NewMemoryState(logger), containerMap: iniContainerMap, containerRuntime: mockRuntimeService{ @@ -1886,7 +1887,7 @@ func TestRemoveContainer(t *testing.T) { mgr.state.SetMemoryAssignments(testCase.assignments) mgr.state.SetMachineState(testCase.machineState) - err := mgr.RemoveContainer(tCtx, testCase.removeContainerID) + err := mgr.RemoveContainer(logger, testCase.removeContainerID) if !reflect.DeepEqual(err, testCase.expectedError) { t.Errorf("Memory Manager RemoveContainer() error (%v), expected error: %v, but got: %v", testCase.description, testCase.expectedError, err) @@ -1914,7 +1915,7 @@ func getPolicyNameForOs() policyType { } func TestNewManager(t *testing.T) { - tCtx := ktesting.Init(t) + logger, _ := ktesting.NewTestContext(t) machineInfo := returnMachineInfo() expectedReserved := systemReservedMemory{ 0: map[v1.ResourceName]uint64{ @@ -2006,7 +2007,7 @@ func TestNewManager(t *testing.T) { } defer os.RemoveAll(stateFileDirectory) - mgr, err := NewManager(tCtx, string(testCase.policyName), &testCase.machineInfo, testCase.nodeAllocatableReservation, testCase.systemReservedMemory, stateFileDirectory, testCase.affinity) + mgr, err := NewManager(logger, string(testCase.policyName), &testCase.machineInfo, testCase.nodeAllocatableReservation, testCase.systemReservedMemory, stateFileDirectory, testCase.affinity) if !reflect.DeepEqual(err, testCase.expectedError) { t.Errorf("Could not create the Memory Manager. Expected error: '%v', but got: '%v'", @@ -2036,7 +2037,7 @@ func TestNewManager(t *testing.T) { } func TestGetTopologyHints(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) testCases := []testMemoryManager{ { description: "Successful hint generation", @@ -2157,7 +2158,7 @@ func TestGetTopologyHints(t *testing.T) { for _, testCase := range testCases { t.Run(testCase.description, func(t *testing.T) { mgr := &manager{ - policy: returnPolicyByName(tCtx, testCase), + policy: returnPolicyByName(logger, testCase), state: state.NewMemoryState(logger), containerMap: containermap.NewContainerMap(), containerRuntime: mockRuntimeService{ @@ -2182,7 +2183,7 @@ func TestGetTopologyHints(t *testing.T) { } func TestAllocateAndAddPodWithInitContainers(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) testCases := []testMemoryManager{ { description: "should remove init containers from the state file, once app container started", @@ -2335,7 +2336,7 @@ func TestAllocateAndAddPodWithInitContainers(t *testing.T) { t.Run(testCase.description, func(t *testing.T) { logger.Info("TestAllocateAndAddPodWithInitContainers", "name", testCase.description) mgr := &manager{ - policy: returnPolicyByName(tCtx, testCase), + policy: returnPolicyByName(logger, testCase), state: state.NewMemoryState(logger), containerMap: containermap.NewContainerMap(), containerRuntime: mockRuntimeService{ @@ -2366,12 +2367,12 @@ func TestAllocateAndAddPodWithInitContainers(t *testing.T) { // Calls AddContainer for init containers for i, initContainer := range testCase.podAllocate.Spec.InitContainers { - mgr.AddContainer(tCtx, testCase.podAllocate, &testCase.podAllocate.Spec.InitContainers[i], initContainer.Name) + mgr.AddContainer(logger, testCase.podAllocate, &testCase.podAllocate.Spec.InitContainers[i], initContainer.Name) } // Calls AddContainer for apps containers for i, appContainer := range testCase.podAllocate.Spec.Containers { - mgr.AddContainer(tCtx, testCase.podAllocate, &testCase.podAllocate.Spec.Containers[i], appContainer.Name) + mgr.AddContainer(logger, testCase.podAllocate, &testCase.podAllocate.Spec.Containers[i], appContainer.Name) } assignments := mgr.state.GetMemoryAssignments() diff --git a/pkg/kubelet/cm/memorymanager/policy.go b/pkg/kubelet/cm/memorymanager/policy.go index 69e79cdb7f2..3c17ec93c21 100644 --- a/pkg/kubelet/cm/memorymanager/policy.go +++ b/pkg/kubelet/cm/memorymanager/policy.go @@ -17,9 +17,8 @@ limitations under the License. package memorymanager import ( - "context" - v1 "k8s.io/api/core/v1" + "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/kubelet/cm/memorymanager/state" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" ) @@ -30,19 +29,19 @@ type policyType string // Policy implements logic for pod container to a memory assignment. type Policy interface { Name() string - Start(ctx context.Context, s state.State) error + Start(logger klog.Logger, s state.State) error // Allocate call is idempotent - Allocate(ctx context.Context, s state.State, pod *v1.Pod, container *v1.Container) error + Allocate(logger klog.Logger, s state.State, pod *v1.Pod, container *v1.Container) error // RemoveContainer call is idempotent - RemoveContainer(ctx context.Context, s state.State, podUID string, containerName string) + RemoveContainer(logger klog.Logger, s state.State, podUID string, containerName string) // GetTopologyHints implements the topologymanager.HintProvider Interface // and is consulted to achieve NUMA aware resource alignment among this // and other resource controllers. - GetTopologyHints(ctx context.Context, s state.State, pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint + GetTopologyHints(logger klog.Logger, s state.State, pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint // GetPodTopologyHints implements the topologymanager.HintProvider Interface // and is consulted to achieve NUMA aware resource alignment among this // and other resource controllers. - GetPodTopologyHints(ctx context.Context, s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint + GetPodTopologyHints(logger klog.Logger, s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint // GetAllocatableMemory returns the amount of allocatable memory for each NUMA node - GetAllocatableMemory(ctx context.Context, s state.State) []state.Block + GetAllocatableMemory(s state.State) []state.Block } diff --git a/pkg/kubelet/cm/memorymanager/policy_best_effort.go b/pkg/kubelet/cm/memorymanager/policy_best_effort.go index 76ca2c82608..53f5746d48d 100644 --- a/pkg/kubelet/cm/memorymanager/policy_best_effort.go +++ b/pkg/kubelet/cm/memorymanager/policy_best_effort.go @@ -17,8 +17,7 @@ limitations under the License. package memorymanager import ( - "context" - + "github.com/go-logr/logr" cadvisorapi "github.com/google/cadvisor/info/v1" v1 "k8s.io/api/core/v1" @@ -41,8 +40,8 @@ type bestEffortPolicy struct { var _ Policy = &bestEffortPolicy{} -func NewPolicyBestEffort(ctx context.Context, machineInfo *cadvisorapi.MachineInfo, reserved systemReservedMemory, affinity topologymanager.Store) (Policy, error) { - p, err := NewPolicyStatic(ctx, machineInfo, reserved, affinity) +func NewPolicyBestEffort(logger logr.Logger, machineInfo *cadvisorapi.MachineInfo, reserved systemReservedMemory, affinity topologymanager.Store) (Policy, error) { + p, err := NewPolicyStatic(logger, machineInfo, reserved, affinity) if err != nil { return nil, err @@ -57,26 +56,26 @@ func (p *bestEffortPolicy) Name() string { return string(policyTypeBestEffort) } -func (p *bestEffortPolicy) Start(ctx context.Context, s state.State) error { - return p.static.Start(ctx, s) +func (p *bestEffortPolicy) Start(logger logr.Logger, s state.State) error { + return p.static.Start(logger, s) } -func (p *bestEffortPolicy) Allocate(ctx context.Context, s state.State, pod *v1.Pod, container *v1.Container) (rerr error) { - return p.static.Allocate(ctx, s, pod, container) +func (p *bestEffortPolicy) Allocate(logger logr.Logger, s state.State, pod *v1.Pod, container *v1.Container) (rerr error) { + return p.static.Allocate(logger, s, pod, container) } -func (p *bestEffortPolicy) RemoveContainer(ctx context.Context, s state.State, podUID string, containerName string) { - p.static.RemoveContainer(ctx, s, podUID, containerName) +func (p *bestEffortPolicy) RemoveContainer(logger logr.Logger, s state.State, podUID string, containerName string) { + p.static.RemoveContainer(logger, s, podUID, containerName) } -func (p *bestEffortPolicy) GetPodTopologyHints(ctx context.Context, s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint { - return p.static.GetPodTopologyHints(ctx, s, pod) +func (p *bestEffortPolicy) GetPodTopologyHints(logger logr.Logger, s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint { + return p.static.GetPodTopologyHints(logger, s, pod) } -func (p *bestEffortPolicy) GetTopologyHints(ctx context.Context, s state.State, pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint { - return p.static.GetTopologyHints(ctx, s, pod, container) +func (p *bestEffortPolicy) GetTopologyHints(logger logr.Logger, s state.State, pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint { + return p.static.GetTopologyHints(logger, s, pod, container) } -func (p *bestEffortPolicy) GetAllocatableMemory(ctx context.Context, s state.State) []state.Block { - return p.static.GetAllocatableMemory(ctx, s) +func (p *bestEffortPolicy) GetAllocatableMemory(s state.State) []state.Block { + return p.static.GetAllocatableMemory(s) } diff --git a/pkg/kubelet/cm/memorymanager/policy_none.go b/pkg/kubelet/cm/memorymanager/policy_none.go index 5b821f7d234..ceb2d236d1f 100644 --- a/pkg/kubelet/cm/memorymanager/policy_none.go +++ b/pkg/kubelet/cm/memorymanager/policy_none.go @@ -17,8 +17,6 @@ limitations under the License. package memorymanager import ( - "context" - v1 "k8s.io/api/core/v1" "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/kubelet/cm/memorymanager/state" @@ -34,7 +32,7 @@ type none struct{} var _ Policy = &none{} // NewPolicyNone returns new none policy instance -func NewPolicyNone(ctx context.Context) Policy { +func NewPolicyNone(logger klog.Logger) Policy { return &none{} } @@ -42,36 +40,35 @@ func (p *none) Name() string { return string(policyTypeNone) } -func (p *none) Start(ctx context.Context, s state.State) error { - logger := klog.FromContext(ctx) +func (p *none) Start(logger klog.Logger, s state.State) error { logger.Info("Start") return nil } // Allocate call is idempotent -func (p *none) Allocate(_ context.Context, s state.State, pod *v1.Pod, container *v1.Container) error { +func (p *none) Allocate(_ klog.Logger, s state.State, pod *v1.Pod, container *v1.Container) error { return nil } // RemoveContainer call is idempotent -func (p *none) RemoveContainer(_ context.Context, s state.State, podUID string, containerName string) { +func (p *none) RemoveContainer(_ klog.Logger, s state.State, podUID string, containerName string) { } // GetTopologyHints implements the topologymanager.HintProvider Interface // and is consulted to achieve NUMA aware resource alignment among this // and other resource controllers. -func (p *none) GetTopologyHints(_ context.Context, s state.State, pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint { +func (p *none) GetTopologyHints(_ klog.Logger, s state.State, pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint { return nil } // GetPodTopologyHints implements the topologymanager.HintProvider Interface // and is consulted to achieve NUMA aware resource alignment among this // and other resource controllers. -func (p *none) GetPodTopologyHints(_ context.Context, s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint { +func (p *none) GetPodTopologyHints(_ klog.Logger, s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint { return nil } // GetAllocatableMemory returns the amount of allocatable memory for each NUMA node -func (p *none) GetAllocatableMemory(_ context.Context, s state.State) []state.Block { +func (p *none) GetAllocatableMemory(s state.State) []state.Block { return []state.Block{} } diff --git a/pkg/kubelet/cm/memorymanager/policy_static.go b/pkg/kubelet/cm/memorymanager/policy_static.go index 7e39009670a..eb5c3b5f67c 100644 --- a/pkg/kubelet/cm/memorymanager/policy_static.go +++ b/pkg/kubelet/cm/memorymanager/policy_static.go @@ -17,11 +17,9 @@ limitations under the License. package memorymanager import ( - "context" "fmt" "sort" - "github.com/go-logr/logr" cadvisorapi "github.com/google/cadvisor/info/v1" v1 "k8s.io/api/core/v1" @@ -62,7 +60,7 @@ type staticPolicy struct { var _ Policy = &staticPolicy{} // NewPolicyStatic returns new static policy instance -func NewPolicyStatic(ctx context.Context, machineInfo *cadvisorapi.MachineInfo, reserved systemReservedMemory, affinity topologymanager.Store) (Policy, error) { +func NewPolicyStatic(logger klog.Logger, machineInfo *cadvisorapi.MachineInfo, reserved systemReservedMemory, affinity topologymanager.Store) (Policy, error) { var totalSystemReserved uint64 for _, node := range reserved { if _, ok := node[v1.ResourceMemory]; !ok { @@ -88,8 +86,7 @@ func (p *staticPolicy) Name() string { return string(PolicyTypeStatic) } -func (p *staticPolicy) Start(ctx context.Context, s state.State) error { - logger := klog.FromContext(ctx) +func (p *staticPolicy) Start(logger klog.Logger, s state.State) error { if err := p.validateState(logger, s); err != nil { logger.Error(err, "Invalid state, please drain node and remove policy state file") return err @@ -98,9 +95,8 @@ func (p *staticPolicy) Start(ctx context.Context, s state.State) error { } // Allocate call is idempotent -func (p *staticPolicy) Allocate(ctx context.Context, s state.State, pod *v1.Pod, container *v1.Container) (rerr error) { +func (p *staticPolicy) Allocate(logger klog.Logger, s state.State, pod *v1.Pod, container *v1.Container) (rerr error) { // allocate the memory only for guaranteed pods - logger := klog.FromContext(ctx) logger = klog.LoggerWithValues(logger, "pod", klog.KObj(pod), "containerName", container.Name) qos := v1qos.GetPodQOS(pod) if qos != v1.PodQOSGuaranteed { @@ -259,8 +255,8 @@ func (p *staticPolicy) getPodReusableMemory(pod *v1.Pod, numaAffinity bitmask.Bi } // RemoveContainer call is idempotent -func (p *staticPolicy) RemoveContainer(ctx context.Context, s state.State, podUID string, containerName string) { - logger := klog.LoggerWithValues(klog.FromContext(ctx), "podUID", podUID, "containerName", containerName) +func (p *staticPolicy) RemoveContainer(logger klog.Logger, s state.State, podUID string, containerName string) { + logger = klog.LoggerWithValues(logger, "podUID", podUID, "containerName", containerName) blocks := s.GetMemoryBlocks(podUID, containerName) if blocks == nil { @@ -313,7 +309,7 @@ func (p *staticPolicy) RemoveContainer(ctx context.Context, s state.State, podUI s.SetMachineState(machineState) } -func regenerateHints(logger logr.Logger, pod *v1.Pod, ctn *v1.Container, ctnBlocks []state.Block, reqRsrc map[v1.ResourceName]uint64) map[string][]topologymanager.TopologyHint { +func regenerateHints(logger klog.Logger, pod *v1.Pod, ctn *v1.Container, ctnBlocks []state.Block, reqRsrc map[v1.ResourceName]uint64) map[string][]topologymanager.TopologyHint { hints := map[string][]topologymanager.TopologyHint{} for resourceName := range reqRsrc { hints[string(resourceName)] = []topologymanager.TopologyHint{} @@ -405,8 +401,8 @@ func getPodRequestedResources(pod *v1.Pod) (map[v1.ResourceName]uint64, error) { return reqRsrcs, nil } -func (p *staticPolicy) GetPodTopologyHints(ctx context.Context, s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint { - logger := klog.LoggerWithValues(klog.FromContext(ctx), "pod", klog.KObj(pod)) +func (p *staticPolicy) GetPodTopologyHints(logger klog.Logger, s state.State, pod *v1.Pod) map[string][]topologymanager.TopologyHint { + logger = klog.LoggerWithValues(logger, "pod", klog.KObj(pod)) if v1qos.GetPodQOS(pod) != v1.PodQOSGuaranteed { return nil @@ -440,8 +436,8 @@ func (p *staticPolicy) GetPodTopologyHints(ctx context.Context, s state.State, p // GetTopologyHints implements the topologymanager.HintProvider Interface // and is consulted to achieve NUMA aware resource alignment among this // and other resource controllers. -func (p *staticPolicy) GetTopologyHints(ctx context.Context, s state.State, pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint { - logger := klog.LoggerWithValues(klog.FromContext(ctx), "pod", klog.KObj(pod)) +func (p *staticPolicy) GetTopologyHints(logger klog.Logger, s state.State, pod *v1.Pod, container *v1.Container) map[string][]topologymanager.TopologyHint { + logger = klog.LoggerWithValues(logger, "pod", klog.KObj(pod)) if v1qos.GetPodQOS(pod) != v1.PodQOSGuaranteed { return nil @@ -599,7 +595,7 @@ func areGroupsEqual(group1, group2 []int) bool { return true } -func (p *staticPolicy) validateState(logger logr.Logger, s state.State) error { +func (p *staticPolicy) validateState(logger klog.Logger, s state.State) error { machineState := s.GetMachineState() memoryAssignments := s.GetMemoryAssignments() @@ -672,7 +668,7 @@ func (p *staticPolicy) validateState(logger logr.Logger, s state.State) error { return nil } -func areMachineStatesEqual(logger logr.Logger, ms1, ms2 state.NUMANodeMap) bool { +func areMachineStatesEqual(logger klog.Logger, ms1, ms2 state.NUMANodeMap) bool { if len(ms1) != len(ms2) { logger.Info("Node states were different", "lengthNode1", len(ms1), "lengthNode2", len(ms2)) return false @@ -733,7 +729,7 @@ func areMachineStatesEqual(logger logr.Logger, ms1, ms2 state.NUMANodeMap) bool return true } -func areMemoryStatesEqual(logger logr.Logger, memoryState1, memoryState2 *state.MemoryTable, nodeID int, resourceName v1.ResourceName) bool { +func areMemoryStatesEqual(logger klog.Logger, memoryState1, memoryState2 *state.MemoryTable, nodeID int, resourceName v1.ResourceName) bool { loggerWithValues := klog.LoggerWithValues(logger, "node", nodeID, "resource", resourceName, "memoryState1", *memoryState1, "memoryState2", *memoryState2) if memoryState1.TotalMemSize != memoryState2.TotalMemSize { logger.Info("Memory states for the NUMA node and resource are different", "field", "TotalMemSize", "TotalMemSize1", memoryState1.TotalMemSize, "TotalMemSize2", memoryState2.TotalMemSize) @@ -910,7 +906,7 @@ func findBestHint(hints []topologymanager.TopologyHint) *topologymanager.Topolog } // GetAllocatableMemory returns the amount of allocatable memory for each NUMA node -func (p *staticPolicy) GetAllocatableMemory(_ context.Context, s state.State) []state.Block { +func (p *staticPolicy) GetAllocatableMemory(s state.State) []state.Block { var allocatableMemory []state.Block machineState := s.GetMachineState() for numaNodeID, numaNodeState := range machineState { @@ -974,7 +970,7 @@ func (p *staticPolicy) updatePodReusableMemory(pod *v1.Pod, container *v1.Contai } } -func (p *staticPolicy) updateInitContainersMemoryBlocks(logger logr.Logger, s state.State, pod *v1.Pod, container *v1.Container, containerMemoryBlocks []state.Block) { +func (p *staticPolicy) updateInitContainersMemoryBlocks(logger klog.Logger, s state.State, pod *v1.Pod, container *v1.Container, containerMemoryBlocks []state.Block) { podUID := string(pod.UID) for _, containerBlock := range containerMemoryBlocks { @@ -1038,7 +1034,7 @@ func isRegularInitContainer(pod *v1.Pod, container *v1.Container) bool { return false } -func isNUMAAffinitiesEqual(logger logr.Logger, numaAffinity1, numaAffinity2 []int) bool { +func isNUMAAffinitiesEqual(logger klog.Logger, numaAffinity1, numaAffinity2 []int) bool { bitMask1, err := bitmask.NewBitMask(numaAffinity1...) if err != nil { logger.Error(err, "failed to create bit mask", "numaAffinity1", numaAffinity1) diff --git a/pkg/kubelet/cm/memorymanager/policy_static_test.go b/pkg/kubelet/cm/memorymanager/policy_static_test.go index bb5ab463bbb..5f51082f87b 100644 --- a/pkg/kubelet/cm/memorymanager/policy_static_test.go +++ b/pkg/kubelet/cm/memorymanager/policy_static_test.go @@ -149,13 +149,13 @@ type testStaticPolicy struct { } func initTests(t *testing.T, testCase *testStaticPolicy, hint *topologymanager.TopologyHint, initContainersReusableMemory reusableMemory) (Policy, state.State, error) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) manager := topologymanager.NewFakeManager() if hint != nil { manager = topologymanager.NewFakeManagerWithHint(hint) } - p, err := NewPolicyStatic(tCtx, testCase.machineInfo, testCase.systemReserved, manager) + p, err := NewPolicyStatic(logger, testCase.machineInfo, testCase.systemReserved, manager) if err != nil { return nil, nil, err } @@ -228,7 +228,7 @@ func TestStaticPolicyName(t *testing.T) { } func TestStaticPolicyStart(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) testCases := []testStaticPolicy{ { description: "should fail, if machine state is empty, but it has memory assignments", @@ -1169,7 +1169,7 @@ func TestStaticPolicyStart(t *testing.T) { t.Fatalf("Unexpected error: %v", err) } - err = p.Start(tCtx, s) + err = p.Start(logger, s) if !reflect.DeepEqual(err, testCase.expectedError) { t.Fatalf("The actual error: %v is different from the expected one: %v", err, testCase.expectedError) } @@ -1192,7 +1192,7 @@ func TestStaticPolicyStart(t *testing.T) { } func TestStaticPolicyAllocate(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) testCases := []testStaticPolicy{ { description: "should do nothing for non-guaranteed pods", @@ -2089,7 +2089,7 @@ func TestStaticPolicyAllocate(t *testing.T) { t.Fatalf("Unexpected error: %v", err) } - err = p.Allocate(tCtx, s, testCase.pod, &testCase.pod.Spec.Containers[0]) + err = p.Allocate(logger, s, testCase.pod, &testCase.pod.Spec.Containers[0]) if (err == nil) != (testCase.expectedError == nil) || (err != nil && testCase.expectedError != nil && err.Error() != testCase.expectedError.Error()) { t.Fatalf("The actual error %v is different from the expected one %v", err, testCase.expectedError) } @@ -2112,7 +2112,7 @@ func TestStaticPolicyAllocate(t *testing.T) { } func TestStaticPolicyAllocateWithInitContainers(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) testCases := []testStaticPolicy{ { description: "should re-use init containers memory, init containers requests 1Gi and 2Gi, apps containers 3Gi and 4Gi", @@ -2814,14 +2814,14 @@ func TestStaticPolicyAllocateWithInitContainers(t *testing.T) { } for i := range testCase.pod.Spec.InitContainers { - err = p.Allocate(tCtx, s, testCase.pod, &testCase.pod.Spec.InitContainers[i]) + err = p.Allocate(logger, s, testCase.pod, &testCase.pod.Spec.InitContainers[i]) if !reflect.DeepEqual(err, testCase.expectedError) { t.Fatalf("The actual error %v is different from the expected one %v", err, testCase.expectedError) } } for i := range testCase.pod.Spec.Containers { - err = p.Allocate(tCtx, s, testCase.pod, &testCase.pod.Spec.Containers[i]) + err = p.Allocate(logger, s, testCase.pod, &testCase.pod.Spec.Containers[i]) if !reflect.DeepEqual(err, testCase.expectedError) { t.Fatalf("The actual error %v is different from the expected one %v", err, testCase.expectedError) } @@ -2841,7 +2841,7 @@ func TestStaticPolicyAllocateWithInitContainers(t *testing.T) { } func TestStaticPolicyAllocateWithRestartableInitContainers(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) testCases := []testStaticPolicy{ { description: "should do nothing once containers already exist under the state file", @@ -3148,7 +3148,7 @@ func TestStaticPolicyAllocateWithRestartableInitContainers(t *testing.T) { } for i := range testCase.pod.Spec.InitContainers { - err = p.Allocate(tCtx, s, testCase.pod, &testCase.pod.Spec.InitContainers[i]) + err = p.Allocate(logger, s, testCase.pod, &testCase.pod.Spec.InitContainers[i]) if !reflect.DeepEqual(err, testCase.expectedError) { t.Fatalf("The actual error %v is different from the expected one %v", err, testCase.expectedError) } @@ -3159,7 +3159,7 @@ func TestStaticPolicyAllocateWithRestartableInitContainers(t *testing.T) { } for i := range testCase.pod.Spec.Containers { - err = p.Allocate(tCtx, s, testCase.pod, &testCase.pod.Spec.Containers[i]) + err = p.Allocate(logger, s, testCase.pod, &testCase.pod.Spec.Containers[i]) if err != nil { t.Fatalf("Unexpected error: %v", err) } @@ -3179,7 +3179,7 @@ func TestStaticPolicyAllocateWithRestartableInitContainers(t *testing.T) { } func TestStaticPolicyRemoveContainer(t *testing.T) { - logger, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) testCases := []testStaticPolicy{ { description: "should do nothing when the container does not exist under the state", @@ -3422,7 +3422,7 @@ func TestStaticPolicyRemoveContainer(t *testing.T) { t.Fatalf("Unexpected error: %v", err) } - p.RemoveContainer(tCtx, s, "pod1", "container1") + p.RemoveContainer(logger, s, "pod1", "container1") assignments := s.GetMemoryAssignments() if !areContainerMemoryAssignmentsEqual(t, assignments, testCase.expectedAssignments) { t.Fatalf("Actual assignments %v are different from the expected %v", assignments, testCase.expectedAssignments) @@ -3437,7 +3437,7 @@ func TestStaticPolicyRemoveContainer(t *testing.T) { } func TestStaticPolicyGetTopologyHints(t *testing.T) { - tCtx := ktesting.Init(t) + logger, _ := ktesting.NewTestContext(t) testCases := []testStaticPolicy{ { description: "should not provide topology hints for non-guaranteed pods", @@ -3827,7 +3827,7 @@ func TestStaticPolicyGetTopologyHints(t *testing.T) { t.Fatalf("Unexpected error: %v", err) } - topologyHints := p.GetTopologyHints(tCtx, s, testCase.pod, &testCase.pod.Spec.Containers[0]) + topologyHints := p.GetTopologyHints(logger, s, testCase.pod, &testCase.pod.Spec.Containers[0]) if !reflect.DeepEqual(topologyHints, testCase.expectedTopologyHints) { t.Fatalf("The actual topology hints: '%+v' are different from the expected one: '%+v'", topologyHints, testCase.expectedTopologyHints) } @@ -3836,7 +3836,7 @@ func TestStaticPolicyGetTopologyHints(t *testing.T) { } func TestStaticPolicyGetPodTopologyHints(t *testing.T) { - _, tCtx := ktesting.NewTestContext(t) + logger, _ := ktesting.NewTestContext(t) testCases := []testStaticPolicy{ { description: "should not provide pod topology hints for guaranteed pod with pod level resources", @@ -3860,7 +3860,7 @@ func TestStaticPolicyGetPodTopologyHints(t *testing.T) { t.Fatalf("Unexpected error: %v", err) } - topologyHints := p.GetPodTopologyHints(tCtx, s, testCase.pod) + topologyHints := p.GetPodTopologyHints(logger, s, testCase.pod) if !reflect.DeepEqual(topologyHints, testCase.expectedTopologyHints) { t.Fatalf("The actual topology hints: '%+v' are different from the expected one: '%+v'", topologyHints, testCase.expectedTopologyHints) }