Class: TransactionPinning::Middleware
- Inherits:
-
Object
- Object
- TransactionPinning::Middleware
- Defined in:
- lib/fizzy/saas/transaction_pinning.rb
Constant Summary collapse
- SESSION_KEY =
:last_txn- DEFAULT_MAX_WAIT =
0.25
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app) ⇒ Middleware
constructor
A new instance of Middleware.
Constructor Details
#initialize(app) ⇒ Middleware
Returns a new instance of Middleware.
6 7 8 9 |
# File 'lib/fizzy/saas/transaction_pinning.rb', line 6 def initialize(app) @app = app @timeout = Rails.application.config.x.transaction_pinning&.timeout&.to_f || DEFAULT_MAX_WAIT end |
Instance Method Details
#call(env) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/fizzy/saas/transaction_pinning.rb', line 11 def call(env) request = ActionDispatch::Request.new(env) replica_metrics = {} if ApplicationRecord.current_role == :reading wait_for_replica_catchup(request, replica_metrics) end status, headers, body = @app.call(env) headers.merge!(replica_metrics.transform_values(&:to_s)) if ApplicationRecord.current_role == :writing capture_transaction_id(request) end [ status, headers, body ] end |