From df36f394365eba72cb99f29a6e0420c1ef2f941b Mon Sep 17 00:00:00 2001 From: dryrun Date: Thu, 22 Oct 2026 20:31:52 +0000 Subject: [PATCH] chore(release): 1.21.8 Details: TC-1491, TC-822, TC-848, TC-1630, TC-1748 --- CHANGELOG.md | 16 ++++++++++++++-- Cargo.lock | 2 +- test/m1-realdata-e2e/Cargo.lock | 2 +- test/w5-policy-runtime-node-e2e/Cargo.lock | 2 +- tinycloud-node-server/Cargo.toml | 2 +- 5 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b23590c6..731f8eca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,23 @@ ## [Unreleased] +## [1.21.8] - 2026-10-22 + +### Release notes + +- **A SQL request that writes is one transaction.** If any statement fails, or a deferred constraint fails at the commit, none of them is kept: the local file is unchanged and matches the durable copy in Postgres. Details: TC-1491. +- **Bounded reads of stored database artifacts.** Hydration reads in 4 MiB slices instead of loading whole rows. On PostgreSQL, setting `payload` to `STORAGE EXTERNAL` is recommended for large artifacts; see Changes. Details: TC-822. +- **One database migration:** `m20261021_000000_sql_store_manifest` adds two empty tables for the SQL block store, which stays off by default. A node image from before this migration refuses to start while `seaql_migrations` lists a migration it does not ship, so rolling back below 1.21.8 needs `DELETE FROM seaql_migrations WHERE version = 'm20261021_000000_sql_store_manifest';` first. Details: TC-1491. + ### Changes - `docs/releasing.md`: how a compose-only change ships (as a release), and how to read the dense promote watch. Details: TC-950. -- A SQL request that writes is one transaction: an `execute` (with its `schema` statements), a `batch`, a named statement, and a `query` that writes (`WITH … INSERT`) or carries a `PRAGMA` (admin only). If any statement fails, or a deferred constraint fails at the commit, none of them is kept: the local file is unchanged and matches the durable copy in Postgres, and the request costs no Postgres round trip. This holds for a single statement too, including `INSERT OR FAIL` and a column constraint with `ON CONFLICT FAIL`. Telemetry: such a request counts two more native SQL calls (the `SAVEPOINT` and its `RELEASE` or `ROLLBACK`). No migration. Details: TC-1491. +- A SQL request that writes is one transaction: an `execute` (with its `schema` statements), a `batch`, a named statement, and a `query` that writes (`WITH … INSERT`) or carries a `PRAGMA` (admin only). If any statement fails, or a deferred constraint fails at the commit, none of them is kept: the local file is unchanged and matches the durable copy in Postgres, and the request costs no Postgres round trip. This holds for a single statement too, including `INSERT OR FAIL` and a column constraint with `ON CONFLICT FAIL`. Telemetry: such a request counts two more native SQL calls (the `SAVEPOINT` and its `RELEASE` or `ROLLBACK`). Details: TC-1491. +- Bounded reads of stored database artifacts: the node no longer loads a whole `database_artifact` row. It reads metadata columns for existence and size checks and streams `payload`, then `delta_payload`, in 4 MiB slices while verifying the content hashes. On PostgreSQL, `ALTER TABLE database_artifact ALTER COLUMN payload SET STORAGE EXTERNAL` is a recommended operator step for large artifacts (`docs/runbooks/tc-822-artifact-payload-storage.md`); it is not required and rewrites no data. Details: TC-822. +- The storage usage read (`tinycloud.space/info`) returns `manageUrl` `https://account.tinycloud.xyz/storage`, the account storage page, for "Manage storage". Details: TC-848. +- SQL block store: contract types, configuration and the `m20261021_000000_sql_store_manifest` migration, which creates two empty tables. Nothing uses them unless `[sql_store]` is enabled, which it is not by default. Details: TC-1491. +- Phala deploys fail unless the CVM runs the pinned production OS image (`docker.yml`; `docs/releasing.md`). Details: TC-1630. +- Tests remove their temporary directories when each test ends. Details: TC-1748. ## [1.21.7] - 2026-10-21 @@ -15,7 +28,6 @@ ### Changes -- The storage usage read (`tinycloud.space/info`) returns `manageUrl` `https://account.tinycloud.xyz/storage`, the account storage page, for "Manage storage". Details: TC-848. - Production compose: the database pool is `TINYCLOUD_DATABASE__MAX_CONNECTIONS: "10"` (was 15), so two containers that overlap during a deploy fit within the instance's 25 connections. This changes the compose hash; the N0 template lock in `docker.yml` and `scripts/ci/fixtures/tc959-n0-compose.yaml` move with it. Details: TC-950. ## [1.21.6] - 2026-10-21 diff --git a/Cargo.lock b/Cargo.lock index 092ef9d8..16b80914 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9931,7 +9931,7 @@ dependencies = [ [[package]] name = "tinycloud-node" -version = "1.21.7" +version = "1.21.8" dependencies = [ "aes-gcm", "anyhow", diff --git a/test/m1-realdata-e2e/Cargo.lock b/test/m1-realdata-e2e/Cargo.lock index b86fc2f4..e76299f1 100644 --- a/test/m1-realdata-e2e/Cargo.lock +++ b/test/m1-realdata-e2e/Cargo.lock @@ -8017,7 +8017,7 @@ dependencies = [ [[package]] name = "tinycloud-node" -version = "1.21.7" +version = "1.21.8" dependencies = [ "aes-gcm", "anyhow", diff --git a/test/w5-policy-runtime-node-e2e/Cargo.lock b/test/w5-policy-runtime-node-e2e/Cargo.lock index 5e5789b1..13ad4b2a 100644 --- a/test/w5-policy-runtime-node-e2e/Cargo.lock +++ b/test/w5-policy-runtime-node-e2e/Cargo.lock @@ -8465,7 +8465,7 @@ dependencies = [ [[package]] name = "tinycloud-node" -version = "1.21.7" +version = "1.21.8" dependencies = [ "aes-gcm", "anyhow", diff --git a/tinycloud-node-server/Cargo.toml b/tinycloud-node-server/Cargo.toml index 17e0ae2e..49ee2e9f 100644 --- a/tinycloud-node-server/Cargo.toml +++ b/tinycloud-node-server/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tinycloud-node" build = "build.rs" -version = "1.21.7" +version = "1.21.8" authors = ["TinyCloud Protocol"] edition = "2021" description = "TinyCloud Protocol Node"