Accounts and day-to-day operations

Create and administer team accounts, check health, read logs and metrics, and stop services gracefully.

Manage accounts

Accounts are administered with oxysdb-server subcommands, run where the server’s store is reachable (in compose: docker compose -f FILE exec -T server-1 oxysdb-server …; in Kubernetes: kubectl exec deploy/<release> -- oxysdb-server …). They use the same store options as serve.

CommandDoes
add-account --email EMAILcreates an account; the password is the first line of standard input
set-password --email EMAILsets a new password (standard input); the account is signed out everywhere
list-accountslists the accounts
verify-account --email EMAILconfirms a signed-up address, so invitations and Quick Shares reach it
disable-account --email EMAIL / enable-accountrefuses sign-in and ends sessions / allows it again
delete-account --email EMAILdeletes it (refused while it is the only manager of a folder others use)

Open sign-up (--allow-sign-up, OXYSDB_SERVER_ALLOW_SIGN_UP, Helm server.allowSignUp) lets anyone who reaches the URL create an account. Such accounts receive nothing addressed to them until you run verify-account, because someone else could have registered the address first. Use --trust-sign-up only where addresses are controlled elsewhere (single sign-on in front, internal network).

Health checks

CheckMeaning
GET /healthzliveness: the process serves
GET /readyzreadiness: the store answers and no stop has begun
oxysdb-server healthcheck, oxysdb-runner healthcheckthe same, for container health checks (there is no curl in the images)
pull-only runneroxysdb-runner healthcheck checks its heartbeat file (stale after 60 s)

Logs

--log-format json (OXYSDB_SERVER_LOG_FORMAT=json, OXYSDB_RUNNER_LOG_FORMAT; Helm default json) writes one JSON object per line to standard error (ts, level, msg, fields). Logs never contain passwords, tokens or connection strings.

Metrics

Off by default and never sent anywhere. --metrics-listen 0.0.0.0:9464 (server) or :9465 (runner) serves Prometheus text on GET /metrics, on its own plain-HTTP listener: expose it to your scraper only (the chart’s NetworkPolicy does).

MetricService
oxysdb_server_requests_total{op,outcome}, oxysdb_server_request_duration_secondsserver
oxysdb_server_connections_active, oxysdb_server_ready, oxysdb_server_build_info{version,store}server
oxysdb_runner_up, oxysdb_runner_build_info{version,mode,pool}runner
oxysdb_runner_runs_total{trigger,outcome}, oxysdb_runner_queue_length, oxysdb_runner_leader, oxysdb_runner_runningrunner

Graceful stop

On SIGTERM, readiness fails at once and no new connection is accepted. Requests in flight get OXYSDB_SERVER_SHUTDOWN_GRACE_SECS (default 20), then store work under way up to 30 s more. The runner lets the run in progress finish within OXYSDB_RUNNER_SHUTDOWN_GRACE_SECS (default 20), releases its leader lease and leaves; a run still going is recorded interrupted.

Abuse limits

SettingDefaultLimits
sign-in throttlingbuilt ingrowing delays per client address and account, per address, per account; no lockout from another address
OXYSDB_SERVER_MAX_CONNECTIONS_PER_IP64connections one client holds
OXYSDB_SERVER_MAX_ACCOUNT_MB256items an account created plus its pending Quick Shares
OXYSDB_SERVER_MAX_UNVERIFIED_ACCOUNT_MB1the same, for a signed-up account until verified
OXYSDB_SERVER_MAX_FOLDER_MB64one shared folder
OXYSDB_SERVER_TRUSTED_PROXIESnoneproxies whose X-Forwarded-For names the client; set it behind any proxy

Post-quantum TLS

--tls-pq prefer (default) or require, on both programs (OXYSDB_SERVER_TLS_PQ, OXYSDB_RUNNER_TLS_PQ): require accepts only the post-quantum key exchange X25519MLKEM768, so switch to it once every desktop is upgraded (TLS). The option needs --tls-cert and --tls-key: a program serving plain HTTP behind a TLS proxy refuses to start with it (set the key exchange on the proxy instead).

Runner settings worth knowing

Flag / variableDefaultMeaning
--allow-task-types / OXYSDB_RUNNER_ALLOW_TASK_TYPESevery type but intellishellScripttask types accepted, or all
--files-dir / OXYSDB_RUNNER_FILES_DIRfiles in the data directorythe only place tasks read and write files
--credentials-dir / OXYSDB_RUNNER_CREDENTIALS_DIRnonethe only place received connections may name key, certificate and known_hosts files
--allow-ambient-credentialsoffallow the runner’s own Kerberos, AWS identity and SSH agent
--pool / OXYSDB_RUNNER_POOLdefaultthe pool this runner serves
--pull-only / OXYSDB_RUNNER_PULL_ONLYoffdatabase mode: no listener, outbound only
--socks-proxy / OXYSDB_RUNNER_SOCKS_PROXY–SOCKS5 proxy for the runner’s database and SQL connections
--lease-ttl-secs30leader lease
OXYSDB_RUNNER_MASTER_PASSWORD_FILErequiredmaster password of the encrypted key store; prefer the file to the plain variable
OXYSDB_RUNNER_TOKEN_FILE–the access token itself, instead of oxysdb-runner init

oxysdb-runner init creates a new access token, prints it once and keeps only its SHA-256; running it again replaces the previous token.

Diagnostics for a bug report

oxysdb-server diagnose and oxysdb-runner diagnose print a redacted bundle on standard output: the version, the platform, the configuration without secrets (the database URL keeps its hosts, its user name and password read ****; the master password, token and TLS files appear only as a path or a variable name), the store read read-only (counts, quotas, locks; for the runner its manifest, leases and latest runs), the database server’s version and the readiness probe. They take the same options and variables as serve, plus --format text|json. Nothing is sent: read the output, then paste what you choose into the issue.

kubectl -n oxysdb exec deploy/oxysdb -- oxysdb-server diagnose
kubectl -n oxysdb exec statefulset/oxysdb-oxysdb-runner -- oxysdb-runner diagnose --format json
docker compose -f compose.single.yaml exec server oxysdb-server diagnose

Both services log to standard error only: add the last lines of kubectl logs or docker compose logs yourself.

Troubleshooting

SymptomFix
A signed-up user receives nothingverify-account --email …
several accounts normalise to one e-mail address in the logtwo accounts differ only by spelling; delete one with delete-account <its spelling>
A runner refuses to start with the plain master password variablewith intellishellScript allowed, give OXYSDB_RUNNER_MASTER_PASSWORD_FILE instead
A runner refuses to start: wrong master passwordthe database was created with another one; use the original
Replicas answer “busy”password hashing or the request queue is saturated; add replicas or wait