block manager: write blocks only to currently active layout version (fix #815)

avoid wastefully writing blocks to nodes that will discard them as soon
as the layout migration is finished
This commit is contained in:
Alex 2025-02-14 16:14:59 +01:00
parent 3fe8db9e52
commit d0104b9f9b
2 changed files with 7 additions and 2 deletions

View file

@ -370,7 +370,7 @@ impl BlockManager {
prevent_compression: bool, prevent_compression: bool,
order_tag: Option<OrderTag>, order_tag: Option<OrderTag>,
) -> Result<(), Error> { ) -> Result<(), Error> {
let who = self.replication.write_sets(&hash); let who = self.system.cluster_layout().current_storage_nodes_of(&hash);
let compression_level = self.compression_level.filter(|_| !prevent_compression); let compression_level = self.compression_level.filter(|_| !prevent_compression);
let (header, bytes) = DataBlock::from_buffer(data, compression_level) let (header, bytes) = DataBlock::from_buffer(data, compression_level)
@ -396,7 +396,7 @@ impl BlockManager {
.rpc_helper() .rpc_helper()
.try_write_many_sets( .try_write_many_sets(
&self.endpoint, &self.endpoint,
who.as_ref(), &[who],
put_block_rpc, put_block_rpc,
RequestStrategy::with_priority(PRIO_NORMAL | PRIO_SECONDARY) RequestStrategy::with_priority(PRIO_NORMAL | PRIO_SECONDARY)
.with_drop_on_completion(permit) .with_drop_on_completion(permit)

View file

@ -219,6 +219,11 @@ impl LayoutHelper {
ret ret
} }
pub fn current_storage_nodes_of(&self, position: &Hash) -> Vec<Uuid> {
let ver = self.current();
ver.nodes_of(position, ver.replication_factor).collect()
}
pub fn trackers_hash(&self) -> Hash { pub fn trackers_hash(&self) -> Hash {
self.trackers_hash self.trackers_hash
} }