v0.6.0
Pre-release
Pre-release
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-hotcellgem. 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_cellsubscriber or in its Yabeda integration.HotCell::LogSubscriberwrites this line now; see the README's "Application logs". - Replace the application's HotCell health endpoints with
HotCell::HealthControllerandHotCell::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.rbandreopen.rbwithrequire "hot_cell/health_operations", and change the application's clients to callhealth.echoandhealth.reopen. See the README's "Rails healthcheck".
HotCell::Server
Added
hot_cell/health_operationsdefines thehealth.echoandhealth.reopenoperations. 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 requireshot_cell/health_operations. Otherwise, the cell answersunsupported.- The
hotcell.describeresponse includesserver_version, the version ofhotcell-serverthat 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 forfork. The supervisor runsProcess.warmuponce, 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.killon the worker's process group could raiseErrno::EPERMwhile 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_cellswarns at boot when a cell'shotcell-serverversion differs from the application'shotcell-clientversion. (#21)HotCell::LogSubscriberwrites oneinfoline 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::HealthControllerandHotCell::DiagnosticsControllercheck each registered cell.HotCell::HealthControlleruses only the control socket and returnsOKorFAIL. It takes no worker.HotCell::DiagnosticsControlleralso sendshealth.echoandhealth.reopenon 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, setHotCell.diagnostics_controller_parentin an initializer to the name of an authenticated controller class. Alternatively, subclassHotCell::DiagnosticsController, authenticate in the subclass, and route to the subclass. See the README's "Rails healthcheck".
Fixed
- The
perform.hot_cellevent now containscellandoperationwhen an exception escapes the call. Previously, the event contained neither. - The client now returns
capacitywhen a full cell closes the connection before the client finishes sending the request. Previously, the client returnedunavailablefor 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. CallYabeda::HotCell.install!once at boot. See the README's "Metrics collection".
ActiveStorage::HotCell::Client
Fixed
require "active_storage/hot_cell/client"now works without themini_magickgem. Previously, it raisedLoadErrorwhenmini_magickwas not installed. The gem now loadsTransformers::Image::Magickwhen the application first references that constant. An application that uses only the Vips transformer can removemini_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.echoandhealth.reopenfromhot_cell/health_operations. Its ownexample.echoandexample.reopenoperations are removed.
Fixed
bin/conformanceno 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-imageandbin/loadpass their inputs as arguments, not through a shell. Previously, shell syntax in a checkout path ran as a command inbin/example-image. Shell syntax in abin/loadscenario, duration or thread count ran as a command in the driver container. (#33)