mirror of https://github.com/k3s-io/k3s
Removed a race condition from ResourceConsumer.
parent
d16d64f620
commit
79d3d795b5
|
@ -20,6 +20,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
@ -86,6 +87,7 @@ type ResourceConsumer struct {
|
||||||
stopCPU chan int
|
stopCPU chan int
|
||||||
stopMem chan int
|
stopMem chan int
|
||||||
stopCustomMetric chan int
|
stopCustomMetric chan int
|
||||||
|
stopWaitGroup sync.WaitGroup
|
||||||
consumptionTimeInSeconds int
|
consumptionTimeInSeconds int
|
||||||
sleepTime time.Duration
|
sleepTime time.Duration
|
||||||
requestSizeInMillicores int
|
requestSizeInMillicores int
|
||||||
|
@ -167,6 +169,8 @@ func (rc *ResourceConsumer) ConsumeCustomMetric(amount int) {
|
||||||
|
|
||||||
func (rc *ResourceConsumer) makeConsumeCPURequests() {
|
func (rc *ResourceConsumer) makeConsumeCPURequests() {
|
||||||
defer GinkgoRecover()
|
defer GinkgoRecover()
|
||||||
|
rc.stopWaitGroup.Add(1)
|
||||||
|
defer rc.stopWaitGroup.Done()
|
||||||
sleepTime := time.Duration(0)
|
sleepTime := time.Duration(0)
|
||||||
millicores := 0
|
millicores := 0
|
||||||
for {
|
for {
|
||||||
|
@ -186,6 +190,8 @@ func (rc *ResourceConsumer) makeConsumeCPURequests() {
|
||||||
|
|
||||||
func (rc *ResourceConsumer) makeConsumeMemRequests() {
|
func (rc *ResourceConsumer) makeConsumeMemRequests() {
|
||||||
defer GinkgoRecover()
|
defer GinkgoRecover()
|
||||||
|
rc.stopWaitGroup.Add(1)
|
||||||
|
defer rc.stopWaitGroup.Done()
|
||||||
sleepTime := time.Duration(0)
|
sleepTime := time.Duration(0)
|
||||||
megabytes := 0
|
megabytes := 0
|
||||||
for {
|
for {
|
||||||
|
@ -205,6 +211,8 @@ func (rc *ResourceConsumer) makeConsumeMemRequests() {
|
||||||
|
|
||||||
func (rc *ResourceConsumer) makeConsumeCustomMetric() {
|
func (rc *ResourceConsumer) makeConsumeCustomMetric() {
|
||||||
defer GinkgoRecover()
|
defer GinkgoRecover()
|
||||||
|
rc.stopWaitGroup.Add(1)
|
||||||
|
defer rc.stopWaitGroup.Done()
|
||||||
sleepTime := time.Duration(0)
|
sleepTime := time.Duration(0)
|
||||||
delta := 0
|
delta := 0
|
||||||
for {
|
for {
|
||||||
|
@ -364,6 +372,7 @@ func (rc *ResourceConsumer) Pause() {
|
||||||
rc.stopCPU <- 0
|
rc.stopCPU <- 0
|
||||||
rc.stopMem <- 0
|
rc.stopMem <- 0
|
||||||
rc.stopCustomMetric <- 0
|
rc.stopCustomMetric <- 0
|
||||||
|
rc.stopWaitGroup.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pause starts background goroutines responsible for consuming resources.
|
// Pause starts background goroutines responsible for consuming resources.
|
||||||
|
@ -379,6 +388,7 @@ func (rc *ResourceConsumer) CleanUp() {
|
||||||
close(rc.stopCPU)
|
close(rc.stopCPU)
|
||||||
close(rc.stopMem)
|
close(rc.stopMem)
|
||||||
close(rc.stopCustomMetric)
|
close(rc.stopCustomMetric)
|
||||||
|
rc.stopWaitGroup.Wait()
|
||||||
// Wait some time to ensure all child goroutines are finished.
|
// Wait some time to ensure all child goroutines are finished.
|
||||||
time.Sleep(10 * time.Second)
|
time.Sleep(10 * time.Second)
|
||||||
kind, err := kindOf(rc.kind)
|
kind, err := kindOf(rc.kind)
|
||||||
|
|
Loading…
Reference in New Issue