fix(util): check if err occurred when get CPU percent, to avoid panic if got nil result.

Signed-off-by: true1064 <tangjingyu@oppo.com>
This commit is contained in:
true1064 2023-11-01 11:57:46 +08:00 committed by Victor1319
parent c8e92fb0f0
commit 2a8be30f01
4 changed files with 30 additions and 8 deletions

View File

@ -865,8 +865,10 @@ func (s *DataNode) startCpuSample() {
return
default:
// this function will sleep cpuSampleDuration
used := loadutil.GetCpuUtilPercent(cpuSampleDuration)
s.cpuUtil.Store(used)
used, err := loadutil.GetCpuUtilPercent(cpuSampleDuration)
if err == nil {
s.cpuUtil.Store(used)
}
}
}
}()

View File

@ -331,8 +331,10 @@ func (m *metadataManager) startCpuSample() {
case <-m.stopC:
return
default:
used := loadutil.GetCpuUtilPercent(sampleDuration)
m.cpuUtil.Store(used)
used, err := loadutil.GetCpuUtilPercent(sampleDuration)
if err == nil {
m.cpuUtil.Store(used)
}
}
}
}()

View File

@ -15,12 +15,30 @@
package loadutil
import (
"fmt"
"github.com/cubefs/cubefs/util/log"
"time"
"github.com/shirou/gopsutil/cpu"
)
func GetCpuUtilPercent(sampleDuration time.Duration) float64 {
utils, _ := cpu.Percent(sampleDuration, false)
return utils[0]
func GetCpuUtilPercent(sampleDuration time.Duration) (used float64, err error) {
utils, err := cpu.Percent(sampleDuration, false)
if err != nil {
log.LogErrorf("[GetCpuUtilPercent] err: %v", err.Error())
return
}
if utils == nil {
err = fmt.Errorf("got nil result")
log.LogErrorf("[GetCpuUtilPercent] err: %v", err.Error())
return
}
if len(utils) == 0 {
err = fmt.Errorf("got result len is 0")
log.LogErrorf("[GetCpuUtilPercent] err: %v", err.Error())
return
}
used = utils[0]
return
}

View File

@ -22,6 +22,6 @@ import (
)
func TestCpuUtil(t *testing.T) {
used := loadutil.GetCpuUtilPercent(time.Second)
used, _ := loadutil.GetCpuUtilPercent(time.Second)
t.Logf("CPU Util: %v\n", used)
}