mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-08 16:03:20 +00:00
Replication is a mix of several inputs: tokens and token->node mappings (topology), the replication strategy, replication strategy parameters. These are all captured in effective_replication_map. However, if we use effective_replication_map:s captured at different times in a single query, then different uses may see different inputs to effective_replication_map. This series protects against that by capturing an effective_replication_map just once in a query, and then using it. Furthermore, the captured effective_replication_map is held until the query completes, so topology code can know when a topology is no longer is use (although this isn't exploited in this series). Only the simple read and write paths are covered. Counters and paxos are left for later. I don't think the series fixes any bugs - as far as I could tell everything was happening in the same continuation. But this series ensures it. Closes #11259 * github.com:scylladb/scylladb: storage_proxy: use consistent topology storage_proxy: use consistent replication map on read path storage_proxy: use consistent replication map on write path storage_proxy: convert get_live{,_sorted}_endpoints() to accept an effective_replication_map consistency_level: accept effective_replication_map as parameter, rather than keyspace consistency_level: be more const when using replication_strategy