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:
parent
9f46cbc6fa
commit
cede96336a
@ -92,7 +92,6 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap"
|
"k8s.io/kubernetes/pkg/kubelet/certificate/bootstrap"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm"
|
"k8s.io/kubernetes/pkg/kubelet/cm"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/config"
|
"k8s.io/kubernetes/pkg/kubelet/config"
|
||||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/eviction"
|
"k8s.io/kubernetes/pkg/kubelet/eviction"
|
||||||
@ -108,6 +107,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/util/rlimit"
|
"k8s.io/kubernetes/pkg/util/rlimit"
|
||||||
"k8s.io/kubernetes/pkg/volume/util/hostutil"
|
"k8s.io/kubernetes/pkg/volume/util/hostutil"
|
||||||
"k8s.io/kubernetes/pkg/volume/util/subpath"
|
"k8s.io/kubernetes/pkg/volume/util/subpath"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
"k8s.io/utils/exec"
|
"k8s.io/utils/exec"
|
||||||
netutils "k8s.io/utils/net"
|
netutils "k8s.io/utils/net"
|
||||||
)
|
)
|
||||||
|
@ -30,9 +30,9 @@ import (
|
|||||||
tracingapi "k8s.io/component-base/tracing/api/v1"
|
tracingapi "k8s.io/component-base/tracing/api/v1"
|
||||||
"k8s.io/kubernetes/pkg/features"
|
"k8s.io/kubernetes/pkg/features"
|
||||||
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
|
||||||
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
|
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
|
||||||
utiltaints "k8s.io/kubernetes/pkg/util/taints"
|
utiltaints "k8s.io/kubernetes/pkg/util/taints"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -31,7 +31,6 @@ import (
|
|||||||
podresourcesapi "k8s.io/kubelet/pkg/apis/podresources/v1"
|
podresourcesapi "k8s.io/kubelet/pkg/apis/podresources/v1"
|
||||||
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/apis/podresources"
|
"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/cm/devicemanager"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/config"
|
"k8s.io/kubernetes/pkg/kubelet/config"
|
||||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||||
@ -40,6 +39,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/pluginmanager/cache"
|
"k8s.io/kubernetes/pkg/kubelet/pluginmanager/cache"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/status"
|
"k8s.io/kubernetes/pkg/kubelet/status"
|
||||||
schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework"
|
schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ActivePodsFunc func() []*v1.Pod
|
type ActivePodsFunc func() []*v1.Pod
|
||||||
|
@ -24,7 +24,7 @@ import (
|
|||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
"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
|
// LoopControl controls the behavior of the cpu accumulator loop logic
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCPUAccumulatorFreeSockets(t *testing.T) {
|
func TestCPUAccumulatorFreeSockets(t *testing.T) {
|
||||||
|
@ -32,11 +32,11 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/cm/containermap"
|
"k8s.io/kubernetes/pkg/kubelet/cm/containermap"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
"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"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/config"
|
"k8s.io/kubernetes/pkg/kubelet/config"
|
||||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/status"
|
"k8s.io/kubernetes/pkg/kubelet/status"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ActivePodsFunc is a function that returns a list of pods to reconcile.
|
// 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/containermap"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
"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"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
type mockState struct {
|
type mockState struct {
|
||||||
|
@ -21,10 +21,10 @@ import (
|
|||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/containermap"
|
"k8s.io/kubernetes/pkg/kubelet/cm/containermap"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
"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/cm/topologymanager"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/config"
|
"k8s.io/kubernetes/pkg/kubelet/config"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/status"
|
"k8s.io/kubernetes/pkg/kubelet/status"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
type fakeManager struct {
|
type fakeManager struct {
|
||||||
|
@ -20,8 +20,8 @@ import (
|
|||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
"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/cm/topologymanager"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Policy implements logic for pod container to CPU assignment.
|
// Policy implements logic for pod container to CPU assignment.
|
||||||
|
@ -22,8 +22,8 @@ import (
|
|||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
"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/cm/topologymanager"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
type nonePolicy struct{}
|
type nonePolicy struct{}
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNonePolicyName(t *testing.T) {
|
func TestNonePolicyName(t *testing.T) {
|
||||||
|
@ -27,10 +27,10 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/features"
|
"k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
"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"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask"
|
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/metrics"
|
"k8s.io/kubernetes/pkg/kubelet/metrics"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -27,9 +27,9 @@ import (
|
|||||||
pkgfeatures "k8s.io/kubernetes/pkg/features"
|
pkgfeatures "k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
"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"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask"
|
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
type staticPolicyTest struct {
|
type staticPolicyTest struct {
|
||||||
|
@ -17,7 +17,7 @@ limitations under the License.
|
|||||||
package state
|
package state
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ContainerCPUAssignments type used in cpu manager state
|
// ContainerCPUAssignments type used in cpu manager state
|
||||||
|
@ -25,7 +25,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/checkpointmanager"
|
"k8s.io/kubernetes/pkg/kubelet/checkpointmanager"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/checkpointmanager/errors"
|
"k8s.io/kubernetes/pkg/kubelet/checkpointmanager/errors"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/containermap"
|
"k8s.io/kubernetes/pkg/kubelet/cm/containermap"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ State = &stateCheckpoint{}
|
var _ State = &stateCheckpoint{}
|
||||||
|
@ -26,7 +26,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/checkpointmanager"
|
"k8s.io/kubernetes/pkg/kubelet/checkpointmanager"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/containermap"
|
"k8s.io/kubernetes/pkg/kubelet/cm/containermap"
|
||||||
testutil "k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state/testing"
|
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"
|
const testingCheckpoint = "cpumanager_checkpoint_test"
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"k8s.io/klog/v2"
|
"k8s.io/klog/v2"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
type stateMemory struct {
|
type stateMemory struct {
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestClone(t *testing.T) {
|
func TestClone(t *testing.T) {
|
||||||
|
@ -21,7 +21,7 @@ import (
|
|||||||
|
|
||||||
cadvisorapi "github.com/google/cadvisor/info/v1"
|
cadvisorapi "github.com/google/cadvisor/info/v1"
|
||||||
"k8s.io/klog/v2"
|
"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
|
// 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"
|
cadvisorapi "github.com/google/cadvisor/info/v1"
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_Discover(t *testing.T) {
|
func Test_Discover(t *testing.T) {
|
||||||
|
@ -29,9 +29,9 @@ import (
|
|||||||
pkgfeatures "k8s.io/kubernetes/pkg/features"
|
pkgfeatures "k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/state"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager/topology"
|
"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"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask"
|
"k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/bitmask"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
type testCase struct {
|
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"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics"
|
e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics"
|
||||||
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
|
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
|
||||||
e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
|
e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
|
||||||
admissionapi "k8s.io/pod-security-admission/api"
|
admissionapi "k8s.io/pod-security-admission/api"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = SIGDescribe("CPU Manager Metrics [Serial][Feature:CPUManager]", func() {
|
var _ = SIGDescribe("CPU Manager Metrics [Serial][Feature:CPUManager]", func() {
|
||||||
|
@ -31,9 +31,9 @@ import (
|
|||||||
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
|
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
|
||||||
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/types"
|
"k8s.io/kubernetes/pkg/kubelet/types"
|
||||||
admissionapi "k8s.io/pod-security-admission/api"
|
admissionapi "k8s.io/pod-security-admission/api"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
|
|
||||||
"github.com/onsi/ginkgo/v2"
|
"github.com/onsi/ginkgo/v2"
|
||||||
"github.com/onsi/gomega"
|
"github.com/onsi/gomega"
|
||||||
|
@ -37,12 +37,12 @@ import (
|
|||||||
kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1"
|
kubeletpodresourcesv1 "k8s.io/kubelet/pkg/apis/podresources/v1"
|
||||||
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/apis/podresources"
|
"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/cm/memorymanager/state"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/util"
|
"k8s.io/kubernetes/pkg/kubelet/util"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
|
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
|
||||||
admissionapi "k8s.io/pod-security-admission/api"
|
admissionapi "k8s.io/pod-security-admission/api"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
"k8s.io/utils/pointer"
|
"k8s.io/utils/pointer"
|
||||||
|
|
||||||
"github.com/onsi/ginkgo/v2"
|
"github.com/onsi/ginkgo/v2"
|
||||||
|
@ -25,7 +25,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
"k8s.io/utils/cpuset"
|
||||||
|
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
|
e2epod "k8s.io/kubernetes/test/e2e/framework/pod"
|
||||||
|
@ -34,10 +34,10 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/kubelet/apis/podresources"
|
"k8s.io/kubernetes/pkg/kubelet/apis/podresources"
|
||||||
podresourcesgrpc "k8s.io/kubernetes/pkg/kubelet/apis/podresources/grpc"
|
podresourcesgrpc "k8s.io/kubernetes/pkg/kubelet/apis/podresources/grpc"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
|
"k8s.io/kubernetes/pkg/kubelet/cm/cpumanager"
|
||||||
"k8s.io/kubernetes/pkg/kubelet/cm/cpuset"
|
|
||||||
"k8s.io/kubernetes/pkg/kubelet/util"
|
"k8s.io/kubernetes/pkg/kubelet/util"
|
||||||
testutils "k8s.io/kubernetes/test/utils"
|
testutils "k8s.io/kubernetes/test/utils"
|
||||||
admissionapi "k8s.io/pod-security-admission/api"
|
admissionapi "k8s.io/pod-security-admission/api"
|
||||||
|
"k8s.io/utils/cpuset"
|
||||||
|
|
||||||
"github.com/onsi/ginkgo/v2"
|
"github.com/onsi/ginkgo/v2"
|
||||||
"github.com/onsi/gomega"
|
"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
|
# See the OWNERS docs at https://go.k8s.io/owners
|
||||||
|
|
||||||
approvers:
|
approvers:
|
||||||
|
- dchen1107
|
||||||
- derekwaynecarr
|
- derekwaynecarr
|
||||||
emeritus_approvers:
|
- ffromani
|
||||||
- ConnorDoyle
|
- klueska
|
||||||
- vishh
|
- 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.
|
// 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.
|
// 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
|
package cpuset
|
||||||
|
|
||||||
import (
|
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/buffer
|
||||||
k8s.io/utils/clock
|
k8s.io/utils/clock
|
||||||
k8s.io/utils/clock/testing
|
k8s.io/utils/clock/testing
|
||||||
|
k8s.io/utils/cpuset
|
||||||
k8s.io/utils/exec
|
k8s.io/utils/exec
|
||||||
k8s.io/utils/exec/testing
|
k8s.io/utils/exec/testing
|
||||||
k8s.io/utils/inotify
|
k8s.io/utils/inotify
|
||||||
|
Loading…
Reference in New Issue
Block a user