Search in sources :

Example 6 with TaskID

use of org.apache.mesos.v1.Protos.TaskID in project Singularity by HubSpot.

the class SingularityMesosSchedulerClient method kill.

public void kill(TaskID taskId, AgentID agentId, KillPolicy killPolicy) {
    Builder kill = build().setKill(Kill.newBuilder().setTaskId(taskId).setAgentId(agentId).setKillPolicy(killPolicy));
    sendCall(kill, Type.KILL);
}
Also used : MesosClientBuilder(com.mesosphere.mesos.rx.java.MesosClientBuilder) ProtobufMesosClientBuilder(com.mesosphere.mesos.rx.java.protobuf.ProtobufMesosClientBuilder) Builder(org.apache.mesos.v1.scheduler.Protos.Call.Builder)

Example 7 with TaskID

use of org.apache.mesos.v1.Protos.TaskID in project Singularity by HubSpot.

the class SingularityMesosSchedulerClient method kill.

public void kill(TaskID taskId, KillPolicy killPolicy) {
    Builder kill = build().setKill(Kill.newBuilder().setTaskId(taskId).setKillPolicy(killPolicy));
    sendCall(kill, Type.KILL);
}
Also used : MesosClientBuilder(com.mesosphere.mesos.rx.java.MesosClientBuilder) ProtobufMesosClientBuilder(com.mesosphere.mesos.rx.java.protobuf.ProtobufMesosClientBuilder) Builder(org.apache.mesos.v1.scheduler.Protos.Call.Builder)

Example 8 with TaskID

use of org.apache.mesos.v1.Protos.TaskID in project Singularity by HubSpot.

the class SingularityMesosTaskBuilder method prepareContainerInfo.

private void prepareContainerInfo(final SingularityOfferHolder offerHolder, final SingularityTaskId taskId, final TaskInfo.Builder bldr, final SingularityContainerInfo containerInfo, final Optional<long[]> ports) {
    ContainerInfo.Builder containerBuilder = ContainerInfo.newBuilder();
    containerBuilder.setType(ContainerInfo.Type.valueOf(containerInfo.getType().toString()));
    final Optional<SingularityDockerInfo> dockerInfo = containerInfo.getDocker();
    if (dockerInfo.isPresent()) {
        final DockerInfo.Builder dockerInfoBuilder = DockerInfo.newBuilder();
        dockerInfoBuilder.setImage(dockerInfo.get().getImage());
        if (dockerInfo.get().getNetwork().isPresent()) {
            dockerInfoBuilder.setNetwork(DockerInfo.Network.valueOf(dockerInfo.get().getNetwork().get().toString()));
        }
        final List<SingularityDockerPortMapping> portMappings = dockerInfo.get().getPortMappings();
        final boolean isBridged = SingularityDockerNetworkType.BRIDGE.equals(dockerInfo.get().getNetwork().orNull());
        if ((dockerInfo.get().hasAllLiteralHostPortMappings() || ports.isPresent()) && !portMappings.isEmpty()) {
            for (SingularityDockerPortMapping singularityDockerPortMapping : portMappings) {
                final Optional<DockerInfo.PortMapping> maybePortMapping = buildPortMapping(singularityDockerPortMapping, ports);
                if (maybePortMapping.isPresent()) {
                    dockerInfoBuilder.addPortMappings(maybePortMapping.get());
                }
            }
        } else if (configuration.getNetworkConfiguration().isDefaultPortMapping() && isBridged && portMappings.isEmpty() && ports.isPresent()) {
            for (long longPort : ports.get()) {
                int port = Ints.checkedCast(longPort);
                dockerInfoBuilder.addPortMappings(DockerInfo.PortMapping.newBuilder().setHostPort(port).setContainerPort(port).build());
            }
        }
        if (!dockerInfo.get().getDockerParameters().isEmpty()) {
            List<Parameter> parameters = new ArrayList<>();
            for (SingularityDockerParameter parameter : dockerInfo.get().getDockerParameters()) {
                parameters.add(Parameter.newBuilder().setKey(parameter.getKey()).setValue(parameter.getValue()).build());
            }
            dockerInfoBuilder.addAllParameters(parameters);
        }
        dockerInfoBuilder.setPrivileged(dockerInfo.get().isPrivileged());
        dockerInfoBuilder.setForcePullImage(dockerInfo.get().isForcePullImage());
        containerBuilder.setDocker(dockerInfoBuilder);
    }
    for (SingularityVolume volumeInfo : containerInfo.getVolumes().or(Collections.<SingularityVolume>emptyList())) {
        final Volume.Builder volumeBuilder = Volume.newBuilder();
        volumeBuilder.setContainerPath(fillInTaskIdValues(volumeInfo.getContainerPath(), offerHolder, taskId));
        if (volumeInfo.getHostPath().isPresent()) {
            volumeBuilder.setHostPath(fillInTaskIdValues(volumeInfo.getHostPath().get(), offerHolder, taskId));
        }
        if (volumeInfo.getMode().isPresent()) {
            volumeBuilder.setMode(Volume.Mode.valueOf(volumeInfo.getMode().get().toString()));
        } else {
            volumeBuilder.setMode(Volume.Mode.RO);
        }
        if (volumeInfo.getSource().isPresent()) {
            final Volume.Source.Builder sourceBuilder = Volume.Source.newBuilder();
            final SingularityVolumeSource source = volumeInfo.getSource().get();
            sourceBuilder.setType(Volume.Source.Type.valueOf(source.getType().toString()));
            if (source.getDockerVolume().isPresent()) {
                final Volume.Source.DockerVolume.Builder dockerVolumeBuilder = Volume.Source.DockerVolume.newBuilder();
                final SingularityDockerVolume dockerVolume = source.getDockerVolume().get();
                if (dockerVolume.getDriver().isPresent()) {
                    dockerVolumeBuilder.setDriver(dockerVolume.getDriver().get());
                }
                if (dockerVolume.getName().isPresent()) {
                    dockerVolumeBuilder.setName(dockerVolume.getName().get().replace("%i", Integer.toString(taskId.getInstanceNo())));
                }
                if (!dockerVolume.getDriverOptions().isEmpty()) {
                    final Parameters.Builder parameters = Parameters.newBuilder();
                    for (Entry<String, String> option : dockerVolume.getDriverOptions().entrySet()) {
                        parameters.addParameter(Parameter.newBuilder().setKey(option.getKey()).setValue(option.getValue()).build());
                    }
                    dockerVolumeBuilder.setDriverOptions(parameters.build());
                }
                sourceBuilder.setDockerVolume(dockerVolumeBuilder.build());
            }
            volumeBuilder.setSource(sourceBuilder.build());
        }
        containerBuilder.addVolumes(volumeBuilder);
    }
    prepareMesosInfo(containerBuilder, containerInfo);
    prepareNetworkInfos(containerBuilder, containerInfo, ports);
    bldr.setContainer(containerBuilder);
}
Also used : SingularityVolume(com.hubspot.mesos.SingularityVolume) ArrayList(java.util.ArrayList) ByteString(com.google.protobuf.ByteString) SingularityDockerPortMapping(com.hubspot.mesos.SingularityDockerPortMapping) SingularityDockerInfo(com.hubspot.mesos.SingularityDockerInfo) DockerInfo(org.apache.mesos.v1.Protos.ContainerInfo.DockerInfo) SingularityVolumeSource(com.hubspot.mesos.SingularityVolumeSource) SingularityPortMapping(com.hubspot.mesos.SingularityPortMapping) SingularityDockerPortMapping(com.hubspot.mesos.SingularityDockerPortMapping) Parameters(org.apache.mesos.v1.Protos.Parameters) SingularityDockerVolume(com.hubspot.mesos.SingularityDockerVolume) SingularityDockerParameter(com.hubspot.mesos.SingularityDockerParameter) SingularityDockerInfo(com.hubspot.mesos.SingularityDockerInfo) SingularityDockerVolume(com.hubspot.mesos.SingularityDockerVolume) Volume(org.apache.mesos.v1.Protos.Volume) SingularityVolume(com.hubspot.mesos.SingularityVolume) SingularityContainerInfo(com.hubspot.mesos.SingularityContainerInfo) ContainerInfo(org.apache.mesos.v1.Protos.ContainerInfo) Parameter(org.apache.mesos.v1.Protos.Parameter) SingularityDockerParameter(com.hubspot.mesos.SingularityDockerParameter) SingularityVolumeSource(com.hubspot.mesos.SingularityVolumeSource) SingularityDockerVolume(com.hubspot.mesos.SingularityDockerVolume)

Example 9 with TaskID

use of org.apache.mesos.v1.Protos.TaskID in project Singularity by HubSpot.

the class SingularityMesosTaskBuilder method prepareEnvironment.

private void prepareEnvironment(final SingularityTaskRequest task, SingularityTaskId taskId, CommandInfo.Builder commandBuilder, final SingularityOfferHolder offerHolder, final Optional<long[]> ports) {
    Map<String, Object> envVars = new HashMap<>();
    envVars.put("INSTANCE_NO", task.getPendingTask().getPendingTaskId().getInstanceNo());
    envVars.put("TASK_HOST", offerHolder.getHostname());
    envVars.put("TASK_RACK_ID", offerHolder.getRackId());
    envVars.put("AVAILABILITY_ZONE", offerHolder.getRackId());
    envVars.put("TASK_REQUEST_ID", task.getPendingTask().getPendingTaskId().getRequestId());
    envVars.put("TASK_DEPLOY_ID", taskId.getDeployId());
    envVars.put("TASK_ID", taskId.getId());
    envVars.put("ESTIMATED_INSTANCE_COUNT", task.getRequest().getInstancesSafe());
    if (task.getPendingTask().getUser().isPresent()) {
        envVars.put("STARTED_BY_USER", task.getPendingTask().getUser().get());
    }
    for (Entry<String, String> envEntry : task.getDeploy().getEnv().or(Collections.<String, String>emptyMap()).entrySet()) {
        envVars.put(envEntry.getKey(), fillInTaskIdValues(envEntry.getValue(), offerHolder, taskId));
    }
    if (task.getDeploy().getTaskEnv().isPresent() && task.getDeploy().getTaskEnv().get().containsKey(taskId.getInstanceNo()) && !task.getDeploy().getTaskEnv().get().get(taskId.getInstanceNo()).isEmpty()) {
        for (Entry<String, String> envEntry : task.getDeploy().getTaskEnv().get().get(taskId.getInstanceNo()).entrySet()) {
            envVars.put(envEntry.getKey(), fillInTaskIdValues(envEntry.getValue(), offerHolder, taskId));
        }
    }
    if (ports.isPresent()) {
        for (int portNum = 0; portNum < ports.get().length; portNum++) {
            if (portNum == 0) {
                envVars.put("PORT", ports.get()[portNum]);
            }
            envVars.put(String.format("PORT%s", portNum), ports.get()[portNum]);
        }
    }
    if (task.getPendingTask().getResources().isPresent()) {
        Resources override = task.getPendingTask().getResources().get();
        if (override.getCpus() != 0) {
            envVars.put("DEPLOY_CPUS", ((long) override.getCpus()));
        }
        if (override.getMemoryMb() != 0) {
            envVars.put("DEPLOY_MEM", ((long) override.getMemoryMb()));
        }
    }
    for (Entry entry : task.getPendingTask().getEnvOverrides().entrySet()) {
        envVars.put(entry.getKey().toString(), entry.getValue());
    }
    Environment.Builder envBldr = Environment.newBuilder();
    for (Entry entry : envVars.entrySet()) {
        setEnv(envBldr, entry.getKey().toString(), entry.getValue());
    }
    commandBuilder.setEnvironment(envBldr.build());
}
Also used : Entry(java.util.Map.Entry) HashMap(java.util.HashMap) Environment(org.apache.mesos.v1.Protos.Environment) ByteString(com.google.protobuf.ByteString) Resources(com.hubspot.mesos.Resources)

Example 10 with TaskID

use of org.apache.mesos.v1.Protos.TaskID in project Singularity by HubSpot.

the class SingularityMesosTaskBuilder method buildTask.

public SingularityMesosTaskHolder buildTask(SingularityOfferHolder offerHolder, List<Resource> availableResources, SingularityTaskRequest taskRequest, Resources desiredTaskResources, Resources desiredExecutorResources) {
    final String sanitizedRackId = offerHolder.getSanitizedRackId();
    final String sanitizedHost = offerHolder.getSanitizedHost();
    final SingularityTaskId taskId = new SingularityTaskId(taskRequest.getPendingTask().getPendingTaskId().getRequestId(), taskRequest.getDeploy().getId(), System.currentTimeMillis(), taskRequest.getPendingTask().getPendingTaskId().getInstanceNo(), sanitizedHost, sanitizedRackId);
    final TaskInfo.Builder bldr = TaskInfo.newBuilder().setTaskId(TaskID.newBuilder().setValue(taskId.toString()));
    Optional<long[]> ports = Optional.absent();
    Optional<Resource> portsResource = Optional.absent();
    final Optional<SingularityContainerInfo> containerInfo = taskRequest.getDeploy().getContainerInfo();
    if (desiredTaskResources.getNumPorts() > 0 || hasLiteralPortMapping(containerInfo)) {
        List<Long> requestedPorts = new ArrayList<>();
        if (hasLiteralPortMapping(containerInfo)) {
            requestedPorts.addAll(containerInfo.get().getDocker().get().getLiteralHostPorts());
        }
        portsResource = Optional.of(MesosUtils.getPortsResource(desiredTaskResources.getNumPorts(), availableResources, requestedPorts));
        ports = Optional.of(MesosUtils.getPorts(portsResource.get(), desiredTaskResources.getNumPorts()));
    }
    if (containerInfo.isPresent()) {
        prepareContainerInfo(offerHolder, taskId, bldr, containerInfo.get(), ports);
    }
    if (taskRequest.getDeploy().getCustomExecutorCmd().isPresent()) {
        prepareCustomExecutor(bldr, taskId, taskRequest, offerHolder, ports, desiredExecutorResources);
    } else {
        prepareCommand(bldr, taskId, taskRequest, offerHolder, ports);
    }
    if (portsResource.isPresent()) {
        bldr.addResources(portsResource.get());
    }
    Optional<String> requiredRole = taskRequest.getRequest().getRequiredRole();
    bldr.addResources(MesosUtils.getCpuResource(desiredTaskResources.getCpus(), requiredRole));
    bldr.addResources(MesosUtils.getMemoryResource(desiredTaskResources.getMemoryMb(), requiredRole));
    bldr.addResources(MesosUtils.getDiskResource(desiredTaskResources.getDiskMb(), requiredRole));
    bldr.setAgentId(offerHolder.getOffers().get(0).getAgentId());
    bldr.setName(taskRequest.getRequest().getId());
    final Builder labelsBuilder = Labels.newBuilder();
    // apply request-specific labels, if any
    if (taskRequest.getDeploy().getMesosLabels().isPresent() && !taskRequest.getDeploy().getMesosLabels().get().isEmpty()) {
        for (SingularityMesosTaskLabel label : taskRequest.getDeploy().getMesosLabels().get()) {
            org.apache.mesos.v1.Protos.Label.Builder labelBuilder = Label.newBuilder();
            labelBuilder.setKey(label.getKey());
            if ((label.getValue().isPresent())) {
                labelBuilder.setValue(label.getValue().get());
            }
            labelsBuilder.addLabels(labelBuilder.build());
        }
    }
    // apply task-specific labels, if any
    final int taskInstanceNo = taskRequest.getPendingTask().getPendingTaskId().getInstanceNo();
    if (taskRequest.getDeploy().getMesosTaskLabels().isPresent() && taskRequest.getDeploy().getMesosTaskLabels().get().containsKey(taskInstanceNo) && !taskRequest.getDeploy().getMesosTaskLabels().get().get(taskInstanceNo).isEmpty()) {
        for (SingularityMesosTaskLabel label : taskRequest.getDeploy().getMesosTaskLabels().get().get(taskInstanceNo)) {
            org.apache.mesos.v1.Protos.Label.Builder labelBuilder = Label.newBuilder();
            labelBuilder.setKey(label.getKey());
            if ((label.getValue().isPresent())) {
                labelBuilder.setValue(label.getValue().get());
            }
            labelsBuilder.addLabels(labelBuilder.build());
        }
    }
    bldr.setLabels(labelsBuilder);
    TaskInfo task = bldr.build();
    return new SingularityMesosTaskHolder(new SingularityTask(taskRequest, taskId, offerHolder.getOffers().stream().map((o) -> mesosProtosUtils.offerFromProtos(o)).collect(Collectors.toList()), mesosProtosUtils.taskFromProtos(task), Optional.of(offerHolder.getRackId())), task);
}
Also used : SingularityTask(com.hubspot.singularity.SingularityTask) ExecutorInfo(org.apache.mesos.v1.Protos.ExecutorInfo) Parameter(org.apache.mesos.v1.Protos.Parameter) Inject(com.google.inject.Inject) LoggerFactory(org.slf4j.LoggerFactory) Labels(org.apache.mesos.v1.Protos.Labels) SingularityContainerInfo(com.hubspot.mesos.SingularityContainerInfo) SingularityMesosImage(com.hubspot.mesos.SingularityMesosImage) CommandInfo(org.apache.mesos.v1.Protos.CommandInfo) Optional(com.google.common.base.Optional) Map(java.util.Map) NetworkInfo(org.apache.mesos.v1.Protos.NetworkInfo) SingularityDockerInfo(com.hubspot.mesos.SingularityDockerInfo) MesosProtosUtils(com.hubspot.singularity.helpers.MesosProtosUtils) Variable(org.apache.mesos.v1.Protos.Environment.Variable) Resources(com.hubspot.mesos.Resources) SingularityDockerNetworkType(com.hubspot.mesos.SingularityDockerNetworkType) SingularityPortMapping(com.hubspot.mesos.SingularityPortMapping) SingularityTaskId(com.hubspot.singularity.SingularityTaskId) SingularityDockerVolume(com.hubspot.mesos.SingularityDockerVolume) SingularityVolumeSource(com.hubspot.mesos.SingularityVolumeSource) Collectors(java.util.stream.Collectors) MesosInfo(org.apache.mesos.v1.Protos.ContainerInfo.MesosInfo) ExecutorID(org.apache.mesos.v1.Protos.ExecutorID) ExecutorDataBuilder(com.hubspot.deploy.ExecutorDataBuilder) ByteString(com.google.protobuf.ByteString) List(java.util.List) MesosUtils(com.hubspot.singularity.helpers.MesosUtils) SingularityDockerImage(com.hubspot.mesos.SingularityDockerImage) SingularityMesosInfo(com.hubspot.mesos.SingularityMesosInfo) Entry(java.util.Map.Entry) ContainerInfo(org.apache.mesos.v1.Protos.ContainerInfo) Image(org.apache.mesos.v1.Protos.Image) DockerInfo(org.apache.mesos.v1.Protos.ContainerInfo.DockerInfo) Supplier(com.google.common.base.Supplier) HashMap(java.util.HashMap) SingularityTaskExecutorData(com.hubspot.singularity.SingularityTaskExecutorData) Singleton(javax.inject.Singleton) ArrayList(java.util.ArrayList) Resource(org.apache.mesos.v1.Protos.Resource) Strings(com.google.common.base.Strings) SingularityDockerPortMapping(com.hubspot.mesos.SingularityDockerPortMapping) SingularityS3UploaderFile(com.hubspot.singularity.SingularityS3UploaderFile) ImmutableList(com.google.common.collect.ImmutableList) ExecutorIdGenerator(com.hubspot.singularity.data.ExecutorIdGenerator) Volume(org.apache.mesos.v1.Protos.Volume) URI(org.apache.mesos.v1.Protos.CommandInfo.URI) SingularityAppcImage(com.hubspot.mesos.SingularityAppcImage) SingularityConfiguration(com.hubspot.singularity.config.SingularityConfiguration) SingularityNetworkInfo(com.hubspot.mesos.SingularityNetworkInfo) Logger(org.slf4j.Logger) Parameters(org.apache.mesos.v1.Protos.Parameters) SingularityDockerParameter(com.hubspot.mesos.SingularityDockerParameter) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) Builder(org.apache.mesos.v1.Protos.Labels.Builder) Ints(com.google.common.primitives.Ints) SingularityMesosTaskHolder(com.hubspot.singularity.helpers.SingularityMesosTaskHolder) Environment(org.apache.mesos.v1.Protos.Environment) SingularityMesosArtifact(com.hubspot.mesos.SingularityMesosArtifact) SingularityTaskRequest(com.hubspot.singularity.SingularityTaskRequest) SingularityVolume(com.hubspot.mesos.SingularityVolume) TaskID(org.apache.mesos.v1.Protos.TaskID) TaskInfo(org.apache.mesos.v1.Protos.TaskInfo) Collections(java.util.Collections) SingularityMesosTaskLabel(com.hubspot.mesos.SingularityMesosTaskLabel) Label(org.apache.mesos.v1.Protos.Label) ExecutorDataBuilder(com.hubspot.deploy.ExecutorDataBuilder) Builder(org.apache.mesos.v1.Protos.Labels.Builder) Resource(org.apache.mesos.v1.Protos.Resource) ArrayList(java.util.ArrayList) SingularityMesosTaskLabel(com.hubspot.mesos.SingularityMesosTaskLabel) Label(org.apache.mesos.v1.Protos.Label) SingularityMesosTaskHolder(com.hubspot.singularity.helpers.SingularityMesosTaskHolder) ByteString(com.google.protobuf.ByteString) TaskInfo(org.apache.mesos.v1.Protos.TaskInfo) SingularityContainerInfo(com.hubspot.mesos.SingularityContainerInfo) SingularityTask(com.hubspot.singularity.SingularityTask) SingularityTaskId(com.hubspot.singularity.SingularityTaskId) SingularityMesosTaskLabel(com.hubspot.mesos.SingularityMesosTaskLabel)

Aggregations

SingularityTaskId (com.hubspot.singularity.SingularityTaskId)6 MesosClientBuilder (com.mesosphere.mesos.rx.java.MesosClientBuilder)5 ProtobufMesosClientBuilder (com.mesosphere.mesos.rx.java.protobuf.ProtobufMesosClientBuilder)5 ArrayList (java.util.ArrayList)5 Offer (org.apache.mesos.v1.Protos.Offer)5 Builder (org.apache.mesos.v1.scheduler.Protos.Call.Builder)5 ByteString (com.google.protobuf.ByteString)4 HashMap (java.util.HashMap)4 Resources (com.hubspot.mesos.Resources)3 SingularitySlaveUsage (com.hubspot.singularity.SingularitySlaveUsage)3 ResourceUsageType (com.hubspot.singularity.SingularitySlaveUsage.ResourceUsageType)3 SingularityTask (com.hubspot.singularity.SingularityTask)3 SingularityTaskRequest (com.hubspot.singularity.SingularityTaskRequest)3 Optional (com.google.common.base.Optional)2 Inject (com.google.inject.Inject)2 SingularityContainerInfo (com.hubspot.mesos.SingularityContainerInfo)2 SingularityDockerInfo (com.hubspot.mesos.SingularityDockerInfo)2 SingularityDockerParameter (com.hubspot.mesos.SingularityDockerParameter)2 SingularityDockerPortMapping (com.hubspot.mesos.SingularityDockerPortMapping)2 SingularityDockerVolume (com.hubspot.mesos.SingularityDockerVolume)2