MCPcopy Create free account
hub / github.com/cosdata/cosdata / insert_node

Method insert_node

org/src/version_tree.rs:45–68  ·  view source on GitHub ↗
(&mut self, target_version: Arc<Mutex<VersionNode>>)

Source from the content-addressed store, hash-verified

43 }
44
45 fn insert_node(&mut self, target_version: Arc<Mutex<VersionNode>>) {
46 let target_version_lock = target_version.lock().unwrap();
47 let delta = largest_power_of_4_below(target_version_lock.version - self.version);
48
49
50 if let Some(index) = power_of_4_with_index(delta) {
51 println!(
52 "self.ver {} | target.ver {} | delta {} | index {}",
53 self.version, target_version_lock.version, delta, index
54 );
55
56 drop(target_version_lock); // Drop the lock here to avoid deadlock
57
58 if let Some(p) = self.pointers[index].clone() {
59 let mut p_lock = p.lock().unwrap();
60 p_lock.insert_node(target_version.clone());
61 } else {
62 self.pointers[index] = Some(target_version.clone());
63 println!("{}'s pointers {:?}", self.version, self.pointers);
64 }
65 } else {
66 println!("error, cant happen {}", delta);
67 }
68 }
69
70 fn print_graph(&self, depth: usize) {
71 let indent = " ".repeat(depth * 4);

Callers 1

add_versionMethod · 0.80

Calls 3

power_of_4_with_indexFunction · 0.85
cloneMethod · 0.80
largest_power_of_4_belowFunction · 0.70

Tested by

no test coverage detected