Search in sources :

Example 21 with Job

use of com.hashicorp.nomad.apimodel.Job in project heron by twitter.

the class NomadScheduler method onKill.

@Override
public boolean onKill(Scheduler.KillTopologyRequest request) {
    String topologyName = request.getTopologyName();
    LOG.fine("Killing Topology " + topologyName);
    NomadApiClient apiClient = getApiClient(NomadContext.getSchedulerURI(this.localConfig));
    try {
        List<Job> jobs = getTopologyJobs(apiClient, topologyName);
        killJobs(apiClient, jobs.toArray(new Job[jobs.size()]));
    } catch (RuntimeException e) {
        LOG.log(Level.SEVERE, "Failed to kill topology " + topologyName + " with error: " + e.getMessage(), e);
        return false;
    } finally {
        closeClient(apiClient);
    }
    return true;
}
Also used : Job(com.hashicorp.nomad.apimodel.Job) NomadApiClient(com.hashicorp.nomad.javasdk.NomadApiClient)

Example 22 with Job

use of com.hashicorp.nomad.apimodel.Job in project heron by twitter.

the class NomadScheduler method getJob.

Job getJob(int containerIndex, Optional<PackingPlan.ContainerPlan> containerPlan, Resource containerResource) {
    String topologyName = Runtime.topologyName(this.runtimeConfig);
    String topologyId = Runtime.topologyId(this.runtimeConfig);
    Job job = new Job();
    job.setId(getJobId(topologyId, containerIndex));
    job.setName(getJobId(topologyName, containerIndex));
    job.addTaskGroups(getTaskGroup(getJobId(topologyName, containerIndex), containerIndex, containerResource));
    job.setDatacenters(Arrays.asList(NomadConstants.NOMAD_DEFAULT_DATACENTER));
    job.setMeta(getMetaData(this.runtimeConfig, containerPlan));
    return job;
}
Also used : Job(com.hashicorp.nomad.apimodel.Job)

Example 23 with Job

use of com.hashicorp.nomad.apimodel.Job in project heron by twitter.

the class NomadScheduler method getJobs.

List<Job> getJobs(PackingPlan packing) {
    List<Job> ret = new LinkedList<>();
    PackingPlan homogeneousPackingPlan = getHomogeneousPackingPlan(packing);
    Resource resource = getHomogeneousContainerResource(homogeneousPackingPlan);
    for (int i = 0; i < Runtime.numContainers(this.runtimeConfig); i++) {
        Optional<PackingPlan.ContainerPlan> containerPlan = homogeneousPackingPlan.getContainer(i);
        ret.add(getJob(i, containerPlan, resource));
    }
    return ret;
}
Also used : PackingPlan(org.apache.heron.spi.packing.PackingPlan) NetworkResource(com.hashicorp.nomad.apimodel.NetworkResource) Resource(org.apache.heron.spi.packing.Resource) Job(com.hashicorp.nomad.apimodel.Job) LinkedList(java.util.LinkedList)

Example 24 with Job

use of com.hashicorp.nomad.apimodel.Job in project heron by twitter.

the class NomadScheduler method onRestart.

@Override
public boolean onRestart(Scheduler.RestartTopologyRequest request) {
    LOG.fine("Restarting Topology " + request.getTopologyName() + " container " + request.getContainerIndex());
    NomadApiClient apiClient = getApiClient(NomadContext.getSchedulerURI(this.localConfig));
    String topologyName = request.getTopologyName();
    int containerIndex = request.getContainerIndex();
    try {
        if (containerIndex == -1) {
            // restarting whole topology
            List<Job> jobs = getTopologyJobs(apiClient, topologyName);
            restartJobs(apiClient, jobs.toArray(new Job[jobs.size()]));
        } else {
            // restarting single container
            Job job = getTopologyContainerJob(apiClient, topologyName, containerIndex);
            restartJobs(apiClient, job);
        }
    } catch (RuntimeException e) {
        LOG.log(Level.SEVERE, "Failed to restart topology " + topologyName + " with error: " + e.getMessage(), e);
        return false;
    } finally {
        closeClient(apiClient);
    }
    return true;
}
Also used : Job(com.hashicorp.nomad.apimodel.Job) NomadApiClient(com.hashicorp.nomad.javasdk.NomadApiClient)

Example 25 with Job

use of com.hashicorp.nomad.apimodel.Job in project twister2 by DSC-SPIDAL.

the class NomadController method start.

@Override
public boolean start(JobAPI.Job job) {
    String uri = NomadContext.nomadSchedulerUri(config);
    NomadApiClient nomadApiClient = new NomadApiClient(new NomadApiConfiguration.Builder().setAddress(uri).build());
    Job nomadJob = getJob(job);
    try {
        EvaluationResponse response = nomadApiClient.getJobsApi().register(nomadJob);
        LOG.log(Level.INFO, "Submitted job to nomad: " + response);
    } catch (IOException | NomadException e) {
        LOG.log(Level.SEVERE, "Failed to submit the job: ", e);
    } finally {
        closeClient(nomadApiClient);
    }
    return false;
}
Also used : NomadException(com.hashicorp.nomad.javasdk.NomadException) EvaluationResponse(com.hashicorp.nomad.javasdk.EvaluationResponse) IOException(java.io.IOException) Job(com.hashicorp.nomad.apimodel.Job) NomadApiClient(com.hashicorp.nomad.javasdk.NomadApiClient) NomadApiConfiguration(com.hashicorp.nomad.javasdk.NomadApiConfiguration)

Aggregations

Job (com.hashicorp.nomad.apimodel.Job)25 NomadApiClient (com.hashicorp.nomad.javasdk.NomadApiClient)14 Test (org.junit.Test)8 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)8 NomadException (com.hashicorp.nomad.javasdk.NomadException)6 IOException (java.io.IOException)6 HashSet (java.util.HashSet)4 LinkedList (java.util.LinkedList)4 EvaluationResponse (com.hashicorp.nomad.javasdk.EvaluationResponse)3 PackingPlan (com.twitter.heron.spi.packing.PackingPlan)3 PackingPlan (org.apache.heron.spi.packing.PackingPlan)3 JobListStub (com.hashicorp.nomad.apimodel.JobListStub)2 NetworkResource (com.hashicorp.nomad.apimodel.NetworkResource)2 TaskGroup (com.hashicorp.nomad.apimodel.TaskGroup)2 NomadApiConfiguration (com.hashicorp.nomad.javasdk.NomadApiConfiguration)2 Scheduler (com.twitter.heron.proto.scheduler.Scheduler)2 Resource (com.twitter.heron.spi.packing.Resource)2 Scheduler (org.apache.heron.proto.scheduler.Scheduler)2 Resource (org.apache.heron.spi.packing.Resource)2