Folks,

I am putting together a system where resources are generally managed by Mesos and slurm runs in elastic mode (cloud mode) using Mesos (actually Marathon) as its "cloud" provider. I have most of this working, but I have one persistent problem that I can't seem to work around. That is, when Mesos (Marathon) does not have the necessary resources available at the time that a slurm job is launched, there does not seem to be a way to tell slurmctld NOT to try to launch the job at this time (either queue it or fail the launch would be acceptable).

What I currently do in this situation is set the elastic mode nodes that cannot be resumed into DRAIN state to indicate that they are not available. Unfortunately, this does not stop slurmctld from trying to launch the job on the remaining elastic nodes that have become available. This results in two possible outcomes:

   - A job that runs on some but not all of its nodes and then hangs
     waiting for the remaining nodes to run,

   - A job that hangs before starting on any of its nodes and waits
     for all the nodes to start,

Eventually, slurmctld will declare the offending nodes DOWN with a the reason that they could not be reached, but this takes a long time.

I think the problem here is that slurmctld allocates elastic nodes while they are still in the powered down state, instead of waiting for them to become powered up and idle before actually trying to allocate them. This means that a job that sees powered down and idle nodes gets well into its launch before discovering that the nodes cannot actually be used. At that point, there is no obvious way to push the job back off the nodes.

This seems like a common enough kind of problem that there must be a solution to it. Can someone suggest a way to tell slurmctld that the job it is trying to launch on a node that is not going to become available should either be aborted or queued for lack of resources?

Thanks!

Eric

Reply via email to