Skip to content

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 14 Aug 17:11
Immutable release. Only release title and notes can be modified.

celld v0.2.1 repairs three faults that can take a node out of service: a node that sheds its working set and still refuses every request, an alarm that a reschedule can lose, and a WebSocket stream that a cancelled read can break. It also changes three defaults.

Memory pressure and shedding:

  • celld measures pressure from the memory that cells hold, not from the resident set size. celld links jemalloc, and jemalloc keeps freed pages, so the resident set size counts memory that no cell owns. A node could shed 98% of its working set, stay above its resume line, and refuse every request for a cell until an operator restarted it.
  • An absolute cap sits under that rule at 95% of the machine memory, and it reads the resident set size directly.
  • A node stopped its walk down when a cut moved the sample by less than 5%. A large fixed part of the sample defeats that test, so a node stopped above a line that it could still reach. celld now asks whether a cut lowered the sample, and it keeps shedding while progress continues.

Alarms:

  • A cell that moves an alarm to a new minute and back can lose the wake entry, because the delete of the old key races the new write. celld now tracks a delete while it is in flight.
  • An activity report that repeats the deadline of an alarm that is already firing no longer replaces the firing state, so a handler cannot start again while it runs.

WebSockets:

  • A cancelled read consumes part of a frame header, and the stream cannot realign, so a cell socket or a hibernation tunnel breaks. celld no longer cancels a WebSocket read.

Defaults:

  • celld ignores the X-Forwarded-Host and X-Forwarded-Proto headers, so a client cannot set the host in request.url. Use --trust-forwarded-headers behind a proxy that replaces both headers.
  • A node tests the conditional write of the bucket at startup, and it refuses to serve if the store accepts a write that it must reject. Set CELLD_STORAGE_PROBE=0 to skip the test.
  • A cell scope must be non-empty, at most 512 bytes, and it must hold only ASCII alphanumerics with _ - . : and $. A scope becomes a path component and an object-store key, so celld rejects every other character.

Operator interface:

  • /state reports activating, activation_waiting, and capacity_waiting beside restoring, and a census of every cell by phase. A node part-way through many cold starts reported almost no occupancy before.
  • /state and celld diagnose report the memory in use beside the resident set size, which is the number that the shedding decision reads.

Workers surface:

  • A SQLite-backed Durable Object can create a vec0 virtual table for a vector search. The sqlite_vec compatibility flag enables the extension, and a new example deploys a writable vector database.

Replication:

  • Pruning the replication working directory no longer scales with the product of the kept and the evicted snapshots.