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 <swsehgal@redhat.com>
This commit is contained in:
Swati Sehgal
2025-10-28 20:59:54 +00:00
parent 7be689fcd6
commit e06abce75f
16 changed files with 143 additions and 166 deletions

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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(),

View File

@@ -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()),
}
}

View File

@@ -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)

View File

@@ -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) {

View File

@@ -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
}

View File

@@ -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

View File

@@ -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),
}
}

View File

@@ -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)
}

View File

@@ -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()

View File

@@ -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
}

View File

@@ -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)
}

View File

@@ -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{}
}

View File

@@ -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)

View File

@@ -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)
}