Skip to content

Commit

Permalink
Mesos 1.1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
ssalinas committed Jun 20, 2017
1 parent dd72a31 commit 85d415f
Show file tree
Hide file tree
Showing 70 changed files with 962 additions and 1,157 deletions.
18 changes: 9 additions & 9 deletions SingularityBase/src/main/java/com/hubspot/mesos/MesosUtils.java
Expand Up @@ -11,14 +11,14 @@
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;


import org.apache.mesos.Protos.MasterInfo; import org.apache.mesos.v1.Protos.MasterInfo;
import org.apache.mesos.Protos.Offer; import org.apache.mesos.v1.Protos.Offer;
import org.apache.mesos.Protos.Resource; import org.apache.mesos.v1.Protos.Resource;
import org.apache.mesos.Protos.TaskState; import org.apache.mesos.v1.Protos.TaskState;
import org.apache.mesos.Protos.Value; import org.apache.mesos.v1.Protos.Value.Range;
import org.apache.mesos.Protos.Value.Range; import org.apache.mesos.v1.Protos.Value.Ranges;
import org.apache.mesos.Protos.Value.Ranges; import org.apache.mesos.v1.Protos.Value.Scalar;
import org.apache.mesos.Protos.Value.Type; import org.apache.mesos.v1.Protos.Value.Type;


import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
Expand Down Expand Up @@ -214,7 +214,7 @@ public static Resource getPortsResource(int numPorts, List<Resource> resources,
} }


private static Resource newScalar(String name, double value, Optional<String> role) { private static Resource newScalar(String name, double value, Optional<String> role) {
Resource.Builder builder = Resource.newBuilder().setName(name).setType(Value.Type.SCALAR).setScalar(Value.Scalar.newBuilder().setValue(value).build()); Resource.Builder builder = Resource.newBuilder().setName(name).setType(Type.SCALAR).setScalar(Scalar.newBuilder().setValue(value).build());
if (role.isPresent()) { if (role.isPresent()) {
builder.setRole(role.get()); builder.setRole(role.get());
} }
Expand Down
Expand Up @@ -2,7 +2,7 @@


import java.util.Objects; import java.util.Objects;


import org.apache.mesos.Protos; import org.apache.mesos.v1.Protos;


import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
Expand Down
Expand Up @@ -2,19 +2,21 @@


import java.util.Map; import java.util.Map;


import org.apache.mesos.Protos.TaskState; import org.apache.mesos.v1.Protos.TaskState;


import com.google.common.base.Optional; import com.google.common.base.Optional;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;


public enum ExtendedTaskState { public enum ExtendedTaskState {


TASK_LAUNCHED("launched", false, Optional.<TaskState> absent()), TASK_STAGING("staging", false, Optional.of(TaskState.TASK_STAGING)), TASK_LAUNCHED("launched", false, Optional.absent()), TASK_STAGING("staging", false, Optional.of(TaskState.TASK_STAGING)),
TASK_STARTING("starting", false, Optional.of(TaskState.TASK_STARTING)), TASK_RUNNING("running", false, Optional.of(TaskState.TASK_RUNNING)), TASK_STARTING("starting", false, Optional.of(TaskState.TASK_STARTING)), TASK_RUNNING("running", false, Optional.of(TaskState.TASK_RUNNING)),
TASK_CLEANING("cleaning", false, Optional.<TaskState> absent()), TASK_KILLING("killing", false, Optional.of(TaskState.TASK_KILLING)), TASK_FINISHED("finished", true, Optional.of(TaskState.TASK_FINISHED)), TASK_CLEANING("cleaning", false, Optional.absent()), TASK_KILLING("killing", false, Optional.of(TaskState.TASK_KILLING)), TASK_FINISHED("finished", true, Optional.of(TaskState.TASK_FINISHED)),
TASK_FAILED("failed", true, Optional.of(TaskState.TASK_FAILED)), TASK_KILLED("killed", true, Optional.of(TaskState.TASK_KILLED)), TASK_FAILED("failed", true, Optional.of(TaskState.TASK_FAILED)), TASK_KILLED("killed", true, Optional.of(TaskState.TASK_KILLED)),
TASK_LOST("lost", true, Optional.of(TaskState.TASK_LOST)), TASK_LOST_WHILE_DOWN("lost", true, Optional.<TaskState> absent()), TASK_ERROR("error", true, Optional.of(TaskState.TASK_ERROR)); TASK_LOST("lost", true, Optional.of(TaskState.TASK_LOST)), TASK_LOST_WHILE_DOWN("lost", true, Optional.<TaskState>absent()), TASK_ERROR("error", true, Optional.of(TaskState.TASK_ERROR)),
TASK_DROPPED("dropped", true, Optional.of(TaskState.TASK_DROPPED)), TASK_GONE("gone", true, Optional.of(TaskState.TASK_GONE)), TASK_UNREACHABLE("unreachable", true, Optional.of(TaskState.TASK_UNREACHABLE)),
TASK_GONE_BY_OPERATOR("goneByOperator", true, Optional.of(TaskState.TASK_GONE_BY_OPERATOR)), TASK_UNKNOWN("dropped", true, Optional.of(TaskState.TASK_UNKNOWN));


private static final Map<TaskState, ExtendedTaskState> map; private static final Map<TaskState, ExtendedTaskState> map;
static { static {
Expand Down
Expand Up @@ -2,8 +2,8 @@


import java.util.List; import java.util.List;


import org.apache.mesos.Protos.Offer; import org.apache.mesos.v1.Protos.Offer;
import org.apache.mesos.Protos.TaskInfo; import org.apache.mesos.v1.Protos.TaskInfo;


import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
Expand All @@ -21,7 +21,7 @@ public class SingularityTask extends SingularityTaskIdHolder {


@JsonCreator @JsonCreator
public SingularityTask(@JsonProperty("taskRequest") SingularityTaskRequest taskRequest, @JsonProperty("taskId") SingularityTaskId taskId, @JsonProperty("offer") Offer offer, public SingularityTask(@JsonProperty("taskRequest") SingularityTaskRequest taskRequest, @JsonProperty("taskId") SingularityTaskId taskId, @JsonProperty("offer") Offer offer,
@JsonProperty("mesosTask") TaskInfo task, @JsonProperty("rackId") Optional<String> rackId) { @JsonProperty("mesosTask") TaskInfo task, @JsonProperty("rackId") Optional<String> rackId) {
super(taskId); super(taskId);
this.taskRequest = taskRequest; this.taskRequest = taskRequest;
this.offer = offer; this.offer = offer;
Expand Down
@@ -1,6 +1,6 @@
package com.hubspot.singularity; package com.hubspot.singularity;


import org.apache.mesos.Protos.TaskStatus; import org.apache.mesos.v1.Protos.TaskStatus;


import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
Expand Down
Expand Up @@ -842,19 +842,19 @@ public void decomissionRack(String rackId) {
public void decommissionRack(String rackId, Optional<SingularityMachineChangeRequest> machineChangeRequest) { public void decommissionRack(String rackId, Optional<SingularityMachineChangeRequest> machineChangeRequest) {
final String requestUri = String.format(RACKS_DECOMISSION_FORMAT, getApiBase(), rackId); final String requestUri = String.format(RACKS_DECOMISSION_FORMAT, getApiBase(), rackId);


post(requestUri, String.format("decomission rack %s", rackId), machineChangeRequest.or(Optional.of(new SingularityMachineChangeRequest(Optional.<String>absent())))); post(requestUri, String.format("decomission rack %s", rackId), machineChangeRequest.or(Optional.of(SingularityMachineChangeRequest.empty())));
} }


public void freezeRack(String rackId, Optional<SingularityMachineChangeRequest> machineChangeRequest) { public void freezeRack(String rackId, Optional<SingularityMachineChangeRequest> machineChangeRequest) {
final String requestUri = String.format(RACKS_FREEZE_FORMAT, getApiBase(), rackId); final String requestUri = String.format(RACKS_FREEZE_FORMAT, getApiBase(), rackId);


post(requestUri, String.format("freeze rack %s", rackId), machineChangeRequest.or(Optional.of(new SingularityMachineChangeRequest(Optional.<String>absent())))); post(requestUri, String.format("freeze rack %s", rackId), machineChangeRequest.or(Optional.of(SingularityMachineChangeRequest.empty())));
} }


public void activateRack(String rackId, Optional<SingularityMachineChangeRequest> machineChangeRequest) { public void activateRack(String rackId, Optional<SingularityMachineChangeRequest> machineChangeRequest) {
final String requestUri = String.format(RACKS_ACTIVATE_FORMAT, getApiBase(), rackId); final String requestUri = String.format(RACKS_ACTIVATE_FORMAT, getApiBase(), rackId);


post(requestUri, String.format("decommission rack %s", rackId), machineChangeRequest.or(Optional.of(new SingularityMachineChangeRequest(Optional.<String>absent())))); post(requestUri, String.format("decommission rack %s", rackId), machineChangeRequest.or(Optional.of(SingularityMachineChangeRequest.empty())));
} }


public void deleteRack(String rackId) { public void deleteRack(String rackId) {
Expand Down
11 changes: 6 additions & 5 deletions SingularityExecutor/Dockerfile
@@ -1,22 +1,23 @@
FROM mesosphere/mesos:0.28.1-2.0.20.ubuntu1404 FROM mesosphere/mesos:1.3.0
## mesos + java used to build hubspot/singularitybase ## mesos + java used to build hubspot/singularitybase


MAINTAINER platform-infrastructure-groups@hubspot.com MAINTAINER platform-infrastructure-groups@hubspot.com


# Java Version # Java Version
ENV JAVA_VERSION_MAJOR 8 ENV JAVA_VERSION_MAJOR 8
ENV JAVA_VERSION_MINOR 77 ENV JAVA_VERSION_MINOR 131
ENV JAVA_VERSION_BUILD 03 ENV JAVA_VERSION_BUILD 11
ENV JAVA_PACKAGE server-jre ENV JAVA_PACKAGE server-jre
ENV JAVA_SHA d54c1d3a095b4ff2b6607d096fa80163


RUN apt-get update && \ RUN apt-get update && \
apt-get install -y curl tar logrotate ca-certificates apt-transport-https lxc iptables && \ apt-get install -y curl tar logrotate ca-certificates apt-transport-https lxc iptables && \
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D && \ apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D && \
echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" > /etc/apt/sources.list.d/docker.list && \ echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" > /etc/apt/sources.list.d/docker.list && \
apt-get update && \ apt-get update && \
apt-get -y install docker-engine && \ apt-get -y install docker-engine && \
curl -kLOH "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" \ curl -skLOH "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-b${JAVA_VERSION_BUILD}/${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar.gz && \ http://download.oracle.com/otn-pub/java/jdk/${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-b${JAVA_VERSION_BUILD}/${JAVA_SHA}/${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar.gz && \
gunzip ${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar.gz && \ gunzip ${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar.gz && \
tar -xf ${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar -C /opt && \ tar -xf ${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar -C /opt && \
rm ${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar && \ rm ${JAVA_PACKAGE}-${JAVA_VERSION_MAJOR}u${JAVA_VERSION_MINOR}-linux-x64.tar && \
Expand Down
Expand Up @@ -97,7 +97,7 @@ public void launchTask(final ExecutorDriver executorDriver, final Protos.TaskInf
} catch (Throwable t) { } catch (Throwable t) {
LOG.error("Unexpected exception starting task {}", taskId, t); LOG.error("Unexpected exception starting task {}", taskId, t);


executorUtils.sendStatusUpdate(executorDriver, taskInfo, TaskState.TASK_LOST, String.format("Unexpected exception while launching task %s - %s", taskId, t.getMessage()), LOG); executorUtils.sendStatusUpdate(executorDriver, taskInfo.getTaskId(), TaskState.TASK_LOST, String.format("Unexpected exception while launching task %s - %s", taskId, t.getMessage()), LOG);
} }
} }


Expand Down
Expand Up @@ -15,6 +15,7 @@
import org.apache.mesos.ExecutorDriver; import org.apache.mesos.ExecutorDriver;
import org.apache.mesos.Protos; import org.apache.mesos.Protos;
import org.apache.mesos.Protos.Status; import org.apache.mesos.Protos.Status;
import org.apache.mesos.Protos.TaskID;
import org.apache.mesos.Protos.TaskState; import org.apache.mesos.Protos.TaskState;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -358,7 +359,7 @@ public void onFailure(Throwable t) {
} }


private void sendStatusUpdate(SingularityExecutorTask task, Protos.TaskState taskState, String message) { private void sendStatusUpdate(SingularityExecutorTask task, Protos.TaskState taskState, String message) {
executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo(), taskState, message, task.getLog()); executorUtils.sendStatusUpdate(task.getDriver(), TaskID.newBuilder().setValue(task.getTaskId()).build(), taskState, message, task.getLog());
} }


private void onFinish(SingularityExecutorTask task, Protos.TaskState taskState) { private void onFinish(SingularityExecutorTask task, Protos.TaskState taskState) {
Expand Down
Expand Up @@ -67,7 +67,7 @@ public SingularityExecutorTask(ExecutorDriver driver, ExecutorUtils executorUtil
} }


public void cleanup(TaskState state) { public void cleanup(TaskState state) {
ExtendedTaskState extendedTaskState = ExtendedTaskState.fromTaskState(state); ExtendedTaskState extendedTaskState = ExtendedTaskState.fromTaskState(org.apache.mesos.v1.Protos.TaskState.valueOf(state.toString())); // #gross


boolean cleanupAppTaskDirectory = !extendedTaskState.isFailed() && !taskDefinition.getExecutorData().getPreserveTaskSandboxAfterFinish().or(Boolean.FALSE); boolean cleanupAppTaskDirectory = !extendedTaskState.isFailed() && !taskDefinition.getExecutorData().getPreserveTaskSandboxAfterFinish().or(Boolean.FALSE);


Expand Down
Expand Up @@ -75,15 +75,15 @@ public SingularityExecutorTaskProcessBuilder(SingularityExecutorTask task,
@Override @Override
public ProcessBuilder call() throws Exception { public ProcessBuilder call() throws Exception {
if (task.getTaskInfo().hasContainer() && task.getTaskInfo().getContainer().hasDocker()) { if (task.getTaskInfo().hasContainer() && task.getTaskInfo().getContainer().hasDocker()) {
executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo(), TaskState.TASK_STARTING, String.format("Pulling image... (executor pid: %s)", executorPid), task.getLog()); executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo().getTaskId(), TaskState.TASK_STARTING, String.format("Pulling image... (executor pid: %s)", executorPid), task.getLog());
try { try {
dockerUtils.pull(task.getTaskInfo().getContainer().getDocker().getImage()); dockerUtils.pull(task.getTaskInfo().getContainer().getDocker().getImage());
} catch (DockerException e) { } catch (DockerException e) {
throw new ProcessFailedException("Could not pull docker image", e); throw new ProcessFailedException("Could not pull docker image", e);
} }
} }


executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo(), TaskState.TASK_STARTING, String.format("Staging files... (executor pid: %s)", executorPid), task.getLog()); executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo().getTaskId(), TaskState.TASK_STARTING, String.format("Staging files... (executor pid: %s)", executorPid), task.getLog());


taskArtifactFetcher = Optional.of(artifactFetcher.buildTaskFetcher(executorData, task)); taskArtifactFetcher = Optional.of(artifactFetcher.buildTaskFetcher(executorData, task));


Expand Down
Expand Up @@ -25,7 +25,7 @@ public SingularityExecutorTaskProcessCallable(SingularityExecutorTask task, Proc
public Integer call() throws Exception { public Integer call() throws Exception {
Process process = startProcess(processBuilder); Process process = startProcess(processBuilder);


executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo(), Protos.TaskState.TASK_RUNNING, String.format("Task running process %s", getCurrentProcessToString()), task.getLog()); executorUtils.sendStatusUpdate(task.getDriver(), task.getTaskInfo().getTaskId(), Protos.TaskState.TASK_RUNNING, String.format("Task running process %s", getCurrentProcessToString()), task.getLog());


return process.waitFor(); return process.waitFor();
} }
Expand Down
Expand Up @@ -19,14 +19,14 @@ public ExecutorUtils(SingularityExecutorConfiguration configuration) {
} }


@SuppressFBWarnings("DM_EXIT") @SuppressFBWarnings("DM_EXIT")
public void sendStatusUpdate(ExecutorDriver driver, Protos.TaskInfo taskInfo, Protos.TaskState taskState, String message, Logger logger) { public void sendStatusUpdate(ExecutorDriver driver, Protos.TaskID taskID, Protos.TaskState taskState, String message, Logger logger) {
logger.info("Sending status update \"{}\" ({})", message, taskState.name()); logger.info("Sending status update \"{}\" ({})", message, taskState.name());


message = message.substring(0, Math.min(configuration.getMaxTaskMessageLength(), message.length())); message = message.substring(0, Math.min(configuration.getMaxTaskMessageLength(), message.length()));


try { try {
final Protos.TaskStatus.Builder builder = Protos.TaskStatus.newBuilder() final Protos.TaskStatus.Builder builder = Protos.TaskStatus.newBuilder()
.setTaskId(taskInfo.getTaskId()) .setTaskId(taskID)
.setState(taskState) .setState(taskState)
.setMessage(message); .setMessage(message);


Expand Down
Expand Up @@ -59,11 +59,11 @@ public void notify(String message, Throwable t, Map<String, String> extraData) {
final StackTraceElement[] currentThreadStackTrace = Thread.currentThread().getStackTrace(); final StackTraceElement[] currentThreadStackTrace = Thread.currentThread().getStackTrace();


final EventBuilder eventBuilder = new EventBuilder() final EventBuilder eventBuilder = new EventBuilder()
.setCulprit(getPrefix() + message) .withCulprit(getPrefix() + message)
.setMessage(Strings.nullToEmpty(message)) .withMessage(Strings.nullToEmpty(message))
.setLevel(Event.Level.ERROR) .withLevel(Event.Level.ERROR)
.setLogger(getCallingClassName(currentThreadStackTrace)) .withLogger(getCallingClassName(currentThreadStackTrace))
.addSentryInterface(new ExceptionInterface(t)); .withSentryInterface(new ExceptionInterface(t));


if (extraData != null && !extraData.isEmpty()) { if (extraData != null && !extraData.isEmpty()) {
for (Map.Entry<String, String> entry : extraData.entrySet()) { for (Map.Entry<String, String> entry : extraData.entrySet()) {
Expand All @@ -82,13 +82,13 @@ public void notify(String subject, Map<String, String> extraData) {
final StackTraceElement[] currentThreadStackTrace = Thread.currentThread().getStackTrace(); final StackTraceElement[] currentThreadStackTrace = Thread.currentThread().getStackTrace();


final EventBuilder eventBuilder = new EventBuilder() final EventBuilder eventBuilder = new EventBuilder()
.setMessage(getPrefix() + subject) .withMessage(getPrefix() + subject)
.setLevel(Event.Level.ERROR) .withLevel(Event.Level.ERROR)
.setLogger(getCallingClassName(currentThreadStackTrace)); .withLogger(getCallingClassName(currentThreadStackTrace));


if (extraData != null && !extraData.isEmpty()) { if (extraData != null && !extraData.isEmpty()) {
for (Map.Entry<String, String> entry : extraData.entrySet()) { for (Map.Entry<String, String> entry : extraData.entrySet()) {
eventBuilder.addExtra(entry.getKey(), entry.getValue()); eventBuilder.withExtra(entry.getKey(), entry.getValue());
} }
} }


Expand Down

0 comments on commit 85d415f

Please sign in to comment.