!79 [sync] PR-74: rubik: remove duplicate log

From: @openeuler-sync-bot 
Reviewed-by: @xuxuepeng 
Signed-off-by: @xuxuepeng
This commit is contained in:
openeuler-ci-bot 2025-02-24 10:09:01 +00:00 committed by Gitee
commit ef6e8fd904
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
5 changed files with 341 additions and 3 deletions

View File

@ -1 +1 @@
2.0.1-1
2.0.1-2

View File

@ -1 +1 @@
a9c36f5a595959f3790b24a91ec243c74d9e382d
4a7405a1676d1c80e9938f3e1328cbee82e1a65c

View File

@ -0,0 +1,331 @@
From 15aafa185d19c34d02c6e7a459d997f3751b410d Mon Sep 17 00:00:00 2001
From: vegbir <yangjiaqi16@huawei.com>
Date: Thu, 21 Nov 2024 15:02:45 +0000
Subject: [PATCH] rubik: remove duplicate log
Signed-off-by: vegbir <yangjiaqi16@huawei.com>
---
pkg/core/trigger/common/type.go | 1 -
pkg/core/trigger/executor/resource.go | 12 ++++++------
pkg/core/trigger/template/base.go | 8 --------
pkg/core/typedef/containerinfo.go | 11 +++++------
pkg/core/typedef/rawpod.go | 14 ++++++--------
pkg/resource/analyze/analyzer.go | 9 +++++----
pkg/services/eviction/common/manager.go | 15 +++++++++++----
pkg/services/eviction/cpu/cpu.go | 19 ++++++++++---------
pkg/services/eviction/memory/memory.go | 13 +++++++------
9 files changed, 50 insertions(+), 52 deletions(-)
diff --git a/pkg/core/trigger/common/type.go b/pkg/core/trigger/common/type.go
index 901ca0d..5bfa5eb 100644
--- a/pkg/core/trigger/common/type.go
+++ b/pkg/core/trigger/common/type.go
@@ -22,7 +22,6 @@ type (
const (
TARGETPODS Factor = iota
- DEPORTPOD
)
// Descriptor defines methods for describing triggers
diff --git a/pkg/core/trigger/executor/resource.go b/pkg/core/trigger/executor/resource.go
index 46731dd..2f28271 100644
--- a/pkg/core/trigger/executor/resource.go
+++ b/pkg/core/trigger/executor/resource.go
@@ -36,7 +36,7 @@ func MaxValueTransformer(cal analyze.Calculator) template.Transformation {
pods, ok := ctx.Value(common.TARGETPODS).(map[string]*typedef.PodInfo)
if !ok {
- return ctx, fmt.Errorf("failed to get target pods")
+ return ctx, fmt.Errorf("invalid target pod type")
}
for _, pod := range pods {
@@ -54,12 +54,12 @@ func MaxValueTransformer(cal analyze.Calculator) template.Transformation {
chosen = pod
}
}
-
- if chosen != nil {
- log.Infof("find the pod(%v) with the highest utilization(%v)", chosen.Name, maxValue)
- return context.WithValue(ctx, common.TARGETPODS, map[string]*typedef.PodInfo{chosen.Name: chosen}), nil
+ // If the object is successfully obtained, the object is returned, otherwise an empty object is returned
+ if chosen == nil {
+ return context.WithValue(ctx, common.TARGETPODS, map[string]*typedef.PodInfo{}), nil
}
- return context.Background(), fmt.Errorf("failed to find target pod")
+ log.Infof("find the pod(%v) with the highest utilization(%.2f%%)", chosen.Name, maxValue)
+ return context.WithValue(ctx, common.TARGETPODS, map[string]*typedef.PodInfo{chosen.Name: chosen}), nil
}
}
diff --git a/pkg/core/trigger/template/base.go b/pkg/core/trigger/template/base.go
index f627884..9ad61de 100644
--- a/pkg/core/trigger/template/base.go
+++ b/pkg/core/trigger/template/base.go
@@ -55,10 +55,6 @@ func transform(ctx context.Context, f Transformation) (context.Context, error) {
if f == nil {
return nil, fmt.Errorf("podFilter method is not implemented")
}
- // pods, ok := ctx.Value(common.TARGETPODS).(map[string]*typedef.PodInfo)
- // if !ok {
- // return ctx, fmt.Errorf("failed to get target pods")
- // }
ctx, err := f(ctx)
if err != nil {
return ctx, fmt.Errorf("failed to transform pod: %v", err)
@@ -70,10 +66,6 @@ func act(ctx context.Context, f Action) error {
if f == nil {
return fmt.Errorf("podAction method is not implemented")
}
- // pods, ok := ctx.Value(common.TARGETPODS).(map[string]*typedef.PodInfo)
- // if !ok {
- // return nil
- // }
return f(ctx)
}
diff --git a/pkg/core/typedef/containerinfo.go b/pkg/core/typedef/containerinfo.go
index 3c61f08..ee5686b 100644
--- a/pkg/core/typedef/containerinfo.go
+++ b/pkg/core/typedef/containerinfo.go
@@ -89,7 +89,7 @@ func NewContainerInfo(opts ...ConfigOpt) *ContainerInfo {
}
if err := fromRawContainer(ci, conf.rawCont); err != nil {
- fmt.Printf("failed to parse raw container: %v", err)
+ fmt.Printf("failed to parse raw container: %v\n", err)
}
fromNRIContainer(ci, conf.nriCont)
fromPodCgroupPath(ci, conf.podCgroupPath)
@@ -109,17 +109,16 @@ func fromRawContainer(ci *ContainerInfo, rawCont *RawContainer) error {
if rawCont == nil {
return nil
}
- requests, limits := rawCont.GetResourceMaps()
id, err := rawCont.GetRealContainerID()
if err != nil {
return fmt.Errorf("failed to parse container ID: %v", err)
}
- if id == "" {
- return fmt.Errorf("empty container id")
+ // Note that the running pod may have containers that are being deleted or created, and their ids are empty.
+ if id != "" {
+ ci.ID = id
}
-
ci.Name = rawCont.status.Name
- ci.ID = id
+ requests, limits := rawCont.GetResourceMaps()
ci.RequestResources = requests
ci.LimitResources = limits
return nil
diff --git a/pkg/core/typedef/rawpod.go b/pkg/core/typedef/rawpod.go
index ed11c6b..45dbd40 100644
--- a/pkg/core/typedef/rawpod.go
+++ b/pkg/core/typedef/rawpod.go
@@ -147,8 +147,8 @@ func (pod *RawPod) ExtractContainerInfos() map[string]*ContainerInfo {
WithRawContainer(rawContainer),
WithPodCgroup(pod.CgroupPath()),
)
+ // The empty ID means that the container is being deleted and no updates are needed.
if ci.ID == "" {
- fmt.Printf("failed to parse id from raw container\n")
continue
}
idContainersMap[ci.ID] = ci
@@ -158,6 +158,10 @@ func (pod *RawPod) ExtractContainerInfos() map[string]*ContainerInfo {
// GetRealContainerID parses the containerID of k8s
func (cont *RawContainer) GetRealContainerID() (string, error) {
+ // Empty container ID means the container may be in the creation or deletion phase.
+ if cont.status.ContainerID == "" {
+ return "", nil
+ }
/*
Note:
An UNDEFINED container engine was used when the function was executed for the first time
@@ -175,13 +179,7 @@ func (cont *RawContainer) GetRealContainerID() (string, error) {
if !currentContainerEngines.Support(cont) {
return "", fmt.Errorf("unsupported container engine: %v", cont.status.ContainerID)
}
-
- cid := cont.status.ContainerID[len(currentContainerEngines.Prefix()):]
- // the container may be in the creation or deletion phase.
- if len(cid) == 0 {
- return "", nil
- }
- return cid, nil
+ return cont.status.ContainerID[len(currentContainerEngines.Prefix()):], nil
}
// GetResourceMaps returns the number of requests and limits of CPU and memory resources
diff --git a/pkg/resource/analyze/analyzer.go b/pkg/resource/analyze/analyzer.go
index 5c85897..20dd7b0 100644
--- a/pkg/resource/analyze/analyzer.go
+++ b/pkg/resource/analyze/analyzer.go
@@ -14,6 +14,8 @@
package analyze
import (
+ "runtime"
+
v2 "github.com/google/cadvisor/info/v2"
"isula.org/rubik/pkg/common/log"
@@ -53,7 +55,7 @@ func (a *Analyzer) CPUCalculatorBuilder(reqOpt *common.GetOption) Calculator {
cpuUsageUs = float64(last.Cpu.Usage.Total-penultimate.Cpu.Usage.Total) / nanoToMicro
timeDeltaUs = float64(last.Timestamp.Sub(penultimate.Timestamp).Microseconds())
)
- return util.Div(cpuUsageUs, timeDeltaUs) * percentageRate
+ return util.Div(cpuUsageUs, timeDeltaUs) / float64(runtime.NumCPU()) * percentageRate
}
}
@@ -65,7 +67,6 @@ func (a *Analyzer) MemoryCalculatorBuilder(reqOpt *common.GetOption) Calculator
)
podStats := a.getPodStats("/"+pi.Path, reqOpt)
if len(podStats) < miniNum {
- log.Errorf("pod %v has no enough memory stats collected, skip it", pi.Name)
return -1
}
return float64(podStats[len(podStats)-1].Memory.Usage) / bytesToMb
@@ -75,12 +76,12 @@ func (a *Analyzer) MemoryCalculatorBuilder(reqOpt *common.GetOption) Calculator
func (a *Analyzer) getPodStats(cgroupPath string, reqOpt *common.GetOption) []*v2.ContainerStats {
infoMap, err := a.GetPodStats(cgroupPath, *reqOpt)
if err != nil {
- log.Errorf("failed to get cgroup information %v: %v", cgroupPath, err)
+ log.Warnf("failed to get cgroup information %v: %v", cgroupPath, err)
return nil
}
info, existed := infoMap[cgroupPath]
if !existed {
- log.Errorf("failed to get cgroup %v from cadvisor", cgroupPath)
+ log.Warnf("failed to get cgroup %v from cadvisor", cgroupPath)
return nil
}
return info.Stats
diff --git a/pkg/services/eviction/common/manager.go b/pkg/services/eviction/common/manager.go
index 4758c72..8a30e4b 100644
--- a/pkg/services/eviction/common/manager.go
+++ b/pkg/services/eviction/common/manager.go
@@ -74,7 +74,7 @@ func newCadvisorManager() (resource.Manager, error) {
// Controller is a controller for different resources
type Controller interface {
- Start(context.Context, func() error)
+ Start(context.Context, func(func() bool) error)
Config() interface{}
}
@@ -213,12 +213,19 @@ func (m *Manager) Terminate(api.Viewer) error {
return err
}
-func (m *Manager) alarm(typ string) func() error {
- return func() error {
+func (m *Manager) alarm(typ string) func(func() bool) error {
+ return func(needEvcit func() bool) error {
+ pods := m.viewer.ListPodsWithOptions(priority(false))
+ if len(pods) == 0 {
+ return nil
+ }
var (
errs error
- ctx = context.WithValue(context.Background(), common.TARGETPODS, m.viewer.ListPodsWithOptions(priority(false)))
+ ctx = context.WithValue(context.Background(), common.TARGETPODS, pods)
)
+ if !needEvcit() {
+ return nil
+ }
for _, t := range m.baseMetric.Triggers[typ] {
errs = util.AppendErr(errs, t.Activate(ctx))
}
diff --git a/pkg/services/eviction/cpu/cpu.go b/pkg/services/eviction/cpu/cpu.go
index b11d94b..1cdbe7d 100644
--- a/pkg/services/eviction/cpu/cpu.go
+++ b/pkg/services/eviction/cpu/cpu.go
@@ -62,17 +62,14 @@ func fromConfig(name string, f helper.ConfigHandler) (*Controller, error) {
}
// Start loop collects data and performs eviction
-func (c *Controller) Start(ctx context.Context, evictor func() error) {
+func (c *Controller) Start(ctx context.Context, evictor func(func() bool) error) {
wait.Until(
func() {
c.collect()
if atomic.LoadInt32(&c.block) == 1 {
return
}
- if !c.assertWithinLimit() {
- return
- }
- if err := evictor(); err != nil {
+ if err := evictor(c.assertWithinLimit); err != nil {
log.Errorf("failed to execute cpuevict %v", err)
return
}
@@ -128,16 +125,20 @@ func (c *Controller) averageUsage() float64 {
c.RLock()
defer c.RUnlock()
if len(c.usages) < minUsageLen {
- log.Infof("failed to get node cpu usage at %v", time.Now().Format(format))
- return 0
+ log.Debugf("failed to get node cpu usage at %v", time.Now().Format(format))
+ return -1
}
util := quotaturbo.CalculateUtils(c.usages[0].cpuStats, c.usages[len(c.usages)-1].cpuStats)
- log.Debugf("get node cpu usage %v at %v", util, time.Now().Format(format))
return util
}
func (c *Controller) assertWithinLimit() bool {
- return c.averageUsage() >= float64(c.conf.Threshold)
+ util := c.averageUsage()
+ if util >= float64(c.conf.Threshold) {
+ log.Infof("CPU exceeded: %v%%", util)
+ return true
+ }
+ return false
}
// Config returns the configuration
diff --git a/pkg/services/eviction/memory/memory.go b/pkg/services/eviction/memory/memory.go
index 9aa82dc..5215a8a 100644
--- a/pkg/services/eviction/memory/memory.go
+++ b/pkg/services/eviction/memory/memory.go
@@ -51,16 +51,13 @@ func fromConfig(name string, f helper.ConfigHandler) (*Controller, error) {
}
// Start loop collects data and performs eviction
-func (c *Controller) Start(ctx context.Context, evictor func() error) {
+func (c *Controller) Start(ctx context.Context, evictor func(func() bool) error) {
wait.Until(
func() {
if atomic.LoadInt32(&c.block) == 1 {
return
}
- if !c.assertWithinLimit() {
- return
- }
- if err := evictor(); err != nil {
+ if err := evictor(c.assertWithinLimit); err != nil {
log.Errorf("failed to execute memory evict %v", err)
return
}
@@ -86,7 +83,11 @@ func (c *Controller) assertWithinLimit() bool {
log.Errorf("failed to get memory util at %v: %v", time.Now().Format(format), err)
return false
}
- return v.UsedPercent >= float64(c.conf.Threshold)
+ if v.UsedPercent >= float64(c.conf.Threshold) {
+ log.Infof("Memory exceeded: %v%%", v.UsedPercent)
+ return true
+ }
+ return false
}
// Config returns the configuration
--
2.45.0

View File

@ -1,6 +1,6 @@
Name: rubik
Version: 2.0.1
Release: 1
Release: 2
Summary: Hybrid Deployment for Cloud Native
License: Mulan PSL V2
URL: https://gitee.com/openeuler/rubik
@ -59,6 +59,12 @@ install -Dp ./build_rubik_image.sh %{buildroot}%{_sharedstatedir}/%{name}/build_
rm -rf %{buildroot}
%changelog
* Wed Nov 27 2024 vegbir <yangjiaqi16@huawei.com> - 2.0.1-2
- Type: bugfix
- CVE:NA
- SUG:restart
- DESC:remove duplicate log
* Thu Nov 14 2024 vegbir <yangjiaqi16@huawei.com> - 2.0.1-1
- Type: bugfix
- CVE:NA

View File

@ -1 +1,2 @@
patch/0001-rubik-remove-duplicate-log.patch
# end of file