Files
rustfs/docs/architecture/workload-admission-contracts.md
T

2.3 KiB

Workload Admission Contracts

This document records the rustfs/backlog#660 PR-05 and PR-07 scheduler preservation and runtime workload-class contract slice.

Preservation Coverage

The rustfs-concurrency tests pin the current reusable scheduler and admission-facing behavior before later snapshot extraction:

  • Worker slot over-release remains clamped by the configured worker limit.
  • Scheduler default buffer and priority thresholds remain unchanged.
  • Scheduler priority boundaries remain high below the high threshold, normal at both thresholds, and low above the low threshold.
  • Backpressure pipe metadata reads preserve buffer capacity and state without mutating the manager state.
  • GetObjectQueueSnapshot preserves saturated, over-available, and zero-total permit semantics.

Workload Class Contract

WorkloadClass defines the required future admission categories:

  • Foreground read.
  • Foreground write.
  • Metadata.
  • Scanner.
  • Repair.
  • Replication.

AdmissionState, WorkloadAdmissionSnapshot, and WorkloadAdmissionRegistrySnapshot define read-only status shapes for later runtime owners. They do not replace the current scheduler, request guard, scanner, heal, replication, or ECStore placement behavior.

Boundary Rules

  • rustfs-concurrency owns this reusable contract surface.
  • The contract does not depend on rustfs-ecstore or RustFS binary runtime state.
  • No scheduler decision logic, queue capacity, Tokio runtime default, scanner admission, heal admission, replication admission, placement, membership, or NUMA behavior changes are part of this slice.

Set-Local Snapshot Extraction

The RustFS storage ConcurrencyManager now implements WorkloadAdmissionSnapshotProvider for local foreground-read admission:

  • ForegroundRead reports local disk-read permit usage through GetObjectQueueSnapshot.
  • active is the number of disk-read permits currently in use.
  • limit is the configured maximum concurrent disk reads.
  • queued remains None because the current semaphore does not expose waiter counts.
  • Scanner, repair, replication, foreground write, and metadata entries remain Unknown until their owning runtime components expose read-only status.

This is an observation surface only. Permit acquisition, priority assignment, buffer sizing, storage media detection, request guards, and queue behavior are unchanged.