Skip to content

Commit

Permalink
[JENKINS-18721] Imrovement of performance - now when ListView builds …
Browse files Browse the repository at this point in the history
…up it asks for all the jobs only once. This is important because RBAC plugin each time checks permissions for all these jobs which impacts performance
  • Loading branch information
ctapobep committed Sep 12, 2013
1 parent b02d457 commit ef74ed3
Showing 1 changed file with 8 additions and 16 deletions.
24 changes: 8 additions & 16 deletions core/src/main/java/hudson/model/ListView.java
Expand Up @@ -36,12 +36,7 @@
import hudson.views.ViewJobFilter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

Expand Down Expand Up @@ -165,20 +160,21 @@ public List<TopLevelItem> getItems() {
}

ItemGroup<? extends TopLevelItem> parent = getOwnerItemGroup();
includeItems(parent, names);
List<TopLevelItem> parentItems = new ArrayList<TopLevelItem>(parent.getItems());
includeItems(parent, parentItems, names);

Boolean statusFilter = this.statusFilter; // capture the value to isolate us from concurrent update
for (TopLevelItem item : Items.getAllItems(getOwnerItemGroup(), TopLevelItem.class)) {
if (!names.contains(item.getRelativeNameFrom(getOwnerItemGroup()))) continue;
// Add if no status filter or filter matches enabled/disabled status:
// Add if no status filter or filter matches enabled/disabl2ed status:
if(statusFilter == null || !(item instanceof AbstractProject)
|| ((AbstractProject)item).isDisabled() ^ statusFilter)
items.add(item);
}

// check the filters
Iterable<ViewJobFilter> jobFilters = getJobFilters();
List<TopLevelItem> allItems = new ArrayList<TopLevelItem>(parent.getItems());
List<TopLevelItem> allItems = new ArrayList<TopLevelItem>(parentItems);
for (ViewJobFilter jobFilter: jobFilters) {
items = jobFilter.filter(items, allItems, this);
}
Expand All @@ -193,16 +189,12 @@ public boolean contains(TopLevelItem item) {
return getItems().contains(item);
}

private void includeItems(ItemGroup<? extends TopLevelItem> parent, SortedSet<String> names) {
includeItems(parent, parent, names);
}

private void includeItems(ItemGroup<? extends TopLevelItem> root, ItemGroup<?> parent, SortedSet<String> names) {
private void includeItems(ItemGroup<? extends TopLevelItem> root, Collection<? extends Item> parentItems, SortedSet<String> names) {
if (includePattern != null) {
for (Item item : parent.getItems()) {
for (Item item : parentItems) {
if (recurse && item instanceof ItemGroup) {
ItemGroup<?> ig = (ItemGroup<?>) item;
includeItems(root, ig, names);
includeItems(root, ig.getItems(), names);
}
if (item instanceof TopLevelItem) {
String itemName = item.getRelativeNameFrom(root);
Expand Down

0 comments on commit ef74ed3

Please sign in to comment.