Skip to content

Commit

Permalink
[JENKINS-27966] Priority Sorter must not require matrix-project
Browse files Browse the repository at this point in the history
  • Loading branch information
emsa23 committed Apr 25, 2015
1 parent df5d722 commit fc9df24
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 18 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -66,7 +66,7 @@
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>matrix-project</artifactId>
<version>1.4</version>
<optional>false</optional> <!-- should be true but for now require this [JENKINS-27966] -->
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
Expand Down
29 changes: 12 additions & 17 deletions src/main/java/jenkins/advancedqueue/PriorityConfiguration.java
Expand Up @@ -26,6 +26,7 @@
import hudson.DescriptorExtensionList;
import hudson.Extension;
import hudson.ExtensionList;
import hudson.Plugin;
import hudson.matrix.MatrixConfiguration;
import hudson.matrix.MatrixProject;
import hudson.model.Describable;
Expand Down Expand Up @@ -79,6 +80,7 @@ public class PriorityConfiguration extends Descriptor<PriorityConfiguration> imp
private final static Logger LOGGER = Logger.getLogger(PriorityConfiguration.class.getName());

transient private Map<Integer, JobGroup> id2jobGroup;
transient private PriorityConfigurationMatrixHelper priorityConfigurationMatrixHelper;
private List<JobGroup> jobGroups;

public PriorityConfiguration() {
Expand All @@ -101,6 +103,13 @@ public int compare(JobGroup.PriorityStrategyHolder o1, JobGroup.PriorityStrategy
}
});
}
//
Plugin plugin = Jenkins.getInstance().getPlugin("matrix-project");
if(plugin == null || !plugin.getWrapper().isEnabled()){
priorityConfigurationMatrixHelper = null;
} else {
priorityConfigurationMatrixHelper = new PriorityConfigurationMatrixHelper();
}
}

public String getIconFileName() {
Expand Down Expand Up @@ -207,23 +216,9 @@ private PriorityConfigurationCallback getPriorityInternal(Queue.Item item, Prior
}

Job<?, ?> job = (Job<?, ?>) item.task;

// [JENKINS-8597]
// For MatrixConfiguration use the latest assigned Priority from the
// MatrixProject
if (job instanceof MatrixConfiguration) {
MatrixProject matrixProject = ((MatrixConfiguration) job).getParent();
priorityCallback.addDecisionLog(0, "Job is MatrixConfiguration [" + matrixProject.getName() + "] ...");
ItemInfo itemInfo = QueueItemCache.get().getItem(matrixProject.getName());
// Can be null (for example) at startup when the MatrixBuild got
// lost (was running at
// restart)
if (itemInfo != null) {
priorityCallback.addDecisionLog(0, "MatrixProject found in cache, using priority from queue-item [" + itemInfo.getItemId() + "]");
return priorityCallback.setPrioritySelection(itemInfo.getPriority(), itemInfo.getJobGroupId(), itemInfo.getPriorityStrategy());
}
priorityCallback.addDecisionLog(0, "MatrixProject not found in cache, assigning global default priority");
return priorityCallback.setPrioritySelection(PrioritySorterConfiguration.get().getStrategy().getDefaultPriority());

if (priorityConfigurationMatrixHelper != null && priorityConfigurationMatrixHelper.isMatrixConfiguration(job)) {
return priorityConfigurationMatrixHelper.getPriority((MatrixConfiguration) job, priorityCallback);
}

//
Expand Down
@@ -0,0 +1,37 @@
package jenkins.advancedqueue;

import jenkins.advancedqueue.sorter.ItemInfo;
import jenkins.advancedqueue.sorter.QueueItemCache;
import hudson.matrix.MatrixConfiguration;
import hudson.matrix.MatrixProject;
import hudson.model.Job;

class PriorityConfigurationMatrixHelper {

boolean isMatrixConfiguration(Job<?, ?> job) {
return job instanceof MatrixConfiguration;
}

PriorityConfigurationCallback getPriority(MatrixConfiguration matrixConfiguration,
PriorityConfigurationCallback priorityCallback) {
// [JENKINS-8597]
// For MatrixConfiguration use the latest assigned Priority from the
// MatrixProject
MatrixProject matrixProject = matrixConfiguration.getParent();
priorityCallback.addDecisionLog(0, "Job is MatrixConfiguration [" + matrixProject.getName() + "] ...");
ItemInfo itemInfo = QueueItemCache.get().getItem(matrixProject.getName());
// Can be null (for example) at startup when the MatrixBuild got
// lost (was running at
// restart)
if (itemInfo != null) {
priorityCallback.addDecisionLog(0, "MatrixProject found in cache, using priority from queue-item ["
+ itemInfo.getItemId() + "]");
return priorityCallback.setPrioritySelection(itemInfo.getPriority(), itemInfo.getJobGroupId(),
itemInfo.getPriorityStrategy());
}
priorityCallback.addDecisionLog(0, "MatrixProject not found in cache, assigning global default priority");
return priorityCallback.setPrioritySelection(PrioritySorterConfiguration.get().getStrategy()
.getDefaultPriority());

}
}
14 changes: 14 additions & 0 deletions src/test/java/jenkins/advancedqueue/test/MatrixTest.java
Expand Up @@ -56,4 +56,18 @@ public void matrix_and_jobs_with_no_configuration() throws Exception {
j.waitUntilNoActivity();
TestRunListener.assertStartedItems();
}

@Test
@LocalData
public void matrix_and_jobs_with_no_configuration_reverse() throws Exception {
TestRunListener.init(
new ExpectedItem("Matrix 0", 1), new ExpectedItem("Matrix 1", 5),
new ExpectedItem("0A1=0A.", 1), new ExpectedItem("0A1=0A.", 1),
new ExpectedItem("1A1=1A.", 5), new ExpectedItem("1A1=1A.", 5),
new ExpectedItem("Job 0", 5)
);
jobHelper.scheduleMatrixProjects(new UserIdCause(), new CLICause()).scheduleProjects(new CLICause()).go();
j.waitUntilNoActivity();
TestRunListener.assertStartedItems();
}
}

0 comments on commit fc9df24

Please sign in to comment.