mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-25 19:10:42 +00:00
" Add a sharded locator::effective_replication_map_factory that holds shared effective_replication_maps. To search for e_r_m in the factory, we use a compound `factory_key`: <replication_strategy type, replication_strategy options, token_metadata ring version>. Start the sharded factory in main (plus cql_test_env and tools/schema_loader) and pass a reference to it to storage_proxy and storage_server. For each keyspace, use the registry to create the effective_replication_map. When registered, effective_replication_map objects erase themselves from the factory when destroyed. effective_replication_map then schedules a background task to clear_gently its contents, protected by the e_r_m_f::stop() function. Note that for non-shard 0 instances, if the map is not found in the registry, we construct it by cloning the precalculated replication_map from shard 0 to save the cpu cycles of re-calculating it time and again on every shard. Test: unit(dev), schema_loader_test(debug) DTest: bootstrap_test.py:TestBootstrap.decommissioned_wiped_node_can_join_test update_cluster_layout_tests.py:TestUpdateClusterLayout.simple_add_new_node_while_schema_changes_with_repair_test (dev) " * tag 'effective_replication_map_factory-v7' of https://github.com/bhalevy/scylla: effective_replication_map: clear_gently when destroyed database: shutdown keyspaces test: cql_test_env: stop view_update_generator before database shuts down effective_replication_map_factory: try cloning replication map from shard 0 tools: schema_loader: start a sharded erm_factory storage_service: use erm_factory to create effective_replication_map keyspace: use erm_factory to create effective_replication_map effective_replication_map: erase from factory when destroyed effective_replication_map_factory: add create_effective_replication_map effective_replication_map: enable_lw_shared_from_this effective_replication_map: define factory_key keyspace: get a reference to the erm_factory main: pass erm_factory to storage_service main: pass erm_factory to storage_proxy locator: add effective_replication_map_factory