From bc1fd39a8dc6f8c7c99b8524c1be85b7b92b0071 Mon Sep 17 00:00:00 2001 From: krishvishal Date: Thu, 20 Mar 2025 10:47:41 +0530 Subject: [PATCH] Add `self.stack.retreat()` when balancing is not needed. Fixes: https://github.com/tursodatabase/limbo/issues/1019 --- core/storage/btree.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/core/storage/btree.rs b/core/storage/btree.rs index f9c37b14e..c5107fb63 100644 --- a/core/storage/btree.rs +++ b/core/storage/btree.rs @@ -1885,7 +1885,22 @@ impl BTreeCursor { drop_cell(contents, cell_idx, self.usable_space() as u16)?; } - // TODO(Krishna): Implement balance after delete. I will implement after balance_nonroot is extended. + let page = self.stack.top(); + return_if_locked!(page); + + if !page.is_loaded() { + self.pager.load_page(page.clone())?; + return Ok(CursorResult::IO); + } + + let contents = page.get().contents.as_ref().unwrap(); + let free_space = compute_free_space(contents, self.usable_space() as u16); + if free_space as usize * 3 > self.usable_space() * 2 { + //need balancing + } else { + self.stack.retreat(); + return Ok(CursorResult::Ok(())); + } Ok(CursorResult::Ok(())) }