v0.1.0 — the single-node store
·
113 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
The first Hamster release: the single-node store.
Dev preview. Single node, no erasure coding yet, and on-disk formats may change between v0 releases. Please don't trust real data to it — but please do kick the tires: the quick start takes about a minute.
What's in v0.1
- Core S3 API: objects (PUT/GET/HEAD/DELETE with Range), both ListObjects versions, multipart uploads end to end, server-side copies (
CopyObject,UploadPartCopy), batch deletes, presigned URLs. Anything outside the surface returns an honestNotImplementedinstead of a wrong answer. - Full SigV4 authentication: Authorization header, presigned query,
UNSIGNED-PAYLOAD, andaws-chunkedstreaming signatures — implemented in-house on the standard library, conformance-tested against AWS's published examples. - Both addressing styles: path-style and virtual-hosted (
-domainflag). - ETags exactly like S3: MD5, including the composite
-Nform for multipart — the semantics sync tools verify against. - Streaming write path: uploads go to disk through a bounded write buffer; a 1 GiB PUT peaks the server around 12 MB of memory.
- Durable storage: BadgerDB metadata and synced blobs; every on-disk record is additively versioned protobuf with golden-pinned encodings, so today's data stays readable by every future version.
How it's verified
- A third-party client compatibility suite runs the real
awsCLI, rclone, restic, and s3cmd against every change. - A deterministic simulation harness boots the store on a simulated disk with real crash semantics, kills it adversarially across seeded schedules, and checks every recovery against a reference model.
Binaries below are static (CGO_ENABLED=0), version-stamped (hamster version), with SHA-256 checksums in SHA256SUMS. Next up, v0.2: clustering — Raft-replicated metadata and multi-node membership.