pijul nest
guest [sign in]

reference counting works for put

[?]
Jan 31, 2021, 8:41 PM
ONES3V466GLO5CXKRF5ENK7VFOQPWM3YXLVRGWB56V5SH3W7XNBQC

Dependencies

  • [2] EAAYH6BQ Debugging put
  • [3] OP6SVMOD Resetting history
  • [4] FMN7X4J2 Micro-improvements, now noticeably faster than std::collections::BTreeMap
  • [5] WS4ZQM4R Debugging, tests, etc.

Change contents

  • replacement in sanakirja-core/src/btree/put.rs at line 27
    [3.4449][3.637:673]()
    debug!("{:?}", cursor.pointer);
    [3.4449]
    [3.673]
    debug!("put: {:?} {:?}", cursor.pointer, cursor.first_rc_level);
  • replacement in sanakirja-core/src/btree/put.rs at line 33
    [3.4538][3.4538:4587]()
    cursor.pointer <= cursor.first_rc_level,
    [3.4538]
    [3.4587]
    cursor.pointer < cursor.first_rc_level,
  • replacement in sanakirja-core/src/btree/put.rs at line 137
    [3.7865][3.7865:7918]()
    if cursor.pointer == cursor.first_rc_level {
    [3.7865]
    [3.7918]
    if cursor.pointer == cursor.first_rc_level + 1 {
  • replacement in sanakirja-core/src/btree/put.rs at line 142
    [3.8058][3.8058:8099]()
    txn.decr_rc(freed ^ 1)?;
    [3.8058]
    [3.8099]
    txn.decr_rc(freed)?;
  • edit in sanakirja-core/src/btree/page.rs at line 137
    [3.2293]
    [3.2293]
    debug!("new = {:?}", new);
  • edit in sanakirja-core/src/btree/page.rs at line 139
    [3.2360]
    [3.2360]
    let l = header(page.as_page()).left_page() & !0xfff;
    let hdr = header_mut(&mut new);
    hdr.left_page = l.to_le();
  • edit in sanakirja-core/src/btree/mod.rs at line 279
    [2.4199]
    [2.4199]
    }
    pub fn get<'a, T: LoadPage, K: Representable<T>, V: Representable<T>, P: BTreePage<T, K, V>>(
    txn: &'a T,
    db: &Db<T, K, V, P>,
    k: &K,
    v: Option<&V>,
    ) -> Result<Option<(&'a K, &'a V)>, T::Error> {
    // Set the "cursor stack" by setting a skip list cursor in
    // each page from the root to the appropriate leaf.
    let mut last_match = None;
    let mut page = db.db;
    for _ in 0..cursor::N_CURSORS {
    let mut cursor = P::first_cursor(page.as_page());
    if let Ok((kk, vv, _)) = P::set_cursor(txn, page.as_page(), &mut cursor, k, v) {
    if v.is_some() {
    return Ok(Some((kk, vv)));
    }
    last_match = Some((kk, vv));
    } else if let Some((k, v, _)) = P::current(page.as_page(), &cursor) {
    unsafe { last_match = Some((
    core::mem::transmute(k),
    core::mem::transmute(v),
    )) }
    }
    let next_page = P::left_child(page.as_page(), &cursor);
    if next_page > 0 {
    page = txn.load_page(next_page)?;
    } else {
    break;
    }
    }
    Ok(last_match)
  • replacement in sanakirja-core/src/btree/cursor.rs at line 86
    [3.2548][3.34118:34163]()
    debug!("p: {:?}", self.pointer);
    [3.2548]
    [3.2548]
    debug!("self.pointer = {:?}", self.pointer);
  • edit in sanakirja-core/src/btree/cursor.rs at line 89
    [3.66371]
    [3.66371]
    debug!("page = {:?}, rc = {:?}", current.page, txn.rc(page.offset)?);
  • edit in sanakirja-core/src/btree/cursor.rs at line 91
    [3.66450]
    [3.66450]
    debug!("first_rc_level = {:?}", self.pointer);
  • replacement in sanakirja/src/lib.rs at line 7
    [2.4433][2.4433:4444]()
    mod debug;
    [2.4433]
    [3.79615]
    pub mod debug;
  • replacement in sanakirja/src/environment/muttxn.rs at line 249
    [3.38650][3.38650:38683]()
    if rc & 0xfff >= 2 {
    [3.38650]
    [3.38683]
    if rc > 1 {
  • replacement in sanakirja/src/environment/muttxn.rs at line 251
    [3.38739][3.38739:38850]()
    if rc > 2 {
    btree::put(self, &mut rc_, &(rc - 1), &())?;
    }
    [3.38739]
    [3.38850]
    }
    if rc & 0xfff > 2 {
    btree::put(self, &mut rc_, &(rc - 1), &())?;
    self.rc = Some(rc_);
  • edit in sanakirja/src/environment/muttxn.rs at line 256
    [3.38880]
    [3.89113]
    } else {
    self.rc = Some(rc_)
  • edit in sanakirja/src/environment/muttxn.rs at line 265
    [3.89253]
    [3.89281]
    debug!("decr_rc_owned {:?}", off);
  • replacement in sanakirja/src/environment/muttxn.rs at line 278
    [3.39178][3.39178:39211]()
    if rc & 0xfff >= 2 {
    [3.39178]
    [3.39211]
    debug!("rc = {:?}", rc);
    if rc > 1 {
  • replacement in sanakirja/src/environment/muttxn.rs at line 281
    [3.39267][3.39267:39360](),[3.39360][3.89828:89846](),[3.89828][3.89828:89846]()
    if rc > 2 {
    btree::put(self, &mut rc_, &(rc - 1), &())?;
    }
    [3.39267]
    [3.39361]
    }
    if rc & 0xfff > 2 {
    btree::put(self, &mut rc_, &(rc - 1), &())?;
    self.rc = Some(rc_);
  • edit in sanakirja/src/environment/muttxn.rs at line 286
    [3.39391]
    [3.89949]
    } else {
    self.rc = Some(rc_);
  • edit in sanakirja/src/environment/muttxn.rs at line 295
    [3.90122]
    [3.90122]
    debug!("incr_rc {:?}", off);
  • edit in sanakirja/src/environment/muttxn.rs at line 313
    [3.90699]
    [3.90699]
    } else {
    let mut rc = btree::create_db(self)?;
    debug!("put in RC: {:?} {:?}", rc, off|2);
    btree::put(self, &mut rc, &(off | 2), &())?;
    debug!("done");
    self.rc = Some(rc);
  • replacement in sanakirja/src/environment/muttxn.rs at line 335
    [3.91142][3.91142:91357]()
    let mut curs: btree::cursor::Cursor<Self, u64, (), btree::page::Page<u64, ()>> =
    btree::cursor::Cursor::new(rc);
    if let Some((rc, _)) = curs.set(self, Some((&page, None)))? {
    [3.91142]
    [3.91357]
    if let Some((rc, _)) = btree::get(self, rc, &page, None)? {