diff --git a/src/main/java/hudson/plugins/gearman/CustomGearmanFunctionFactory.java b/src/main/java/hudson/plugins/gearman/CustomGearmanFunctionFactory.java index 97683c6..b4e5260 100644 --- a/src/main/java/hudson/plugins/gearman/CustomGearmanFunctionFactory.java +++ b/src/main/java/hudson/plugins/gearman/CustomGearmanFunctionFactory.java @@ -51,30 +51,32 @@ public class CustomGearmanFunctionFactory extends DefaultGearmanFunctionFactory public CustomGearmanFunctionFactory(String functionName, String className, AbstractProject project, Computer computer, String masterName, - MyGearmanWorkerImpl worker) { + MyGearmanWorkerImpl worker, + String label) { super(functionName, className); this.theClass = className; this.project = project; this.computer = computer; this.masterName = masterName; this.worker = worker; + this.label = label; } @Override public GearmanFunction getFunction() { return createFunctionInstance(theClass, project, computer, masterName, - worker); + worker, label); } - private static GearmanFunction createFunctionInstance(String className, AbstractProject project, Computer computer, String masterName, MyGearmanWorkerImpl worker) { + private static GearmanFunction createFunctionInstance(String className, AbstractProject project, Computer computer, String masterName, MyGearmanWorkerImpl worker, String label) { GearmanFunction f = null; try { Class c = Class.forName(className); - Constructor con = c.getConstructor(new Class[]{AbstractProject.class, Computer.class, String.class, MyGearmanWorkerImpl.class}); - Object o = con.newInstance(new Object[] {project, computer, masterName, worker}); + Constructor con = c.getConstructor(new Class[]{AbstractProject.class, Computer.class, String.class, MyGearmanWorkerImpl.class, String.class}); + Object o = con.newInstance(new Object[] {project, computer, masterName, worker, label}); if (o instanceof GearmanFunction) { f = (GearmanFunction) o; diff --git a/src/main/java/hudson/plugins/gearman/ExecutorWorkerThread.java b/src/main/java/hudson/plugins/gearman/ExecutorWorkerThread.java index 7409b00..384de32 100644 --- a/src/main/java/hudson/plugins/gearman/ExecutorWorkerThread.java +++ b/src/main/java/hudson/plugins/gearman/ExecutorWorkerThread.java @@ -133,7 +133,7 @@ public class ExecutorWorkerThread extends AbstractWorkerThread{ String jobFunctionName = "build:" + projectName; newFunctionMap.put(jobFunctionName, new CustomGearmanFunctionFactory( jobFunctionName, StartJobWorker.class.getName(), - project, computer, this.masterName, worker)); + project, computer, this.masterName, worker, null)); } } else { // register "build:$projectName:$label" if this // node matches a node from the project label @@ -152,7 +152,7 @@ public class ExecutorWorkerThread extends AbstractWorkerThread{ // register without label (i.e. "build:$projectName") newFunctionMap.put(jobFunctionName, new CustomGearmanFunctionFactory( jobFunctionName, StartJobWorker.class.getName(), - project, computer, this.masterName, worker)); + project, computer, this.masterName, worker, null)); // iterate over the intersection of project and node labels for (LabelAtom labelAtom : nodeProjectLabelAtoms) { jobFunctionName = "build:" + projectName @@ -160,7 +160,8 @@ public class ExecutorWorkerThread extends AbstractWorkerThread{ // register with label (i.e. "build:$projectName:$label") newFunctionMap.put(jobFunctionName, new CustomGearmanFunctionFactory( jobFunctionName, StartJobWorker.class.getName(), - project, computer, this.masterName, worker)); + project, computer, this.masterName, worker, + labelAtom.getDisplayName())); } } } diff --git a/src/main/java/hudson/plugins/gearman/StartJobWorker.java b/src/main/java/hudson/plugins/gearman/StartJobWorker.java index ecc0f0b..22d89c2 100644 --- a/src/main/java/hudson/plugins/gearman/StartJobWorker.java +++ b/src/main/java/hudson/plugins/gearman/StartJobWorker.java @@ -72,11 +72,12 @@ public class StartJobWorker extends AbstractGearmanFunction { MyGearmanWorkerImpl worker; public StartJobWorker(AbstractProject project, Computer computer, String masterName, - MyGearmanWorkerImpl worker) { + MyGearmanWorkerImpl worker, String label) { this.project = project; this.computer = computer; this.masterName = masterName; this.worker = worker; + this.label = label; } private String buildStatusData(AbstractBuild build) { @@ -89,6 +90,9 @@ public class StartJobWorker extends AbstractGearmanFunction { data.put("number", build.getNumber()); data.put("manager", masterName); data.put("worker", this.worker.getWorkerID()); + if (label != null) { + data.put("label", label); + } String rootUrl = Hudson.getInstance().getRootUrl(); if (rootUrl != null) {