Skip to content

scontrol: no runtime query or management of node feature labels (requires spur.conf edit + restart) #356

Description

@yansun1996

Problem

There is no runtime, admin-facing CLI to query or manage node feature labels. Today the only way to change a node's features is to hand-edit spur.conf on every controller and restart spurctld (which also forces all agents to re-register). For a multi-controller HA deployment this is disruptive and error-prone for what should be a lightweight operation.

Current state

Query side — cannot see features at all:

Management side — scontrol update node only supports state/reason:
From crates/spur-cli/src/scontrol.rs (parse_and_update), the only recognized node update keys are:

nodename / node   -> node_name
state             -> node_state
reason            -> node_reason

There is no features= (or availablefeatures= / activefeatures=) key. Any attempt prints scontrol: unknown update key.

So changing a label means: edit spur.conf on controller-01/02/03 → systemctl restart spurctld on all three → wait for Raft leader → restart all spurd agents to re-register. That's a full control-plane bounce just to add a tag.

What's wanted (admin runtime CLI)

  1. Query a node's feature labels at runtime, e.g.:
    scontrol show node <name>          # include AvailableFeatures / ActiveFeatures
    sinfo -N -o "%n %f"                # show features column (ties to #355)
    
  2. Manage feature labels at runtime without a restart, Slurm-style, e.g.:
    scontrol update NodeName=<name> AvailableFeatures=mi350x,atl,rackA
    scontrol update NodeName=<name> ActiveFeatures=mi350x
    
    The controller should persist and apply the change to the live scheduler state so subsequent --constraint matching reflects it immediately.

Why it matters

Operators routinely re-tag nodes (maintenance pools, hardware tiers, per-rack/per-host targeting). Requiring an HA-wide controller+agent restart for a label change is a significant operational gap versus Slurm, where scontrol update NodeName=... AvailableFeatures=... is a live, non-disruptive operation.

Environment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions