<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>S3 on Momo Engineering Journal</title><link>/categories/s3/</link><description>Recent content in S3 on Momo Engineering Journal</description><image><title>Momo Engineering Journal</title><url>/images/og-image.png</url><link>/images/og-image.png</link></image><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 28 Oct 2026 17:47:15 -0600</lastBuildDate><atom:link href="/categories/s3/index.xml" rel="self" type="application/rss+xml"/><item><title>R10 Phase 4: S3 Object Lock — WORM That Actually Refuses Deletes</title><link>/posts/060-r10-object-lock/</link><pubDate>Wed, 28 Oct 2026 12:00:00 +0000</pubDate><guid>/posts/060-r10-object-lock/</guid><description>Object Lock is the S3 feature regulated workloads ask for first: write-once-read-many retention that the storage server itself enforces, not a policy the client promises to honor. This phase gives momo bucket-level lock enablement at creation, per-version retention and legal holds, and a delete path that answers 403 instead of quietly removing bytes. Teaches: how COMPLIANCE and GOVERNANCE differ in who can override them, why lock state must live beside the version record rather than inside object metadata, and which parts of AWS&amp;rsquo;s surface momo deliberately does not pretend to implement.</description></item><item><title>R10 Phase 3: S3 Notification — Event-Driven Webhooks on CAS</title><link>/posts/059-r10-notification/</link><pubDate>Wed, 21 Oct 2026 07:14:25 +0000</pubDate><guid>/posts/059-r10-notification/</guid><description>Implemented S3 bucket notification configurations with real webhook delivery, prefix/suffix filtering, exponential-backoff retries, and all six S3 event types — so backup tools and pipelines can react to object changes instead of polling. Teaches: why a notification dispatcher that returns nil without sending is the trap to watch for, and how events stay honest across plain PUT, multipart, and delete paths.</description></item><item><title>S3 Lifecycle Rules on a Content-Addressed Store: Time as a First-Class Dimension</title><link>/posts/058-s3-lifecycle-on-cas/</link><pubDate>Wed, 21 Oct 2026 03:35:13 +0000</pubDate><guid>/posts/058-s3-lifecycle-on-cas/</guid><description>Lifecycle rules are the first feature that makes momo delete data on a schedule rather than on request — which turns age, storage class, and delete markers into correctness problems. This post walks through the expiration and transition engine, why a background worker is the only safe place to run it, and how expiration composes with versioning&amp;rsquo;s delete markers.</description></item><item><title>S3 Versioning on a Content-Addressed Store: Two Kinds of Identity</title><link>/posts/056-s3-versioning-on-cas/</link><pubDate>Sun, 11 Oct 2026 08:56:13 +0000</pubDate><guid>/posts/056-s3-versioning-on-cas/</guid><description>Why S3 versioning and content-addressed storage seem to conflict — mutation identity vs content identity — and how momo keeps both: UUIDv4 version records pointing at deduplicated blobs, delete markers that shadow without deleting, and pagination that can only be computed after sorting. Teaches: the real semantics backup tools depend on, and where the version chain deliberately stops being distributed.</description></item><item><title>⚡ Bolt: Zero-Allocation Parsing of ETag Lists</title><link>/posts/052-bolt-etag-matches-zero-alloc/</link><pubDate>Tue, 06 Oct 2026 11:16:37 +0000</pubDate><guid>/posts/052-bolt-etag-matches-zero-alloc/</guid><description>How we removed the heap allocation from ETag list parsing on the S3 conditional-request path by replacing strings.Split with a strings.IndexByte scan. Teaches: what If-Match/If-None-Match actually carry, why Split allocates per request, and how a microbenchmark proves the win.</description></item><item><title>⚡ Bolt: Zero-Allocation Parsing of AWS Chunked Headers</title><link>/posts/051-bolt-aws-chunked-zero-alloc/</link><pubDate>Thu, 01 Oct 2026 11:32:41 +0000</pubDate><guid>/posts/051-bolt-aws-chunked-zero-alloc/</guid><description>How we removed the last heap allocation from the aws-chunked ingest path by replacing strings.Split and strings.TrimPrefix with a strings.IndexByte scan. Teaches: what a streaming S3 upload body looks like, why Split allocates per chunk, and how a microbenchmark proves the win.</description></item><item><title>⚡ Bolt: Eliminating the Last Remaining S3 XML Time Allocation</title><link>/posts/048-bolt-listparts-appendformat/</link><pubDate>Tue, 08 Sep 2026 11:29:58 +0000</pubDate><guid>/posts/048-bolt-listparts-appendformat/</guid><description>How we eliminated the final per-response heap allocation in S3 XML rendering by swapping time.Format for time.AppendFormat in the ListParts handler. Teaches: the stack-buffer time formatting pattern, why Format allocates, and how microbenchmarks prove the win.</description></item><item><title>⚡ Bolt: Eliminating Time Formatting Allocations in S3 HTTP Responses</title><link>/posts/047-bolt-s3-copyresult-time-alloc/</link><pubDate>Sun, 30 Aug 2026 11:20:58 +0000</pubDate><guid>/posts/047-bolt-s3-copyresult-time-alloc/</guid><description>How we optimized S3 XML responses by replacing time.Format with time.AppendFormat to eliminate heap allocations. Teaches: stack-buffer time formatting pattern, hot path identification via pprof.</description></item><item><title>Tenant Isolation: Deriving Per-Tenant Keys, Enforcing ACLs, and Proving What Happened</title><link>/posts/053-multitenancy-authorization-audit/</link><pubDate>Tue, 25 Aug 2026 03:25:29 +0000</pubDate><guid>/posts/053-multitenancy-authorization-audit/</guid><description>How momo isolates tenants without a central secret server: HKDF-derived per-tenant keys, default-deny ACLs evaluated per request, and a SHA-256 hash-chained audit log that makes tampering detectable. Teaches: key derivation vs. key storage, why ACL evaluation order matters, and how hash chaining turns a log into evidence.</description></item><item><title>S3 501 Discipline: Remaining Ops — SelectObjectContent, UploadPartCopy, Analytics, Inventory, Metrics, Intelligent-Tiering</title><link>/posts/035-s3-501-discipline-remaining-ops/</link><pubDate>Mon, 24 Aug 2026 21:44:12 +0000</pubDate><guid>/posts/035-s3-501-discipline-remaining-ops/</guid><description>Final 501 sweep: SelectObjectContent, UploadPartCopy, analytics, inventory, metrics, intelligent-tiering now return honest 501 NotImplemented.</description></item><item><title>S3 501 Discipline: Object-Level Subresources (tagging, acl, versionId, retention, legal-hold)</title><link>/posts/034-s3-501-discipline-object-subresources/</link><pubDate>Mon, 24 Aug 2026 21:13:07 +0000</pubDate><guid>/posts/034-s3-501-discipline-object-subresources/</guid><description>5 object-level query parameters now return honest 501 NotImplemented instead of silently falling into GetObject/PutObject/DeleteObject.</description></item><item><title>S3 501 Discipline: Honest 'Not Implemented' for 16 Bucket Config Subresources</title><link>/posts/033-s3-501-discipline-bucket-config/</link><pubDate>Mon, 24 Aug 2026 20:00:50 +0000</pubDate><guid>/posts/033-s3-501-discipline-bucket-config/</guid><description>16 bucket config subresources (versioning, ACL, policy, CORS, lifecycle, etc.) now return honest 501 NotImplemented instead of silently misrouting to ListObjects/GetObject.</description></item><item><title>S3 Integrity Checksums: x-amz-checksum-*</title><link>/posts/012-s3-integrity-checksums/</link><pubDate>Mon, 24 Aug 2026 16:36:34 +0000</pubDate><guid>/posts/012-s3-integrity-checksums/</guid><description>x-amz-checksum-CRC32/SHA256 echo on PUT; integrity surfaced to clients so dirty bytes never masquerade as clean. Teaches: client-verifiable integrity, Bolt zero-allocation on read path, Sentinel honesty guarantee.</description></item><item><title>⚡ Bolt: 1000 → 16 Allocations in S3 ListObjectsV2 XML</title><link>/posts/036-s3-listxml-appendformat-optimization/</link><pubDate>Mon, 24 Aug 2026 11:24:01 +0000</pubDate><guid>/posts/036-s3-listxml-appendformat-optimization/</guid><description>S3 ListObjectsV2 XML serialization dropped from ~1000 allocations to 16 per op via inlined time formatting and a pre-allocated escape buffer.</description></item><item><title>S3 Multipart and Protocol Breadth: 501 Discipline</title><link>/posts/009-s3-multipart-and-breadth/</link><pubDate>Thu, 13 Aug 2026 06:02:26 +0000</pubDate><guid>/posts/009-s3-multipart-and-breadth/</guid><description>Multipart upload support plus a rigorous 501 strategy for unsupported S3 subresources — honest breadths over silent misbehavior.</description></item><item><title>S3 and Inbound TLS: HTTPS-by-Default Enforcement</title><link>/posts/011-s3-https-tls-enforcement/</link><pubDate>Wed, 12 Aug 2026 07:23:29 +0000</pubDate><guid>/posts/011-s3-https-tls-enforcement/</guid><description>The S3 gateway turned HTTPS-or-explicit-insecure into the default: no silent plaintext for the gateway or inbound tcp/quic.</description></item><item><title>S3 Auth: SigV4, Presigned URLs, and Key Decoupling</title><link>/posts/010-s3-auth-presigned-sigv4/</link><pubDate>Tue, 11 Aug 2026 23:11:16 +0000</pubDate><guid>/posts/010-s3-auth-presigned-sigv4/</guid><description>Query-string SigV4 for presigned URLs, mandatory X-Amz-Date freshness, and decoupling gateway access/secret keys from the native auth token.</description></item><item><title>S3 Gateway Core: XML, Buckets, Objects, Lists</title><link>/posts/008-s3-gateway-core/</link><pubDate>Tue, 11 Aug 2026 18:25:16 +0000</pubDate><guid>/posts/008-s3-gateway-core/</guid><description>The S3 gateway: SigV4, S3-compliant XML errors, Head/List/Copy, pagination, ranges, and metadata — a compatible API surface for real clients.</description></item><item><title>Signed Payloads and Server-Sent Events for S3</title><link>/posts/039-signed-payload-sse-s3/</link><pubDate>Tue, 11 Aug 2026 05:14:24 +0000</pubDate><guid>/posts/039-signed-payload-sse-s3/</guid><description>SigV4 signed payload verification for S3 PUT/POST and Server-Sent Events for async operation notifications.</description></item><item><title>AWS Chunked Streaming: Signed Payloads Without Buffering</title><link>/posts/040-aws-chunked-streaming/</link><pubDate>Tue, 11 Aug 2026 04:52:58 +0000</pubDate><guid>/posts/040-aws-chunked-streaming/</guid><description>aws-chunked payload encoding streams large S3 uploads in signed chunks — no full-body buffering, per-chunk SigV4 integrity.</description></item><item><title>External S3 Client Replication Downgrade: When aws-cli Can't Fan Out</title><link>/posts/030-external-s3-client-replication-downgrade/</link><pubDate>Wed, 01 Jul 2026 23:36:39 +0000</pubDate><guid>/posts/030-external-s3-client-replication-downgrade/</guid><description>External S3 clients like aws-cli don&amp;rsquo;t send momo headers — the server detects this and downgrades client-side replication modes to server-side alternatives, ensuring replication never silently drops.</description></item></channel></rss>