On this page
Inspecting every object
Inspecting every object
stado storage ls queue/ --json lists every object under that prefix, sorted
by name. There is no implicit display limit. Use --limit <count> to request
a bounded result; JSON reports the requested limit, listed, total, and
truncated. With no limit, limit is null. An explicit limit equal to the
total is not truncated. With no prefix, stado storage ls --json reports counts
across the canonical prefixes instead of object rows.
--size adds each object's size as the store's listing states it, which
every backend's listing carries, so no body is downloaded for it; size_from
is listing. Only an object the listing stated no size for, one removed
between the listing and its stat, has its body read (size_from is body):
a body that is gone is reported as vanished, and a failed read keeps
size_error, never a fabricated zero. A failed prefix listing is an error,
not an empty result.
Malformed --limit arguments are refused before storage is opened.
In Desktop, open a declared host's Space panel, then Available operations → List objects in the selected API's configured store. Leave Maximum objects blank for all rows. The operation reads the selected API's configured object store, not the selected host's disk. Its receipt retains arguments, output, errors and exit status.
The single-object verbs have Space panel operations of their own, each
running the same command with the fields its arguments take: List a
namespace's objects (stado storage objects), Read whether an object is
present, its size, version and metadata (stat), Print an object's
body (cat), Download an object into a local file (get), Upload a
local file as an object (put, with its media type and --if-absent),
Remove an object (rm) and Discard the staged parts of an interrupted
upload (abort, with --dry-run).
Parallel object operations
storage copy, storage backup, and recovery migrate accept an optional
positive --concurrency. When omitted, Stado measures the operating system's
available parallelism. An unavailable measurement is refused with
cannot measure available parallelism for bulk object operations and the OS
cause; it does not silently select a worker count. Zero is rejected by the
argument parser. Recovery resolves this value before fencing a store, stopping
writers or opening a billing window, then reuses it for copy and verification.
A body too large for one request to the object API is stored in parts
(<key>.__stado_upload/<upload-id>/<part>) and then composed. The parts are
sent as many at once as the same measurement allows, kept in their order,
and the first refused part ends the upload; each stored part is printed on
stderr with its own time from request to answer (stored part <n> of <total> of <uri>: <bytes> bytes in <time>), so a slow upload says whether
its time is the parts' bytes or the wait on the object API.
storage copy resumes from the sentinel it wrote at the destination on an
earlier run (its cursor and cumulative counts). A sentinel that is missing or
empty starts the copy from scratch; one that is not JSON, or holds a member
of the wrong type, is refused naming the member (the copy sentinel at <path> holds <member> = <value>, not a count), since resuming from it would
miscount or restart a copy that was far along.
The same measurement and error propagation apply to bulk queue reads,
release reports, host software inspection, storage verify, canonical prefix
counts and the opt-in storage ls --size body reads. A measurement failure is
an operation failure, not an empty listing or a vanished object.
Queue read batches also use the measured parallelism, rather than a separate
fixed batch size. Every batch is visited unless the caller's explicit job
window or scan budget has been filled; batching does not cap the result.
Desktop's Space operations also offer Copy objects between stores, Copy objects to the configured disaster-recovery store, and Compare store names, metadata and bytes. Copy and backup expose Objects in parallel; blank measures it. Mutations require the existing review confirmation. These requests and their complete failure receipts use the selected API.
Listing qualification
From the Stado checkout, run node tests/storage/listing/journey.mjs with
STADO_BIN, STADO_TEST_SOURCE_REVISION (full native source hash),
STADO_TEST_LIST_COUNT, STADO_TEST_LIST_LIMIT,
STADO_TEST_COPY_CONCURRENCY (positive integer), and
STADO_TEST_COPY_REFUSED_CONCURRENCY (zero) declared in the run's environment.
Use more than 255 objects to exercise the removed byte-width cap, more than the
host's measured parallelism to cross queue read batches, and a smaller positive
explicit listing limit. A separate run with listing limit zero exercises an
intentionally empty selection.
The journey snapshots the executable and refuses a mismatched source revision.
It submits real jobs into a private local store and compares every status --json row with the persisted job, across measured read batches. It checks
complete JSON and text object listings, explicit truncation, exact-boundary
listing, body lengths, invalid arguments and unchanged stored bytes. It copies
those objects to isolated local
destinations with measured and explicit parallelism, compares every persisted
body, runs storage verify, and confirms zero fan-out is refused before the
destination is opened. No worker is launched. Its executable identity,
commands, exit statuses and before/after digests are retained under
.build/storage-listing/.
Source: this website