Skip to content

Tested Slurm versions

Accepted

The adapter accepts a cluster whose sbatch --version reports release 25.11 or 26.05, any patch level. Preflight refuses anything else with ErrUnsupported, naming the version it saw.

Both releases are read through one decoder, Slurm's data_parser/v0.0.44, which every JSON command pins with --json=v0.0.44. The set of keys the decoder knows is generated from the Slurm source at the tags slurm-25-11-8-1 and slurm-26-05-4-1.

Tested

The conformance suite runs against real Slurm in sind, at:

Slurm sind image
25.11.8 ghcr.io/gsi-hpc/sind-node:25.11.8
26.05.4 ghcr.io/gsi-hpc/sind-node:26.05.4

On both, go/dispatch's conformance suite passes over the SSH transport, the local transport and a docker exec delivery of the local transport's scripts, with the exceptions below. The adapter's own tests pass too: TestReadBack over the docker exec delivery only, and TestLandingBound over the docker exec and SSH deliveries. The suite is just sind <version>; see Run the conformance suite against sind.

The test cluster is one controller and two workers, with SlurmdTimeout=30, MinJobAge=300, TaskPlugin=task/cgroup, partitions main and high, and PreemptType=preempt/partition_prio with PreemptMode=REQUEUE. Its credentials are munge's.

Skipped, and why

Check Where Why
ReadBack and Preflight in conformance.Backend every adapter the shared suite has no fault that rewrites a submission, and the SPI has no preflight entry point. The adapter's TestReadBack and the preflight probe cover them
LoseNode, DelaySubmitReply the local delivery injecting them needs root or docker on the controller. The other two deliveries run them
TestReadBack/adminhold all no job_submit plugin can turn the owner's hold into an admin hold, because slurmctld picks the reason from the priority after the plugin has run. Covered by recorded-transcript unit tests
NativePolicyCompiler, Watcher all the adapter implements neither interface

A skip is not a pass. These are checks nobody has made against a real cluster.

Not covered

  • Other releases. 24.11 and earlier, and releases after 26.05, are refused, not tried.
  • Other authentication types. Only auth/munge is exercised against a real cluster. For auth/slurm the credential TTL is taken as 60 seconds, the source's default, and has not been measured. For any other AuthType, no landing bound is known, so Hold is no, requeue is refused, and CallBound is 0s.
  • slurmrestd. The adapter has the local and ssh transports only. The module's description mentions slurmrestd as a future second transport; there is no code for it.
  • The accounting path against a real database. sind has no accounting storage, so AccountingHistory is no there. The sacct line format, FailedNode values and SLURM_TIME_FORMAT=%s in sacct output are taken from Slurm's source and sacct -e, not observed.
  • Untested landing cases. auth/slurm; a network partition between the login node and the controller, as opposed to a frozen slurmctld; and heavy lock contention widening the 0.3 to 0.8 second apply margin past the 5 seconds the bound allows.
  • Not mapped. Container images, heterogeneous jobs, job arrays and federation.
  • Site plugins other than the one the sind tests load. A plugin that changes a submission is detected by read-back and refused, which is tested; one that changes behaviour in other ways is not.
  • Operating systems. The test hosts are Linux. The login node needs sh, timeout, date and base64 as GNU coreutils provide them.

Recorded transcripts

go test ./... replays recorded output from Slurm 25.11.8 and 26.05.4 (the JSON of squeue and scontrol show job, and squeue's answer for a purged job) and, from 25.11.8, scontrol show config and unmunge. It needs no cluster. The fixtures are in testdata and in the public slurmtest package, which also serves consumers who want to test their own code against the adapter without a cluster.