Gitility.ObjectStore.Local (Gitility v0.5.0)

Copy Markdown View Source

Single-VM object store backed by a local directory.

A supervised server serialises publication for each expanded root. The contract is intentionally per VM; this adapter does not use filesystem locks and is not a shared-filesystem coordination protocol.

Keys never become path components. Each key is hashed and each successful write installs a new immutable version by replacing a small current pointer atomically:

root/objects/<sha256(key)>/current
root/objects/<sha256(key)>/v-<random>/data
root/objects/<sha256(key)>/v-<random>/meta

Reads pin their selected version in the per-root server. A commit therefore cannot invalidate an in-flight reader. After a commit, unpinned non-current versions older than one hour are swept. Caller or VM death can leave a young version directory, which a later sweep removes after the same grace period.

Summary

Types

t()

@type t() :: %Gitility.ObjectStore.Local{
  root: Path.t(),
  server: GenServer.server(),
  test_hooks: map()
}