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

Method loader

src/darkbird/storage.rs:366–419  ·  view source on GitHub ↗
(&self)

Source from the content-addressed store, hash-verified

364 /// load storage from disk
365 #[inline]
366 async fn loader(&self) -> Result<(), String> {
367 // when storage just open with Disc Copies option it call loader, else it don't call
368 let wal = &self.wal_session;
369
370 let mut page_index = 1;
371
372 loop {
373 // Get Page
374 let mut logfile = match wal.get_page(page_index).await {
375 Ok(lf) => lf,
376 Err(sess_res) => {
377 if let SessionResult::Err(e) = sess_res {
378 return Err(e.to_string())
379 }
380
381 return Err("disk_log closed".to_string())
382 }
383 };
384
385 page_index += 1;
386
387 // Must Call Recover if return Err, remove unwrap()
388 let iter = match logfile.iter(..) {
389 Ok(iter) => iter,
390 Err(e) => {
391 eprintln!("==> {:?}", e);
392 return Err(e.to_string());
393 }
394 };
395
396 for qline in iter {
397 let bytes = match qline {
398 Ok(ql) => ql,
399 Err(e) => return Err(e.to_string()),
400 };
401
402 let query: RQuery<K, Doc> = match bincode::deserialize(&bytes) {
403 Ok(rq) => rq,
404 Err(e) => {
405 return Err(e.to_string());
406 }
407 };
408
409 match query {
410 RQuery::Insert(key, doc) => {
411 let _ = self.insert(key, doc).await;
412 }
413 RQuery::Remove(key) => {
414 let _ = self.remove(key).await;
415 }
416 }
417 }
418 }
419 }
420}
421
422// used for log to disk

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