Skip to content

v0.13.0

Latest

Choose a tag to compare

@github-actions github-actions released this 01 Nov 16:24
· 4 commits to main since this release
cb064a5

A store kept under a prefix, and a volume removed whole

Summary

This release adds lode.Prefixed, a factory whose store keeps every object of another factory's store under a prefix, and volume.Remove, which removes a volume with its data so that the volume stays removed. It also fixes every commit after a dataset's first on Hetzner Object Storage.

Highlights

  • lode.Prefixed: the factory wraps another factory's store so that every object lives under a prefix, on any backend. A dataset or a volume therefore sits at a location of the caller's choice in a store the caller already holds.
  • Keys stay under the prefix: the store refuses a key that would leave the prefix with ErrInvalidPath, and the factory refuses a prefix outside the root with ErrInvalidArgument.
  • volume.Remove: the call removes a volume with its data, and the volume stays removed. Latest and Commit on any handle of the volume return the new volume.ErrRemoved, and a second call completes an interrupted removal.
  • Removal deletes nothing while a commit is in flight: Remove returns ErrHeadUncommitted while the head it fenced has no manifest, pending or abandoned. It returns ErrSnapshotConflict when a commit races it and the retries of WithRetryCount are spent.
  • Commits succeed on Hetzner Object Storage: the S3 adapter sends If-Match with the ETag's bare value. Hetzner refuses the quoted form with 412 even when the ETag matches, so every commit after a dataset's first returned ErrSnapshotConflict there. AWS S3 and Cloudflare R2 accept both forms.

Known Limitations

  • The v1.0 API freeze window restarts with this release, because Prefixed is new in the lode package.

Full Changelog: v0.12.2...v0.13.0