From a18739bbeb9ca72c84d9be86506d985f4255381a Mon Sep 17 00:00:00 2001 From: Jason Liu Date: Wed, 6 Apr 2022 22:16:12 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Remove=20unused=20code=20(#35)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * remove unused code Signed-off-by: Jason Liu * fix static check Signed-off-by: Jason Liu --- Makefile | 6 +- pkg/koordlet/audit/auditor_test.go | 3 +- pkg/koordlet/audit/logger_test.go | 2 +- pkg/koordlet/koordlet.go | 1 - pkg/koordlet/metriccache/util.go | 2 +- pkg/koordlet/metricsadvisor/collector.go | 2 +- pkg/koordlet/pleg/watcher_other.go | 25 ------- pkg/koordlet/reporter/reporter.go | 19 ++--- pkg/koordlet/resmanager/cpu_suppress.go | 7 +- pkg/koordlet/resmanager/metrics_query.go | 56 +------------- pkg/koordlet/resmanager/resmanager.go | 2 +- pkg/koordlet/util/container_test.go | 4 +- pkg/koordlet/util/node.go | 12 --- pkg/koordlet/util/pod.go | 10 --- pkg/koordlet/util/resource.go | 74 ------------------- pkg/koordlet/util/util.go | 24 ------ pkg/slo-controller/config/config.go | 2 +- .../noderesource/configmap_event_handler.go | 2 +- .../noderesource/noderesource.go | 3 +- .../nodeslo/nodeslo_controller.go | 3 +- .../nodeslo/nodeslo_controller_test.go | 20 ++--- .../nodeslo/resource_strategy.go | 2 +- .../nodeslo/resource_strategy_test.go | 2 +- pkg/util/client/delegating_client.go | 2 +- pkg/util/metrics/leadership/leader.go | 4 +- pkg/util/resource.go | 1 + pkg/util/utils.go | 4 +- pkg/webhook/server.go | 5 -- 28 files changed, 42 insertions(+), 257 deletions(-) delete mode 100644 pkg/koordlet/util/resource.go diff --git a/Makefile b/Makefile index f68103206..53fcca891 100644 --- a/Makefile +++ b/Makefile @@ -81,7 +81,7 @@ test: manifests generate fmt vet envtest ## Run tests. ##@ Build .PHONY: build -build: generate fmt vet lint build-koordlet build-koord-manager +build: generate fmt vet lint build-koordlet build-koord-manager build-koord-scheduler .PHONY: build-koordlet build-koordlet: ## Build koordlet binary. @@ -91,6 +91,10 @@ build-koordlet: ## Build koordlet binary. build-koord-manager: ## Build koord-manager binary. go build -o bin/koord-manager cmd/koord-manager/main.go +.PHONY: build-koord-scheduler +build-koord-scheduler: ## Build koord-scheduler binary. + go build -o bin/koord-scheduler cmd/koord-scheduler/main.go + .PHONY: docker-build docker-build: test docker-build-koordlet docker-build-koord-manager docker-build-koord-scheduler diff --git a/pkg/koordlet/audit/auditor_test.go b/pkg/koordlet/audit/auditor_test.go index 8ed399dbc..d4ca7a896 100644 --- a/pkg/koordlet/audit/auditor_test.go +++ b/pkg/koordlet/audit/auditor_test.go @@ -32,7 +32,6 @@ import ( type TestServer struct { l net.Listener server *http.Server - port int } func (t *TestServer) Serve() { @@ -121,7 +120,7 @@ func TestAuditorLogger(t *testing.T) { if len(response.Events) != 1 { t.Errorf("failed to load events, expected %d actual %d", 1, len(response.Events)) } - if bytes.Compare(blocks[len(blocks)-11], []byte(response.Events[0].Message)) != 0 { + if !bytes.Equal(blocks[len(blocks)-11], []byte(response.Events[0].Message)) { t.Errorf("failed to load events, expected %s actual %s", blocks[len(blocks)-11], response.Events[0].Message) } diff --git a/pkg/koordlet/audit/logger_test.go b/pkg/koordlet/audit/logger_test.go index 1c32a243d..1858e465b 100644 --- a/pkg/koordlet/audit/logger_test.go +++ b/pkg/koordlet/audit/logger_test.go @@ -102,7 +102,7 @@ func TestLogReader(t *testing.T) { lines = append(lines, line) - if bytes.Compare(line, blocks[(i+1)%2]) != 0 { + if !bytes.Equal(line, blocks[(i+1)%2]) { t.Errorf("failed to read line expected\n: %s\nactual: %v", blocks[(i+1)%2], line) } } diff --git a/pkg/koordlet/koordlet.go b/pkg/koordlet/koordlet.go index 7c7a91ad9..763bb5a2e 100644 --- a/pkg/koordlet/koordlet.go +++ b/pkg/koordlet/koordlet.go @@ -58,7 +58,6 @@ type daemon struct { metricCache metriccache.MetricCache reporter reporter.Reporter resManager resmanager.ResManager - pleg pleg.Pleg } func NewDaemon(config *config.Configuration) (Daemon, error) { diff --git a/pkg/koordlet/metriccache/util.go b/pkg/koordlet/metriccache/util.go index 47d326e90..678387bc6 100644 --- a/pkg/koordlet/metriccache/util.go +++ b/pkg/koordlet/metriccache/util.go @@ -124,7 +124,7 @@ func fieldLastOfMetricList(metricsList interface{}, aggregateParam AggregatePara timestamp, ok := fieldTimeValue.Interface().(time.Time) if !ok { - return 0, fmt.Errorf("Timestamp field type must be *time.Time, and value must not be nil. %v is illegal! ", fieldTimeValue) + return 0, fmt.Errorf("timestamp field type must be *time.Time, and value must not be nil. %v is illegal! ", fieldTimeValue) } if timestamp.UnixNano() > lastTime { lastTime = timestamp.UnixNano() diff --git a/pkg/koordlet/metricsadvisor/collector.go b/pkg/koordlet/metricsadvisor/collector.go index 9fb75986e..1bac82403 100644 --- a/pkg/koordlet/metricsadvisor/collector.go +++ b/pkg/koordlet/metricsadvisor/collector.go @@ -60,10 +60,10 @@ type contextRecord struct { type collectContext struct { // record latest cpu stat for calculate resource used + // lastBeCPUStat contextRecord lastNodeCPUStat contextRecord lastPodCPUStat sync.Map lastContainerCPUStat sync.Map - lastBeCPUStat contextRecord lastPodCPUThrottled sync.Map lastContainerCPUThrottled sync.Map diff --git a/pkg/koordlet/pleg/watcher_other.go b/pkg/koordlet/pleg/watcher_other.go index d332ea117..3aed21914 100644 --- a/pkg/koordlet/pleg/watcher_other.go +++ b/pkg/koordlet/pleg/watcher_other.go @@ -32,31 +32,6 @@ func NewWatcher() (Watcher, error) { return nil, errNotSupported } -type notSupportedWatcher struct { -} - -func (w *notSupportedWatcher) Close() error { - return errNotSupported -} - -func (w *notSupportedWatcher) AddWatch(path string) error { - return errNotSupported -} - -func (w *notSupportedWatcher) RemoveWatch(path string) error { - return errNotSupported -} - -func (w *notSupportedWatcher) Event() chan *inotify.Event { - ch := make(chan *inotify.Event) - close(ch) - return ch -} - -func (w *notSupportedWatcher) Error() chan error { - return make(chan error) -} - func TypeOf(event *inotify.Event) EventType { if event.Mask&IN_CREATE != 0 && event.Mask&IN_ISDIR != 0 { return DirCreated diff --git a/pkg/koordlet/reporter/reporter.go b/pkg/koordlet/reporter/reporter.go index 508d50e50..e5a7daf29 100644 --- a/pkg/koordlet/reporter/reporter.go +++ b/pkg/koordlet/reporter/reporter.go @@ -25,7 +25,6 @@ import ( "golang.org/x/time/rate" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -45,7 +44,7 @@ import ( listerbeta1 "github.com/koordinator-sh/koordinator/pkg/client/listers/slo/v1alpha1" "github.com/koordinator-sh/koordinator/pkg/koordlet/metriccache" "github.com/koordinator-sh/koordinator/pkg/koordlet/statesinformer" - "github.com/koordinator-sh/koordinator/pkg/koordlet/util" + "github.com/koordinator-sh/koordinator/pkg/util" ) const ( @@ -84,7 +83,7 @@ func NewReporter(cfg *Config, kubeClient *clientset.Clientset, crdClient *client eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartRecordingToSink(&clientcorev1.EventSinkImpl{Interface: kubeClient.CoreV1().Events("")}) - recorder := eventBroadcaster.NewRecorder(scheme, v1.EventSource{Component: "koordlet-reporter", Host: nodeName}) + recorder := eventBroadcaster.NewRecorder(scheme, corev1.EventSource{Component: "koordlet-reporter", Host: nodeName}) r := &reporter{ config: cfg, @@ -219,12 +218,6 @@ func (r *reporter) isNodeMetricInited() bool { return r.nodeMetric != nil } -func (r *reporter) getNodeMetricSpec() *slov1alpha1.NodeMetricSpec { - r.rwMutex.RLock() - defer r.rwMutex.RUnlock() - return r.nodeMetric.Spec.DeepCopy() -} - func (r *reporter) createNodeMetric(nodeMetric *slov1alpha1.NodeMetric) { r.rwMutex.Lock() defer r.rwMutex.Unlock() @@ -338,8 +331,8 @@ func (su *statusUpdater) updateStatus(nodeMetric *slov1alpha1.NodeMetric, newSta func convertNodeMetricToResourceMap(nodeMetric *metriccache.NodeResourceMetric) *slov1alpha1.ResourceMap { return &slov1alpha1.ResourceMap{ ResourceList: corev1.ResourceList{ - v1.ResourceCPU: nodeMetric.CPUUsed.CPUUsed, - v1.ResourceMemory: nodeMetric.MemoryUsed.MemoryWithoutCache, + corev1.ResourceCPU: nodeMetric.CPUUsed.CPUUsed, + corev1.ResourceMemory: nodeMetric.MemoryUsed.MemoryWithoutCache, }, } } @@ -347,8 +340,8 @@ func convertNodeMetricToResourceMap(nodeMetric *metriccache.NodeResourceMetric) func convertPodMetricToResourceMap(podMetric *metriccache.PodResourceMetric) *slov1alpha1.ResourceMap { return &slov1alpha1.ResourceMap{ ResourceList: corev1.ResourceList{ - v1.ResourceCPU: podMetric.CPUUsed.CPUUsed, - v1.ResourceMemory: podMetric.MemoryUsed.MemoryWithoutCache, + corev1.ResourceCPU: podMetric.CPUUsed.CPUUsed, + corev1.ResourceMemory: podMetric.MemoryUsed.MemoryWithoutCache, }, } } diff --git a/pkg/koordlet/resmanager/cpu_suppress.go b/pkg/koordlet/resmanager/cpu_suppress.go index f90dc234e..68a9796db 100644 --- a/pkg/koordlet/resmanager/cpu_suppress.go +++ b/pkg/koordlet/resmanager/cpu_suppress.go @@ -45,7 +45,7 @@ var ( cfsPeriod int64 = 100000 beMinQuota int64 = 2000 - beMaxIncreaseCPUPercent = 0.1 //scale up slow + beMaxIncreaseCPUPercent = 0.1 // scale up slow ) type suppressPolicyStatus string @@ -108,7 +108,6 @@ func writeBECgroupsCPUSet(paths []string, cpusetStr string, isReversed bool) { klog.Warningf("failed to write be cgroup cpuset: path %s, err %s", paths[i], err) } } - return } // calculateBESuppressCPU calculates the quantity of cpuset cpus for suppressing be pods @@ -344,8 +343,6 @@ func (r *CPUSuppress) suppressBECPU() { r.suppressPolicyStatuses[string(slov1alpha1.CPUSetPolicy)] = policyUsing r.recoverCFSQuotaIfNeed() } - - return } func adjustByCPUSet(cpusetQuantity *resource.Quantity, nodeCPUInfo *metriccache.NodeCPUInfo) { @@ -390,7 +387,6 @@ func (r *CPUSuppress) recoverCPUSetIfNeed() { klog.V(6).Infof("recover bestEffort cpuset, cpuset %v", rootCPUSet) writeBECgroupsCPUSet(cpusetCgroupPaths, cpusetStr, false) r.suppressPolicyStatuses[string(slov1alpha1.CPUSetPolicy)] = policyRecovered - return } func adjustByCfsQuota(cpuQuantity *resource.Quantity, node *corev1.Node) { @@ -439,5 +435,4 @@ func (r *CPUSuppress) recoverCFSQuotaIfNeed() { return } r.suppressPolicyStatuses[string(slov1alpha1.CPUCfsQuotaPolicy)] = policyRecovered - return } diff --git a/pkg/koordlet/resmanager/metrics_query.go b/pkg/koordlet/resmanager/metrics_query.go index 12c42a961..5c8dcf0a8 100644 --- a/pkg/koordlet/resmanager/metrics_query.go +++ b/pkg/koordlet/resmanager/metrics_query.go @@ -26,12 +26,7 @@ import ( "github.com/koordinator-sh/koordinator/pkg/koordlet/statesinformer" ) -func (r *resmanager) collectNodeMetricsAvg(windowSeconds int64) metriccache.NodeResourceQueryResult { - queryParam := generateQueryParamsAvg(windowSeconds) - return r.collectNodeMetric(queryParam) -} - -//query data for 2 * collectResUsedIntervalSeconds +// query data for 2 * collectResUsedIntervalSeconds func (r *resmanager) collectNodeAndPodMetricLast() (*metriccache.NodeResourceMetric, []*metriccache.PodResourceMetric) { queryParam := generateQueryParamsLast(r.collectResUsedIntervalSeconds * 2) return r.collectNodeAndPodMetrics(queryParam) @@ -84,55 +79,6 @@ func (r *resmanager) collectPodMetric(podMeta *statesinformer.PodMeta, queryPara return queryResult } -func (r *resmanager) collectContainerResMetricLast(containerID *string) metriccache.ContainerResourceQueryResult { - if containerID == nil { - return metriccache.ContainerResourceQueryResult{ - QueryResult: metriccache.QueryResult{Error: fmt.Errorf("container is nil")}, - } - } - queryParam := generateQueryParamsLast(r.collectResUsedIntervalSeconds * 2) - queryResult := r.metricCache.GetContainerResourceMetric(containerID, queryParam) - if queryResult.Error != nil { - klog.Warningf("get container %v resource metric failed, error %v", containerID, queryResult.Error) - return queryResult - } - if queryResult.Metric == nil { - klog.Warningf("container %v metric not exist", containerID) - return queryResult - } - return queryResult -} - -func (r *resmanager) collectContainerThrottledMetricLast(containerID *string) metriccache.ContainerThrottledQueryResult { - if containerID == nil { - return metriccache.ContainerThrottledQueryResult{ - QueryResult: metriccache.QueryResult{Error: fmt.Errorf("container is nil")}, - } - } - queryParam := generateQueryParamsLast(r.collectResUsedIntervalSeconds * 2) - queryResult := r.metricCache.GetContainerThrottledMetric(containerID, queryParam) - if queryResult.Error != nil { - klog.Warningf("get container %v throttled metric failed, error %v", containerID, queryResult.Error) - return queryResult - } - if queryResult.Metric == nil { - klog.Warningf("container %v metric not exist", containerID) - return queryResult - } - return queryResult -} - -func generateQueryParamsAvg(windowSeconds int64) *metriccache.QueryParam { - end := time.Now() - start := end.Add(-time.Duration(windowSeconds) * time.Second) - queryParam := &metriccache.QueryParam{ - Aggregate: metriccache.AggregationTypeAVG, - Start: &start, - End: &end, - } - return queryParam -} - func generateQueryParamsLast(windowSeconds int64) *metriccache.QueryParam { end := time.Now() start := end.Add(-time.Duration(windowSeconds) * time.Second) diff --git a/pkg/koordlet/resmanager/resmanager.go b/pkg/koordlet/resmanager/resmanager.go index 67a656473..5cff308c3 100644 --- a/pkg/koordlet/resmanager/resmanager.go +++ b/pkg/koordlet/resmanager/resmanager.go @@ -210,7 +210,7 @@ func NewResManager(cfg *Config, schema *apiruntime.Scheme, kubeClient clientset. // isFeatureDisabled returns whether the featuregate is disabled by nodeSLO config func isFeatureDisabled(nodeSLO *slov1alpha1.NodeSLO, feature featuregate.Feature) (bool, error) { - if nodeSLO == nil || &nodeSLO.Spec == nil { + if nodeSLO == nil || nodeSLO.Spec == (slov1alpha1.NodeSLOSpec{}) { return false, fmt.Errorf("cannot parse feature config for invalid nodeSLO %v", nodeSLO) } diff --git a/pkg/koordlet/util/container_test.go b/pkg/koordlet/util/container_test.go index 091daa1f2..51b5a1c52 100644 --- a/pkg/koordlet/util/container_test.go +++ b/pkg/koordlet/util/container_test.go @@ -334,11 +334,11 @@ func Test_FindContainerIdAndStatusByName(t *testing.T) { ContainerStatuses: []corev1.ContainerStatus{ { Name: "main", - ContainerID: fmt.Sprintf("%s", "main"), + ContainerID: "main", }, { Name: "sidecar", - ContainerID: fmt.Sprintf("%s", "sidecar"), + ContainerID: "sidecar", }, }, }, diff --git a/pkg/koordlet/util/node.go b/pkg/koordlet/util/node.go index 99f22303d..bb0af8de2 100644 --- a/pkg/koordlet/util/node.go +++ b/pkg/koordlet/util/node.go @@ -17,27 +17,15 @@ limitations under the License. package util import ( - "fmt" "path" "strconv" "strings" corev1 "k8s.io/api/core/v1" - slov1alpha1 "github.com/koordinator-sh/koordinator/apis/slo/v1alpha1" sysutil "github.com/koordinator-sh/koordinator/pkg/koordlet/util/system" ) -// GetNodeKey returns a generated key with given node -func GetNodeKey(node *corev1.Node) string { - return fmt.Sprintf("%v/%v", node.GetNamespace(), node.GetName()) -} - -// GetNodeMetricKey returns a generated key with given nodeMetric -func GetNodeMetricKey(nodeMetric *slov1alpha1.NodeMetric) string { - return fmt.Sprintf("%v/%v", nodeMetric.GetNamespace(), nodeMetric.GetName()) -} - // @output like kubepods.slice/kubepods-besteffort.slice/ func GetKubeQosRelativePath(qosClass corev1.PodQOSClass) string { return GetPodCgroupDirWithKube(sysutil.CgroupPathFormatter.QOSDirFn(qosClass)) diff --git a/pkg/koordlet/util/pod.go b/pkg/koordlet/util/pod.go index bec1ae1ef..ae8ed3a41 100644 --- a/pkg/koordlet/util/pod.go +++ b/pkg/koordlet/util/pod.go @@ -17,7 +17,6 @@ limitations under the License. package util import ( - "fmt" "io/ioutil" "path" "strconv" @@ -27,7 +26,6 @@ import ( resources "k8s.io/apiserver/pkg/quota/v1" "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" - slov1alpha1 "github.com/koordinator-sh/koordinator/apis/slo/v1alpha1" sysutil "github.com/koordinator-sh/koordinator/pkg/koordlet/util/system" ) @@ -220,14 +218,6 @@ func GetPodRequest(pod *corev1.Pod) corev1.ResourceList { return getPodRequestFromContainers(pod) } -func GetPodKey(pod *corev1.Pod) string { - return fmt.Sprintf("%v/%v", pod.GetNamespace(), pod.GetName()) -} - -func GetPodMetricKey(podMetric *slov1alpha1.PodMetricInfo) string { - return fmt.Sprintf("%v/%v", podMetric.Namespace, podMetric.Name) -} - func GetKubeQosClass(pod *corev1.Pod) corev1.PodQOSClass { qosClass := pod.Status.QOSClass if qosClass == "" { diff --git a/pkg/koordlet/util/resource.go b/pkg/koordlet/util/resource.go deleted file mode 100644 index 2486aa3f8..000000000 --- a/pkg/koordlet/util/resource.go +++ /dev/null @@ -1,74 +0,0 @@ -/* -Copyright 2022 The Koordinator 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 util - -import ( - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" -) - -func NewZeroResourceList() corev1.ResourceList { - return corev1.ResourceList{ - corev1.ResourceCPU: *resource.NewQuantity(0, resource.DecimalSI), - corev1.ResourceMemory: *resource.NewQuantity(0, resource.BinarySI), - } -} - -// MultiplyMilliQuant scales quantity by factor -func MultiplyMilliQuant(quant resource.Quantity, factor float64) resource.Quantity { - milliValue := quant.MilliValue() - newMilliValue := int64(float64(milliValue) * factor) - newQuant := resource.NewMilliQuantity(newMilliValue, quant.Format) - return *newQuant -} - -// MultiplyQuant scales quantity by factor -func MultiplyQuant(quant resource.Quantity, factor float64) resource.Quantity { - value := quant.Value() - newValue := int64(float64(value) * factor) - newQuant := resource.NewQuantity(newValue, quant.Format) - return *newQuant -} - -// GetMilliQuant returns the milli-valued quantity -func GetMilliQuant(quant resource.Quantity) resource.Quantity { - milliValue := quant.MilliValue() - newQuant := resource.NewQuantity(milliValue, quant.Format) - return *newQuant -} - -// IsResourceDiff returns whether the new resource has big enough difference with the old one or not -func IsResourceDiff(oldResourceList, newResourceList corev1.ResourceList, resourceName string, diffThreshold float64) bool { - // consider the quantity of the non-exist resource as zero - newQuant := 0.0 - newResource, newExist := newResourceList[corev1.ResourceName(resourceName)] - if newExist { - newQuant = float64(newResource.MilliValue()) - } - - oldQuant := 0.0 - oldResource, oldExist := oldResourceList[corev1.ResourceName(resourceName)] - if oldExist { - oldQuant = float64(oldResource.MilliValue()) - } - - if newExist != oldExist { - return true - } - - return newQuant >= oldQuant*(1+diffThreshold) || newQuant <= oldQuant*(1-diffThreshold) -} diff --git a/pkg/koordlet/util/util.go b/pkg/koordlet/util/util.go index 829268fbb..1b9604353 100644 --- a/pkg/koordlet/util/util.go +++ b/pkg/koordlet/util/util.go @@ -17,11 +17,9 @@ limitations under the License. package util import ( - "encoding/json" "fmt" "io/ioutil" "path/filepath" - "reflect" "sort" "strconv" "strings" @@ -29,11 +27,6 @@ import ( sysutil "github.com/koordinator-sh/koordinator/pkg/koordlet/util/system" ) -func DumpJSON(o interface{}) string { - j, _ := json.Marshal(o) - return string(j) -} - // MergeCPUSet merges the old cpuset with the new one, and also deduplicate and keeps a desc order by processor ids // e.g. [1,0], [3,2,2,1] => [3,2,1,0] func MergeCPUSet(old, new []int32) []int32 { @@ -111,23 +104,6 @@ func WriteCgroupCPUSet(cgroupFileDir, cpusetStr string) error { return ioutil.WriteFile(filepath.Join(cgroupFileDir, sysutil.CPUSFileName), []byte(cpusetStr), 0644) } -// MergeCfg merges the old cfg with the new one, where new's values take precedence over old's when both fields exist. -// It would throw an error if: -// 1. either of the inputs was nil; -// 2. the inputs were not a pointer of the same json struct. -func MergeCfg(old, new interface{}) (interface{}, error) { - if old == nil || new == nil { - return nil, fmt.Errorf("illegal input type, neither of the inputs could be nil") - } - if reflect.TypeOf(old) != reflect.TypeOf(new) || reflect.TypeOf(old).Kind() != reflect.Ptr { - return nil, fmt.Errorf("illegal input type, the inputs should be pointers of the same json struct") - } - // ignore err for serializing/deserializing the same struct type - data, _ := json.Marshal(new) - _ = json.Unmarshal(data, &old) - return old, nil -} - func MinInt64(i, j int64) int64 { if i < j { return i diff --git a/pkg/slo-controller/config/config.go b/pkg/slo-controller/config/config.go index 627f3d263..a63fa614e 100644 --- a/pkg/slo-controller/config/config.go +++ b/pkg/slo-controller/config/config.go @@ -122,7 +122,7 @@ func GetNodeColocationStrategy(cfg *ColocationCfg, node *corev1.Node) *Colocatio } if selector.Matches(nodeLabels) { if nodeCfg.NodeSelector != nil { - if merged, err := util.Merge(strategy, &nodeCfg.ColocationStrategy); err != nil { + if merged, err := util.MergeCfg(strategy, &nodeCfg.ColocationStrategy); err != nil { continue } else { strategy, _ = merged.(*ColocationStrategy) diff --git a/pkg/slo-controller/noderesource/configmap_event_handler.go b/pkg/slo-controller/noderesource/configmap_event_handler.go index 781c0e47c..81ac56936 100644 --- a/pkg/slo-controller/noderesource/configmap_event_handler.go +++ b/pkg/slo-controller/noderesource/configmap_event_handler.go @@ -104,7 +104,7 @@ func (n *EnqueueRequestForConfigMap) syncColocationCfgIfChanged(configMap *corev } defaultConfig := config.NewDefaultColocationCfg() - merged, _ := util.Merge(&defaultConfig.ColocationStrategy, &cfg.ColocationStrategy) + merged, _ := util.MergeCfg(&defaultConfig.ColocationStrategy, &cfg.ColocationStrategy) cfg.ColocationStrategy = *(merged.(*config.ColocationStrategy)) if !config.IsColocationStrategyValid(&cfg.ColocationStrategy) { diff --git a/pkg/slo-controller/noderesource/noderesource.go b/pkg/slo-controller/noderesource/noderesource.go index 82cc79a3d..fd49fb958 100644 --- a/pkg/slo-controller/noderesource/noderesource.go +++ b/pkg/slo-controller/noderesource/noderesource.go @@ -73,7 +73,6 @@ func (s *SyncContext) Store(key string, value time.Time) { s.lock.Lock() defer s.lock.Unlock() s.contextMap[key] = value - return } func (s *SyncContext) Delete(key string) { @@ -98,7 +97,7 @@ func (r *NodeResourceReconciler) isColocationCfgDisabled(node *corev1.Node) bool r.config.Lock() defer r.config.Unlock() - if r.config.Enable == nil || *r.config.Enable == false { + if r.config.Enable == nil || !*r.config.Enable { return true } diff --git a/pkg/slo-controller/nodeslo/nodeslo_controller.go b/pkg/slo-controller/nodeslo/nodeslo_controller.go index 4e459ccbb..90b50d47b 100644 --- a/pkg/slo-controller/nodeslo/nodeslo_controller.go +++ b/pkg/slo-controller/nodeslo/nodeslo_controller.go @@ -29,7 +29,6 @@ import ( "github.com/go-logr/logr" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" - apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/klog/v2" @@ -85,7 +84,7 @@ func (r *NodeSLOReconciler) getNodeSLOSpec(node *corev1.Node, oldSpec *slov1alph keyTypes := types.NamespacedName{Namespace: config.ConfigNameSpace, Name: config.SLOCtrlConfigMap} if err := r.Client.Get(context.TODO(), keyTypes, configMap); err != nil { // default when the configmap does not exist - if apierrors.IsNotFound(err) { + if errors.IsNotFound(err) { klog.Infof("getNodeSLOSpec(): config map %s/%s not exist, err:%s", config.ConfigNameSpace, config.SLOCtrlConfigMap, err) return nodeSLOSpec, nil diff --git a/pkg/slo-controller/nodeslo/nodeslo_controller_test.go b/pkg/slo-controller/nodeslo/nodeslo_controller_test.go index 5092310c3..9a843a6a2 100644 --- a/pkg/slo-controller/nodeslo/nodeslo_controller_test.go +++ b/pkg/slo-controller/nodeslo/nodeslo_controller_test.go @@ -71,7 +71,7 @@ func TestNodeSLOReconciler_initNodeSLO(t *testing.T) { node: &corev1.Node{}, nodeSLO: &slov1alpha1.NodeSLO{}, }, - fields: fields{client: fake.NewFakeClient()}, + fields: fields{client: fake.NewClientBuilder().Build()}, want: &slov1alpha1.NodeSLOSpec{ ResourceUsedThresholdWithBE: config.DefaultResourceThresholdStrategy(), }, @@ -83,7 +83,7 @@ func TestNodeSLOReconciler_initNodeSLO(t *testing.T) { node: &corev1.Node{}, nodeSLO: &slov1alpha1.NodeSLO{}, }, - fields: fields{client: fake.NewFakeClient(&corev1.ConfigMap{ + fields: fields{client: fake.NewClientBuilder().WithRuntimeObjects(&corev1.ConfigMap{ TypeMeta: metav1.TypeMeta{ Kind: "ConfigMap", APIVersion: "v1", @@ -96,7 +96,7 @@ func TestNodeSLOReconciler_initNodeSLO(t *testing.T) { config.ResourceThresholdConfigKey: "{\"clusterStrategy\":{\"invalidField\",\"cpuSuppressThresholdPercent\":60}}", config.SLOCtrlConfigMap: "{\"clusterStrategy\":{\"invalidField\"}}", }, - })}, + }).Build()}, want: &slov1alpha1.NodeSLOSpec{ ResourceUsedThresholdWithBE: config.DefaultResourceThresholdStrategy(), }, @@ -108,7 +108,7 @@ func TestNodeSLOReconciler_initNodeSLO(t *testing.T) { node: &corev1.Node{}, nodeSLO: &slov1alpha1.NodeSLO{}, }, - fields: fields{client: fake.NewFakeClient(&corev1.ConfigMap{ + fields: fields{client: fake.NewClientBuilder().WithRuntimeObjects(&corev1.ConfigMap{ TypeMeta: metav1.TypeMeta{ Kind: "ConfigMap", APIVersion: "v1", @@ -120,7 +120,7 @@ func TestNodeSLOReconciler_initNodeSLO(t *testing.T) { Data: map[string]string{ config.ResourceThresholdConfigKey: "{\"clusterStrategy\":{\"enable\":true,\"cpuSuppressThresholdPercent\":60}}", }, - })}, + }).Build()}, want: &slov1alpha1.NodeSLOSpec{ ResourceUsedThresholdWithBE: testingResourceThresholdStrategy, }, @@ -132,7 +132,7 @@ func TestNodeSLOReconciler_initNodeSLO(t *testing.T) { node: &corev1.Node{}, nodeSLO: &slov1alpha1.NodeSLO{}, }, - fields: fields{client: fake.NewFakeClient(&corev1.ConfigMap{ + fields: fields{client: fake.NewClientBuilder().WithRuntimeObjects(&corev1.ConfigMap{ TypeMeta: metav1.TypeMeta{ Kind: "ConfigMap", APIVersion: "v1", @@ -144,7 +144,7 @@ func TestNodeSLOReconciler_initNodeSLO(t *testing.T) { Data: map[string]string{ config.ResourceThresholdConfigKey: "{\"clusterStrategy\":{\"enable\":true,\"cpuSuppressThresholdPercent\":60}}", }, - })}, + }).Build()}, want: &slov1alpha1.NodeSLOSpec{ ResourceUsedThresholdWithBE: testingResourceThresholdStrategy, }, @@ -156,7 +156,7 @@ func TestNodeSLOReconciler_initNodeSLO(t *testing.T) { node: &corev1.Node{}, nodeSLO: &slov1alpha1.NodeSLO{}, }, - fields: fields{client: fake.NewFakeClient(&corev1.ConfigMap{ + fields: fields{client: fake.NewClientBuilder().WithRuntimeObjects(&corev1.ConfigMap{ TypeMeta: metav1.TypeMeta{ Kind: "ConfigMap", APIVersion: "v1", @@ -168,7 +168,7 @@ func TestNodeSLOReconciler_initNodeSLO(t *testing.T) { Data: map[string]string{ config.ResourceThresholdConfigKey: "{\"clusterStrategy\":{\"enable\":true,\"cpuSuppressThresholdPercent\":60}}", }, - })}, + }).Build()}, want: &slov1alpha1.NodeSLOSpec{ ResourceUsedThresholdWithBE: testingResourceThresholdStrategy, }, @@ -194,7 +194,7 @@ func TestNodeSLOReconciler_Reconcile(t *testing.T) { clientgoscheme.AddToScheme(scheme) slov1alpha1.AddToScheme(scheme) r := &NodeSLOReconciler{ - Client: fake.NewFakeClientWithScheme(scheme), + Client: fake.NewClientBuilder().WithScheme(scheme).Build(), Log: ctrl.Log.WithName("controllers").WithName("NodeSLO"), Scheme: scheme, } diff --git a/pkg/slo-controller/nodeslo/resource_strategy.go b/pkg/slo-controller/nodeslo/resource_strategy.go index 72d642fef..b4825cda7 100644 --- a/pkg/slo-controller/nodeslo/resource_strategy.go +++ b/pkg/slo-controller/nodeslo/resource_strategy.go @@ -26,8 +26,8 @@ import ( "k8s.io/klog/v2" slov1alpha1 "github.com/koordinator-sh/koordinator/apis/slo/v1alpha1" - "github.com/koordinator-sh/koordinator/pkg/koordlet/util" "github.com/koordinator-sh/koordinator/pkg/slo-controller/config" + "github.com/koordinator-sh/koordinator/pkg/util" ) func getResourceThresholdSpec(node *corev1.Node, configMap *corev1.ConfigMap) (*slov1alpha1.ResourceThresholdStrategy, error) { diff --git a/pkg/slo-controller/nodeslo/resource_strategy_test.go b/pkg/slo-controller/nodeslo/resource_strategy_test.go index 58632c755..f23414078 100644 --- a/pkg/slo-controller/nodeslo/resource_strategy_test.go +++ b/pkg/slo-controller/nodeslo/resource_strategy_test.go @@ -217,5 +217,5 @@ func Test_generateThresholdCfg(t *testing.T) { cfg.NodeStrategies = []config.NodeResourceThresholdStrategy{selectCfg} cfgJson, _ := json.MarshalIndent(cfg, "", " ") - fmt.Printf(string(cfgJson)) + fmt.Print(string(cfgJson)) } diff --git a/pkg/util/client/delegating_client.go b/pkg/util/client/delegating_client.go index 467e4ec2c..6749aa2c6 100644 --- a/pkg/util/client/delegating_client.go +++ b/pkg/util/client/delegating_client.go @@ -155,7 +155,7 @@ var DisableDeepCopy = disableDeepCopy{} type disableDeepCopy struct{} -func (_ disableDeepCopy) ApplyToList(_ *client.ListOptions) { +func (disableDeepCopy) ApplyToList(_ *client.ListOptions) { } func isDisableDeepCopy(opts []client.ListOption) bool { diff --git a/pkg/util/metrics/leadership/leader.go b/pkg/util/metrics/leadership/leader.go index ffec13c2c..23ab3707f 100644 --- a/pkg/util/metrics/leadership/leader.go +++ b/pkg/util/metrics/leadership/leader.go @@ -47,11 +47,11 @@ var ( _ leaderelection.SwitchMetric = switchMetric{} ) -func (_ metricsProvider) NewLeaderMetric() leaderelection.SwitchMetric { +func (metricsProvider) NewLeaderMetric() leaderelection.SwitchMetric { return switchMetric{} } -func (_ switchMetric) On(_ string) { +func (switchMetric) On(_ string) { leaderMetric.Set(1) } diff --git a/pkg/util/resource.go b/pkg/util/resource.go index c537ee733..d60df0ece 100644 --- a/pkg/util/resource.go +++ b/pkg/util/resource.go @@ -44,6 +44,7 @@ func MultiplyQuant(quant resource.Quantity, factor float64) resource.Quantity { return *newQuant } +// IsResourceDiff returns whether the new resource has big enough difference with the old one or not func IsResourceDiff(old, new corev1.ResourceList, resourceName corev1.ResourceName, diffThreshold float64) bool { oldQuant := 0.0 oldResource, oldExist := old[resourceName] diff --git a/pkg/util/utils.go b/pkg/util/utils.go index df252497f..d5cf3862d 100644 --- a/pkg/util/utils.go +++ b/pkg/util/utils.go @@ -22,12 +22,12 @@ import ( "reflect" ) -// Merge returns a merged interface. Value in new will +// MergeCfg returns a merged interface. Value in new will // override old's when both fields exist. // It will throw an error if: // 1. either of the inputs was nil; // 2. inputs were not a pointer of the same json struct. -func Merge(old, new interface{}) (interface{}, error) { +func MergeCfg(old, new interface{}) (interface{}, error) { if old == nil || new == nil { return nil, fmt.Errorf("invalid input, should not be empty") } diff --git a/pkg/webhook/server.go b/pkg/webhook/server.go index 38115bb22..9af63d730 100644 --- a/pkg/webhook/server.go +++ b/pkg/webhook/server.go @@ -43,11 +43,6 @@ var ( handlerGates = map[string]GateFunc{} ) -// nolint -func addHandlers(m map[string]admission.Handler) { - addHandlersWithGate(m, nil) -} - func addHandlersWithGate(m map[string]admission.Handler, fn GateFunc) { for path, handler := range m { if len(path) == 0 {