Debugging after plugging this into Pijul
[?]
Feb 9, 2021, 8:13 PM
XEU2QVLCHPYOOD4TQIPEEVYOVSFMKFPLJYWEJYXYJAZ7S54KWDZACDependencies
- [2]
SO25TWFLA few features for integrating it into Pijul - [3]
LROAI3NBTwo iterators (convenience functions), along with tests to move cursors (put and del still destroy cursors though) - [4]
DV4A2LR7Double-inserts (rebalancing near an internal deletion) - [5]
7WJNSPEWUsing the same definition of the "occupied" field uniform everywhere - [6]
6DMPXOATMore debugging - [7]
WS4ZQM4RDebugging, tests, etc. - [8]
EHJFNMB2Debugging - [9]
OTWDDJE7Trait/type cleanup - [10]
EAAYH6BQDebugging put - [11]
H3FVSQIQUnsized pages - [12]
OP6SVMODResetting history - [13]
KM3JAFGPAdding a test for next/prev - [14]
YWFYZNLZCleanup + inter-process concurrency - [15]
UUUVNC4DDebugging/cleanup around cursors - [16]
S4V4QZ5CDebugging reference-counting for put - [17]
YXKP4AIWNew file locks, with multiple sets of free pages - [18]
OFINGD26implementing prev() on cursors (+ some cleanup) - [19]
W26CFMAQImproving safety of cursors - [20]
6UVFCERMFormatting, debugging, etc. - [21]
KMT3MF5NDrop a database - [22]
G4JEQLLXDebugging synchronisation - [23]
X3QVVQISMore debugging (del seems to work now) - [24]
QEUTVAZ4Splitting btree::page - [25]
KX3WVNZWTesting/debugging "rebalance causes split of the root" - [26]
AOX2XQISActually, with the correct functions, Unsized pages are always slower than Sized pages (especially for writing) - [27]
6DCQHIFPMinor changes after benchmarking - [28]
NQBEOCFOTests cleanup - [29]
UAQX27N4Tests - [30]
PXF3R6SVImproving test coverage for btree::cursor
Change contents
- edit in sanakirja-core/src/lib.rs at line 3
pub const PAGE_SIZE: usize = 4096; - replacement in sanakirja-core/src/lib.rs at line 13
fn compare<T>(&self, txn: &T, b: &Self) -> core::cmp::Ordering;fn compare<T: LoadPage>(&self, txn: &T, b: &Self) -> core::cmp::Ordering; - replacement in sanakirja-core/src/lib.rs at line 23
unsafe fn from_raw_ptr<'a, T>(txn: &T, p: *const u8) -> &'a Self;unsafe fn from_raw_ptr<'a, T: LoadPage>(txn: &T, p: *const u8) -> &'a Self; - replacement in sanakirja-core/src/lib.rs at line 94
unsafe fn read<T, K: Representable + ?Sized, V: Representable + ?Sized>(unsafe fn read<T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>( - edit in sanakirja-core/src/lib.rs at line 129
const PAGE_SIZE: usize = 4096; - edit in sanakirja-core/src/lib.rs at line 147
/// The layout of pages is as follows: the LSB of the first byte is/// "dirty". - replacement in sanakirja-core/src/lib.rs at line 154
unsafe {let d = *self.0.data.offset(8);*self.0.data.offset(8) = d & (!1)}unsafe { *self.0.data &= 0xfe } - edit in sanakirja-core/src/btree/put.rs at line 47
debug!("free = {:?}", free); - edit in sanakirja-core/src/btree/page_unsized.rs at line 8
pub(in super::super) mod header; - replacement in sanakirja-core/src/btree/page_unsized.rs at line 10
use super::page::header::{header, header_mut, HDR};use header::*; - edit in sanakirja-core/src/btree/page_unsized.rs at line 13
const PAGE_SIZE: usize = 4096; - replacement in sanakirja-core/src/btree/page_unsized.rs at line 94
let new = Self::del(txn, page, c, l)?;Self::put(txn, new.0, mutable, c, k0, v0, k1v1, l, r)let new = Self::del(txn, page, mutable, c, l)?;Self::put(txn, new.0, true, c, k0, v0, k1v1, l, r) - edit in sanakirja-core/src/btree/page_unsized.rs at line 134
mutable: bool, - replacement in sanakirja-core/src/btree/page_unsized.rs at line 139
if Self::is_dirty(page.as_page()) {if mutable && Self::is_dirty(page.as_page()) { - replacement in sanakirja-core/src/btree/page_unsized.rs at line 259
page: Self::del(txn, m.modified.page, &m.modified.c1, m.modified.l)?,page: Self::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)?, - replacement in sanakirja-core/src/btree/page_unsized.rs at line 314
let off ={ u16::from_le(*(page.data.as_ptr().add(HDR + c.cur as usize * 2) as *const u16)) as usize };let off = {u16::from_le(*(page.data.as_ptr().add(HDR + c.cur as usize * 2) as *const u16))as usize}; - replacement in sanakirja-core/src/btree/page_unsized.rs at line 341
(u64::from_le(*(page.data.as_ptr().add(HDR + c.cur as usize * 8) as *const u64)) & 0xfff)as usize(u64::from_le(*(page.data.as_ptr().add(HDR + c.cur as usize * 8) as *const u64))& 0xfff) as usize - replacement in sanakirja-core/src/btree/page_unsized.rs at line 353
(u64::from_le(*(page.data.as_ptr().add(HDR) as *const u64).offset(c.cur)) & 0xfff)as usize,(u64::from_le(*(page.data.as_ptr().add(HDR) as *const u64).offset(c.cur))& 0xfff) as usize, - replacement in sanakirja-core/src/btree/page_unsized.rs at line 381
let off = unsafe { *(page.data.as_ptr().add((HDR + c.cur as usize * 8) - 8) as *const u64) };let off =unsafe { *(page.data.as_ptr().add((HDR + c.cur as usize * 8) - 8) as *const u64) }; - replacement in sanakirja-core/src/btree/page_unsized.rs at line 446
unsafe fn lookup<T, K: Representable + ?Sized, V: Representable + ?Sized>(unsafe fn lookup<T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>( - replacement in sanakirja-core/src/btree/page_unsized.rs at line 513
pub(in super) cur: isize,pub(in super) total: usize,pub(in super) is_leaf: bool,pub(super) cur: isize,pub(super) total: usize,pub(super) is_leaf: bool, - replacement in sanakirja-core/src/btree/page_unsized.rs at line 519
pub(in super) fn new(p: crate::Page, cur: isize) -> Self {pub(super) fn new(p: crate::Page, cur: isize) -> Self { - replacement in sanakirja-core/src/btree/page_unsized.rs at line 528
pub(in super) fn after(p: crate::Page) -> Self {pub(super) fn after(p: crate::Page) -> Self { - replacement in sanakirja-core/src/btree/page_unsized.rs at line 537
pub(in super) fn last(p: crate::Page) -> Self {pub(super) fn last(p: crate::Page) -> Self { - edit in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 1
use super::header::header; - edit in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 3
use crate::btree::page::header::header; - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 49
<Page<K, V>>::del(txn, m.modified.page, &m.modified.c1, m.modified.l)?<Page<K, V>>::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)? - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 76
<Page<K, V>>::del(txn, m.other, &rc, r)?,<Page<K, V>>::del(txn, m.other, m.other_is_mutable, &rc, r)?, - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 141
<Page<K, V>>::del(txn, m.modified.page, &m.modified.c1, m.modified.l)?<Page<K, V>>::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)? - replacement in sanakirja-core/src/btree/page_unsized/rebalance.rs at line 165
let new_left = <Page<K, V>>::del(txn, m.other, &lc, 0)?;let new_left = <Page<K, V>>::del(txn, m.other, m.other_is_mutable, &lc, 0)?; - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 1
use super::super::page::header::{header, header_mut, HDR};use super::header::{header, header_mut, HDR}; - replacement in sanakirja-core/src/btree/page_unsized/put.rs at line 51
alloc::<_, _, L>(&mut new, k0, v0, 0, 0, &mut n);alloc::<_, _, L>(&mut new, k1, v1, l, r, &mut n);alloc::<_, _, L>(&mut new, k0, v0, 0, l, &mut n);alloc::<_, _, L>(&mut new, k1, v1, 0, r, &mut n); - file move: header.rs → header.rs
- edit in sanakirja-core/src/btree/page_unsized/header.rs at line 1
use crate::PAGE_SIZE; - edit in sanakirja-core/src/btree/page_unsized/header.rs at line 6
data: u16, - edit in sanakirja-core/src/btree/page_unsized/header.rs at line 8
data: u16, - replacement in sanakirja-core/src/btree/page_unsized/header.rs at line 14
self.n = (1u16).to_le(); // dirty pageself.data = 4096_u16.to_le();self.data = (((PAGE_SIZE as u16) << 1) | 1).to_le();self.n = 0; - replacement in sanakirja-core/src/btree/page_unsized/header.rs at line 21
u16::from_le(self.n) >> 4u16::from_le(self.n) - replacement in sanakirja-core/src/btree/page_unsized/header.rs at line 25
let dirty = u16::from_le(self.n) & 1;self.n = ((n << 4) | dirty).to_le()self.n = n.to_le(); - replacement in sanakirja-core/src/btree/page_unsized/header.rs at line 29
u16::from_le(self.n) & 1 != 0u16::from_le(self.data) & 1 != 0 - replacement in sanakirja-core/src/btree/page_unsized/header.rs at line 41
u16::from_le(self.data)u16::from_le(self.data) >> 1 - replacement in sanakirja-core/src/btree/page_unsized/header.rs at line 45
self.data = d.to_le()let dirty = u16::from_le(self.data) & 1;self.data = ((d << 1) | dirty).to_le() - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 1
use super::super::page::header::{header, header_mut, Header, HDR};use super::header::{header, header_mut, Header, HDR}; - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 29
fn kv<'a, T, K: Representable + ?Sized, V: Representable + ?Sized>(fn kv<'a, T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>( - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 82
<= 4096<= PAGE_SIZE - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 162
fn kv<'a, T, K: Representable + ?Sized, V: Representable + ?Sized>(fn kv<'a, T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>( - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 196
<= 4096<= PAGE_SIZE - replacement in sanakirja-core/src/btree/page_unsized/alloc.rs at line 291
fn kv<'a, T, K: Representable + ?Sized, V: Representable + ?Sized>(fn kv<'a, T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized>( - edit in sanakirja-core/src/btree/page.rs at line 8
pub(in super::super) mod header; - replacement in sanakirja-core/src/btree/page.rs at line 10
use rebalance::*;use super::page_unsized::header; - edit in sanakirja-core/src/btree/page.rs at line 12
use rebalance::*; - edit in sanakirja-core/src/btree/page.rs at line 14
const PAGE_SIZE: usize = 4096; - replacement in sanakirja-core/src/btree/page.rs at line 111
let new = Self::del(txn, page, c, l)?;Self::put(txn, new.0, mutable, c, k0, v0, k1v1, l, r)let new = Self::del(txn, page, mutable, c, l)?;Self::put(txn, new.0, true, c, k0, v0, k1v1, l, r) - edit in sanakirja-core/src/btree/page.rs at line 150
mutable: bool, - replacement in sanakirja-core/src/btree/page.rs at line 155
if Self::is_dirty(page.as_page()) {if mutable && Self::is_dirty(page.as_page()) { - replacement in sanakirja-core/src/btree/page.rs at line 273
page: Self::del(txn, m.modified.page, &m.modified.c1, m.modified.l)?,page: Self::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)?, - replacement in sanakirja-core/src/btree/page.rs at line 345
let off = u64::from_le(*(page.data.as_ptr().add(HDR) as *const u64).add(c.cur as usize));let off =u64::from_le(*(page.data.as_ptr().add(HDR) as *const u64).add(c.cur as usize)); - replacement in sanakirja-core/src/btree/page.rs at line 364
(u64::from_le(*(page.data.as_ptr().add(HDR + c.cur as usize * 8) as *const u64)) & 0xfff)as usize(u64::from_le(*(page.data.as_ptr().add(HDR + c.cur as usize * 8) as *const u64))& 0xfff) as usize - replacement in sanakirja-core/src/btree/page.rs at line 375
(u64::from_le(*(page.data.as_ptr().add(HDR) as *const u64).add(c.cur as usize)) & 0xfff)as usize,(u64::from_le(*(page.data.as_ptr().add(HDR) as *const u64).add(c.cur as usize))& 0xfff) as usize, - replacement in sanakirja-core/src/btree/page.rs at line 403
let off = unsafe { *(page.data.as_ptr().add((HDR + c.cur as usize * 8) - 8) as *const u64) };let off =unsafe { *(page.data.as_ptr().add((HDR + c.cur as usize * 8) - 8) as *const u64) }; - replacement in sanakirja-core/src/btree/page.rs at line 413
let off = unsafe { *(page.data.as_ptr().offset(HDR as isize + c.cur * 8) as *const u64) };let off =unsafe { *(page.data.as_ptr().offset(HDR as isize + c.cur * 8) as *const u64) }; - replacement in sanakirja-core/src/btree/page.rs at line 470
fn leaf_linear_search<T, K: Representable, V: Representable>(fn leaf_linear_search<T: LoadPage, K: Representable, V: Representable>( - replacement in sanakirja-core/src/btree/page.rs at line 486
unsafe fn lookup<T, K: Representable, V: Representable>(unsafe fn lookup<T: LoadPage, K: Representable, V: Representable>( - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 48
<Page<K, V>>::del(txn, m.modified.page, &m.modified.c1, m.modified.l)?<Page<K, V>>::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)? - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 105
<Page<K, V>>::del(txn, m.other, &rc, r)?,<Page<K, V>>::del(txn, m.other, m.other_is_mutable, &rc, r)?, - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 169
<Page<K, V>>::del(txn, m.modified.page, &m.modified.c1, m.modified.l)?<Page<K, V>>::del(txn,m.modified.page,m.modified.mutable,&m.modified.c1,m.modified.l,)? - replacement in sanakirja-core/src/btree/page/rebalance.rs at line 193
let new_left = <Page<K, V>>::del(txn, m.other, &lc, 0)?;let new_left = <Page<K, V>>::del(txn, m.other, m.other_is_mutable, &lc, 0)?; - replacement in sanakirja-core/src/btree/page/alloc.rs at line 9
fn truncate_left<T, K: Representable, V: Representable>(fn truncate_left<T: LoadPage, K: Representable, V: Representable>( - replacement in sanakirja-core/src/btree/page/alloc.rs at line 24
fn offset_slice<'a, T, K: Representable, V: Representable>(fn offset_slice<'a, T: LoadPage, K: Representable, V: Representable>( - replacement in sanakirja-core/src/btree/page/alloc.rs at line 27
fn kv<'a, T, K: Representable, V: Representable>(fn kv<'a, T: LoadPage, K: Representable, V: Representable>( - replacement in sanakirja-core/src/btree/page/alloc.rs at line 94
fn truncate_left<T, K: Representable, V: Representable>(fn truncate_left<T: LoadPage, K: Representable, V: Representable>( - replacement in sanakirja-core/src/btree/page/alloc.rs at line 172
fn offset_slice<'a, T, K: Representable, V: Representable>(fn offset_slice<'a, T: LoadPage, K: Representable, V: Representable>( - replacement in sanakirja-core/src/btree/page/alloc.rs at line 178
fn kv<'a, T, K: Representable, V: Representable>(fn kv<'a, T: LoadPage, K: Representable, V: Representable>( - replacement in sanakirja-core/src/btree/page/alloc.rs at line 202
<= 4096<= PAGE_SIZE - replacement in sanakirja-core/src/btree/page/alloc.rs at line 284
fn kv<'a, T, K: Representable, V: Representable>(fn kv<'a, T: LoadPage, K: Representable, V: Representable>( - replacement in sanakirja-core/src/btree/mod.rs at line 3
pub use cursor::{Cursor, iter, rev_iter, Iter, RevIter};pub use cursor::{iter, rev_iter, Cursor, Iter, RevIter}; - edit in sanakirja-core/src/btree/mod.rs at line 157
mutable: bool, - replacement in sanakirja-core/src/btree/mod.rs at line 191
let page = Self::del(txn, m.page, &m.c1, m.l)?;let page = Self::del(txn, m.page, m.mutable, &m.c1, m.l)?; - edit in sanakirja-core/src/btree/mod.rs at line 267
debug!("single_child: {:?} {:?} {:?} {:?}",self.page, self.c0, c1, self.ins); - edit in sanakirja-core/src/btree/mod.rs at line 290
pub other_is_mutable: bool, - replacement in sanakirja-core/src/btree/del.rs at line 148[4.32574]→[4.1427:1460](∅→∅),[4.1460]→[4.61708:61726](∅→∅),[4.61708]→[4.61708:61726](∅→∅),[4.61726]→[4.9867:9893](∅→∅),[4.9893]→[4.61758:61770](∅→∅),[4.61758]→[4.61758:61770](∅→∅)
cursor.push(PageCursor {page,cursor: curs,});cursor.push(PageCursor { page, cursor: curs }); - edit in sanakirja-core/src/btree/del.rs at line 224
let rc_l = cursor.first_rc_level; - edit in sanakirja-core/src/btree/del.rs at line 231
let other_is_rced = if p > rc_l {true} else {txn.rc(other.offset)? >= 2}; - edit in sanakirja-core/src/btree/del.rs at line 241
other_is_mutable: !other_is_rced, - edit in sanakirja-core/src/btree/del.rs at line 260
let other_is_rced = if p > rc_l {true} else {txn.rc(other.offset)? >= 2}; - edit in sanakirja-core/src/btree/del.rs at line 270
other_is_mutable: !other_is_rced, - replacement in sanakirja-core/src/btree/del.rs at line 507
debug!("single child {:?}", d);if P::is_dirty(last_op.page.as_page()) {txn.decr_rc_owned(last_op.page.offset)?;//// We don't do this if the table is empty, in order to be// consistent with put and drop.debug!("single child {:?} {:?}", d, is_rc);if d > 0 {if !is_rc {if P::is_dirty(last_op.page.as_page()) {txn.decr_rc_owned(last_op.page.offset)?;} else {txn.decr_rc(last_op.page.offset)?;}}db.db = d; - replacement in sanakirja-core/src/btree/del.rs at line 521
txn.decr_rc(last_op.page.offset)?;// The page becomes empty.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 {if P::is_dirty(last_op.page.as_page()) {txn.decr_rc_owned(last_op.page.offset)?;} else {txn.decr_rc(last_op.page.offset)?;}}db.db = page.0.offset - edit in sanakirja-core/src/btree/del.rs at line 532
db.db = d; - replacement in sanakirja-core/src/btree/cursor.rs at line 7
pub(in super) struct PageCursor<K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> {pub(super) struct PageCursor<K: Representable + ?Sized,V: Representable + ?Sized,P: BTreePage<K, V>,> { - replacement in sanakirja-core/src/btree/cursor.rs at line 67
pub(in super) fn push(&mut self, p: PageCursor<K, V, P>) {pub(super) fn push(&mut self, p: PageCursor<K, V, P>) { - replacement in sanakirja-core/src/btree/cursor.rs at line 72
pub(in super) fn last(&mut self) -> &mut PageCursor<K, V, P> {pub(super) fn last(&mut self) -> &mut PageCursor<K, V, P> { - replacement in sanakirja-core/src/btree/cursor.rs at line 78
pub(in super) fn current(&self) -> &PageCursor<K, V, P> {pub(super) fn current(&self) -> &PageCursor<K, V, P> { - replacement in sanakirja-core/src/btree/cursor.rs at line 82
pub(in super) fn pointer(&self) -> usize {pub(super) fn pointer(&self) -> usize { - replacement in sanakirja-core/src/btree/cursor.rs at line 86
pub(in super) fn pop(&mut self) {pub(super) fn pop(&mut self) { - replacement in sanakirja-core/src/btree/cursor.rs at line 91
pub(in super) fn current_mut(&mut self) -> &mut PageCursor<K, V, P> {pub(super) fn current_mut(&mut self) -> &mut PageCursor<K, V, P> { - edit in sanakirja-core/src/btree/cursor.rs at line 102
// Start back from the bottom.self.pointer = 0;let init = unsafe { &mut *self.stack[0].as_mut_ptr() };init.cursor = P::cursor_before(init.page.as_page()); - edit in sanakirja-core/src/btree/cursor.rs at line 129
} else {*cursor = P::cursor_first(page.as_page()); - edit in sanakirja-core/src/btree/cursor.rs at line 189
- replacement in sanakirja-core/src/btree/cursor.rs at line 193
pub fn next<T: LoadPage>(&mut self, txn: &T) -> Result<Option<(&'a K, &'a V)>, T::Error> {pub fn next<T: LoadPage>(&mut self, txn: &'a T) -> Result<Option<(&'a K, &'a V)>, T::Error> { - replacement in sanakirja-core/src/btree/cursor.rs at line 209
} else if let Some((k, v, r)) = P::current(txn, current.page.as_page(), ¤t.cursor) {} else if let Some((k, v, r)) = P::current(txn, current.page.as_page(), ¤t.cursor){ - replacement in sanakirja-core/src/btree/cursor.rs at line 228
pub fn prev<T: LoadPage>(&mut self, txn: &T) -> Result<Option<(&'a K, &'a V)>, T::Error> {pub fn prev<T: LoadPage>(&mut self, txn: &'a T) -> Result<Option<(&'a K, &'a V)>, T::Error> { - replacement in sanakirja-core/src/btree/cursor.rs at line 232
debug!("prev = {:?} {:?} {:?}" ,self.pointer, current.page, current.cursor);debug!("prev = {:?} {:?} {:?}",self.pointer, current.page, current.cursor); - replacement in sanakirja-core/src/btree/cursor.rs at line 248
} else if let Some((k, v, _)) = P::current(txn, current.page.as_page(), ¤t.cursor) {} else if let Some((k, v, _)) = P::current(txn, current.page.as_page(), ¤t.cursor){ - replacement in sanakirja-core/src/btree/cursor.rs at line 261
return Ok(Some((k, v,)))return Ok(Some((k, v))); - replacement in sanakirja-core/src/btree/cursor.rs at line 274
pub struct Iter<'a, T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> {pub struct Iter<'a,T: LoadPage,K: Representable + ?Sized,V: Representable + ?Sized,P: BTreePage<K, V>,> { - replacement in sanakirja-core/src/btree/cursor.rs at line 288
origin: Option<(&K, Option<&V>)>origin: Option<(&K, Option<&V>)>, - replacement in sanakirja-core/src/btree/cursor.rs at line 290
where T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V> {whereT: LoadPage,K: Representable + ?Sized,V: Representable + ?Sized,P: BTreePage<K, V>,{ - replacement in sanakirja-core/src/btree/cursor.rs at line 298
Ok(Iter {cursor,txn,})Ok(Iter { cursor, txn }) - replacement in sanakirja-core/src/btree/cursor.rs at line 301
impl<'a, T: LoadPage, K: Representable + ?Sized + 'a, V: Representable + ?Sized + 'a, P: BTreePage<K, V> + 'a> Iterator for Iter<'a, T, K, V, P> {impl<'a,T: LoadPage,K: Representable + ?Sized + 'a,V: Representable + ?Sized + 'a,P: BTreePage<K, V> + 'a,> Iterator for Iter<'a, T, K, V, P>{ - replacement in sanakirja-core/src/btree/cursor.rs at line 315
pub struct RevIter<'a, T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V>> {pub struct RevIter<'a,T: LoadPage,K: Representable + ?Sized,V: Representable + ?Sized,P: BTreePage<K, V>,> { - replacement in sanakirja-core/src/btree/cursor.rs at line 329
origin: Option<(&K, Option<&V>)>origin: Option<(&K, Option<&V>)>, - replacement in sanakirja-core/src/btree/cursor.rs at line 331
where T: LoadPage, K: Representable + ?Sized, V: Representable + ?Sized, P: BTreePage<K, V> {whereT: LoadPage,K: Representable + ?Sized,V: Representable + ?Sized,P: BTreePage<K, V>,{ - replacement in sanakirja-core/src/btree/cursor.rs at line 339
Ok(RevIter {cursor,txn,})Ok(RevIter { cursor, txn }) - replacement in sanakirja-core/src/btree/cursor.rs at line 342
impl<'a, T: LoadPage, K: Representable + ?Sized + 'a, V: Representable + ?Sized + 'a, P: BTreePage<K, V> + 'a> Iterator for RevIter<'a, T, K, V, P> {impl<'a,T: LoadPage,K: Representable + ?Sized + 'a,V: Representable + ?Sized + 'a,P: BTreePage<K, V> + 'a,> Iterator for RevIter<'a, T, K, V, P>{ - replacement in sanakirja/src/tests.rs at line 213
for i in 0..1 {for i in 0..15 { - replacement in sanakirja/src/tests.rs at line 216
crate::debug::debug(&txn, &[&db, &db2], "debug2", true);for i in n / 2..n {del(&mut txn, &mut db, &i, None).unwrap();} - replacement in sanakirja/src/tests.rs at line 221
crate::debug::debug(&txn, &[&db, &db2], "debug", true);crate::debug::debug(&txn, &[&db, &db2], "debug3", true); - edit in sanakirja/src/tests.rs at line 441
#[ignore] - replacement in sanakirja/src/tests.rs at line 444
for i in 1..8 {let n = i * 1_000_000;for i in 1..3 {let n = i * 128; // _000_000;let mut times = [0f64; 12];let mut test = Vec::with_capacity(n);let mut rng = rand::thread_rng();for _ in 0..n {use rand::Rng;test.push((rng.gen(), rng.gen()))}/* - edit in sanakirja/src/tests.rs at line 462
let mut times = [0f64; 12]; - edit in sanakirja/src/tests.rs at line 463
let mut test = Vec::with_capacity(n);let mut rng = rand::thread_rng();for _ in 0..n {use rand::Rng;test.push((rng.gen(), rng.gen()))} - replacement in sanakirja/src/tests.rs at line 473
*/ - edit in sanakirja/src/tests.rs at line 481
crate::debug::debug(&txn, &[&db], "debug", true); - edit in sanakirja/src/tests.rs at line 489
/* - edit in sanakirja/src/tests.rs at line 501
*/ - replacement in sanakirja/src/tests.rs at line 537
/* - edit in sanakirja/src/tests.rs at line 560
*/ - replacement in sanakirja/src/tests.rs at line 794
let (k, v) = kv.unwrap();let (k, _v) = kv.unwrap(); - replacement in sanakirja/src/tests.rs at line 800
let (k, v) = kv.unwrap();let (k, _v) = kv.unwrap(); - edit in sanakirja/src/tests.rs at line 803
}let mut it = btree::rev_iter(&txn, &db, Some((&100, None))).unwrap();let (k, _v) = it.next().unwrap().unwrap();assert_eq!(*k, 99);let mut cursor = btree::cursor::Cursor::new(&txn, &db).unwrap();for i in 0..100 {debug!("i = {:?}", i);let (&k, v) = cursor.set(&txn, Some((&i, None))).unwrap().unwrap();debug!("kv = {:?} {:?}", k, v);assert_eq!(i, k);let (&k1, v1) = cursor.next(&txn).unwrap().unwrap();debug!("next = {:?} {:?}", k1, v1);assert_eq!(i, k1);}let mut cursor = btree::cursor::Cursor::new(&txn, &db).unwrap();for i in 0..100 {debug!("i = {:?}", i);let (&k, v) = cursor.set(&txn, Some((&i, None))).unwrap().unwrap();debug!("kv = {:?} {:?}", k, v);assert_eq!(i, k);let (&k1, v1) = cursor.prev(&txn).unwrap().unwrap();debug!("prev = {:?} {:?}", k1, v1);assert_eq!(i, k1);}}#[test]pub fn fork_del() {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, A> = create_db(&mut txn).unwrap();let n = 6 as u64;let mut values = Vec::with_capacity(n as usize);let a = A([0; 100]);for i in 0..n {if put(&mut txn, &mut db, &i, &a).unwrap() {values.push(i);}}crate::debug::debug(&txn, &[&db], "debug0", true);let db2 = fork_db(&mut txn, &db).unwrap();del(&mut txn, &mut db, &1, None).unwrap();crate::debug::debug(&txn, &[&db, &db2], "debug1", true);/*let mut refs = BTreeMap::new();add_refs(&txn, &db, &mut refs).unwrap();add_refs(&txn, &db2, &mut refs).unwrap();// add_refs(&txn, &db3, &mut refs).unwrap();let mut err = 0;for (p, r) in refs.iter() {println!("{:?} {:?}", p, r);if *r >= 2 {if txn.rc(*p).unwrap() != *r as u64 {error!("{:?} {:?} {:?}", p, txn.rc(*p).unwrap(), *r);err += 1;}} else {if txn.rc(*p).unwrap() != 0 {error!("{:?} {:?} 0", p, txn.rc(*p).unwrap());err += 1;}} - edit in sanakirja/src/tests.rs at line 873
assert_eq!(err, 0);txn.commit().unwrap();let mut txn = Env::mut_txn_begin(&env).unwrap();check_free(&mut txn, &refs);debug!("{:?}", refs);*/ - edit in sanakirja/src/environment/muttxn.rs at line 116
};let length = if header.length == 0 {(PAGE_SIZE as u64) * (header.n_roots as u64)} else {header.length - replacement in sanakirja/src/environment/muttxn.rs at line 126
length: if header.length == 0 {(PAGE_SIZE as u64) * (header.n_roots as u64)} else {header.length},length, - replacement in sanakirja/src/environment/muttxn.rs at line 167
*rr = rif r > 0 {*rr = r} - edit in sanakirja/src/environment/muttxn.rs at line 205
debug!("FREEING OWNED PAGE {:?}", offset); - edit in sanakirja/src/environment/muttxn.rs at line 210
debug!("FREEING PAGE {:?}", offset); - edit in sanakirja/src/environment/muttxn.rs at line 242
debug!("free owned pop {:?}", offset); - edit in sanakirja/src/environment/muttxn.rs at line 251
debug!("free pages pop {:?}", offset); - replacement in sanakirja/src/environment/mod.rs at line 23
pub(crate) const PAGE_SIZE: usize = 4096;pub use sanakirja_core::PAGE_SIZE;pub(crate) const PAGE_SIZEU64: u64 = PAGE_SIZE as u64; - replacement in sanakirja/src/environment/mod.rs at line 133
std::cmp::max(length, 4096)std::cmp::max(length, PAGE_SIZEU64) - replacement in sanakirja/src/environment/mod.rs at line 135
let length = (length + 4095) & !4095;let length = (length + PAGE_SIZEU64 - 1) & !(PAGE_SIZEU64 - 1); - replacement in sanakirja/src/environment/mod.rs at line 268
let length = (std::cmp::max(length, 4096) + 4095) & !4095;let length =(std::cmp::max(length, PAGE_SIZEU64) + (PAGE_SIZEU64 - 1)) & !(PAGE_SIZEU64 - 1); - replacement in sanakirja/src/environment/mod.rs at line 278
let length = (std::cmp::max(length, 4096) + 4095) & !4095;let length =(std::cmp::max(length, PAGE_SIZEU64) + (PAGE_SIZEU64 - 1)) & !(PAGE_SIZEU64 - 1);