Debugging replace (which cannot be del+put)
[?]
Feb 11, 2021, 10:50 AM
Q7DRIBBRE4MNG4NP3PVIXAJF5PQYLFWYIVK2O4VVLEO6XY3BOSFQCDependencies
- [2]
T73WR2BXCleaner RC increments for keys and values containing references + more comments in `del` - [3]
MSRWB47YDeletions at immutable leaves weren't really deleting anything - [4]
7P43FPFAWhen deleting in internal nodes, set the correct child - [5]
H3FVSQIQUnsized pages - [6]
QEUTVAZ4Splitting btree::page - [7]
AOX2XQISActually, with the correct functions, Unsized pages are always slower than Sized pages (especially for writing) - [8]
XEU2QVLCDebugging after plugging this into Pijul - [9]
NQBEOCFOTests cleanup - [10]
DV4A2LR7Double-inserts (rebalancing near an internal deletion) - [11]
WS4ZQM4RDebugging, tests, etc. - [12]
S4V4QZ5CDebugging reference-counting for put - [13]
OP6SVMODResetting history - [14]
W26CFMAQImproving safety of cursors - [15]
6UVFCERMFormatting, debugging, etc. - [16]
OTWDDJE7Trait/type cleanup - [17]
6DCQHIFPMinor changes after benchmarking - [18]
LROAI3NBTwo iterators (convenience functions), along with tests to move cursors (put and del still destroy cursors though) - [19]
6DMPXOATMore debugging - [20]
APPY2E7MUnsized deletions + custom sizes back - [21]
G4JEQLLXDebugging synchronisation - [22]
KX3WVNZWTesting/debugging "rebalance causes split of the root" - [23]
OFINGD26implementing prev() on cursors (+ some cleanup) - [24]
7WJNSPEWUsing the same definition of the "occupied" field uniform everywhere - [25]
EAAYH6BQDebugging put - [26]
X3QVVQISMore debugging (del seems to work now) - [27]
UAQX27N4Tests
Change contents
- replacement in sanakirja-core/src/btree/page_unsized.rs at line 76
put::put::<_, _, _, Leaf>(txn, page, mutable, c.cur as usize, k0, v0, k1v1, 0, 0)put::put::<_, _, _, Leaf>(txn,page,mutable,false,c.cur as usize,k0,v0,k1v1,0,0,) - replacement in sanakirja-core/src/btree/page_unsized.rs at line 89
put::put::<_, _, _, Internal>(txn, page, mutable, c.cur as usize, k0, v0, k1v1, l, r)put::put::<_, _, _, Internal>(txn,page,mutable,false,c.cur as usize,k0,v0,k1v1,l,r,) - replacement in sanakirja-core/src/btree/page_unsized.rs at line 115
// We're never in a leaf if we're doing this.let new = Self::del(txn, page, mutable, c, l)?;Self::put(txn, new.0, true, c, k0, v0, k1v1, l, r)assert!(c.cur >= 0);assert!(!c.is_leaf);put::put::<_, _, _, Internal>(txn, page, mutable, true, c.cur as usize, k0, v0, k1v1, l, r) - replacement in sanakirja-core/src/btree/page_unsized.rs at line 159
) -> Result<MutPage, T::Error> {) -> Result<(MutPage, u64), T::Error> { - replacement in sanakirja-core/src/btree/page_unsized.rs at line 171
core::ptr::copy(ptr.offset(1), ptr, n - c.cur as usize);core::ptr::copy(ptr.offset(1), ptr, n - c.cur as usize - 1); - replacement in sanakirja-core/src/btree/page_unsized.rs at line 178
core::ptr::copy(ptr.offset(1), ptr, hdr.n() as usize - c.cur as usize);core::ptr::copy(ptr.offset(1), ptr, hdr.n() as usize - c.cur as usize - 1); - replacement in sanakirja-core/src/btree/page_unsized.rs at line 191
Ok(page)Ok((page, 0)) - replacement in sanakirja-core/src/btree/page_unsized.rs at line 209
let off = (page.data.add(HDR) as *mut u64).offset(n - 1);*off = (l | (u64::from_le(*off) & 0xfff)).to_le();if l > 0 {let off = (new.0.data.add(HDR) as *mut u64).offset(n - 1);*off = (l | (u64::from_le(*off) & 0xfff)).to_le();} else {let hdr = header(page.as_page());let left = hdr.left_page() & !0xfff;*(new.0.data.add(HDR) as *mut u64).offset(-1) = left.to_le();} - replacement in sanakirja-core/src/btree/page_unsized.rs at line 219
Ok(new)Ok((new, page.as_page().offset)) - replacement in sanakirja-core/src/btree/page_unsized.rs at line 288[5.10928]→[5.10928:10975](∅→∅),[5.10975]→[5.650:903](∅→∅),[5.903]→[5.11065:11117](∅→∅),[5.11065]→[5.11065:11117](∅→∅)
return Ok(Op::Put(Put::Ok(Ok {page: Self::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)?,freed: 0,})));let (page, freed) = Self::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)?;return Ok(Op::Put(Put::Ok(Ok { page, freed }))); - replacement in sanakirja-core/src/btree/page_unsized.rs at line 374[5.13595]→[5.13595:13715](∅→∅),[5.13715]→[5.2735:2815](∅→∅),[5.2815]→[5.1888:1917](∅→∅),[5.13792]→[5.1888:1917](∅→∅),[5.1917]→[5.13883:13967](∅→∅),[5.13883]→[5.13883:13967](∅→∅),[5.13967]→[5.1213:1350](∅→∅),[5.1350]→[5.14101:14134](∅→∅),[5.14101]→[5.14101:14134](∅→∅)
unsafe {if c.is_leaf {2 + entry_size::<K, V>(page.data.as_ptr().add(u16::from_le(*(page.data.as_ptr().add(HDR) as *const u16).offset(c.cur),) as usize))} else {8 + entry_size::<K, V>(page.data.as_ptr().add((u64::from_le(*(page.data.as_ptr().add(HDR) as *const u64).offset(c.cur))& 0xfff) as usize,))}if c.is_leaf {Leaf::current_size::<K, V>(page, c.cur)} else {Internal::current_size::<K, V>(page, c.cur) - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 24
let mut new_left = if let Some((k, v)) = m.modified.ins {let new_left = if let Some((k, v)) = m.modified.ins { - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 49
<Page<K, V>>::del(let (page, freed) = <Page<K, V>>::del( - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 55[5.1996]→[5.1996:2007](∅→∅),[5.2007]→[5.24235:24242](∅→∅),[5.24235]→[5.24235:24242](∅→∅),[5.24242]→[5.742:801](∅→∅),[5.4608]→[5.656:789](∅→∅),[5.801]→[5.656:789](∅→∅),[5.656]→[5.656:789](∅→∅)
)?};let lc = PageCursor::after(m.modified.page.as_page());if let Put::Ok(Ok { page, freed }) =<Page<K, V>>::put(txn, new_left.0, true, &lc, m.mid.0, m.mid.1, None, 0, rl)?{)?; - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 57
let b = if header(new_left.0.as_page()).is_dirty() {let b = if header(m.modified.page.as_page()).is_dirty() { - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 64
new_left = pagepage};let lc = PageCursor::after(m.modified.page.as_page());if let Put::Ok(Ok { page, freed }) =<Page<K, V>>::put(txn, new_left.0, true, &lc, m.mid.0, m.mid.1, None, 0, rl)?{assert_eq!(page.0.offset, new_left.0.offset);assert_eq!(freed, 0); - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 76[5.24372]→[5.24372:24432](∅→∅),[5.24432]→[5.2008:2082](∅→∅),[5.2082]→[5.24486:24623](∅→∅),[5.24486]→[5.24486:24623](∅→∅)
let (new_right, k, v): (_, &K, &V) = unsafe {(<Page<K, V>>::del(txn, m.other, m.other_is_mutable, &rc, r)?,core::mem::transmute(k),core::mem::transmute(v),)};if new_right.0.offset != m.other.offset {let (new_right, freed) = <Page<K, V>>::del(txn, m.other, m.other_is_mutable, &rc, r)?;let (k, v): (&K, &V) = unsafe { (core::mem::transmute(k), core::mem::transmute(v)) };if freed > 0 { - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 81
freed_[1] = m.other.offset | bfreed_[1] = freed | b - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 114
let mut new_right = if let Some((k, v)) = m.modified.ins {let new_right = if let Some((k, v)) = m.modified.ins { - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 139
<Page<K, V>>::del(let (page, freed) = <Page<K, V>>::del( - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 145[5.2242]→[5.2242:2253](∅→∅),[5.2253]→[5.26351:26358](∅→∅),[5.26351]→[5.26351:26358](∅→∅),[5.26358]→[5.1468:1509](∅→∅),[5.1509]→[5.26396:26490](∅→∅),[5.26396]→[5.26396:26490](∅→∅)
)?};if let Put::Ok(Ok { page, freed }) =<Page<K, V>>::put(txn, new_right.0, true, &rc, m.mid.0, m.mid.1, None, r0, rl)?{)?; - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 147
let b = if header(new_right.0.as_page()).is_dirty() {let b = if header(m.modified.page.as_page()).is_dirty() { - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 154
new_right = pagepage};if let Put::Ok(Ok { page, freed }) =<Page<K, V>>::put(txn, new_right.0, true, &rc, m.mid.0, m.mid.1, None, r0, rl)?{assert_eq!(new_right.0.offset, page.0.offset);assert_eq!(freed, 0); - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 165
let new_left = <Page<K, V>>::del(txn, m.other, m.other_is_mutable, &lc, 0)?;if new_left.0.offset != m.other.offset {let (new_left, freed) = <Page<K, V>>::del(txn, m.other, m.other_is_mutable, &lc, 0)?;if freed > 0 { - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 169
freed_[1] = m.other.offset | bfreed_[1] = freed | b - edit in sanakirja-core/src/btree/page_unsized/put.rs at line 14
replace: bool, - edit in sanakirja-core/src/btree/page_unsized/put.rs at line 28
let size_replaced = if replace {// We're always in an internal node if we replace.let cur_size = Internal::current_size::<K, V>(page.as_page(), u as isize);size as isize - cur_size as isize} else {size as isize}; - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 40
let mut page = unsafe { core::mem::transmute(page) };let mut page = MutPage(page); - edit in sanakirja-core/src/btree/page_unsized/put.rs at line 42
if replace {assert!(!hdr.is_leaf());unsafe {let p = page.0.data;let ptr = p.add(HDR + n as usize * 8) as *mut u64;let off = (u64::from_le(*ptr) & 0xfff) as usize;let kv_ptr = p.add(off);let size = entry_size::<K, V>(kv_ptr);core::ptr::copy(ptr.offset(1), ptr, hdr.n() as usize - n as usize - 1);header_mut(&mut page).decr(size)}} - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 61
} else if L::can_compact(hdr, size) {} else if L::can_compact(hdr, size_replaced) { - edit in sanakirja-core/src/btree/page_unsized/put.rs at line 68
let s1 = if replace { s1.split_at(1).1 } else { s1 }; - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 86
return split_unsized::<_, _, _, L>(txn, page.as_page(), u, k0, v0, k1v1, l, r);return split_unsized::<_, _, _, L>(txn, page.as_page(), replace, u, k0, v0, k1v1, l, r); - edit in sanakirja-core/src/btree/page_unsized/put.rs at line 99
replace: bool, - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 140
if replace {continue;} - edit in sanakirja-core/src/btree/page_unsized/alloc.rs at line 6
fn current_size<K: Representable + ?Sized, V: Representable + ?Sized>(page: crate::Page,cur: isize,) -> usize; - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 11
fn can_compact(hdr: &Header, size: usize) -> bool;fn can_compact(hdr: &Header, size: isize) -> bool; - edit in sanakirja-core/src/btree/page_unsized/alloc.rs at line 68
fn current_size<K: Representable + ?Sized, V: Representable + ?Sized>(page: crate::Page,cur: isize,) -> usize {unsafe {2 + entry_size::<K, V>(page.data.as_ptr().add(u16::from_le(*(page.data.as_ptr().add(HDR) as *const u16).offset(cur),) as usize))}} - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 89
fn can_compact(hdr: &Header, size: usize) -> bool {fn can_compact(hdr: &Header, size: isize) -> bool { - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 96
(HDR as usize) + (hdr.n() as usize) * 2 + ((hdr.left_page() & 0xfff) as usize) + 2 + size<= PAGE_SIZE(HDR as isize) + (hdr.n() as isize) * 2 + ((hdr.left_page() & 0xfff) as isize) + 2 + size<= PAGE_SIZE as isize - edit in sanakirja-core/src/btree/page_unsized/alloc.rs at line 192
}fn current_size<K: Representable + ?Sized, V: Representable + ?Sized>(page: crate::Page,cur: isize,) -> usize {unsafe {8 + entry_size::<K, V>(page.data.as_ptr().add((u64::from_le(*(page.data.as_ptr().add(HDR) as *const u64).offset(cur)) & 0xfff)as usize,))} - edit in sanakirja-core/src/btree/page_unsized/alloc.rs at line 204
- replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 215
fn can_compact(hdr: &Header, size: usize) -> bool {fn can_compact(hdr: &Header, size: isize) -> bool { - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 222
(HDR as usize) + (hdr.n() as usize) * 8 + ((hdr.left_page() & 0xfff) as usize) + 8 + size<= PAGE_SIZE(HDR as isize) + (hdr.n() as isize) * 8 + ((hdr.left_page() & 0xfff) as isize) + 8 + size<= PAGE_SIZE as isize - replacement in sanakirja-core/src/btree/page.rs at line 93
put::put::<_, _, _, Leaf>(txn, page, mutable, c.cur as usize, k0, v0, k1v1, 0, 0)put::put::<_, _, _, Leaf>(txn,page,mutable,false,c.cur as usize,k0,v0,k1v1,0,0,) - replacement in sanakirja-core/src/btree/page.rs at line 106
put::put::<_, _, _, Internal>(txn, page, mutable, c.cur as usize, k0, v0, k1v1, l, r)put::put::<_, _, _, Internal>(txn,page,mutable,false,c.cur as usize,k0,v0,k1v1,l,r,) - replacement in sanakirja-core/src/btree/page.rs at line 132
// We're never in a leaf if we're doing this.let new = Self::del(txn, page, mutable, c, l)?;Self::put(txn, new.0, true, c, k0, v0, k1v1, l, r)if r == 0 {put::put::<_, _, _, Leaf>(txn, page, mutable, true, c.cur as usize, k0, v0, k1v1, 0, 0)} else {put::put::<_, _, _, Internal>(txn,page,mutable,true,c.cur as usize,k0,v0,k1v1,l,r,)} - replacement in sanakirja-core/src/btree/page.rs at line 188
) -> Result<MutPage, T::Error> {) -> Result<(MutPage, u64), T::Error> { - replacement in sanakirja-core/src/btree/page.rs at line 206
core::ptr::copy(ptr.offset(1), ptr, hdr.n() as usize - c.cur as usize);core::ptr::copy(ptr.offset(1), ptr, hdr.n() as usize - c.cur as usize - 1); - replacement in sanakirja-core/src/btree/page.rs at line 219
Ok(page)Ok((page, 0)) - edit in sanakirja-core/src/btree/page.rs at line 226
debug!("s = {:?}", s); - edit in sanakirja-core/src/btree/page.rs at line 229
debug!("leaf s0 {:?} s1 {:?}", s0, s1); - edit in sanakirja-core/src/btree/page.rs at line 235
debug!("s = {:?}", s); - edit in sanakirja-core/src/btree/page.rs at line 238
debug!("internal s0 {:?} s1 {:?}", s0, s1); - replacement in sanakirja-core/src/btree/page.rs at line 241[5.4978]→[5.15423:15501](∅→∅),[5.2460]→[5.15423:15501](∅→∅),[5.15423]→[5.15423:15501](∅→∅),[5.15501]→[4.72:143](∅→∅)
let off = (page.data.add(HDR) as *mut u64).offset(n - 1);*off = (l | (u64::from_le(*off) & 0xfff)).to_le();debug!("offset {:?}", n);if l > 0 {let off = (new.0.data.add(HDR) as *mut u64).offset(n - 1);*off = (l | (u64::from_le(*off) & 0xfff)).to_le();debug!("set offset {:?} {:?}", *off, l);} else {let hdr = header(page.as_page());let left = hdr.left_page() & !0xfff;*(new.0.data.add(HDR) as *mut u64).offset(-1) = left.to_le();} - replacement in sanakirja-core/src/btree/page.rs at line 253
Ok(new)Ok((new, page.offset)) - replacement in sanakirja-core/src/btree/page.rs at line 321[5.6309]→[5.3693:3740](∅→∅),[5.3740]→[5.3483:3736](∅→∅),[5.3736]→[5.6428:6458](∅→∅),[5.6428]→[5.6428:6458](∅→∅),[5.6458]→[5.3741:3763](∅→∅)
return Ok(Op::Put(Put::Ok(Ok {page: Self::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)?,freed: 0,})));let (page, freed) = Self::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)?;return Ok(Op::Put(Put::Ok(Ok { page, freed }))); - edit in sanakirja-core/src/btree/page.rs at line 380
debug!("current {:?}", off); - edit in sanakirja-core/src/btree/page.rs at line 382
debug!("k {:?}", K::from_raw_ptr(txn, k as *const u8)); - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 48
<Page<K, V>>::del(let (page, freed) = <Page<K, V>>::del( - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 54
)?)?;if freed > 0 {let b = if header(m.modified.page.as_page()).is_dirty() {1} else {0};freed_[0] = freed | b}page - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 112[5.47398]→[5.47398:47415](∅→∅),[5.47415]→[5.3292:3306](∅→∅),[5.3292]→[5.3292:3306](∅→∅),[5.3306]→[5.4691:4769](∅→∅),[5.4769]→[5.3364:3460](∅→∅),[5.3364]→[5.3364:3460](∅→∅)
unsafe {(<Page<K, V>>::del(txn, m.other, m.other_is_mutable, &rc, r)?,core::mem::transmute(k),core::mem::transmute(v),)let (page, freed) = <Page<K, V>>::del(txn, m.other, m.other_is_mutable, &rc, r)?;if freed > 0 {let hdr = &*header(m.other.as_page());let b = if hdr.is_dirty() { 1 } else { 0 };freed_[1] = freed | b; - edit in sanakirja-core/src/btree/page/rebalance.rs at line 118
unsafe { (page, core::mem::transmute(k), core::mem::transmute(v)) } - edit in sanakirja-core/src/btree/page/rebalance.rs at line 120[5.3478]→[5.3478:3623](∅→∅),[5.3623]→[5.2799:2838](∅→∅),[5.2838]→[5.3661:3667](∅→∅),[5.3661]→[5.3661:3667](∅→∅)
if new_right.0.offset != m.other.offset {let hdr = &*header(m.other.as_page());let b = if hdr.is_dirty() { 1 } else { 0 };freed_[1] = m.other.offset | b} - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 151
let mut new_right = if let Some((k, v)) = m.modified.ins {let new_right = if let Some((k, v)) = m.modified.ins { - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 174
<Page<K, V>>::del(let (page, freed) = <Page<K, V>>::del( - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 180[5.4929]→[5.4929:4940](∅→∅),[5.4940]→[5.5257:5264](∅→∅),[5.5257]→[5.5257:5264](∅→∅),[5.5264]→[5.3140:3181](∅→∅),[5.3181]→[5.5302:5396](∅→∅),[5.5302]→[5.5302:5396](∅→∅)
)?};if let Put::Ok(Ok { page, freed }) =<Page<K, V>>::put(txn, new_right.0, true, &rc, m.mid.0, m.mid.1, None, r0, rl)?{)?; - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 182
let b = if header(new_right.0.as_page()).is_dirty() {let b = if header(m.modified.page.as_page()).is_dirty() { - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 189
new_right = pagepage};if let Put::Ok(Ok { page, freed }) =<Page<K, V>>::put(txn, new_right.0, true, &rc, m.mid.0, m.mid.1, None, r0, rl)?{assert_eq!(freed, 0);assert_eq!(new_right.0.offset, page.0.offset); - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 200
let new_left = <Page<K, V>>::del(txn, m.other, m.other_is_mutable, &lc, 0)?;if new_left.0.offset != m.other.offset {let (new_left, freed) = <Page<K, V>>::del(txn, m.other, m.other_is_mutable, &lc, 0)?;if freed > 0 { - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 204
freed_[1] = m.other.offset | bfreed_[1] = freed | b - edit in sanakirja-core/src/btree/page/put.rs at line 13
replace: bool, - replacement in sanakirja-core/src/btree/page/put.rs at line 30
let mut page = unsafe { core::mem::transmute(page) };let mut page = MutPage(page); - edit in sanakirja-core/src/btree/page/put.rs at line 32
if replace {assert!(!hdr.is_leaf());unsafe {let p = page.0.data;let ptr = p.add(HDR + n as usize * 8) as *mut u64;let off = (u64::from_le(*ptr) & 0xfff) as usize;let kv_ptr = p.add(off);let size = entry_size::<K, V>(kv_ptr);core::ptr::copy(ptr.offset(1), ptr, hdr.n() as usize - n as usize - 1);let hdr = header_mut(&mut page);hdr.decr(size);hdr.set_n(hdr.n() - 1);}} - edit in sanakirja-core/src/btree/page/put.rs at line 60
let s1 = if replace { s1.split_at(1).1 } else { s1 }; - edit in sanakirja-core/src/btree/page/put.rs at line 63
debug!("alloc: {:?} {:?} {:?}", l, r, n); - edit in sanakirja-core/src/btree/page/put.rs at line 70
debug!("alloc: {:?}", new);debug!("alloc: {:?}", header(new.0.as_page()).left_page()); - replacement in sanakirja-core/src/btree/page/put.rs at line 73
let b0 = if is_dirty { 1 } else { 0 };return Ok(Put::Ok(Ok {Ok(Put::Ok(Ok { - replacement in sanakirja-core/src/btree/page/put.rs at line 75
freed: page.offset | b0,}));freed: if is_dirty {page.offset | 1} else {page.offset},})) - replacement in sanakirja-core/src/btree/page/put.rs at line 84
return split::<_, _, _, L>(txn, page, mutable, s, u, k0, v0, l, r);split::<_, _, _, L>(txn, page, mutable, s, u, k0, v0, l, r) - edit in sanakirja-core/src/btree/page/alloc.rs at line 192
debug!("can_alloc {:?}", hdr.data()); - replacement in sanakirja-core/src/btree/mod.rs at line 125
BTreePage<K, V>BTreePage<K, V> + core::fmt::Debug - replacement in sanakirja-core/src/btree/mod.rs at line 160
) -> Result<MutPage, T::Error>;) -> Result<(MutPage, u64), T::Error>; - edit in sanakirja-core/src/btree/mod.rs at line 183
debug!("modify: {:?}", m); - replacement in sanakirja-core/src/btree/mod.rs at line 192
let page = Self::del(txn, m.page, m.mutable, &m.c1, m.l)?;Ok(Put::Ok(Ok {freed: if page.0.offset != m.page.offset {m.page.offset} else {0},page,}))let (page, freed) = Self::del(txn, m.page, m.mutable, &m.c1, m.l)?;Ok(Put::Ok(Ok { freed, page })) - replacement in sanakirja-core/src/btree/del.rs at line 122
debug!("freeing at level {:?}: {:?}", n, p);if p[0] > 0 || p[1] > 0 {debug!("freeing at level {:?}: {:?}", n, p);} - edit in sanakirja-core/src/btree/del.rs at line 136
debug!("/del"); - replacement in sanakirja-core/src/btree/del.rs at line 539
let page = P::del(txn, last_op.page, last_op.mutable, &last_op.c1, d)?;if page.0.offset != last_op.page.offset && !is_rc {let (page, freed) = P::del(txn, last_op.page, last_op.mutable, &last_op.c1, d)?;if freed > 0 { - replacement in sanakirja-core/src/btree/del.rs at line 542
txn.decr_rc_owned(last_op.page.offset)?;txn.decr_rc_owned(freed)?; - replacement in sanakirja-core/src/btree/del.rs at line 544
txn.decr_rc(last_op.page.offset)?;txn.decr_rc(freed)?; - edit in sanakirja/src/tests.rs at line 165
let mut values = Vec::with_capacity(n as usize);for i in 0..n {put(&mut txn, &mut db, &i, &i).unwrap();if i != i0 {values.push(i);}}let db2 = fork_db(&mut txn, &db).unwrap();del(&mut txn, &mut db, &i0, None).unwrap();assert_eq!(btree::iter(&txn, &db, None).unwrap().map(|kv| *kv.unwrap().0).collect::<Vec<_>>(),values);}#[test]pub fn del_internal() {env_logger::try_init().unwrap_or(());let env = Env::new_anon(409600000, 1).unwrap();let mut txn = Env::mut_txn_begin(&env).unwrap();let mut db: Db<u64, u64> = create_db(&mut txn).unwrap();let n = 300 as u64;let i0 = 127 as u64; - edit in sanakirja/src/tests.rs at line 199
crate::debug::debug(&txn, &[&db], "debug", true);debug!("==============="); - edit in sanakirja/src/tests.rs at line 202
let db3: Db<u64, u64> = Db {db: 20480,k: std::marker::PhantomData,v: std::marker::PhantomData,p: std::marker::PhantomData,};crate::debug::debug(&txn, &[&db, &db2, &db3], "debug2", true); - replacement in sanakirja/src/tests.rs at line 221
pub fn fork() {pub fn fork_test() { - edit in sanakirja/src/tests.rs at line 275
crate::debug::debug(&txn, &[&db, &db2], &format!("debug-{}", i), true);debug!("deleting {:?}", i); - edit in sanakirja/src/tests.rs at line 279
crate::debug::debug(&txn, &[&db, &db2], "debug2", true);