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/mungeis exercised against a real cluster. Forauth/slurmthe credential TTL is taken as 60 seconds, the source's default, and has not been measured. For any otherAuthType, no landing bound is known, soHoldisno, requeue is refused, andCallBoundis0s. - slurmrestd. The adapter has the
localandsshtransports only. The module's description mentionsslurmrestdas a future second transport; there is no code for it. - The accounting path against a real database. sind has no accounting storage, so
AccountingHistoryisnothere. Thesacctline format,FailedNodevalues andSLURM_TIME_FORMAT=%sinsacctoutput are taken from Slurm's source andsacct -e, not observed. - Untested landing cases.
auth/slurm; a network partition between the login node and the controller, as opposed to a frozenslurmctld; 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,dateandbase64as 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.