Remove sorting hacks

This commit is contained in:
Bojan Serafimov
2022-12-12 10:18:01 -05:00
parent 206ddec636
commit c9b1655885
2 changed files with 19 additions and 18 deletions

View File

@@ -1,7 +1,7 @@
use anyhow::Result;
use num_traits::ToPrimitive;
use pageserver::repository::{Key, Value};
use pageserver::tenant::bst_layer_map::PersistentLayerMap;
use pageserver::tenant::bst_layer_map::RetroactiveLayerMap;
use pageserver::tenant::filename::{DeltaFileName, ImageFileName};
use pageserver::tenant::layer_map::LayerMap;
use pageserver::tenant::storage_layer::Layer;
@@ -254,12 +254,8 @@ fn bench_from_real_project(c: &mut Criterion) {
// Init bst layer map with the same layers
let now = Instant::now();
let mut bstlm = PersistentLayerMap::new();
let mut sorted_layers: Vec<_> = layer_map.iter_historic_layers().collect();
sorted_layers.sort_by(|a, b| a.get_lsn_range().start.cmp(&b.get_lsn_range().start));
// TODO implement out of order inserts
for layer in sorted_layers {
let mut bstlm = RetroactiveLayerMap::new();
for layer in layer_map.iter_historic_layers() {
let kr = layer.get_key_range();
let lr = layer.get_lsn_range();
@@ -269,6 +265,7 @@ fn bench_from_real_project(c: &mut Criterion) {
format!("Layer {}", lr.start.0),
);
}
bstlm.rebuild();
println!("Finished bst init in {:?}", now.elapsed());
// Choose uniformly distributed queries
@@ -317,11 +314,8 @@ fn bench_sequential(c: &mut Criterion) {
// Init bst layer map with the same layers
let now = Instant::now();
let mut bstlm = PersistentLayerMap::new();
let mut sorted_layers: Vec<_> = layer_map.iter_historic_layers().collect();
sorted_layers.sort_by(|a, b| a.get_lsn_range().start.cmp(&b.get_lsn_range().start));
// TODO implement out of order inserts
for layer in sorted_layers {
let mut bstlm = RetroactiveLayerMap::new();
for layer in layer_map.iter_historic_layers() {
let kr = layer.get_key_range();
let lr = layer.get_lsn_range();

View File

@@ -1,6 +1,6 @@
use std::collections::BTreeMap;
use std::sync::Arc;
use std::ops::Range;
use std::sync::Arc;
// TODO the `im` crate has 20x more downloads and also has
// persistent/immutable BTree. See if it's better.
@@ -100,7 +100,8 @@ impl<Value: Clone> PersistentLayerMap<Value> {
to_remove.push(key.end);
}
for k in to_update {
self.head.insert_mut(k.clone(), Some((lsn.end.clone(), value.clone())));
self.head
.insert_mut(k.clone(), Some((lsn.end.clone(), value.clone())));
}
for k in to_remove {
self.head.remove_mut(&k);
@@ -114,7 +115,13 @@ impl<Value: Clone> PersistentLayerMap<Value> {
// TODO check for off-by-one errors
let version = self.historic.range(0..=lsn).rev().next()?.1;
version.range(0..=key).rev().next()?.1.as_ref().map(|(_, v)| v.clone())
version
.range(0..=key)
.rev()
.next()?
.1
.as_ref()
.map(|(_, v)| v.clone())
}
pub fn trim(self: &mut Self, begin: &u64) {
@@ -295,10 +302,10 @@ impl<Value: Clone> RetroactiveLayerMap<Value> {
// Rebuild
self.map.trim(&rebuild_since);
for (lsn, layers) in self.layers.range(rebuild_since..) {
for (key, lsn, value) in layers {
for (_start_lsn, layers) in self.layers.range(rebuild_since..) {
for (key, end_lsn, value) in layers {
let wrapped = Arc::new(vec![value.clone()]);
self.map.insert(key.clone(), lsn.clone(), wrapped);
self.map.insert(key.clone(), end_lsn.clone(), wrapped);
}
}
}