Rebalance: put can free pages without splitting (compaction)
[?]
Feb 23, 2021, 8:21 PM
PPI5ZTZP2GMKTCFQWF2SXIT6VNOY5U7PJSMX4ZR34DLMYG3GSSFQCDependencies
- [2]
L5CVF6UJDebugging - [3]
Q7DRIBBRDebugging replace (which cannot be del+put) - [4]
QEUTVAZ4Splitting btree::page - [5]
H3FVSQIQUnsized pages - [6]
KX3WVNZWTesting/debugging "rebalance causes split of the root"
Change contents
- replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 58
assert_eq!(freed, 0);if freed > 0 {let b = if is_dirty { 1 } else { 0 };freed_[0] = freed | b;} - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 86
assert_eq!(freed, 0);if freed > 0 {let b = if is_dirty { 1 } else { 0 };freed_[0] = freed | b;} - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 56
assert_eq!(freed, 0);if freed > 0 {let b = if is_dirty { 1 } else { 0 };// index 0 is ok here: if a page is freed, it means we// just compacted a page, which implies that the call// to `put` above didn't free.freed_[0] = freed | b} - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 87
assert_eq!(freed, 0);if freed > 0 {let b = if is_dirty { 1 } else { 0 };// index 0 is ok here: if we freed a page in the call// to `del` above, it is mutable and we can allocate// on it. Else, we just compacted a page, but that// also means `del` above didn't free.freed_[0] = freed | b} - edit in sanakirja-core/src/btree/page/rebalance.rs at line 106
debug!("freed {:?} {:?}", line!(), freed);