Skip to content

Commit

Permalink
[JENKINS-28446] - Introduce new API method in Queue to optimize the p…
Browse files Browse the repository at this point in the history
…erformance of UnlabeledLoadStatistics

(cherry picked from commit 7697bdb)
  • Loading branch information
oleg-nenashev authored and olivergondza committed Jun 8, 2015
1 parent ece651d commit 84d80f5
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 11 deletions.
28 changes: 27 additions & 1 deletion core/src/main/java/hudson/model/Queue.java
Expand Up @@ -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) {
Expand All @@ -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.
Expand Down
11 changes: 1 addition & 10 deletions core/src/main/java/jenkins/model/UnlabeledLoadStatistics.java
Expand Up @@ -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
Expand Down

0 comments on commit 84d80f5

Please sign in to comment.