Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[JENKINS-30269] Make the step work
  • Loading branch information
amuniz committed Mar 10, 2016
1 parent d538492 commit d5b44a4
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 11 deletions.
13 changes: 9 additions & 4 deletions pom.xml
Expand Up @@ -57,19 +57,25 @@
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-step-api</artifactId>
<version>1.14</version>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>matrix-project</artifactId>
<version>1.4.1</version>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.infradna.tool</groupId>
<artifactId>bridge-method-annotation</artifactId>
<version>1.14</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-aggregator</artifactId>
<version>1.4</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand All @@ -79,8 +85,7 @@
<artifactId>maven-hpi-plugin</artifactId>
<configuration>
<loggers>
<org.jenkinsci.plugins.workflow>FINE</org.jenkinsci.plugins.workflow>
<org.jenkinsci.plugins.durabletask>FINE</org.jenkinsci.plugins.durabletask>
<org.jenkins.plugins.lockableresources>FINE</org.jenkins.plugins.lockableresources>
</loggers>
</configuration>
</plugin>
Expand Down
Expand Up @@ -58,6 +58,7 @@ public void run() {
private boolean lockAndProceed() {
LockableResourcesStruct resourceHolder = new LockableResourcesStruct(step.resource);
if (LockableResourcesManager.get().lock(resourceHolder.required, run)) {
LockableResourcesManager.get().save(); // save state
listener.getLogger().println("Lock aquired on [" + step.resource + "]");
body = getContext().newBodyInvoker().
withCallback(new Callback(resourceHolder, run)).
Expand All @@ -82,19 +83,34 @@ public Void apply(@Nonnull LockStepExecution execution) {
});
}

private static final class Callback extends BodyExecutionCallback.TailCall {
private static final class Callback extends BodyExecutionCallback {

private final LockableResourcesStruct resourceHolder;
private final Run<?, ?> run;
private transient Run<?, ?> run;
private final String buildExternalizableId;

Callback(LockableResourcesStruct resourceHolder, Run<?, ?> run) {
this.resourceHolder = resourceHolder;
this.run = run;
this.buildExternalizableId = run.getExternalizableId();
}

@Override
protected void finished(StepContext context) throws Exception {
public void onSuccess(StepContext context, Object result) {
if (run == null && buildExternalizableId != null) {
run = Run.fromExternalizableId(buildExternalizableId);
}
LockableResourcesManager.get().unlock(resourceHolder.required, run);
context.onSuccess(result);
}

@Override
public void onFailure(StepContext context, Throwable t) {
if (run == null && buildExternalizableId != null) {
run = Run.fromExternalizableId(buildExternalizableId);
}
LockableResourcesManager.get().unlock(resourceHolder.required, run);
context.onFailure(t);
}

private static final long serialVersionUID = 1L;
Expand Down
Expand Up @@ -22,6 +22,7 @@
import hudson.model.User;
import hudson.tasks.Mailer.UserProperty;

import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
Expand All @@ -38,7 +39,7 @@
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;

@ExportedBean(defaultVisibility = 999)
public class LockableResource extends AbstractDescribableImpl<LockableResource> {
public class LockableResource extends AbstractDescribableImpl<LockableResource> implements Serializable {

private static final Logger LOGGER = Logger.getLogger(LockableResource.class.getName());
public static final int NOT_QUEUED = 0;
Expand Down Expand Up @@ -210,7 +211,11 @@ public String getBuildName() {

public void setBuild(Run<?, ?> lockedBy) {
this.build = lockedBy;
this.buildExternalizableId = lockedBy.getExternalizableId();
if (lockedBy != null) {
this.buildExternalizableId = lockedBy.getExternalizableId();
} else {
this.buildExternalizableId = null;
}
}

public Task getTask() {
Expand Down Expand Up @@ -252,7 +257,7 @@ private void validateQueuingTimeout() {

@DataBoundSetter
public void setReservedBy(String userName) {
this.reservedBy = userName;
this.reservedBy = Util.fixEmptyAndTrim(userName);
}

public void unReserve() {
Expand Down Expand Up @@ -304,4 +309,6 @@ public String getDisplayName() {
}

}

private static final long serialVersionUID = 1L;
}
Expand Up @@ -10,14 +10,15 @@

import hudson.EnvVars;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.jenkins.plugins.lockableresources.LockableResource;
import org.jenkins.plugins.lockableresources.LockableResourcesManager;
import org.jenkins.plugins.lockableresources.RequiredResourcesProperty;

public class LockableResourcesStruct {
public class LockableResourcesStruct implements Serializable {

public List<LockableResource> required;
public String label;
Expand Down Expand Up @@ -60,4 +61,6 @@ public String toString() {
", Variable name: " + this.requiredVar +
", Number of resources: " + this.requiredNumber;
}

private static final long serialVersionUID = 1L;
}

0 comments on commit d5b44a4

Please sign in to comment.