diff --git a/activerecord/lib/active_record/connection_adapters/pool_manager.rb b/activerecord/lib/active_record/connection_adapters/pool_manager.rb index 06d8cbc135e81..cb09694327886 100644 --- a/activerecord/lib/active_record/connection_adapters/pool_manager.rb +++ b/activerecord/lib/active_record/connection_adapters/pool_manager.rb @@ -8,7 +8,7 @@ def initialize end def shard_names - @role_to_shard_mapping.values.flat_map { |shard_map| shard_map.keys } + @role_to_shard_mapping.values.flat_map { |shard_map| shard_map.keys }.uniq end def role_names diff --git a/activerecord/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb b/activerecord/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb index 6df45a8312af3..1e887c0d8b4fe 100644 --- a/activerecord/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb +++ b/activerecord/test/cases/connection_adapters/connection_handlers_sharding_db_test.rb @@ -38,13 +38,14 @@ def test_establish_connection_using_3_levels_config @prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, config ActiveRecord::Base.connects_to(shards: { - default: { writing: :primary }, - shard_one: { writing: :primary_shard_one } + default: { writing: :primary, reading: :primary }, + shard_one: { writing: :primary_shard_one, reading: :primary_shard_one } }) base_pool = ActiveRecord::Base.connection_handler.retrieve_connection_pool("ActiveRecord::Base") default_pool = ActiveRecord::Base.connection_handler.retrieve_connection_pool("ActiveRecord::Base", shard: :default) + assert_equal [:default, :shard_one], ActiveRecord::Base.connection_handler.send(:get_pool_manager, "ActiveRecord::Base").shard_names assert_equal base_pool, default_pool assert_equal "test/db/primary.sqlite3", default_pool.db_config.database assert_equal "primary", default_pool.db_config.name