On this page
How the storage verbs refuse
How the storage verbs refuse
stado storage put|get|objects|rm|url|cp|mv|endpoint|abort|cat|ls|stat|copy|backup|verify|archive
refuse with the causes of stado.storage.objects (stado errors show stado.storage.objects prints each with its fix), beside the store's own
(stado.store), the file operations' (stado.files) and the object API
client's (stado.objects.api, below):
| cause | when | exit |
|---|---|---|
object-exists |
a create-only write (--if-absent, every release object) meets other bytes |
1 |
write-unconfirmed |
the store took a write and did not give the same bytes back | 69 |
object-absent |
the store answered and holds nothing at that key | 1 |
release-immutable |
a release object asked to be deleted, replaced or compared-and-swapped | 1 |
retire-needs-api |
a sources input retired where no object API is configured | 1 |
api-unconfigured |
neither STADO_API_URL nor storage.stado.url names the object API |
1 |
origin-invalid |
no one public origin publishes releases, or it is not a URL | 1 |
presence-refused |
the store answered that this reader may not ask whether the object exists; its existence is unknown | 1 |
presence-unavailable |
the store answered that it cannot say now; asking again may answer | 69 |
presence-unreachable |
nothing answered whether the object exists | 69 |
claim-invalid |
a release claim in the store is no claim, or one about another release | 69 |
coordinate-invalid |
a release named out of <product>/<version>/<platform> form |
2 |
release-unpublished |
the release store holds no such object | 1 |
pin-absent |
a declaration pins an object the store answers is absent | 1 |
release-public-only |
url --presign of a release object, endpoint of a release namespace |
2 |
release-not-copied |
cp or mv of a release object |
2 |
namespaces-differ |
cp or mv across namespaces |
2 |
same-object |
cp or mv of an object onto itself |
2 |
metadata-invalid |
custom metadata outside unique non-empty stado-* fields |
2 |
prefixes-unlisted |
ls could not list some canonical prefixes; their counts are unknown |
69 |
release-prefix-listed |
ls of a release-governed stado:// prefix |
2 |
namespace-invalid |
endpoint of a namespace that is not lowercase letters, digits and - |
2 |
backup-unconfigured |
backup with no disaster-recovery store |
1 |
backup-not-a-replica |
the recovery store is the primary or on its disk | 1 |
same-store |
copy or verify of a store with itself |
2 |
addressing-differs |
copy between a namespace-qualified and a bare-key store |
1 |
copy-incomplete |
some objects did not copy; re-running continues from the sentinel | 69 |
stores-diverge |
verify found the stores holding different objects |
69 |
archive-limits-undeclared |
archive with no storage.archive_limits |
1 |
archive-source-invalid |
archive of a file or a link |
2 |
archive-exists |
archive over a path that already holds something |
1 |
archive-output-invalid |
archive into its own source, or onto a filesystem root |
2 |
tests/storage/objects/ provokes twenty of them through the real binary
against stores of its own (one object's causes in object.rs, whole stores'
and archives' in stores.rs); a refused write leaves what was stored as it
was.
The object API client
Every verb that reads or writes through the Stado object API (STADO_API_URL,
or storage.stado.url where the queue backend is the object API) also meets
the causes of stado.objects.api; stado errors show stado.objects.api
prints each with its fix:
| cause | when | exit |
|---|---|---|
origin-out-of-form |
the origin is no URL, plain HTTP to a host that is not loopback, embeds credentials, or carries a query or fragment | 1 |
release-origin-undeclared |
a release read with neither STADO_API_URL nor api.url |
1 |
release-origin-plain |
a release delivered from a plain-HTTP origin that is not the target's own store | 1 |
base-unusable |
the origin cannot carry a path | 1 |
ca-not-pem |
storage.stado.ca_file is not a PEM certificate |
1 |
token-undeclared |
none of STADO_API_TOKEN, STADO_API_TOKEN_FILE, storage.stado.token_file |
1 |
token-not-unicode |
STADO_API_TOKEN or STADO_API_TOKEN_FILE is not UTF-8 |
1 |
token-file-not-regular |
the credential file is a directory, a link or a device | 1 |
token-file-open |
others than its owner may read or write the credential file | 1 |
token-file-malformed |
the credential file holds no bearer, or more than one line | 1 |
publisher-unresolved |
a release-governed target that resolves to no one publisher | 1 |
publishers-invalid |
release_api.publishers is not valid |
1 |
publisher-undeclared |
release_api.publishers declares no publisher for the release |
1 |
publisher-token-absent |
the publisher's vault item carries no token field |
1 |
publisher-token-empty |
the publisher's bearer is empty | 1 |
publisher-token-header |
the publisher's bearer carries a newline or control byte | 1 |
address-held |
this host's resolver holds the object API's address unanswered | 69 |
resolver-unreadable |
the resolver's state for that address cannot be read | 69 |
connection-refused |
the object API refused the connection | 69 |
unauthorized |
HTTP 401, 403 or 407: the credential presented is refused | 1 |
not-found |
HTTP 404 or 410 | 1 |
timed-out |
HTTP 408 or 504 | 69 |
rate-limited |
HTTP 429 | 69 |
unsupported |
HTTP 501 or 505: the object API is another Stado | 1 |
unavailable |
any other HTTP 5xx | 69 |
refused |
any other refusal | 1 |
answer-malformed |
an answer out of the object API's shape: not JSON, inconsistent, a bad Content-Range, a whole answer to a range, a redirect without Location |
69 |
answer-too-large |
an answer declares more bytes than this machine addresses | 69 |
body-broken |
a body stopped arriving before its end | 69 |
redirect-loop |
a release redirect returns to an address already asked | 69 |
threads-unreadable |
how many parts to send at once cannot be read from the host | 69 |
too-many-parts |
an object needs more parts than an upload's part names carry | 1 |
tests/storage/api.rs provokes the origin, credential and refused-connection
causes through the real binary; a refused read writes nothing.
Source: this website