Fix corner case in rated resizer
This commit is contained in:
@@ -190,6 +190,29 @@ func TestTrySubmit(t *testing.T) {
|
|||||||
assertEqual(t, int32(1), atomic.LoadInt32(&doneCount))
|
assertEqual(t, int32(1), atomic.LoadInt32(&doneCount))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSubmitToIdle(t *testing.T) {
|
||||||
|
|
||||||
|
pool := pond.New(1, 5)
|
||||||
|
|
||||||
|
// Submit a task and wait for it to complete
|
||||||
|
pool.SubmitAndWait(func() {
|
||||||
|
time.Sleep(1 * time.Millisecond)
|
||||||
|
})
|
||||||
|
|
||||||
|
assertEqual(t, int(1), pool.Running())
|
||||||
|
assertEqual(t, int(1), pool.Idle())
|
||||||
|
|
||||||
|
// Submit another task (this one should go to the idle worker)
|
||||||
|
pool.SubmitAndWait(func() {
|
||||||
|
time.Sleep(1 * time.Millisecond)
|
||||||
|
})
|
||||||
|
|
||||||
|
pool.StopAndWait()
|
||||||
|
|
||||||
|
assertEqual(t, int(0), pool.Running())
|
||||||
|
assertEqual(t, int(0), pool.Idle())
|
||||||
|
}
|
||||||
|
|
||||||
func TestRunning(t *testing.T) {
|
func TestRunning(t *testing.T) {
|
||||||
|
|
||||||
workerCount := 5
|
workerCount := 5
|
||||||
|
|||||||
+1
-1
@@ -46,7 +46,7 @@ func RatedResizer(rate int) ResizingStrategy {
|
|||||||
|
|
||||||
func (r *ratedResizer) Resize(runningWorkers, minWorkers, maxWorkers int) bool {
|
func (r *ratedResizer) Resize(runningWorkers, minWorkers, maxWorkers int) bool {
|
||||||
|
|
||||||
if r.rate == 1 {
|
if r.rate == 1 || runningWorkers == 0 {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -9,9 +9,11 @@ func TestRatedResizer(t *testing.T) {
|
|||||||
resizer := RatedResizer(3)
|
resizer := RatedResizer(3)
|
||||||
|
|
||||||
assertEqual(t, true, resizer.Resize(0, 0, 10))
|
assertEqual(t, true, resizer.Resize(0, 0, 10))
|
||||||
assertEqual(t, false, resizer.Resize(1, 0, 10))
|
assertEqual(t, true, resizer.Resize(0, 0, 10))
|
||||||
|
assertEqual(t, true, resizer.Resize(1, 0, 10))
|
||||||
assertEqual(t, false, resizer.Resize(2, 0, 10))
|
assertEqual(t, false, resizer.Resize(2, 0, 10))
|
||||||
assertEqual(t, true, resizer.Resize(3, 0, 10))
|
assertEqual(t, false, resizer.Resize(3, 0, 10))
|
||||||
|
assertEqual(t, true, resizer.Resize(4, 0, 10))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRatedResizerWithRate1(t *testing.T) {
|
func TestRatedResizerWithRate1(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user