Skip to content
Permalink
Browse files

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

…erformance of UnlabeledLoadStatistics
  • Loading branch information...
oleg-nenashev committed May 18, 2015
1 parent 294ce77 commit 7697bdb4f57d974546ec4c7e95e87fc8f2ad7f1a
@@ -943,7 +943,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) {
@@ -959,6 +961,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 7697bdb

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