Prevent pinning writes in non-primary DCs

This commit is contained in:
Kevin McConnell
2025-11-17 16:03:05 +00:00
parent b335eab6de
commit 9b3b2f5d29
5 changed files with 24 additions and 1 deletions
+1
View File
@@ -0,0 +1 @@
require_relative "deployment/database_resolver.rb"
+18
View File
@@ -0,0 +1,18 @@
module Deployment
class DatabaseResolver < ActiveRecord::Middleware::DatabaseSelector::Resolver
def self.in_primary_datacenter?
ENV["PRIMARY_DATACENTER"].present? || Rails.env.local?
end
def reading_request?(request)
# Disables writes (and so primary-DB stickiness) in non-primary datacenters
super || !DatabaseResolver.in_primary_datacenter?
end
private
def read_from_primary?
# Only the primary datacenter can read from the primary database, non-primary DCs have local DB replicas
super && DatabaseResolver.in_primary_datacenter?
end
end
end