diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index d5875c0f021..0a077fbd6c0 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -92,7 +92,6 @@ import ( "k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap" "k8s.io/kubernetes/pkg/kubelet/cm" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/eviction" @@ -108,6 +107,7 @@ import ( "k8s.io/kubernetes/pkg/util/rlimit" "k8s.io/kubernetes/pkg/volume/util/hostutil" "k8s.io/kubernetes/pkg/volume/util/subpath" + "k8s.io/utils/cpuset" "k8s.io/utils/exec" netutils "k8s.io/utils/net" ) diff --git a/pkg/kubelet/apis/config/validation/validation.go b/pkg/kubelet/apis/config/validation/validation.go index 81fdf241936..7d9b452b4fd 100644 --- a/pkg/kubelet/apis/config/validation/validation.go +++ b/pkg/kubelet/apis/config/validation/validation.go @@ -30,9 +30,9 @@ import ( tracingapi "k8s.io/component-base/tracing/api/v1" "k8s.io/kubernetes/pkg/features" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" utiltaints "k8s.io/kubernetes/pkg/util/taints" + "k8s.io/utils/cpuset" ) var ( diff --git a/pkg/kubelet/cm/container_manager.go b/pkg/kubelet/cm/container_manager.go index 80c1af0aa83..2c03bb59ee9 100644 --- a/pkg/kubelet/cm/container_manager.go +++ b/pkg/kubelet/cm/container_manager.go @@ -31,7 +31,6 @@ import ( podresourcesapi "k8s.io/kubelet/pkg/apis/podresources/v1" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/apis/podresources" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/devicemanager" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -40,6 +39,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/pluginmanager/cache" "k8s.io/kubernetes/pkg/kubelet/status" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework" + "k8s.io/utils/cpuset" ) type ActivePodsFunc func() []*v1.Pod diff --git a/pkg/kubelet/cm/cpumanager/cpu_assignment.go b/pkg/kubelet/cm/cpumanager/cpu_assignment.go index cdf5e5197c8..eba774e8f62 100644 --- a/pkg/kubelet/cm/cpumanager/cpu_assignment.go +++ b/pkg/kubelet/cm/cpumanager/cpu_assignment.go @@ -24,7 +24,7 @@ import ( "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) // LoopControl controls the behavior of the cpu accumulator loop logic diff --git a/pkg/kubelet/cm/cpumanager/cpu_assignment_test.go b/pkg/kubelet/cm/cpumanager/cpu_assignment_test.go index 91403627a78..2199114d656 100644 --- a/pkg/kubelet/cm/cpumanager/cpu_assignment_test.go +++ b/pkg/kubelet/cm/cpumanager/cpu_assignment_test.go @@ -22,7 +22,7 @@ import ( "testing" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) func TestCPUAccumulatorFreeSockets(t *testing.T) { diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager.go b/pkg/kubelet/cm/cpumanager/cpu_manager.go index 443eecd2d36..8b5049d7d74 100644 --- a/pkg/kubelet/cm/cpumanager/cpu_manager.go +++ b/pkg/kubelet/cm/cpumanager/cpu_manager.go @@ -32,11 +32,11 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cm/containermap" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/config" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" "k8s.io/kubernetes/pkg/kubelet/status" + "k8s.io/utils/cpuset" ) // ActivePodsFunc is a function that returns a list of pods to reconcile. diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager_test.go b/pkg/kubelet/cm/cpumanager/cpu_manager_test.go index 250f1eb014a..65bb88bf0f0 100644 --- a/pkg/kubelet/cm/cpumanager/cpu_manager_test.go +++ b/pkg/kubelet/cm/cpumanager/cpu_manager_test.go @@ -36,8 +36,8 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cm/containermap" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" + "k8s.io/utils/cpuset" ) type mockState struct { diff --git a/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go b/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go index 93369705135..4a03f3dd23f 100644 --- a/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go +++ b/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go @@ -21,10 +21,10 @@ import ( "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/kubelet/cm/containermap" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/status" + "k8s.io/utils/cpuset" ) type fakeManager struct { diff --git a/pkg/kubelet/cm/cpumanager/policy.go b/pkg/kubelet/cm/cpumanager/policy.go index 31473686548..a80da9427ce 100644 --- a/pkg/kubelet/cm/cpumanager/policy.go +++ b/pkg/kubelet/cm/cpumanager/policy.go @@ -20,8 +20,8 @@ import ( "k8s.io/api/core/v1" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" + "k8s.io/utils/cpuset" ) // Policy implements logic for pod container to CPU assignment. diff --git a/pkg/kubelet/cm/cpumanager/policy_none.go b/pkg/kubelet/cm/cpumanager/policy_none.go index c5c151a78b3..ff86498fd92 100644 --- a/pkg/kubelet/cm/cpumanager/policy_none.go +++ b/pkg/kubelet/cm/cpumanager/policy_none.go @@ -22,8 +22,8 @@ import ( "k8s.io/api/core/v1" "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" + "k8s.io/utils/cpuset" ) type nonePolicy struct{} diff --git a/pkg/kubelet/cm/cpumanager/policy_none_test.go b/pkg/kubelet/cm/cpumanager/policy_none_test.go index 087ce857b07..22a977eb94d 100644 --- a/pkg/kubelet/cm/cpumanager/policy_none_test.go +++ b/pkg/kubelet/cm/cpumanager/policy_none_test.go @@ -20,7 +20,7 @@ import ( "testing" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) func TestNonePolicyName(t *testing.T) { diff --git a/pkg/kubelet/cm/cpumanager/policy_static.go b/pkg/kubelet/cm/cpumanager/policy_static.go index 40a8184d5f3..0f72e64dbc8 100644 --- a/pkg/kubelet/cm/cpumanager/policy_static.go +++ b/pkg/kubelet/cm/cpumanager/policy_static.go @@ -27,10 +27,10 @@ import ( "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" "k8s.io/kubernetes/pkg/kubelet/metrics" + "k8s.io/utils/cpuset" ) const ( diff --git a/pkg/kubelet/cm/cpumanager/policy_static_test.go b/pkg/kubelet/cm/cpumanager/policy_static_test.go index 2c88dee0ba5..0dcf78d49dc 100644 --- a/pkg/kubelet/cm/cpumanager/policy_static_test.go +++ b/pkg/kubelet/cm/cpumanager/policy_static_test.go @@ -27,9 +27,9 @@ import ( pkgfeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" + "k8s.io/utils/cpuset" ) type staticPolicyTest struct { diff --git a/pkg/kubelet/cm/cpumanager/state/state.go b/pkg/kubelet/cm/cpumanager/state/state.go index a9bd906fcb2..96efbcfa472 100644 --- a/pkg/kubelet/cm/cpumanager/state/state.go +++ b/pkg/kubelet/cm/cpumanager/state/state.go @@ -17,7 +17,7 @@ limitations under the License. package state import ( - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) // ContainerCPUAssignments type used in cpu manager state diff --git a/pkg/kubelet/cm/cpumanager/state/state_checkpoint.go b/pkg/kubelet/cm/cpumanager/state/state_checkpoint.go index 9297f23757d..e6b8fd4718d 100644 --- a/pkg/kubelet/cm/cpumanager/state/state_checkpoint.go +++ b/pkg/kubelet/cm/cpumanager/state/state_checkpoint.go @@ -25,7 +25,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/checkpointmanager" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager/errors" "k8s.io/kubernetes/pkg/kubelet/cm/containermap" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) var _ State = &stateCheckpoint{} diff --git a/pkg/kubelet/cm/cpumanager/state/state_checkpoint_test.go b/pkg/kubelet/cm/cpumanager/state/state_checkpoint_test.go index 9ab650e36cb..3a1d552ed50 100644 --- a/pkg/kubelet/cm/cpumanager/state/state_checkpoint_test.go +++ b/pkg/kubelet/cm/cpumanager/state/state_checkpoint_test.go @@ -26,7 +26,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/checkpointmanager" "k8s.io/kubernetes/pkg/kubelet/cm/containermap" testutil "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state/testing" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) const testingCheckpoint = "cpumanager_checkpoint_test" diff --git a/pkg/kubelet/cm/cpumanager/state/state_mem.go b/pkg/kubelet/cm/cpumanager/state/state_mem.go index 8f3a10d95b2..cb01ea92609 100644 --- a/pkg/kubelet/cm/cpumanager/state/state_mem.go +++ b/pkg/kubelet/cm/cpumanager/state/state_mem.go @@ -20,7 +20,7 @@ import ( "sync" "k8s.io/klog/v2" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) type stateMemory struct { diff --git a/pkg/kubelet/cm/cpumanager/state/state_test.go b/pkg/kubelet/cm/cpumanager/state/state_test.go index 845dbc64df9..efe9ba1c611 100644 --- a/pkg/kubelet/cm/cpumanager/state/state_test.go +++ b/pkg/kubelet/cm/cpumanager/state/state_test.go @@ -20,7 +20,7 @@ import ( "reflect" "testing" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) func TestClone(t *testing.T) { diff --git a/pkg/kubelet/cm/cpumanager/topology/topology.go b/pkg/kubelet/cm/cpumanager/topology/topology.go index 4c4147556ea..62d91a5dee5 100644 --- a/pkg/kubelet/cm/cpumanager/topology/topology.go +++ b/pkg/kubelet/cm/cpumanager/topology/topology.go @@ -21,7 +21,7 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" "k8s.io/klog/v2" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) // NUMANodeInfo is a map from NUMANode ID to a list of CPU IDs associated with diff --git a/pkg/kubelet/cm/cpumanager/topology/topology_test.go b/pkg/kubelet/cm/cpumanager/topology/topology_test.go index 40031ff3147..37d8f7f01fc 100644 --- a/pkg/kubelet/cm/cpumanager/topology/topology_test.go +++ b/pkg/kubelet/cm/cpumanager/topology/topology_test.go @@ -22,7 +22,7 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" "github.com/google/go-cmp/cmp" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" ) func Test_Discover(t *testing.T) { diff --git a/pkg/kubelet/cm/cpumanager/topology_hints_test.go b/pkg/kubelet/cm/cpumanager/topology_hints_test.go index 3cd5c85740b..13455e53bd2 100644 --- a/pkg/kubelet/cm/cpumanager/topology_hints_test.go +++ b/pkg/kubelet/cm/cpumanager/topology_hints_test.go @@ -29,9 +29,9 @@ import ( pkgfeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager" "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask" + "k8s.io/utils/cpuset" ) type testCase struct { diff --git a/pkg/kubelet/cm/cpuset/cpuset_test.go b/pkg/kubelet/cm/cpuset/cpuset_test.go deleted file mode 100644 index 275cc9e630f..00000000000 --- a/pkg/kubelet/cm/cpuset/cpuset_test.go +++ /dev/null @@ -1,358 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package cpuset - -import ( - "reflect" - "sort" - "testing" -) - -func TestCPUSetSize(t *testing.T) { - testCases := []struct { - cpuset CPUSet - expected int - }{ - {New(), 0}, - {New(5), 1}, - {New(1, 2, 3, 4, 5), 5}, - } - - for _, c := range testCases { - actual := c.cpuset.Size() - if actual != c.expected { - t.Errorf("expected: %d, actual: %d, cpuset: [%v]", c.expected, actual, c.cpuset) - } - } -} - -func TestCPUSetIsEmpty(t *testing.T) { - testCases := []struct { - cpuset CPUSet - expected bool - }{ - {New(), true}, - {New(5), false}, - {New(1, 2, 3, 4, 5), false}, - } - - for _, c := range testCases { - actual := c.cpuset.IsEmpty() - if actual != c.expected { - t.Errorf("expected: %t, IsEmpty() returned: %t, cpuset: [%v]", c.expected, actual, c.cpuset) - } - } -} - -func TestCPUSetContains(t *testing.T) { - testCases := []struct { - cpuset CPUSet - mustContain []int - mustNotContain []int - }{ - {New(), []int{}, []int{1, 2, 3, 4, 5}}, - {New(5), []int{5}, []int{1, 2, 3, 4}}, - {New(1, 2, 4, 5), []int{1, 2, 4, 5}, []int{0, 3, 6}}, - } - - for _, c := range testCases { - for _, elem := range c.mustContain { - if !c.cpuset.Contains(elem) { - t.Errorf("expected cpuset to contain element %d: [%v]", elem, c.cpuset) - } - } - for _, elem := range c.mustNotContain { - if c.cpuset.Contains(elem) { - t.Errorf("expected cpuset not to contain element %d: [%v]", elem, c.cpuset) - } - } - } -} - -func TestCPUSetEqual(t *testing.T) { - shouldEqual := []struct { - s1 CPUSet - s2 CPUSet - }{ - {New(), New()}, - {New(5), New(5)}, - {New(1, 2, 3, 4, 5), New(1, 2, 3, 4, 5)}, - {New(5, 4, 3, 2, 1), New(1, 2, 3, 4, 5)}, - } - - shouldNotEqual := []struct { - s1 CPUSet - s2 CPUSet - }{ - {New(), New(5)}, - {New(5), New()}, - {New(), New(1, 2, 3, 4, 5)}, - {New(1, 2, 3, 4, 5), New()}, - {New(5), New(1, 2, 3, 4, 5)}, - {New(1, 2, 3, 4, 5), New(5)}, - } - - for _, c := range shouldEqual { - if !c.s1.Equals(c.s2) { - t.Errorf("expected cpusets to be equal: s1: [%v], s2: [%v]", c.s1, c.s2) - } - } - for _, c := range shouldNotEqual { - if c.s1.Equals(c.s2) { - t.Errorf("expected cpusets to not be equal: s1: [%v], s2: [%v]", c.s1, c.s2) - } - } -} - -func TestCPUSetIsSubsetOf(t *testing.T) { - shouldBeSubset := []struct { - s1 CPUSet - s2 CPUSet - }{ - // A set is a subset of itself - {New(), New()}, - {New(5), New(5)}, - {New(1, 2, 3, 4, 5), New(1, 2, 3, 4, 5)}, - - // Empty set is a subset of every set - {New(), New(5)}, - {New(), New(1, 2, 3, 4, 5)}, - - {New(5), New(1, 2, 3, 4, 5)}, - {New(1, 2, 3), New(1, 2, 3, 4, 5)}, - {New(4, 5), New(1, 2, 3, 4, 5)}, - {New(2, 3), New(1, 2, 3, 4, 5)}, - } - - shouldNotBeSubset := []struct { - s1 CPUSet - s2 CPUSet - }{ - // A set with more elements is not a subset. - {New(5), New()}, - - // Disjoint set is not a subset. - {New(6), New(5)}, - } - - for _, c := range shouldBeSubset { - if !c.s1.IsSubsetOf(c.s2) { - t.Errorf("expected s1 to be a subset of s2: s1: [%v], s2: [%v]", c.s1, c.s2) - } - } - for _, c := range shouldNotBeSubset { - if c.s1.IsSubsetOf(c.s2) { - t.Errorf("expected s1 to not be a subset of s2: s1: [%v], s2: [%v]", c.s1, c.s2) - } - } -} - -func TestCPUSetUnion(t *testing.T) { - testCases := []struct { - s1 CPUSet - others []CPUSet - expected CPUSet - }{ - {New(5), []CPUSet{}, New(5)}, - - {New(), []CPUSet{New()}, New()}, - - {New(), []CPUSet{New(5)}, New(5)}, - {New(5), []CPUSet{New()}, New(5)}, - {New(5), []CPUSet{New(5)}, New(5)}, - - {New(), []CPUSet{New(1, 2, 3, 4, 5)}, New(1, 2, 3, 4, 5)}, - {New(1, 2, 3, 4, 5), []CPUSet{New()}, New(1, 2, 3, 4, 5)}, - {New(1, 2, 3, 4, 5), []CPUSet{New(1, 2, 3, 4, 5)}, New(1, 2, 3, 4, 5)}, - - {New(5), []CPUSet{New(1, 2, 3, 4, 5)}, New(1, 2, 3, 4, 5)}, - {New(1, 2, 3, 4, 5), []CPUSet{New(5)}, New(1, 2, 3, 4, 5)}, - - {New(1, 2), []CPUSet{New(3, 4, 5)}, New(1, 2, 3, 4, 5)}, - {New(1, 2, 3), []CPUSet{New(3, 4, 5)}, New(1, 2, 3, 4, 5)}, - - {New(), []CPUSet{New(1, 2, 3, 4, 5), New(4, 5)}, New(1, 2, 3, 4, 5)}, - {New(1, 2, 3, 4, 5), []CPUSet{New(), New(4)}, New(1, 2, 3, 4, 5)}, - {New(1, 2, 3, 4, 5), []CPUSet{New(1, 2, 3, 4, 5), New(1, 5)}, New(1, 2, 3, 4, 5)}, - } - - for _, c := range testCases { - result := c.s1.Union(c.others...) - if !result.Equals(c.expected) { - t.Errorf("expected the union of s1 and s2 to be [%v] (got [%v]), others: [%v]", c.expected, result, c.others) - } - } -} - -func TestCPUSetIntersection(t *testing.T) { - testCases := []struct { - s1 CPUSet - s2 CPUSet - expected CPUSet - }{ - {New(), New(), New()}, - - {New(), New(5), New()}, - {New(5), New(), New()}, - {New(5), New(5), New(5)}, - - {New(), New(1, 2, 3, 4, 5), New()}, - {New(1, 2, 3, 4, 5), New(), New()}, - {New(1, 2, 3, 4, 5), New(1, 2, 3, 4, 5), New(1, 2, 3, 4, 5)}, - - {New(5), New(1, 2, 3, 4, 5), New(5)}, - {New(1, 2, 3, 4, 5), New(5), New(5)}, - - {New(1, 2), New(3, 4, 5), New()}, - {New(1, 2, 3), New(3, 4, 5), New(3)}, - } - - for _, c := range testCases { - result := c.s1.Intersection(c.s2) - if !result.Equals(c.expected) { - t.Errorf("expected the intersection of s1 and s2 to be [%v] (got [%v]), s1: [%v], s2: [%v]", c.expected, result, c.s1, c.s2) - } - } -} - -func TestCPUSetDifference(t *testing.T) { - testCases := []struct { - s1 CPUSet - s2 CPUSet - expected CPUSet - }{ - {New(), New(), New()}, - - {New(), New(5), New()}, - {New(5), New(), New(5)}, - {New(5), New(5), New()}, - - {New(), New(1, 2, 3, 4, 5), New()}, - {New(1, 2, 3, 4, 5), New(), New(1, 2, 3, 4, 5)}, - {New(1, 2, 3, 4, 5), New(1, 2, 3, 4, 5), New()}, - - {New(5), New(1, 2, 3, 4, 5), New()}, - {New(1, 2, 3, 4, 5), New(5), New(1, 2, 3, 4)}, - - {New(1, 2), New(3, 4, 5), New(1, 2)}, - {New(1, 2, 3), New(3, 4, 5), New(1, 2)}, - } - - for _, c := range testCases { - result := c.s1.Difference(c.s2) - if !result.Equals(c.expected) { - t.Errorf("expected the difference of s1 and s2 to be [%v] (got [%v]), s1: [%v], s2: [%v]", c.expected, result, c.s1, c.s2) - } - } -} - -func TestCPUSetList(t *testing.T) { - testCases := []struct { - set CPUSet - expected []int // must be sorted - }{ - {New(), []int{}}, - {New(5), []int{5}}, - {New(1, 2, 3, 4, 5), []int{1, 2, 3, 4, 5}}, - {New(5, 4, 3, 2, 1), []int{1, 2, 3, 4, 5}}, - } - - for _, c := range testCases { - result := c.set.List() - if !reflect.DeepEqual(result, c.expected) { - t.Errorf("unexpected List() contents. got [%v] want [%v] (set: [%v])", result, c.expected, c.set) - } - - // We cannot rely on internal storage order details for a unit test. - // The best we can do is to sort the output of 'UnsortedList'. - result = c.set.UnsortedList() - sort.Ints(result) - if !reflect.DeepEqual(result, c.expected) { - t.Errorf("unexpected UnsortedList() contents. got [%v] want [%v] (set: [%v])", result, c.expected, c.set) - } - } -} - -func TestCPUSetString(t *testing.T) { - testCases := []struct { - set CPUSet - expected string - }{ - {New(), ""}, - {New(5), "5"}, - {New(1, 2, 3, 4, 5), "1-5"}, - {New(1, 2, 3, 5, 6, 8), "1-3,5-6,8"}, - } - - for _, c := range testCases { - result := c.set.String() - if result != c.expected { - t.Errorf("expected set as string to be %s (got \"%s\"), s: [%v]", c.expected, result, c.set) - } - } -} - -func TestParse(t *testing.T) { - positiveTestCases := []struct { - cpusetString string - expected CPUSet - }{ - {"", New()}, - {"5", New(5)}, - {"1,2,3,4,5", New(1, 2, 3, 4, 5)}, - {"1-5", New(1, 2, 3, 4, 5)}, - {"1-2,3-5", New(1, 2, 3, 4, 5)}, - {"5,4,3,2,1", New(1, 2, 3, 4, 5)}, // Range ordering - {"3-6,1-5", New(1, 2, 3, 4, 5, 6)}, // Overlapping ranges - {"3-3,5-5", New(3, 5)}, // Very short ranges - } - - for _, c := range positiveTestCases { - result, err := Parse(c.cpusetString) - if err != nil { - t.Errorf("expected error not to have occurred: %v", err) - } - if !result.Equals(c.expected) { - t.Errorf("expected string \"%s\" to parse as [%v] (got [%v])", c.cpusetString, c.expected, result) - } - } - - negativeTestCases := []string{ - // Non-numeric entries - "nonnumeric", "non-numeric", "no,numbers", "0-a", "a-0", "0,a", "a,0", "1-2,a,3-5", - // Incomplete sequences - "0,", "0,,", ",3", ",,3", "0,,3", - // Incomplete ranges and/or negative numbers - "-1", "1-", "1,2-,3", "1,-2,3", "-1--2", "--1", "1--", - // Reversed ranges - "3-0", "0--3"} - for _, c := range negativeTestCases { - result, err := Parse(c) - if err == nil { - t.Errorf("expected parse failure of \"%s\", but it succeeded as \"%s\"", c, result.String()) - } - } -} - -func TestClone(t *testing.T) { - original := New(1, 2, 3, 4, 5) - clone := original.Clone() - - if !original.Equals(clone) { - t.Errorf("expected clone [%v] to equal original [%v]", clone, original) - } -} diff --git a/test/e2e_node/cpu_manager_metrics_test.go b/test/e2e_node/cpu_manager_metrics_test.go index a477e1bf1bb..20f9b50e74f 100644 --- a/test/e2e_node/cpu_manager_metrics_test.go +++ b/test/e2e_node/cpu_manager_metrics_test.go @@ -31,12 +31,12 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/test/e2e/framework" e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper" admissionapi "k8s.io/pod-security-admission/api" + "k8s.io/utils/cpuset" ) var _ = SIGDescribe("CPU Manager Metrics [Serial][Feature:CPUManager]", func() { diff --git a/test/e2e_node/cpu_manager_test.go b/test/e2e_node/cpu_manager_test.go index f604ea8a009..070705b984c 100644 --- a/test/e2e_node/cpu_manager_test.go +++ b/test/e2e_node/cpu_manager_test.go @@ -31,9 +31,9 @@ import ( runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/types" admissionapi "k8s.io/pod-security-admission/api" + "k8s.io/utils/cpuset" "github.com/onsi/ginkgo/v2" "github.com/onsi/gomega" diff --git a/test/e2e_node/memory_manager_test.go b/test/e2e_node/memory_manager_test.go index 127f0b96761..0e584d85ecf 100644 --- a/test/e2e_node/memory_manager_test.go +++ b/test/e2e_node/memory_manager_test.go @@ -37,12 +37,12 @@ import ( kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/apis/podresources" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/cm/memorymanager/state" "k8s.io/kubernetes/pkg/kubelet/util" "k8s.io/kubernetes/test/e2e/framework" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" admissionapi "k8s.io/pod-security-admission/api" + "k8s.io/utils/cpuset" "k8s.io/utils/pointer" "github.com/onsi/ginkgo/v2" diff --git a/test/e2e_node/numa_alignment.go b/test/e2e_node/numa_alignment.go index 52462cfb838..5aa3b3f5d34 100644 --- a/test/e2e_node/numa_alignment.go +++ b/test/e2e_node/numa_alignment.go @@ -25,7 +25,7 @@ import ( "strings" v1 "k8s.io/api/core/v1" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" + "k8s.io/utils/cpuset" "k8s.io/kubernetes/test/e2e/framework" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" diff --git a/test/e2e_node/podresources_test.go b/test/e2e_node/podresources_test.go index 086d99f6e94..24c60e0aac3 100644 --- a/test/e2e_node/podresources_test.go +++ b/test/e2e_node/podresources_test.go @@ -34,10 +34,10 @@ import ( "k8s.io/kubernetes/pkg/kubelet/apis/podresources" podresourcesgrpc "k8s.io/kubernetes/pkg/kubelet/apis/podresources/grpc" "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager" - "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" "k8s.io/kubernetes/pkg/kubelet/util" testutils "k8s.io/kubernetes/test/utils" admissionapi "k8s.io/pod-security-admission/api" + "k8s.io/utils/cpuset" "github.com/onsi/ginkgo/v2" "github.com/onsi/gomega" diff --git a/pkg/kubelet/cm/cpuset/OWNERS b/vendor/k8s.io/utils/cpuset/OWNERS similarity index 57% rename from pkg/kubelet/cm/cpuset/OWNERS rename to vendor/k8s.io/utils/cpuset/OWNERS index d4c6257fd18..0ec2b085272 100644 --- a/pkg/kubelet/cm/cpuset/OWNERS +++ b/vendor/k8s.io/utils/cpuset/OWNERS @@ -1,7 +1,8 @@ # See the OWNERS docs at https://go.k8s.io/owners approvers: + - dchen1107 - derekwaynecarr -emeritus_approvers: - - ConnorDoyle - - vishh + - ffromani + - klueska + - SergeyKanzhelev diff --git a/pkg/kubelet/cm/cpuset/cpuset.go b/vendor/k8s.io/utils/cpuset/cpuset.go similarity index 98% rename from pkg/kubelet/cm/cpuset/cpuset.go rename to vendor/k8s.io/utils/cpuset/cpuset.go index f20a3fa029c..52912d95bcd 100644 --- a/pkg/kubelet/cm/cpuset/cpuset.go +++ b/vendor/k8s.io/utils/cpuset/cpuset.go @@ -23,6 +23,8 @@ limitations under the License. // See http://man7.org/linux/man-pages/man7/cpuset.7.html#FORMATS for details. // // Future work can migrate this to use a 'set' library, and relax the dubious 'immutable' property. +// +// This package was originally developed in the 'kubernetes' repository. package cpuset import ( diff --git a/vendor/modules.txt b/vendor/modules.txt index b0a68db8ac0..1b9ec458674 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -2363,6 +2363,7 @@ k8s.io/system-validators/validators k8s.io/utils/buffer k8s.io/utils/clock k8s.io/utils/clock/testing +k8s.io/utils/cpuset k8s.io/utils/exec k8s.io/utils/exec/testing k8s.io/utils/inotify