Files
Sneha-at 6a552d590d Add a default cluster snapshot storage location with snapshotConfig.storageLocation override in preview mode (#2544)
> The PR title becomes the release note. Write it for users: what
changed for them, not how the code changed.

#### Breaking change

ate-api-server now stores snapshots under a new, operator-set
`--snapshot-location`
(for example `gs://BUCKET/` or `gs://BUCKET/PREFIX/`).
`ActorTemplate.snapshotConfig.storageLocation`
is now a preview field, honored only with
`--preview=PerTemplateSnapshotLocation`.
`snapshotConfig` itself is now optional; an omitted one takes every
default.

What you must do when upgrading:

- **ate-setup installs:** set `SNAPSHOT_LOCATION` (`--snapshot-location`
/ `storage.snapshotLocation`).
ate-setup passes it to ate-api-server and, unless the
`PerTemplateSnapshotLocation` preview gate
is enabled, fails before touching the cluster if it is unset.
`BUCKET_NAME` alone is not enough.
The kind profile defaults it to `gs://$BUCKET_NAME/`
(`gs://ate-snapshots/`). ate-setup does not
create the bucket or grant access to it on GKE (`go run
./tools/setup-gcp bootstrap` does).
- **Custom deployments of ate-api-server:** add `--snapshot-location`
(or `ATE_API_SNAPSHOT_LOCATION`
with `--snapshot-location=@env`). Without it, the server refuses to
start unless the
  `PerTemplateSnapshotLocation` preview gate is enabled.
- **Templates that set `storageLocation`:** without the gate, that value
is ignored and new
snapshots and tags go under `--snapshot-location`. If you rely on
per-template buckets
or paths (IAM, retention, billing), enable
`--preview=PerTemplateSnapshotLocation` to keep the
old behavior. With the gate, the field stays optional: a template that
leaves it empty uses
`--snapshot-location`, and `CreateActorTemplate` fails with
`FailedPrecondition` if neither is set.
- **Clients that set `storageLocation` with the gate enabled:** they
must opt in to preview
features (`kubectl ate --preview`, or the `Ate-Preview-Allowed: true`
header). Otherwise
  `CreateActorTemplate` fails with `InvalidArgument`.
- **Existing actors:** snapshots already taken keep working for resume.
If an actor's snapshot
location changes (by upgrading with the gate off, changing the flag, or
toggling the gate),
its next suspend writes under the new location and releases the previous
snapshot from the
old one. Until that suspend, changing the actor's `actor_template` is
rejected, and deleting the
actor collects its snapshots under the old location. If releasing the
previous snapshot
fails, its objects stay under the old location and a later delete does
not collect them;
ate-api-server logs a warning naming the snapshot URI. To keep the old
locations, enable the
  gate before upgrading.

ActorTemplate is not the right place to specify snapshot location.
Bucket is an implementation detail of snapshots, workloads shouldn’t
need to care about it. It is the responsibility of substrate admins to
provision the buckets and give access to Substrate. This PR adds a
cluster wide storage location as a building step towards the final goal
of adding these details in a separate SnapshotStorageConfig.


- [x] Tests pass
- [x] Appropriate changes to documentation are included in the PR
2026-10-19 19:36:35 +00:00
..