Populate writer and last transaction in responses

In order to control routing dynamically, we need to expose some Beamer
information to the proxy.

The `beamer_writer` value is used by the proxy to keep track of which
node should receive write requests. When it changes due to a failover,
the proxy will update after seeing a new value in this header. We
provide this to the proxy in the `X-Writer` response header.

The `beamer_last_txn` value will be used to control writer pinning.
Setting it in the cookie here is the first stage of this. The second
stage will be to catch situations where a reader gets a request where
this header value is set to a large value than the reader has seen; when
that happens if means there's a risk of reading stale data, so rather
than serve the request we should request the proxy to reproxy it back to
the writer.

We also set `X-Kamal-Target` in the response to match the
`X-Kamal-Target` that was set in the request; this lets us see which
proxy target served each request, which is useful for diagnostics.
This commit is contained in:
Kevin McConnell
2025-10-01 12:56:17 +01:00
parent b827ca685c
commit c1600a99e2
2 changed files with 41 additions and 1 deletions
+2 -1
View File
@@ -1,5 +1,6 @@
class ApplicationController < ActionController::Base
include Authentication, Authorization, CurrentRequest, CurrentTimezone, SetPlatform, TurboFlash, ViewTransitions, WriterAffinity
include Authentication, Authorization, CurrentRequest, CurrentTimezone, LoadBalancerRouting,
SetPlatform, TurboFlash, ViewTransitions, WriterAffinity
stale_when_importmap_changes
allow_browser versions: :modern, block: -> { render "errors/not_acceptable", layout: "error" }