Fix corner case in rated resizer

This commit is contained in:
alitto
2020-06-06 20:54:16 -03:00
parent d7520f2075
commit dfbb355ab5
3 changed files with 28 additions and 3 deletions
+23
View File
@@ -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
View File
@@ -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
View File
@@ -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) {