Merge 'Remove unnecessary balance code that crashes' from Pere Diaz Bou

Closes #1223
This commit is contained in:
Pekka Enberg
2025-04-01 17:31:23 +03:00
2 changed files with 7 additions and 16 deletions

View File

@@ -1513,7 +1513,6 @@ impl BTreeCursor {
}
// calculate how many pages to allocate
let mut new_page_sizes = Vec::new();
let mut k = 0;
let leaf_correction = if leaf { 4 } else { 0 };
// number of bytes beyond header, different from global usableSapce which inccludes
// header
@@ -1526,23 +1525,12 @@ impl BTreeCursor {
let page_contents = page.get_contents();
let free_space = compute_free_space(page_contents, self.usable_space() as u16);
// If we have an empty page of cells, we ignore it
if k > 0
&& cell_array.number_of_cells_per_page[k - 1]
== cell_array.number_of_cells_per_page[k]
{
k -= 1;
}
if !leaf_data {
k += 1;
}
new_page_sizes.push(usable_space as u16 - free_space);
for overflow in &page_contents.overflow_cells {
let size = new_page_sizes.last_mut().unwrap();
// 2 to account of pointer
*size += 2 + overflow.payload.len() as u16;
}
k += 1;
}
// Try to pack as many cells to the left
@@ -4142,6 +4130,9 @@ mod tests {
OwnedValue::Blob(vec![0; size]),
)]);
run_until_done(|| cursor.insert(&key, &value, true), pager.deref()).unwrap();
if matches!(validate_btree(pager.clone(), root_page), (_, false)) {
panic!("invalid btree");
}
}
tracing::info!(
"=========== btree ===========\n{}\n\n",

View File

@@ -1,6 +1,6 @@
use std::{cell::RefCell, collections::HashMap, ptr::NonNull};
use tracing::debug;
use tracing::{debug, trace};
use super::pager::PageRef;
@@ -61,7 +61,7 @@ impl DumbLruPageCache {
pub fn insert(&mut self, key: PageCacheKey, value: PageRef) {
self._delete(key.clone(), false);
debug!("cache_insert(key={:?})", key);
trace!("cache_insert(key={:?})", key);
let entry = Box::new(PageCacheEntry {
key: key.clone(),
next: None,
@@ -79,7 +79,7 @@ impl DumbLruPageCache {
}
pub fn delete(&mut self, key: PageCacheKey) {
debug!("cache_delete(key={:?})", key);
trace!("cache_delete(key={:?})", key);
self._delete(key, true)
}
@@ -105,7 +105,7 @@ impl DumbLruPageCache {
/// Get page without promoting entry
pub fn peek(&mut self, key: &PageCacheKey, touch: bool) -> Option<PageRef> {
debug!("cache_get(key={:?})", key);
trace!("cache_get(key={:?})", key);
let mut ptr = self.get_ptr(key)?;
let page = unsafe { ptr.as_mut().page.clone() };
if touch {