From 26e522ac55d4147b0418abcf7e16bb70cd3f0af5 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 17 Jul 2023 08:26:52 +0200 Subject: [PATCH] Fix not actually connecting to the configured replica (#25977) --- app/helpers/database_helper.rb | 4 +-- app/models/application_record.rb | 2 ++ config/database.yml | 42 +++++++++++++++++++++++--------- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/app/helpers/database_helper.rb b/app/helpers/database_helper.rb index 965eeaf41..79227bb10 100644 --- a/app/helpers/database_helper.rb +++ b/app/helpers/database_helper.rb @@ -2,10 +2,10 @@ module DatabaseHelper def with_read_replica(&block) - ApplicationRecord.connected_to(role: :read, prevent_writes: true, &block) + ApplicationRecord.connected_to(role: :reading, prevent_writes: true, &block) end def with_primary(&block) - ApplicationRecord.connected_to(role: :primary, &block) + ApplicationRecord.connected_to(role: :writing, &block) end end diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 5d7d3a096..23e0af3a2 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -5,6 +5,8 @@ class ApplicationRecord < ActiveRecord::Base include Remotable + connects_to database: { writing: :primary, reading: :read } + class << self def update_index(_type_name, *_args, &_block) super if Chewy.enabled? diff --git a/config/database.yml b/config/database.yml index f7ecbd981..d1fd65a0f 100644 --- a/config/database.yml +++ b/config/database.yml @@ -8,23 +8,41 @@ default: &default application_name: '' development: - <<: *default - database: <%= ENV['DB_NAME'] || 'mastodon_development' %> - username: <%= ENV['DB_USER'] %> - password: <%= (ENV['DB_PASS'] || '').to_json %> - host: <%= ENV['DB_HOST'] %> - port: <%= ENV['DB_PORT'] %> + primary: + <<: *default + database: <%= ENV['DB_NAME'] || 'mastodon_development' %> + username: <%= ENV['DB_USER'] %> + password: <%= (ENV['DB_PASS'] || '').to_json %> + host: <%= ENV['DB_HOST'] %> + port: <%= ENV['DB_PORT'] %> + read: + <<: *default + database: <%= ENV['DB_NAME'] || 'mastodon_development' %> + username: <%= ENV['DB_USER'] %> + password: <%= (ENV['DB_PASS'] || '').to_json %> + host: <%= ENV['DB_HOST'] %> + port: <%= ENV['DB_PORT'] %> + replica: true # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". # Do not set this db to the same as development or production. test: - <<: *default - database: <%= ENV['DB_NAME'] || 'mastodon' %>_test<%= ENV['TEST_ENV_NUMBER'] %> - username: <%= ENV['DB_USER'] %> - password: <%= (ENV['DB_PASS'] || '').to_json %> - host: <%= ENV['DB_HOST'] %> - port: <%= ENV['DB_PORT'] %> + primary: + <<: *default + database: <%= ENV['DB_NAME'] || 'mastodon' %>_test<%= ENV['TEST_ENV_NUMBER'] %> + username: <%= ENV['DB_USER'] %> + password: <%= (ENV['DB_PASS'] || '').to_json %> + host: <%= ENV['DB_HOST'] %> + port: <%= ENV['DB_PORT'] %> + read: + <<: *default + database: <%= ENV['DB_NAME'] || 'mastodon' %>_test<%= ENV['TEST_ENV_NUMBER'] %> + username: <%= ENV['DB_USER'] %> + password: <%= (ENV['DB_PASS'] || '').to_json %> + host: <%= ENV['DB_HOST'] %> + port: <%= ENV['DB_PORT'] %> + replica: true production: primary: