mirror of
https://github.com/neondatabase/neon.git
synced 2026-06-05 06:20:37 +00:00
Remove sorting hacks
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user