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))
|
||||
}
|
||||
|
||||
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) {
|
||||
|
||||
workerCount := 5
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ func RatedResizer(rate int) ResizingStrategy {
|
||||
|
||||
func (r *ratedResizer) Resize(runningWorkers, minWorkers, maxWorkers int) bool {
|
||||
|
||||
if r.rate == 1 {
|
||||
if r.rate == 1 || runningWorkers == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
+4
-2
@@ -9,9 +9,11 @@ func TestRatedResizer(t *testing.T) {
|
||||
resizer := RatedResizer(3)
|
||||
|
||||
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, 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) {
|
||||
|
||||
Reference in New Issue
Block a user