Compare commits

..

No commits in common. "master" and "fix/limit_scheduling" have entirely different histories.

3 changed files with 1 additions and 25 deletions

View file

@ -1,3 +1,3 @@
.* @TrueCloudLab/storage-core-committers @TrueCloudLab/storage-core-developers .* @fyrchik
.forgejo/.* @potyarkin .forgejo/.* @potyarkin
Makefile @potyarkin Makefile @potyarkin

View file

@ -22,7 +22,6 @@ var (
ErrMClockSchedulerUnknownTag = errors.New("unknown tag") ErrMClockSchedulerUnknownTag = errors.New("unknown tag")
ErrInvalidTagInfo = errors.New("invalid tag info: shares, limit and reservation must be greater than zero") ErrInvalidTagInfo = errors.New("invalid tag info: shares, limit and reservation must be greater than zero")
ErrInvalidRunLimit = errors.New("invalid run limit: must be greater than zero") ErrInvalidRunLimit = errors.New("invalid run limit: must be greater than zero")
ErrTagRequestsProhibited = errors.New("tag requests are prohibited")
) )
type request struct { type request struct {
@ -50,7 +49,6 @@ type TagInfo struct {
ReservedIOPS *float64 ReservedIOPS *float64
LimitIOPS *float64 LimitIOPS *float64
Share float64 Share float64
Prohibited bool
} }
// MClock is mClock scheduling algorithm implementation. // MClock is mClock scheduling algorithm implementation.
@ -198,9 +196,6 @@ func (q *MClock) pushRequest(tag string) (*request, ReleaseFunc, error) {
if !ok { if !ok {
return nil, nil, ErrMClockSchedulerUnknownTag return nil, nil, ErrMClockSchedulerUnknownTag
} }
if tagInfo.Prohibited {
return nil, nil, ErrTagRequestsProhibited
}
prev, ok := q.previous[tag] prev, ok := q.previous[tag]
assert.Cond(ok, "undefined previous:", tag) assert.Cond(ok, "undefined previous:", tag)

View file

@ -563,22 +563,3 @@ func TestMClockLimitTotalTime(t *testing.T) {
require.True(t, time.Since(startedAt) >= 1500*time.Millisecond) require.True(t, time.Since(startedAt) >= 1500*time.Millisecond)
require.True(t, time.Since(startedAt) <= 1600*time.Millisecond) // 100 ms offset to complete all requests require.True(t, time.Since(startedAt) <= 1600*time.Millisecond) // 100 ms offset to complete all requests
} }
func TestMClockRestictTagRequests(t *testing.T) {
t.Parallel()
limit := 10.0
q, err := NewMClock(100, 100, map[string]TagInfo{
"class1": {Share: 50, LimitIOPS: &limit},
"class2": {Share: 50, LimitIOPS: &limit, Prohibited: true},
}, 5*time.Second)
require.NoError(t, err)
defer q.Close()
release, err := q.RequestArrival(context.Background(), "class1")
require.NoError(t, err)
release()
release, err = q.RequestArrival(context.Background(), "class2")
require.ErrorIs(t, err, ErrTagRequestsProhibited)
require.Nil(t, release)
}