Skip to content

ObjectFS v0.12.0

Choose a tag to compare

@github-actions github-actions released this 08 Aug 22:51
· 42 commits to main since this release

Coordination stops pretending. ObjectFS's distributed layer had a consistency taxonomy, a Raft log,
and a CacheReplicator; what it did was send the same PUT to N nodes writing the same key and call
majority success linearizable. That is replaced by compare-and-swap on the object store itself —
Backend.PutObjectIf asserts a precondition, internal/coord's lease re-asserts the CAS on every
guarded action, and an endpoint that cannot honour a precondition is refused rather than downgraded.
The code that simulated the guarantee is deleted rather than left as a fallback, because a fallback
here reports success to every contender for a lease, which is the outcome the mechanism exists to
prevent.

This tag carries two closed milestones: Distributed Foundations & Install Simplicity (24 issues)
and Test Harness, Coverage & Build Hygiene (24 issues). Both were at zero open before it was
cut.

The second is what makes the first credible. Four SDKs shipped in this repository and not one of
them compiled
: the JavaScript SDK had 48 tsc errors, the Java SDK four mvn compile errors, and
the C SDK a maximum-length S3 key that came back one byte short — each surviving because no CI job
ran the compiler. Four build tags carried code nothing built. Ten tests in tests/fuse_test.go
asserted against the mock they constructed rather than against the filesystem they discarded. A
release that adds a coordination primitive on top of that has no basis for the claim, so the gates
came first: every build tag compiles in CI, every SDK builds and tests, the lint backlog is 570 →
299, and the four suites that could not fail are gone rather than repaired.

Two findings are worth reading before deploying. Ceph RGW ≤ 19.2.0 implements conditional writes
partially — it answers 412 for a key that does not exist, rejects the quoted ETag it just
returned, and ignores preconditions on CompleteMultipartUpload, so a conditional write large
enough to be multipart is silently unconditional. The mount-time capability probe now detects this
and refuses; docs/design/conditional-write-compatibility.md records the full matrix, measured
against real AWS, MinIO and RGW endpoints rather than read from documentation. Separately, gossip
had no message authentication, and a cluster will not start without a shared secret.

What changed

  • Added — 19 entries
  • Fixed — 75 entries
  • Changed — 13 entries
  • Removed — 8 entries
  • Security — 2 entries

The full text of each entry is in CHANGELOG.md, under [0.12.0].
It is long by intent: an entry records what was wrong and how the fix was verified,
which is the evidence a filesystem release has to carry.


Verify a download:

sha256sum -c objectfs-<platform>.tar.gz.sha256

Container image: ghcr.io/scttfrdmn/objectfs:0.12.0

Full changelog: https://github.com/scttfrdmn/objectfs/blob/v0.12.0/CHANGELOG.md