Repository navigation
Conversation
samgbafa
force-pushed
the
skgbafa/tc-887-r6-s3-sealed
branch
from
November 8, 2026 00:41
67679b2 to
fce1bfb
Compare
samgbafa
force-pushed
the
skgbafa/tc-887-r5-fs-sealed
branch
from
November 8, 2026 00:41
11728ac to
203ea34
Compare
Sealed writes inside put_if_absent (plaintext reservations), whole reads, range reads pinned by ETag with a checked Content-Range, removal of the sealed copy then the legacy copy with per-copy deletion charges, and refusal while keys are locked. Both block stores declare the blocks seal path. MinIO tests run in the at-rest harness job.
samgbafa
force-pushed
the
skgbafa/tc-887-r5-fs-sealed
branch
from
November 8, 2026 00:53
203ea34 to
b9733be
Compare
samgbafa
force-pushed
the
skgbafa/tc-887-r6-s3-sealed
branch
from
November 8, 2026 00:53
fce1bfb to
33f3847
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TC-887, part 6 of the refreshed at-rest stack (base: #519). Replaces #336 (
skgbafa/tc-887-s3c-s3-sealed), ported onto current main (aws-sdk-s3 1.x, TC-735 generations, pending/deleting quota,BlobOperationLocks).What
v1/{space_tag}/{object}[@N], inside main'sput_if_absent(per-generation lock, HEAD dedup on the target name, pending reservation charged in plaintext bytes). File staging seals into a temp file and uploads from it; memory staging seals in memory. Only the sealed name dedups.If-Match), and require the returnedContent-Rangeto equal the computed ciphertext span; a replaced/removed object restarts once, then 503, never falls back to legacy.strictprobes the legacy name only to answer "legacy refused". Legacy reads are main's code paths.removedeletes the sealed copy first, then the legacy copy, each with its own lost-DELETE charge map (deletingstays the legacy, boot-listing one;deleting_sealedis new), and refunds an unlanded upload's reservation only when neither copy nor charge existed. With keys set up but locked it deletes nothing (503) and the orphan collector retries. HeadObject sizing throughout.containschecks the name a write would use;prepares/prepare_read/prepare_writeas in the FileSystem store; sizes join the space tag.storage::attach_at_restnow attaches and declares the blocks seal path for both stores.tests/at_rest_s3_store.rs(MinIO,--ignored), added to theat-rest-harnessjob inrust.yml.Open risk (documented in §7)
The S3 boot listing can't name sealed objects (keys arrive after storage opens), so for a sealed object whose DELETE lands after a restart's listing, the charge stays counted until the next restart: an over-count, never an under-count.
Verification (run locally)
cargo fmt --all;RUSTFLAGS=-Dwarnings cargo clippy --locked -p tinycloud-node --all-targets: cleancargo test --locked -p tinycloud-node --lib storage::: 72 passedcargo test --locked -p tinycloud-node --test at_rest_fs_store --test did_resolution_single_entry: 3 + 10 passedscripts/at-rest-harness/harness.sh up, env loaded):cargo test --locked -p tinycloud-node --test at_rest_s3_store --test s3_block_store -- --ignored: 8 + 1 passed (round trip and ranges, generation names, legacy/locked/strict/tamper, removal of both copies and refusal while locked, temp-file staging, contains, replaced-object ETag pinning)