Adoption guide

Evaluate and adopt

What the pattern assumes, where it was tested, and when a service your center already runs is the better choice.

This page is for research software engineers and center staff who want to know whether the pattern fits their cluster before anyone invests time in it. It states what the pattern assumes, what has and has not been run, and when to choose something else.

What it is

A single-node, single-allocation pattern. One coordinator and one to sixteen worker steps run under Slurm with a rootless container runtime, behind a readiness gate that checks for an exact answer, followed by a result check that belongs to the application. When the allocation ends, everything stops. It is a learning guide with a reference workflow, not a platform or a service.

Assumptions about your center

Scroll horizontally to view all table columns.

Assumption Why the example needs it How to check
Slurm job context and srun The script runs inside an allocation and starts every service as a job step with srun. Run command -v sbatch srun on a login node. The script also stops with a named error if it is not inside a Slurm job.
Exclusive single-task job steps are allowed Each service gets its own srun --exclusive step. Ask your center, or submit a short two-step test job and read the scheduler’s reply.
Apptainer on the compute nodes The services run in an Apptainer image. In a short job on a compute node, run apptainer --version.
Loopback connections work on a compute node The coordinator listens on 127.0.0.1, and the workers connect to it there. Ask your center whether compute-node loopback connections are permitted on your partition.
A private, writable, job-scoped scratch path The script keeps all job state in one owner-only folder. Ask your center which path is job-scoped, then set BSSW_SCRATCH_ROOT to it.
sha256sum on the compute nodes The script checks the image and the input against recorded checksums. Run command -v sha256sum in a job on a compute node.
The image and input are regular files with recorded SHA-256 values The script refuses to run when a checksum does not match. Run sha256sum -c on the input’s record, as Run the example shows.

What was tested where

Three labels describe every claim on this site. Tested means it ran on a named cluster. Shim-tested means it ran off-cluster, against test fixtures or local Docker, and never on a cluster. Designed, not run means it follows the same pattern, but nobody has run it.

Tested. The summary below is generated from the test record, so it always names the cluster, versions and date of the current record.

Tested on Purdue Anvil · Oct 2026

  • Scheduler: slurm 26.05.4
  • Runtime: apptainer 1.5.3-3.el8
  • Workflow revision: v0.1.0
  • The example workflow ran start to finish and every result was correct. A second run was made to fail on purpose; it stopped at the check that the coordinator can serve (the readiness gate), before any worker started.
  • This run validates single-node execution only; multi-node networking is out of scope
  • The scheduler stdout records the application success line and cleanup-trap termination; the literal Slurm COMPLETED state is corroborated by reaching the final pipeline step rather than printed explicitly
  • Validates the v0.1.0 image digest only; a rebuilt image requires revalidation

Test record

Shim-tested (off-cluster only). The workflow’s logic runs against fake scheduler, runtime, clock and file-system boundaries, in eight scenarios: success, invalid input, early coordinator exit, worker failure, checksum mismatch, verification failure, cleanup failure and readiness timeout. These runs never start a container, so they are not cluster evidence.

Designed, not run. None of the following has been run:

Limits

When not to use this pattern

Choose something else when any of this is true.

Decision grid: results or uptime

A guide, not a rule. Find the row that matches what your stack is for, and the column that matches how you would handle a failure.

Scroll horizontally to view all table columns.

A whole-stack restart is acceptable A whole-stack restart is not acceptable
Results are the product This pattern fits. Start with Translate a Compose file. Use a tool that recovers individual components rather than restarting everything.
Staying up is the product Use a service your center already runs, or a VM. Use a platform built for services, such as Kubernetes or a managed service.

Draft adoption checklist

This is a draft: v1.0 arrives with the final release, and the full checklist with it. Until then, confirm each of these before you commit time.

Key points

Sources and scope

Review source roles and citations
  • Project decision: A draft adoption guide for research software engineers and center staff; the v1.0 checklist arrives with the final release. Milestone 2 scope

Project-adopted practices and project decisions are not BSSw Fellowship Program requirements.