mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 12:18:16 +00:00 
			
		
		
		
	Depend on k8s.io/utils cpuset
Steps performed:
$ find . -name '*.go' -exec sed -i
's|k8s.io/kubernetes/pkg/kubelet/cm/cpuset|k8s.io/utils/cpuset|g' {} \
$ ./hack/update-vendor.sh
$ ./hack/update-gofmt.sh
$ git rm -r pkg/kubelet/cm/cpuset/
			
			
This commit is contained in:
		@@ -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"
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
@@ -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 (
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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.
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
@@ -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.
 | 
			
		||||
 
 | 
			
		||||
@@ -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{}
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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 (
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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{}
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ import (
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/klog/v2"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
 | 
			
		||||
	"k8s.io/utils/cpuset"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type stateMemory struct {
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ import (
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
 | 
			
		||||
	"k8s.io/utils/cpuset"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func TestClone(t *testing.T) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -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() {
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								pkg/kubelet/cm/cpuset/OWNERS → vendor/k8s.io/utils/cpuset/OWNERS
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								pkg/kubelet/cm/cpuset/OWNERS → vendor/k8s.io/utils/cpuset/OWNERS
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,7 +1,8 @@
 | 
			
		||||
# See the OWNERS docs at https://go.k8s.io/owners
 | 
			
		||||
 | 
			
		||||
approvers:
 | 
			
		||||
  - dchen1107
 | 
			
		||||
  - derekwaynecarr
 | 
			
		||||
emeritus_approvers:
 | 
			
		||||
  - ConnorDoyle
 | 
			
		||||
  - vishh
 | 
			
		||||
  - ffromani
 | 
			
		||||
  - klueska
 | 
			
		||||
  - SergeyKanzhelev
 | 
			
		||||
							
								
								
									
										2
									
								
								pkg/kubelet/cm/cpuset/cpuset.go → vendor/k8s.io/utils/cpuset/cpuset.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								pkg/kubelet/cm/cpuset/cpuset.go → vendor/k8s.io/utils/cpuset/cpuset.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -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 (
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user