~ knotless Search/
↑↓ move↵ open⇧↵ all results

chadtmiller.com/knotless

git that lives in your Atmosphere account

knotless.dev
1 collaborator

knotless 0.13.0 Latest 2 packages, 1 image

1
10

Storage: quirks in push, compaction and mirrors

Open
Open chadtmiller.com opened this issue 0 comments
kind/bugarea/cliarea/servearea/storagearea/lexicons

Found by reading the code while rewriting the docs; not each reproduced.

  • A push's stale-read check runs after its blobs are uploaded, so a refused stale push leaves orphan blobs and spends uploadBlob quota.
  • When the PDS refuses a part as too large, every part is uploaded again at half size, including those already accepted.
  • With KNOTLESS_COMPACT=inline, a compaction error fails the helper after the refs have landed, so git reports a failed push that succeeded. (Fixed in 0.7.0: the helper prints the error and the push succeeds.)
  • Past the threshold, every push starts a background compaction even when fewer than 2 packs are past the grace period, so most fold nothing. Nothing stops two compactions of one repository running at once.
  • Only the owner's own git push triggers compaction. knotless commit, branch, merges and gateway pushes never do. (Tracked by Compaction: writes other than the owner's git push never start it.)
  • The gateway's is_sha takes 40-hex only, so SHA-256 repositories can't push through a gateway. (Fixed in 0.7.0: it takes 40 or 64 hex.)
  • The mirror lock's mtime is never refreshed, so a sync over two minutes can be taken over. (Obsolete: the lock is now an operating-system file lock, with no mtime takeover.)
  • Gateway createCommit rebuilds up to 8 times with no backoff.
  • supersedes on a compacted pack is written but never read.
  • Lexicons: redirect.json has no space property though the code writes one; the pack description says newest-first is push order (it is reverse).
  • KNOTLESS_INLINE_MAX above 262144 would exceed data's maxLength. (Fixed in 0.7.0: env.rs caps it at the maximum.)