Skip to content

v0.6.0

Pre-release
Pre-release

Choose a tag to compare

@flavorjones flavorjones released this 01 Oct 22:32
· 6 commits to master since this release
ffc9215

v0.6.0 / 2026-10-01

Upgrading

Some actions that application developers should consider taking when upgrading from an earlier version:

  • Replace the application's Yabeda integration for HotCell with the yabeda-hotcell gem. The README's "Metrics collection" lists the gem's metrics for comparison with the application's dashboards and alerts.
  • Remove the log line that the application writes for each HotCell call, in a perform.hot_cell subscriber or in its Yabeda integration. HotCell::LogSubscriber writes this line now; see the README's "Application logs".
  • Replace the application's HotCell health endpoints with HotCell::HealthController and HotCell::DiagnosticsController. The README's "Rails healthcheck" shows the routes and the authentication for the diagnostics route.
  • Replace the cell's copies of examples/operations/echo.rb and reopen.rb with require "hot_cell/health_operations", and change the application's clients to call health.echo and health.reopen. See the README's "Rails healthcheck".

HotCell::Server

Added

  • hot_cell/health_operations defines the health.echo and health.reopen operations. An application calls them to make sure that it can use the cell's work socket. A cell accepts them only when one of its operation files requires hot_cell/health_operations. Otherwise, the cell answers unsupported.
  • The hotcell.describe response includes server_version, the version of hotcell-server that the cell runs. Use it to find the version without a shell in the container. (#21)

Improved

  • A request that finds an idle worker no longer waits for fork. The supervisor forks a worker into each free slot at boot, and forks a replacement as soon as it reaps a worker that served a request. A request that waits in the queue still waits for fork. The supervisor runs Process.warmup once, at boot, before the first fork.

Fixed

  • A cell on macOS no longer stops when it kills a worker that started another process. Previously, Process.kill on the worker's process group could raise Errno::EPERM while that process was a zombie. The supervisor did not rescue the error, so the cell stopped and the caller received no response.

HotCell::Client

Added

  • HotCell.describe_cells warns at boot when a cell's hotcell-server version differs from the application's hotcell-client version. (#21)
  • HotCell::LogSubscriber writes one info line to the Rails log for each call. The line contains the cell, the operation, the outcome and both durations. It also contains the byte counts when the client measures them. The railtie attaches the subscriber. See the README's "Application logs".
  • HotCell::HealthController and HotCell::DiagnosticsController check each registered cell. HotCell::HealthController uses only the control socket and returns OK or FAIL. It takes no worker. HotCell::DiagnosticsController also sends health.echo and health.reopen on the work socket. It takes a worker for each round trip. It returns each result as JSON. To use the controllers, add a route for each to the application. Put the diagnostics route behind authentication. To do this, set HotCell.diagnostics_controller_parent in an initializer to the name of an authenticated controller class. Alternatively, subclass HotCell::DiagnosticsController, authenticate in the subclass, and route to the subclass. See the README's "Rails healthcheck".

Fixed

  • The perform.hot_cell event now contains cell and operation when an exception escapes the call. Previously, the event contained neither.
  • The client now returns capacity when a full cell closes the connection before the client finishes sending the request. Previously, the client returned unavailable for the broken pipe.

Yabeda::HotCell

Added

  • New gem yabeda-hotcell. It records Yabeda metrics for each call. On each scrape, it also sets gauges from the counters of each registered cell. Call Yabeda::HotCell.install! once at boot. See the README's "Metrics collection".

ActiveStorage::HotCell::Client

Fixed

  • require "active_storage/hot_cell/client" now works without the mini_magick gem. Previously, it raised LoadError when mini_magick was not installed. The gem now loads Transformers::Image::Magick when the application first references that constant. An application that uses only the Vips transformer can remove mini_magick.

ActiveStorage::HotCell::Server

Improved

  • The transform operations write their output directly to its final path. This removes one file rename from each transform. This change requires image_processing 2.2.0, which the gemspec now specifies. (#4)

Tooling

Changed

  • The example cell accepts health.echo and health.reopen from hot_cell/health_operations. Its own example.echo and example.reopen operations are removed.

Fixed

  • bin/conformance no longer fails intermittently at "offered overload answers capacity" against a healthy cell. Previously, a worker that was still cleaning up after the previous check could take a place that the overload check fills, so the cell did not fill. The check now waits until the cell is idle.
  • bin/example-image and bin/load pass their inputs as arguments, not through a shell. Previously, shell syntax in a checkout path ran as a command in bin/example-image. Shell syntax in a bin/load scenario, duration or thread count ran as a command in the driver container. (#33)