Skip to content

Releases: hashjoin/hammerdown

Release list

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 05:43
93dc6bb

Re-read before you act; locks never ask you to judge their holder

Safety fixes for running more than one roll, or losing your session mid-roll.

  • Stale plans are refused. Each shard is re-read under its shard lock, and again before every restart and failover. If a role, state or build changed since the plan (another roll, another operator, an automatic failover), the shard is skipped untouched (ErrStale). Rerun to replan.
  • hammerdown unlock shows who holds a lock and whether that process is running. It releases the lock only with --reason, and only if the holder is provably gone. It refuses while the holder runs, there's no --force, and every release is logged to unlock.log.
  • "lock is held" explains itself. The message says whether the holder is running and what to do. It no longer suggests deleting the lock.
  • A dropped SSH session drains the roll (SIGHUP) and releases its locks, instead of killing the process mid-roll.

For backend authors: implement fleet.ShardInventory (ShardNodes) for cheap per-shard re-reads, and see CLAUDE.md invariants 7 and 8.

No flag defaults changed.

Full changelog: v0.1.0...v0.2.0 · PR #6

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 06:59

First public release. Put the hammer down. Keep the brakes.

hammerdown is a dependency-free Go CLI control plane for rolling restarts and upgrades across large sharded fleets. Fork it, teach it two verbs (restart a node, fail over a shard), and roll thousands of nodes shard by shard.

Highlights

  • Explicit workers: --workers N fleet-wide, --keyspace-workers N per keyspace
  • Leader-aware rolls: replicas first, planned failover to a replica already on the target build, then the old primary
  • Exact fail-fast: --max-primary-failures / --max-replica-failures drain before the next operation starts
  • Stop cleanly: --stop-at, --blackout, Ctrl-C drains; re-run the same command to resume
  • Filters you can type at 3 a.m.: --limit 'users/ALL|teams/-80,80-', globs, --skip, role, cell, host, target, canary --shards-per-keyspace 1
  • Dry run by default, plus process and shard locks
  • Backends: sim (11,000-node simulated fleet) and shell (drive your existing scripts)
  • Claude-ready: CLAUDE.md and an add-backend skill

Install

go install github.com/hashjoin/hammerdown/cmd/hammerdown@v0.1.0, or download a binary below and verify it against checksums.txt.

Try it

hammerdown sim init && hammerdown sim stage --to v20.0.1
hammerdown roll --workers 64 --sim-cursed 2 --dry-run=false --yes