Skip to content

Commit

Permalink
Ability to specify cache on mesos artifact
Browse files Browse the repository at this point in the history
  • Loading branch information
ssalinas committed Feb 7, 2017
1 parent caa8e82 commit f68615f
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 9 deletions.
@@ -0,0 +1,85 @@
package com.hubspot.mesos;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

public class SingularityMesosArtifact {
private final String uri;
private final boolean cache;
private final boolean executable;
private final boolean extract;

@JsonCreator
public static SingularityMesosArtifact fromString(String uri) {
return new SingularityMesosArtifact(uri, false, false, false);
}

@JsonCreator
public SingularityMesosArtifact(@JsonProperty("uri") String uri,
@JsonProperty("cache") boolean cache,
@JsonProperty("executable") boolean executable,
@JsonProperty("extract") boolean extract) {
this.uri = uri;
this.cache = cache;
this.executable = executable;
this.extract = extract;
}

public String getUri() {
return uri;
}

public boolean isCache() {
return cache;
}

public boolean isExecutable() {
return executable;
}

public boolean isExtract() {
return extract;
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}

SingularityMesosArtifact that = (SingularityMesosArtifact) o;

if (cache != that.cache) {
return false;
}
if (executable != that.executable) {
return false;
}
if (extract != that.extract) {
return false;
}
return uri != null ? uri.equals(that.uri) : that.uri == null;
}

@Override
public int hashCode() {
int result = uri != null ? uri.hashCode() : 0;
result = 31 * result + (cache ? 1 : 0);
result = 31 * result + (executable ? 1 : 0);
result = 31 * result + (extract ? 1 : 0);
return result;
}

@Override
public String toString() {
return "SingularityMesosArtifact{" +
"uri='" + uri + '\'' +
", cache=" + cache +
", executable=" + executable +
", extract=" + extract +
'}';
}
}
Expand Up @@ -4,6 +4,7 @@
import static com.hubspot.singularity.JsonHelpers.copyOfSet; import static com.hubspot.singularity.JsonHelpers.copyOfSet;
import static com.hubspot.singularity.JsonHelpers.copyOfMap; import static com.hubspot.singularity.JsonHelpers.copyOfMap;


import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
Expand All @@ -17,6 +18,7 @@
import com.hubspot.deploy.HealthcheckOptions; import com.hubspot.deploy.HealthcheckOptions;
import com.hubspot.mesos.Resources; import com.hubspot.mesos.Resources;
import com.hubspot.mesos.SingularityContainerInfo; import com.hubspot.mesos.SingularityContainerInfo;
import com.hubspot.mesos.SingularityMesosArtifact;
import com.hubspot.mesos.SingularityMesosTaskLabel; import com.hubspot.mesos.SingularityMesosTaskLabel;
import com.wordnik.swagger.annotations.ApiModelProperty; import com.wordnik.swagger.annotations.ApiModelProperty;


Expand All @@ -42,7 +44,7 @@ public class SingularityDeploy {
private final Optional<String> command; private final Optional<String> command;
private final Optional<List<String>> arguments; private final Optional<List<String>> arguments;
private final Optional<Map<String, String>> env; private final Optional<Map<String, String>> env;
private final Optional<List<String>> uris; private final Optional<List<SingularityMesosArtifact>> uris;
private final Optional<ExecutorData> executorData; private final Optional<ExecutorData> executorData;
private final Optional<Map<String, String>> labels; private final Optional<Map<String, String>> labels;
private final Optional<List<SingularityMesosTaskLabel>> mesosLabels; private final Optional<List<SingularityMesosTaskLabel>> mesosLabels;
Expand Down Expand Up @@ -128,7 +130,7 @@ public SingularityDeploy(@JsonProperty("requestId") String requestId,
@JsonProperty("resources") Optional<Resources> resources, @JsonProperty("resources") Optional<Resources> resources,
@JsonProperty("env") Optional<Map<String, String>> env, @JsonProperty("env") Optional<Map<String, String>> env,
@JsonProperty("taskEnv") Optional<Map<Integer, Map<String, String>>> taskEnv, @JsonProperty("taskEnv") Optional<Map<Integer, Map<String, String>>> taskEnv,
@JsonProperty("uris") Optional<List<String>> uris, @JsonProperty("uris") Optional<List<SingularityMesosArtifact>> uris,
@JsonProperty("metadata") Optional<Map<String, String>> metadata, @JsonProperty("metadata") Optional<Map<String, String>> metadata,
@JsonProperty("executorData") Optional<ExecutorData> executorData, @JsonProperty("executorData") Optional<ExecutorData> executorData,
@JsonProperty("version") Optional<String> version, @JsonProperty("version") Optional<String> version,
Expand Down Expand Up @@ -281,7 +283,7 @@ public SingularityDeployBuilder toBuilder() {
.setTimestamp(timestamp) .setTimestamp(timestamp)
.setEnv(copyOfMap(env)) .setEnv(copyOfMap(env))
.setTaskEnv(taskEnv) .setTaskEnv(taskEnv)
.setUris(copyOfList(uris)) .setUris(copyOfList(uris).or(Collections.<SingularityMesosArtifact>emptyList()))
.setExecutorData(executorData) .setExecutorData(executorData)
.setLabels(labels) .setLabels(labels)
.setMesosLabels(mesosLabels) .setMesosLabels(mesosLabels)
Expand Down Expand Up @@ -374,7 +376,7 @@ public Optional<Map<Integer, Map<String, String>>> getTaskEnv() {
} }


@ApiModelProperty(required=false, value="List of URIs to download before executing the deploy command.") @ApiModelProperty(required=false, value="List of URIs to download before executing the deploy command.")
public Optional<List<String>> getUris() { public Optional<List<SingularityMesosArtifact>> getUris() {
return uris; return uris;
} }


Expand Down
@@ -1,5 +1,6 @@
package com.hubspot.singularity; package com.hubspot.singularity;


import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
Expand All @@ -10,6 +11,7 @@
import com.hubspot.deploy.HealthcheckOptions; import com.hubspot.deploy.HealthcheckOptions;
import com.hubspot.mesos.Resources; import com.hubspot.mesos.Resources;
import com.hubspot.mesos.SingularityContainerInfo; import com.hubspot.mesos.SingularityContainerInfo;
import com.hubspot.mesos.SingularityMesosArtifact;
import com.hubspot.mesos.SingularityMesosTaskLabel; import com.hubspot.mesos.SingularityMesosTaskLabel;


public class SingularityDeployBuilder { public class SingularityDeployBuilder {
Expand All @@ -35,7 +37,7 @@ public class SingularityDeployBuilder {
private Optional<List<String>> arguments; private Optional<List<String>> arguments;
private Optional<Map<String, String>> env; private Optional<Map<String, String>> env;
private Optional<Map<Integer, Map<String, String>>> taskEnv; private Optional<Map<Integer, Map<String, String>>> taskEnv;
private Optional<List<String>> uris; private Optional<List<SingularityMesosArtifact>> uris;
private Optional<ExecutorData> executorData; private Optional<ExecutorData> executorData;
private Optional<Map<String, String>> labels; private Optional<Map<String, String>> labels;
private Optional<List<SingularityMesosTaskLabel>> mesosLabels; private Optional<List<SingularityMesosTaskLabel>> mesosLabels;
Expand Down Expand Up @@ -308,12 +310,26 @@ public SingularityDeployBuilder setTaskEnv(Optional<Map<Integer, Map<String, Str
return this; return this;
} }


public Optional<List<String>> getUris() { public Optional<List<SingularityMesosArtifact>> getUris() {
return uris; return uris;
} }


@Deprecated
public SingularityDeployBuilder setUris(Optional<List<String>> uris) { public SingularityDeployBuilder setUris(Optional<List<String>> uris) {
this.uris = uris; if (uris.isPresent()) {
List<SingularityMesosArtifact> artifactUris = new ArrayList<>();
for (String uri : uris.get()) {
artifactUris.add(SingularityMesosArtifact.fromString(uri));
}
this.uris = Optional.of(artifactUris);
} else {
this.uris = Optional.absent();
}
return this;
}

public SingularityDeployBuilder setUris(List<SingularityMesosArtifact> uris) {
this.uris = Optional.of(uris);
return this; return this;
} }


Expand Down
Expand Up @@ -45,6 +45,7 @@
import com.hubspot.mesos.SingularityDockerNetworkType; import com.hubspot.mesos.SingularityDockerNetworkType;
import com.hubspot.mesos.SingularityDockerParameter; import com.hubspot.mesos.SingularityDockerParameter;
import com.hubspot.mesos.SingularityDockerPortMapping; import com.hubspot.mesos.SingularityDockerPortMapping;
import com.hubspot.mesos.SingularityMesosArtifact;
import com.hubspot.mesos.SingularityMesosTaskLabel; import com.hubspot.mesos.SingularityMesosTaskLabel;
import com.hubspot.mesos.SingularityVolume; import com.hubspot.mesos.SingularityVolume;
import com.hubspot.singularity.SingularityS3UploaderFile; import com.hubspot.singularity.SingularityS3UploaderFile;
Expand Down Expand Up @@ -431,8 +432,13 @@ private void prepareCommand(final TaskInfo.Builder bldr, final SingularityTaskId
commandBldr.setShell(false); commandBldr.setShell(false);
} }


for (String uri : task.getDeploy().getUris().or(Collections.<String> emptyList())) { for (SingularityMesosArtifact artifact : task.getDeploy().getUris().or(Collections.<SingularityMesosArtifact> emptyList())) {
commandBldr.addUris(URI.newBuilder().setValue(uri).build()); commandBldr.addUris(URI.newBuilder()
.setValue(artifact.getUri())
.setCache(artifact.isCache())
.setExecutable(artifact.isExecutable())
.setExtract(artifact.isExtract())
.build());
} }


prepareEnvironment(task, taskId, commandBldr, offer, ports); prepareEnvironment(task, taskId, commandBldr, offer, ports);
Expand Down

0 comments on commit f68615f

Please sign in to comment.