From 5e039989910acb9b201f8c1f17e039edcca5563f Mon Sep 17 00:00:00 2001 From: Francesco Romani Date: Tue, 21 Feb 2023 08:48:06 +0100 Subject: [PATCH] kubelet: podresources: pack parameters in a struct To enable rate limiting, needed for GA graduation, we need to pass more parameters to the already crowded `ListenAndServePodresources` function. To tidy up a bit, pack the parameters in a helper struct, with no intended changes in behavior. Signed-off-by: Francesco Romani --- pkg/kubelet/apis/podresources/server_v1.go | 12 ++++++------ pkg/kubelet/apis/podresources/server_v1_test.go | 16 ++++++++++++++-- pkg/kubelet/apis/podresources/server_v1alpha1.go | 8 ++++---- .../apis/podresources/server_v1alpha1_test.go | 7 ++++++- pkg/kubelet/apis/podresources/types.go | 7 +++++++ pkg/kubelet/kubelet.go | 2 +- pkg/kubelet/server/server.go | 6 +++--- 7 files changed, 41 insertions(+), 17 deletions(-) diff --git a/pkg/kubelet/apis/podresources/server_v1.go b/pkg/kubelet/apis/podresources/server_v1.go index 20774a8cc11..9d7bd55243c 100644 --- a/pkg/kubelet/apis/podresources/server_v1.go +++ b/pkg/kubelet/apis/podresources/server_v1.go @@ -27,7 +27,7 @@ import ( "k8s.io/kubelet/pkg/apis/podresources/v1" ) -// podResourcesServerV1alpha1 implements PodResourcesListerServer +// v1PodResourcesServer implements PodResourcesListerServer type v1PodResourcesServer struct { podsProvider PodsProvider devicesProvider DevicesProvider @@ -37,12 +37,12 @@ type v1PodResourcesServer struct { // NewV1PodResourcesServer returns a PodResourcesListerServer which lists pods provided by the PodsProvider // with device information provided by the DevicesProvider -func NewV1PodResourcesServer(podsProvider PodsProvider, devicesProvider DevicesProvider, cpusProvider CPUsProvider, memoryProvider MemoryProvider) v1.PodResourcesListerServer { +func NewV1PodResourcesServer(providers PodResourcesProviders) v1.PodResourcesListerServer { return &v1PodResourcesServer{ - podsProvider: podsProvider, - devicesProvider: devicesProvider, - cpusProvider: cpusProvider, - memoryProvider: memoryProvider, + podsProvider: providers.Pods, + devicesProvider: providers.Devices, + cpusProvider: providers.Cpus, + memoryProvider: providers.Memory, } } diff --git a/pkg/kubelet/apis/podresources/server_v1_test.go b/pkg/kubelet/apis/podresources/server_v1_test.go index 1c09bbe5607..47816c8b640 100644 --- a/pkg/kubelet/apis/podresources/server_v1_test.go +++ b/pkg/kubelet/apis/podresources/server_v1_test.go @@ -172,7 +172,13 @@ func TestListPodResourcesV1(t *testing.T) { mockDevicesProvider.EXPECT().GetAllocatableDevices().Return([]*podresourcesapi.ContainerDevices{}).AnyTimes() mockMemoryProvider.EXPECT().GetAllocatableMemory().Return([]*podresourcesapi.ContainerMemory{}).AnyTimes() - server := NewV1PodResourcesServer(mockPodsProvider, mockDevicesProvider, mockCPUsProvider, mockMemoryProvider) + providers := PodResourcesProviders{ + Pods: mockPodsProvider, + Devices: mockDevicesProvider, + Cpus: mockCPUsProvider, + Memory: mockMemoryProvider, + } + server := NewV1PodResourcesServer(providers) resp, err := server.List(context.TODO(), &podresourcesapi.ListPodResourcesRequest{}) if err != nil { t.Errorf("want err = %v, got %q", nil, err) @@ -459,7 +465,13 @@ func TestAllocatableResources(t *testing.T) { mockCPUsProvider.EXPECT().GetAllocatableCPUs().Return(tc.allCPUs).AnyTimes() mockMemoryProvider.EXPECT().GetAllocatableMemory().Return(tc.allMemory).AnyTimes() - server := NewV1PodResourcesServer(mockPodsProvider, mockDevicesProvider, mockCPUsProvider, mockMemoryProvider) + providers := PodResourcesProviders{ + Pods: mockPodsProvider, + Devices: mockDevicesProvider, + Cpus: mockCPUsProvider, + Memory: mockMemoryProvider, + } + server := NewV1PodResourcesServer(providers) resp, err := server.GetAllocatableResources(context.TODO(), &podresourcesapi.AllocatableResourcesRequest{}) if err != nil { diff --git a/pkg/kubelet/apis/podresources/server_v1alpha1.go b/pkg/kubelet/apis/podresources/server_v1alpha1.go index baacd2722fb..3e029e3c402 100644 --- a/pkg/kubelet/apis/podresources/server_v1alpha1.go +++ b/pkg/kubelet/apis/podresources/server_v1alpha1.go @@ -25,7 +25,7 @@ import ( "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" ) -// podResourcesServerV1alpha1 implements PodResourcesListerServer +// v1alpha1PodResourcesServer implements PodResourcesListerServer type v1alpha1PodResourcesServer struct { podsProvider PodsProvider devicesProvider DevicesProvider @@ -33,10 +33,10 @@ type v1alpha1PodResourcesServer struct { // NewV1alpha1PodResourcesServer returns a PodResourcesListerServer which lists pods provided by the PodsProvider // with device information provided by the DevicesProvider -func NewV1alpha1PodResourcesServer(podsProvider PodsProvider, devicesProvider DevicesProvider) v1alpha1.PodResourcesListerServer { +func NewV1alpha1PodResourcesServer(providers PodResourcesProviders) v1alpha1.PodResourcesListerServer { return &v1alpha1PodResourcesServer{ - podsProvider: podsProvider, - devicesProvider: devicesProvider, + podsProvider: providers.Pods, + devicesProvider: providers.Devices, } } diff --git a/pkg/kubelet/apis/podresources/server_v1alpha1_test.go b/pkg/kubelet/apis/podresources/server_v1alpha1_test.go index 45399ba7c8b..1dc289d89b3 100644 --- a/pkg/kubelet/apis/podresources/server_v1alpha1_test.go +++ b/pkg/kubelet/apis/podresources/server_v1alpha1_test.go @@ -134,7 +134,12 @@ func TestListPodResourcesV1alpha1(t *testing.T) { mockDevicesProvider.EXPECT().GetDevices(string(podUID), containerName).Return(tc.devices).AnyTimes() mockDevicesProvider.EXPECT().UpdateAllocatedDevices().Return().AnyTimes() - server := NewV1alpha1PodResourcesServer(mockPodsProvider, mockDevicesProvider) + + providers := PodResourcesProviders{ + Pods: mockPodsProvider, + Devices: mockDevicesProvider, + } + server := NewV1alpha1PodResourcesServer(providers) resp, err := server.List(context.TODO(), &v1alpha1.ListPodResourcesRequest{}) if err != nil { t.Errorf("want err = %v, got %q", nil, err) diff --git a/pkg/kubelet/apis/podresources/types.go b/pkg/kubelet/apis/podresources/types.go index b6011d12976..6b63b777c74 100644 --- a/pkg/kubelet/apis/podresources/types.go +++ b/pkg/kubelet/apis/podresources/types.go @@ -51,3 +51,10 @@ type MemoryProvider interface { // GetAllocatableMemory returns the allocatable memory from the node GetAllocatableMemory() []*podresourcesapi.ContainerMemory } + +type PodResourcesProviders struct { + Pods PodsProvider + Devices DevicesProvider + Cpus CPUsProvider + Memory MemoryProvider +} diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 302c70df015..cec1e4d6f96 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -2752,7 +2752,7 @@ func (kl *Kubelet) ListenAndServePodResources() { return } - providers := server.PodResourcesProviders{ + providers := podresources.PodResourcesProviders{ Pods: kl.podManager, Devices: kl.containerManager, Cpus: kl.containerManager, diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go index 74c5dba9951..fc060cef4aa 100644 --- a/pkg/kubelet/server/server.go +++ b/pkg/kubelet/server/server.go @@ -218,11 +218,11 @@ type PodResourcesProviders struct { } // ListenAndServePodResources initializes a gRPC server to serve the PodResources service -func ListenAndServePodResources(socket string, providers PodResourcesProviders) { +func ListenAndServePodResources(socket string, providers podresources.PodResourcesProviders) { server := grpc.NewServer(podresourcesgrpc.WithRateLimiter(podresourcesgrpc.DefaultQPS, podresourcesgrpc.DefaultBurstTokens)) - podresourcesapiv1alpha1.RegisterPodResourcesListerServer(server, podresources.NewV1alpha1PodResourcesServer(providers.Pods, providers.Devices)) - podresourcesapi.RegisterPodResourcesListerServer(server, podresources.NewV1PodResourcesServer(providers.Pods, providers.Devices, providers.Cpus, providers.Memory)) + podresourcesapiv1alpha1.RegisterPodResourcesListerServer(server, podresources.NewV1alpha1PodResourcesServer(providers)) + podresourcesapi.RegisterPodResourcesListerServer(server, podresources.NewV1PodResourcesServer(providers)) l, err := util.CreateListener(socket) if err != nil {