This is an automated email from the ASF dual-hosted git repository. pbacsko pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/yunikorn-core.git
The following commit(s) were added to refs/heads/master by this push: new 1aafed0f [YUNIKORN-2661] Fix hard-coded boolean in setLimit (#883) 1aafed0f is described below commit 1aafed0f3444acaeaee0b05d6c98620e88eb0d95 Author: Peter Bacsko <pbac...@cloudera.com> AuthorDate: Mon Jun 24 15:19:31 2024 +0200 [YUNIKORN-2661] Fix hard-coded boolean in setLimit (#883) Closes: #883 Signed-off-by: Peter Bacsko <pbac...@cloudera.com> --- pkg/scheduler/ugm/queue_tracker.go | 2 +- pkg/scheduler/ugm/queue_tracker_test.go | 55 +++++++++++++++++++++++++++++++++ pkg/scheduler/ugm/user_tracker_test.go | 4 +-- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/pkg/scheduler/ugm/queue_tracker.go b/pkg/scheduler/ugm/queue_tracker.go index 2f5a470d..ca534470 100644 --- a/pkg/scheduler/ugm/queue_tracker.go +++ b/pkg/scheduler/ugm/queue_tracker.go @@ -187,7 +187,7 @@ func (qt *QueueTracker) setLimit(hierarchy []string, maxResource *resources.Reso if qt.childQueueTrackers[childName] == nil { qt.childQueueTrackers[childName] = newQueueTracker(qt.queuePath, childName, trackType) } - qt.childQueueTrackers[childName].setLimit(hierarchy[1:], maxResource, maxApps, useWildCard, trackType, false) + qt.childQueueTrackers[childName].setLimit(hierarchy[1:], maxResource, maxApps, useWildCard, trackType, doWildCardCheck) } else if len(hierarchy) == 1 { // don't override named user/group specific limits with wild card limits if doWildCardCheck && !qt.useWildCard { diff --git a/pkg/scheduler/ugm/queue_tracker_test.go b/pkg/scheduler/ugm/queue_tracker_test.go index 1bdd36da..ff05bf49 100644 --- a/pkg/scheduler/ugm/queue_tracker_test.go +++ b/pkg/scheduler/ugm/queue_tracker_test.go @@ -318,6 +318,61 @@ func TestNewQueueTracker(t *testing.T) { assert.Assert(t, resources.IsZero(parent.resourceUsage)) } +func TestSetLimit(t *testing.T) { + manager := GetUserManager() + defer manager.ClearConfigLimits() + manager.userWildCardLimitsConfig = map[string]*LimitConfig{ + path1: { + maxApplications: 3, + maxResources: resources.NewResource(), + }, + } + root := newRootQueueTracker(user) + assert.Assert(t, !root.useWildCard) + assert.Equal(t, uint64(0), root.maxRunningApps) + assert.Assert(t, root.maxResources == nil) + + // create tracker hierarchy + limit := resources.NewResourceFromMap(map[string]resources.Quantity{ + "mem": 10, + "vcore": 10}) + root.setLimit(strings.Split(queuePath1, configs.DOT), limit.Clone(), 9, true, user, true) + + // check settings + parentQ := root.childQueueTrackers["parent"] + assert.Assert(t, parentQ.maxResources == nil) + assert.Equal(t, uint64(0), parentQ.maxRunningApps) + childQ := parentQ.childQueueTrackers["child1"] + assert.Assert(t, parentQ.maxResources == nil) + assert.Equal(t, uint64(9), childQ.maxRunningApps) + assert.Assert(t, resources.Equals(limit, childQ.maxResources)) + + // check if settings are overridden + newLimit := resources.NewResourceFromMap(map[string]resources.Quantity{ + "mem": 20, + "vcore": 20}) + root.setLimit(strings.Split(queuePath1, configs.DOT), newLimit.Clone(), 3, false, user, true) // override + assert.Assert(t, resources.Equals(newLimit, childQ.maxResources)) + assert.Assert(t, !childQ.useWildCard) + newLimit2 := resources.NewResourceFromMap(map[string]resources.Quantity{ + "mem": 30, + "vcore": 30}) + root.setLimit(strings.Split(queuePath1, configs.DOT), newLimit2.Clone(), 2, true, user, true) // no override + assert.Assert(t, !childQ.useWildCard) + assert.Assert(t, resources.Equals(newLimit, childQ.maxResources)) + assert.Equal(t, uint64(3), childQ.maxRunningApps) + + root.setLimit(strings.Split(queuePath1, configs.DOT), newLimit2.Clone(), 4, true, user, false) // override -> changes qt.doWildCardCheck + assert.Assert(t, childQ.useWildCard) + assert.Assert(t, resources.Equals(newLimit2, childQ.maxResources)) + assert.Equal(t, uint64(4), childQ.maxRunningApps) + + root.setLimit(strings.Split(queuePath1, configs.DOT), newLimit.Clone(), 5, false, user, false) // override + assert.Assert(t, !childQ.useWildCard) + assert.Assert(t, resources.Equals(newLimit, childQ.maxResources)) + assert.Equal(t, uint64(5), childQ.maxRunningApps) +} + func getQTResource(qt *QueueTracker) map[string]*resources.Resource { resources := make(map[string]*resources.Resource) usage := qt.getResourceUsageDAOInfo("") diff --git a/pkg/scheduler/ugm/user_tracker_test.go b/pkg/scheduler/ugm/user_tracker_test.go index 94598b96..1b860561 100644 --- a/pkg/scheduler/ugm/user_tracker_test.go +++ b/pkg/scheduler/ugm/user_tracker_test.go @@ -244,12 +244,12 @@ func TestSetAndClearMaxLimits(t *testing.T) { // clear limits eventSystem.Reset() - userTracker.clearLimits(path1, true) + userTracker.clearLimits(path1, false) assert.Assert(t, resources.Equals(userTracker.headroom(hierarchy1), lowerParentHeadroom)) assert.Assert(t, resources.Equals(userTracker.headroom(hierarchy5), lowerParentHeadroom)) assert.Assert(t, !userTracker.canRunApp(hierarchy1, TestApp4)) assert.Assert(t, !userTracker.canRunApp(hierarchy5, TestApp4)) - userTracker.clearLimits(path5, true) + userTracker.clearLimits(path5, false) assert.Assert(t, userTracker.headroom(hierarchy1) == nil) assert.Assert(t, userTracker.headroom(hierarchy5) == nil) assert.Assert(t, userTracker.canRunApp(hierarchy1, TestApp4)) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@yunikorn.apache.org For additional commands, e-mail: issues-h...@yunikorn.apache.org