mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-03 13:37:04 +00:00
Today, the SSTable generation provides a hint on which shard owns a particular SSTable. That hint determines which shard will load the SSTable into memory. With upcoming UUID generation, we will no longer have this hint embedded into the SSTable generation, meaning that SSTables will be loaded at random shards. This is not good because shards will have to reference memory from other shards to access the SSTable metadata that was allocated elsewhere. This patch changes sstable_directory to: 1) Use generation value to only determine which shard will calculate the owner shards for SSTables. Essentially works like a round-robin distribution. 2) The shard assigned to compute the owners for a SSTable will do so reading the minimum from disk, usually only Scylla file is needed. 3) Once that shard finished computing the owners, it will forward the SSTable to the shard that own it. 4) Shards will later load SSTables locally that were forwarded to them. Closes #13114 * github.com:scylladb/scylladb: sstables: sstable_directory: Load SSTable at the shard that actually own it sstables: sstable_directory: Give sstable_info_vector a more descriptive name sstables: Allow owner shards to be computed for a partially loaded SSTable sstables: Move SSTable loading to sstable_directory::sort_sstable() sstables: Move sstable_directory::sort_sstable() to private interface sstables: Restore indentation in sstable_directory::sort_sstable() sstables: Coroutinize sstable_directory::sort_sstable() sstables: sstable_directory: Extract sstable loading from process_descriptor() sstables: sstable_directory: Separate private fields from methods sstables: Coroutinize sstable_directory::process_descriptor