@@ -60,12 +60,12 @@ func (jobsOrder *JobsOrderByQueues) PopNextJob() *podgroup_info.PodGroupInfo {
6060 return nil
6161 }
6262
63- department := jobsOrder .popNextDepartment ()
63+ department := jobsOrder .getNextDepartment ()
6464 if department == nil {
6565 return nil
6666 }
6767
68- queue := jobsOrder .popNextQueue (department )
68+ queue := jobsOrder .getNextQueue (department )
6969 if queue == nil {
7070 return nil
7171 }
@@ -78,8 +78,8 @@ func (jobsOrder *JobsOrderByQueues) PopNextJob() *podgroup_info.PodGroupInfo {
7878 jobsOrder .queuePopsMap [queue .UID ] = append (jobsOrder .queuePopsMap [queue .UID ], job )
7979 }
8080
81- jobsOrder .updateQueuePriorityQueue (queue , department )
82- jobsOrder .updateDepartmentPriorityQueue (department )
81+ jobsOrder .handleJobPopOutOfQueue (queue , department )
82+ jobsOrder .handleJobPopOutOfDepartment (department )
8383
8484 log .InfraLogger .V (7 ).Infof ("Popped job: %v" , job .Name )
8585 return job
@@ -107,51 +107,52 @@ func (jobsOrder *JobsOrderByQueues) PushJob(job *podgroup_info.PodGroupInfo) {
107107 department .Name )
108108}
109109
110- func (jobsOrder * JobsOrderByQueues ) updateDepartmentPriorityQueue (department * queue_info.QueueInfo ) {
110+ func (jobsOrder * JobsOrderByQueues ) handleJobPopOutOfDepartment (department * queue_info.QueueInfo ) {
111111 if jobsOrder .departmentIdToDepartmentMetadata [department .UID ].queuesPriorityQueue .Len () == 0 {
112+ jobsOrder .activeDepartments .Pop ()
112113 delete (jobsOrder .departmentIdToDepartmentMetadata , department .UID )
113114 return
114115 }
115116
116- jobsOrder .activeDepartments .Push (department )
117117 jobsOrder .departmentIdToDepartmentMetadata [department .UID ].shouldUpdateQueueShare = true
118- log .InfraLogger .V (7 ).Infof ("Pushed department: %v" , department .Name )
119118}
120119
121- func (jobsOrder * JobsOrderByQueues ) updateQueuePriorityQueue (queue , department * queue_info.QueueInfo ) {
120+ func (jobsOrder * JobsOrderByQueues ) handleJobPopOutOfQueue (queue , department * queue_info.QueueInfo ) {
122121 if jobsOrder .queueIdToQueueMetadata [queue .UID ].jobsInQueue .Len () == 0 {
122+ jobsOrder .departmentIdToDepartmentMetadata [department .UID ].queuesPriorityQueue .Pop ()
123123 delete (jobsOrder .queueIdToQueueMetadata , queue .UID )
124124 return
125125 }
126126
127- jobsOrder .departmentIdToDepartmentMetadata [department .UID ].queuesPriorityQueue .Push (queue )
128127 jobsOrder .queueIdToQueueMetadata [queue .UID ].shouldUpdateQueueShare = true
129- log .InfraLogger .V (7 ).Infof ("Pushed queue: %v" , queue .Name )
130128}
131129
132- func (jobsOrder * JobsOrderByQueues ) popNextQueue (department * queue_info.QueueInfo ) * queue_info.QueueInfo {
133- queue := jobsOrder .departmentIdToDepartmentMetadata [department .UID ].queuesPriorityQueue .Pop ().(* queue_info.QueueInfo )
130+ func (jobsOrder * JobsOrderByQueues ) getNextQueue (department * queue_info.QueueInfo ) * queue_info.QueueInfo {
131+ queue := jobsOrder .departmentIdToDepartmentMetadata [department .UID ].queuesPriorityQueue .Peek ().(* queue_info.QueueInfo )
134132 if jobsOrder .queueIdToQueueMetadata [queue .UID ].shouldUpdateQueueShare {
135- jobsOrder .departmentIdToDepartmentMetadata [department .UID ].queuesPriorityQueue .Push (queue )
136- jobsOrder .queueIdToQueueMetadata [queue .UID ].shouldUpdateQueueShare = false
137- queue = jobsOrder .departmentIdToDepartmentMetadata [department .UID ].queuesPriorityQueue .Pop ().(* queue_info.QueueInfo )
133+ jobsOrder .updateTopQueueShare (queue , department )
134+ return jobsOrder .getNextQueue (department )
138135 }
139136
140137 if jobsOrder .queueIdToQueueMetadata [queue .UID ].jobsInQueue .Len () == 0 {
141138 log .InfraLogger .V (7 ).Warnf ("Queue: <%v> is active, yet no jobs in queue" , queue .Name )
142139 return nil
143140 }
144141
145- log .InfraLogger .V (7 ).Infof ("Popped queue: %v" , queue .Name )
142+ log .InfraLogger .V (7 ).Infof ("Get queue: %v" , queue .Name )
146143 return queue
147144}
148145
149- func (jobsOrder * JobsOrderByQueues ) popNextDepartment () * queue_info.QueueInfo {
150- department := jobsOrder .activeDepartments .Pop ().(* queue_info.QueueInfo )
146+ func (jobsOrder * JobsOrderByQueues ) updateTopQueueShare (topQueue * queue_info.QueueInfo , department * queue_info.QueueInfo ) {
147+ jobsOrder .departmentIdToDepartmentMetadata [department .UID ].queuesPriorityQueue .Fix (0 )
148+ jobsOrder .queueIdToQueueMetadata [topQueue .UID ].shouldUpdateQueueShare = false
149+ }
150+
151+ func (jobsOrder * JobsOrderByQueues ) getNextDepartment () * queue_info.QueueInfo {
152+ department := jobsOrder .activeDepartments .Peek ().(* queue_info.QueueInfo )
151153 if jobsOrder .departmentIdToDepartmentMetadata [department .UID ].shouldUpdateQueueShare {
152- jobsOrder .activeDepartments .Push (department )
153- jobsOrder .departmentIdToDepartmentMetadata [department .UID ].shouldUpdateQueueShare = false
154- department = jobsOrder .activeDepartments .Pop ().(* queue_info.QueueInfo )
154+ jobsOrder .updateTopDepartmentShare (department )
155+ return jobsOrder .getNextDepartment ()
155156 }
156157 if jobsOrder .departmentIdToDepartmentMetadata [department .UID ].queuesPriorityQueue .Empty () {
157158 log .InfraLogger .V (7 ).Warnf ("Department: <%v> is active, yet no queues in department" , department .Name )
@@ -162,6 +163,11 @@ func (jobsOrder *JobsOrderByQueues) popNextDepartment() *queue_info.QueueInfo {
162163 return department
163164}
164165
166+ func (jobsOrder * JobsOrderByQueues ) updateTopDepartmentShare (topDepartment * queue_info.QueueInfo ) {
167+ jobsOrder .activeDepartments .Fix (0 )
168+ jobsOrder .departmentIdToDepartmentMetadata [topDepartment .UID ].shouldUpdateQueueShare = false
169+ }
170+
165171// addJobToQueue adds `job` to the jobs queue, creating that job's queue in the jobs order if needed
166172func (jobsOrder * JobsOrderByQueues ) addJobToQueue (job * podgroup_info.PodGroupInfo , reverseOrder bool ) {
167173 if _ , found := jobsOrder .queueIdToQueueMetadata [job .Queue ]; ! found {
0 commit comments