mirror of
https://github.com/Start9Labs/patch-db.git
synced 2026-03-26 02:11:54 +00:00
fix minor bugs
This commit is contained in:
committed by
Aiden McClelland
parent
a861f8173f
commit
226acc0f8d
@@ -14,8 +14,12 @@ impl LockInfo {
|
|||||||
fn write(&self) -> bool {
|
fn write(&self) -> bool {
|
||||||
self.write && self.segments_handled == self.ptr.len()
|
self.write && self.segments_handled == self.ptr.len()
|
||||||
}
|
}
|
||||||
fn next_seg(&self) -> Option<&str> {
|
fn current_seg(&self) -> Option<&str> {
|
||||||
self.ptr.get_segment(self.segments_handled)
|
if self.segments_handled == 0 {
|
||||||
|
Some("") // root
|
||||||
|
} else {
|
||||||
|
self.ptr.get_segment(self.segments_handled - 1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +61,7 @@ impl Drop for Guard {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Debug, Default)]
|
||||||
struct Node {
|
struct Node {
|
||||||
readers: Vec<usize>,
|
readers: Vec<usize>,
|
||||||
writers: HashSet<usize>,
|
writers: HashSet<usize>,
|
||||||
@@ -140,7 +144,7 @@ impl Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Debug, Default)]
|
||||||
struct Trie {
|
struct Trie {
|
||||||
node: Node,
|
node: Node,
|
||||||
children: HashMap<String, Trie>,
|
children: HashMap<String, Trie>,
|
||||||
@@ -158,7 +162,7 @@ impl Trie {
|
|||||||
returned_locks: &mut Vec<oneshot::Receiver<LockInfo>>,
|
returned_locks: &mut Vec<oneshot::Receiver<LockInfo>>,
|
||||||
) {
|
) {
|
||||||
if let Some(req) = self.node.handle_request(req, returned_locks) {
|
if let Some(req) = self.node.handle_request(req, returned_locks) {
|
||||||
if let Some(seg) = req.lock_info.next_seg() {
|
if let Some(seg) = req.lock_info.current_seg() {
|
||||||
self.child_mut(seg).handle_request(req, returned_locks)
|
self.child_mut(seg).handle_request(req, returned_locks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,7 +177,7 @@ impl Trie {
|
|||||||
self.handle_request(req, returned_locks);
|
self.handle_request(req, returned_locks);
|
||||||
}
|
}
|
||||||
if let Some(release) = release {
|
if let Some(release) = release {
|
||||||
if let Some(seg) = release.next_seg() {
|
if let Some(seg) = release.current_seg() {
|
||||||
self.child_mut(seg).handle_release(release, returned_locks)
|
self.child_mut(seg).handle_release(release, returned_locks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,14 +196,19 @@ impl Locker {
|
|||||||
closed: false,
|
closed: false,
|
||||||
recv: receiver,
|
recv: receiver,
|
||||||
};
|
};
|
||||||
let mut returned_locks = Vec::new();
|
let (_non_empty_send, non_empty_recv) = oneshot::channel();
|
||||||
|
let mut returned_locks = vec![non_empty_recv];
|
||||||
while let Some(action) = get_action(&mut new_requests, &mut returned_locks).await {
|
while let Some(action) = get_action(&mut new_requests, &mut returned_locks).await {
|
||||||
|
#[cfg(feature = "log")]
|
||||||
|
log::trace!("Locker Action: {:#?}", action);
|
||||||
match action {
|
match action {
|
||||||
Action::HandleRequest(req) => trie.handle_request(req, &mut returned_locks),
|
Action::HandleRequest(req) => trie.handle_request(req, &mut returned_locks),
|
||||||
Action::HandleRelease(lock_info) => {
|
Action::HandleRelease(lock_info) => {
|
||||||
trie.handle_release(lock_info, &mut returned_locks)
|
trie.handle_release(lock_info, &mut returned_locks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#[cfg(feature = "log")]
|
||||||
|
log::trace!("Locker Trie: {:#?}", trie);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Locker { sender }
|
Locker { sender }
|
||||||
|
|||||||
Reference in New Issue
Block a user