Skip to content

0.8.43

Choose a tag to compare

@github-actions github-actions released this 20 Oct 17:19

Release Notes

A clone frozen by a stale git lock, watchers piling up under load, and other follow-ups from the Athena incident.

  • A stale .git/index.lock no longer freezes a clone. A field report: one role's clone held a
    0-byte index.lock from July, every sync failed on it until October, the clone fell 287 commits
    behind, and watch-status said healthy the whole time. The only sign was "hub sync failed …
    showing local state", which reads as a network blip. Four changes:
    • The sync path's fast-forward and rebase are local operations that rewrite files, so they no
      longer run under the 15-second network timeout. They get at least five minutes. On a machine
      with slow file writes (endpoint security software) a 287-file fast-forward took 56 seconds; the
      old timeout killed it mid-checkout, and the killed git left a new lock behind.
    • When confer does kill a git that writes the index, it removes the lock that git left.
    • In a clone confer manages (~/.confer/clones/), a sync removes an index.lock older than ten
      minutes and says so. In your own clones confer leaves the file alone and names it, with its age
      and the rm command, instead of "showing local state".
    • watch-status, the machine-wide watch report and doctor report a clone that has a stale index
      lock or trails the hub as of its last fetch, and watch-status --check fails on it.
  • tuning.git_timeout_secs and tuning.op_budget_secs take effect. confer config accepted,
    validated and listed both, but nothing read them. The CONFER_GIT_TIMEOUT_SECS and
    CONFER_OP_BUDGET_SECS environment variables still take precedence.
  • A watcher that loses its lock stops. On a loaded machine a watcher could sit in a long git
    operation past the 90-second stale window. The plugin then started a replacement, which took the
    lock but left the old one running, and the old one kept polling its clone. On Batman this reached
    nine watchers for four hubs, all contending for the clones' git locks ("hub sync failed (clone
    busy)"). A watcher whose lock now names another process exits at its next cycle, and taking over
    a stale lock from a live but unresponsive watcher now stops it.
  • A spool replayed after a restart no longer replays the old watcher's warnings. On Athena a
    spool nobody had read since before a reboot replayed days-old "cannot determine this hub's
    root-commit id" warnings into a healthy session, which read as a live failure. When a batch of
    spool lines spans a watcher restart, that watcher's own notices from before the new start line
    are dropped. Message wakes are always kept.
  • Claiming, closing or erroring a request marks it read. A request you had just closed kept
    appearing in the "unread for you" footer until a separate confer ack.
  • A detached watcher's command line names its hub (--hub-label <hub>), so ps tells one
    role's watchers on two hubs apart from a duplicate (batcave-net).
  • Watch-lock writes are atomic. Each heartbeat rewrote the lock in place, and a reader that
    caught it mid-write saw an empty or partial file.

Install confer-cli 0.8.43

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/codeshrew/confer/releases/download/v0.8.43/confer-cli-installer.sh | sh

Install prebuilt binaries via Homebrew

brew install codeshrew/tap/confer

Download confer-cli 0.8.43

File Platform Checksum
confer-cli-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
confer-cli-x86_64-apple-darwin.tar.xz Intel macOS checksum
confer-cli-aarch64-unknown-linux-musl.tar.xz ARM64 MUSL Linux checksum
confer-cli-x86_64-unknown-linux-musl.tar.xz x64 MUSL Linux checksum