Repository navigation
docs(where-data-lives): expand what goes in the control plane database - #1676
Conversation
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The secret-name guidance contradicts the documented persistence of secret reference names.
Review effort: Balanced
Findings: 1
Open (1)
What changed in this PR
Expands documentation of control-plane database contents and data-plane storage boundaries.
Changes:
- Documents additional registration, execution, app, workspace, and environment records.
- Clarifies sensitive-data, logs, and Deck storage guidance.
| File | Description |
|---|---|
content/user-guide/get-started/core-concepts/where-data-lives.md |
Expands database and bucket residency details. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
|
||
| Two things never enter the database at all: | ||
|
|
||
| - **Secret values and secret names.** Secrets are created and stored in your data plane (Kubernetes Secrets or your cloud secret manager). The control plane keeps no record of them; `flyte get secret` lists them live from the data plane. Only the *references* a task, run, app, or workspace declares are stored, and a reference is just a key name. |
There was a problem hiding this comment.
Resolved: the 'never enters the database' block was removed earlier, and the current text says secret values are never stored, while specs record secret names.
GHA build & deploy previewBuilt by
Updated automatically on every push. |
c6fe1ff to
c8de224
Compare
EngHabu
left a comment
There was a problem hiding this comment.
A couple of nits! thank you for the update
|
|
||
| The values your tasks actually pass at runtime, even a bare `int`, do **not** live in the database. They are written to `inputs.pb` / `outputs.pb` in the bucket, and the database keeps only the pointer. See the next section. | ||
|
|
||
| Because environment variables in task, run, and app specs are stored as plain text in the database, put credentials and other sensitive configuration in secrets rather than in `env` maps. |
There was a problem hiding this comment.
Maybe add that secrets can be mounted as env vars if code expects to read env vars.
There was a problem hiding this comment.
Done in f0e029e: 'A secret can be mounted as an environment variable, and because it is mounted at runtime, its value is never stored in the control plane database.' Also links to the Secrets page.
| - **Execution records**: every run, every action (task / trace / condition) inside that run, attempts, phases, timing, error messages, parent/child relationships. Each run also stores the run-level configuration it was launched with: labels, annotations, environment variables set through the run context, queue / cluster pool, `raw_data_path`, cache settings, notification rules, and the names of secrets requested at run level. | ||
| - **Schedules and triggers**: `Cron`, event triggers, and their revision history. | ||
| - **Apps**: every deployed app's full spec (container image, command and arguments, environment variables, ports, resources, autoscaling and ingress settings, secret *names*, and any string inputs you pass to the app) plus its current status, including the public / CNAME / VPC URLs it is reachable at, the assigned cluster, the creator, and the last start time. | ||
| - **Reusable environments**: only a `TaskEnvironment` with a `ReusePolicy` gets a record of its own; a plain environment is flattened into the registrations of its tasks and has no separate row. For a reusable environment the database holds the environment spec (image, resources, environment variables, secret names, pod template, parallelism), its scaling state (replicas, idle and scale-down TTLs), and the per-cluster status of its worker pool, including worker states and recent worker error messages. |
There was a problem hiding this comment.
"gets a record of its own... a plain...." feels like an implementation detail we may decide to change later and is immaterial to the where data lives question IMHO
There was a problem hiding this comment.
Done in f0e029e: removed 'Plain environment specs are not persisted' and the record-of-its-own phrasing.
… env vars and secret handling in the database section Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: LeonKolyang <leon.menkreo@googlemail.com> Signed-off-by: Peeter Piegaze <1153481+ppiegaze@users.noreply.github.com>
…their own record Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: LeonKolyang <leon.menkreo@googlemail.com> Signed-off-by: Peeter Piegaze <1153481+ppiegaze@users.noreply.github.com>
Signed-off-by: LeonKolyang <leon.menkreo@googlemail.com> Signed-off-by: Peeter Piegaze <1153481+ppiegaze@users.noreply.github.com>
Signed-off-by: LeonKolyang <leon.menkreo@googlemail.com> Signed-off-by: Peeter Piegaze <1153481+ppiegaze@users.noreply.github.com>
Co-authored-by: Daniel Sola <40698988+dansola@users.noreply.github.com> Signed-off-by: Leon Menkreo <50681264+LeonKolyang@users.noreply.github.com> Signed-off-by: Peeter Piegaze <1153481+ppiegaze@users.noreply.github.com>
Co-authored-by: Daniel Sola <40698988+dansola@users.noreply.github.com> Signed-off-by: Leon Menkreo <50681264+LeonKolyang@users.noreply.github.com> Signed-off-by: Peeter Piegaze <1153481+ppiegaze@users.noreply.github.com>
Signed-off-by: Peeter Piegaze <1153481+ppiegaze@users.noreply.github.com>
acddbc7 to
f0e029e
Compare
Checked against unionai/cloud and flyteorg/flyte origin/main: - OSS Flyte keeps no app records in the database (state lives in the Knative service) and has no reusable environments; queue and cluster pool are stored but unused, and only the public app URL exists. Moved apps, reusable environments, and run placement into a Union-only block, and gated the matching plain-text env var note. - Dropped "secrets requested at run level": RunSpec can hold them, but the SDK only sets a service account there. - App inputs can be strings, app IDs, or artifact references, not only strings; app image is a reference, as for tasks. - Removed "Plain environment specs are not persisted" (implementation detail, and tasks still record their environment's name). - Linked secrets, and split the env var sentence. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Signed-off-by: Peeter Piegaze <1153481+ppiegaze@users.noreply.github.com>

Summary
Expands What goes in the database in Where your data lives with records that weren't listed, based on the control-plane schema.
Both variants
Union only (in a
{{< variant union >}}block)Existing statements (URI-only I/O pointers, the default-input and condition exceptions, the cache mapping) are unchanged.
Verification
Claims were checked against
unionai/cloudandflyteorg/flyteorigin/main(migrations, models, and the stored protos). Open-source Flyte keeps no app records in the database and has no reusable environments, which is why those are Union-only.make distbuilds, and the Flyte variant renders without the Union-only block.check-links,markdownlint, andcspellpass.🤖 Generated with Claude Code