MCPcopy Create free account
hub / github.com/Rustixir/darkbird / loader

Method loader

src/darkbird/storage_vector.rs:409–462  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

407 /// load storage from disk
408 #[inline]
409 async fn loader(&self) -> Result<(), String> {
410 // when storage just open with Disc Copies option it call loader, else it don't call
411 let wal = &self.wal_session;
412
413 let mut page_index = 1;
414
415 loop {
416 // Get Page
417 let mut logfile = match wal.get_page(page_index).await {
418 Ok(lf) => lf,
419 Err(sess_res) => {
420 if let SessionResult::Err(e) = sess_res {
421 return Err(e.to_string())
422 }
423
424 return Err("disk_log closed".to_string())
425 }
426 };
427
428 page_index += 1;
429
430 // Must Call Recover if return Err, remove unwrap()
431 let iter = match logfile.iter(..) {
432 Ok(iter) => iter,
433 Err(e) => {
434 eprintln!("==> {:?}", e);
435 return Err(e.to_string());
436 }
437 };
438
439 for qline in iter {
440 let bytes = match qline {
441 Ok(ql) => ql,
442 Err(e) => return Err(e.to_string()),
443 };
444
445 let query: RQuery<VectorId, Vector> = match bincode::deserialize(&bytes) {
446 Ok(rq) => rq,
447 Err(e) => {
448 return Err(e.to_string());
449 }
450 };
451
452 match query {
453 RQuery::Insert(vid, v) => {
454 let _ = self.insert(vid, v.0).await;
455 }
456 RQuery::Remove(vid) => {
457 let _ = self.remove(vid).await;
458 }
459 }
460 }
461 }
462 }
463
464
465}

Callers 1

openMethod · 0.45

Calls 5

get_pageMethod · 0.45
to_stringMethod · 0.45
iterMethod · 0.45
insertMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected