From db72f432e5eb2ff125567c94bb95cd5b48b32af4 Mon Sep 17 00:00:00 2001 From: Bojan Serafimov Date: Tue, 13 Dec 2022 13:42:53 -0500 Subject: [PATCH] Remove 2/3 clones on search path --- pageserver/src/tenant/bst_layer_map.rs | 5 +---- pageserver/src/tenant/layer_map.rs | 14 ++++++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/pageserver/src/tenant/bst_layer_map.rs b/pageserver/src/tenant/bst_layer_map.rs index fbc79148f7..10fd589520 100644 --- a/pageserver/src/tenant/bst_layer_map.rs +++ b/pageserver/src/tenant/bst_layer_map.rs @@ -369,10 +369,7 @@ impl RetroactiveLayerMap { panic!("rebuild pls") } - match self.map.query(key, lsn) { - Some(layer) => Some(layer.clone()), - None => None, - } + self.map.query(key, lsn) } } diff --git a/pageserver/src/tenant/layer_map.rs b/pageserver/src/tenant/layer_map.rs index 14b6bdb263..d273f8cc80 100644 --- a/pageserver/src/tenant/layer_map.rs +++ b/pageserver/src/tenant/layer_map.rs @@ -274,15 +274,21 @@ impl LayerMap { let latest_image = self.images.query(key.to_i128(), end_lsn.0 - 1); // Check for exact match - if let Some(image) = &latest_image { + let latest_image = if let Some(image) = latest_image { let img_lsn = image.get_lsn_range().start; if Lsn(img_lsn.0 + 1) == end_lsn { return Ok(Some(SearchResult { - layer: Arc::clone(&image), + layer: image, lsn_floor: img_lsn, })); } - } + + // HACK just to give back ownership of latest_image to parent scope. + // There's definitely a cleaner way to do it. + Some(image) + } else { + None + }; return Ok(latest_layer.map(|layer| { // Compute lsn_floor @@ -293,7 +299,7 @@ impl LayerMap { } } SearchResult { - layer: Arc::clone(&layer), + layer, lsn_floor, } }));