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:
parent
3fe8db9e52
commit
d0104b9f9b
2 changed files with 7 additions and 2 deletions
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue