forked from TrueCloudLab/frostfs-qos
[#12] mclock: Fix timer-based scheduling
Let's assume that there are two requests in the queue with execution time t1 and t2. The timer is set to t1. The timer is triggered, schedules the t1 request, calculates the time for the next timer t2 to be triggered. But it doesn't schedules timer to this time because of the `q.timeBasedScheduleTs > nextTs` check. Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
3e7ca94035
commit
346752477b
3 changed files with 60 additions and 29 deletions
|
@ -493,3 +493,25 @@ func TestMClockTimeBasedSchedule(t *testing.T) {
|
|||
close(checked)
|
||||
require.NoError(t, eg.Wait())
|
||||
}
|
||||
|
||||
func TestMClockLowLimit(t *testing.T) {
|
||||
t.Parallel()
|
||||
limit := 2.0
|
||||
q, err := NewMClock(100, 100, map[string]TagInfo{
|
||||
"class1": {Share: 50, LimitIOPS: &limit},
|
||||
}, 5*time.Second)
|
||||
require.NoError(t, err)
|
||||
defer q.Close()
|
||||
|
||||
eg, ctx := errgroup.WithContext(context.Background())
|
||||
eg.SetLimit(5)
|
||||
eg.Go(func() error {
|
||||
for range 3 {
|
||||
release, err := q.RequestArrival(ctx, "class1")
|
||||
require.NoError(t, err)
|
||||
release()
|
||||
}
|
||||
return nil
|
||||
})
|
||||
require.NoError(t, eg.Wait())
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue