Skip to content
Permalink
Browse files

[JENKINS-28446] - Introduce new API method in Queue to optimize the p…

…erformance of UnlabeledLoadStatistics

(cherry picked from commit 7697bdb)
  • Loading branch information...
oleg-nenashev authored and olivergondza committed May 18, 2015
1 parent ece651d commit 84d80f57f2a31af44d733477efeb89db3f896021
@@ -938,7 +938,9 @@ public boolean isPending(Task t) {

/**
* How many {@link BuildableItem}s are assigned for the given label?
* @param l Label to be checked. If null, any label will be accepted
* @param l Label to be checked. If null, any label will be accepted.
* If you want to count {@link BuildableItem}s without assigned labels,
* use {@link #strictCountBuildableItemsFor(hudson.model.Label)}.
* @return Number of {@link BuildableItem}s for the specified label.
*/
public @Nonnegative int countBuildableItemsFor(@CheckForNull Label l) {
@@ -954,6 +956,30 @@ public boolean isPending(Task t) {
r++;
return r;
}

/**
* How many {@link BuildableItem}s are assigned for the given label?
* <p/>
* The implementation is quite similar to {@link #countBuildableItemsFor(hudson.model.Label)},
* but it has another behavior for null parameters.
* @param l Label to be checked. If null, only jobs without assigned labels
* will be taken into the account.
* @return Number of {@link BuildableItem}s for the specified label.
* @since TODO
*/
public @Nonnegative int strictCountBuildableItemsFor(@CheckForNull Label l) {
Snapshot _snapshot = this.snapshot;
int r = 0;
for (BuildableItem bi : _snapshot.buildables)
for (SubTask st : bi.task.getSubTasks())
if (bi.getAssignedLabelFor(st) == l)
r++;
for (BuildableItem bi : _snapshot.pendings)
for (SubTask st : bi.task.getSubTasks())
if (bi.getAssignedLabelFor(st) == l)
r++;
return r;
}

/**
* Counts all the {@link BuildableItem}s currently in the queue.
@@ -84,16 +84,7 @@ public int computeQueueLength() {
if (j == null) { // Consider queue as empty when Jenkins is inactive
return 0;
}

int result = 0;
final List<Queue.BuildableItem> buildableItems = j.getQueue().getBuildableItems();
for (Queue.BuildableItem item : buildableItems) {
for (SubTask st : Tasks.getSubTasksOf(item.task)) {
if (item.getAssignedLabelFor(st) == null)
result++;
}
}
return result;
return j.getQueue().strictCountBuildableItemsFor(null);
}

@Override

0 comments on commit 84d80f5

Please sign in to comment.
You can’t perform that action at this time.