Ver Fonte

event_graph: return sorted Vec<Events> instead of Vec<blake3::Hash> to reduce dag_get() calls

dasman há 2 anos atrás
pai
commit
69a26b7fd3

+ 4 - 6
bin/darkirc/src/irc/command.rs

@@ -974,9 +974,10 @@ impl Client {
         // Here we'll hold the events in order we'll push to the client
         let mut replies = vec![];
 
-        for event_id in dag_events.iter() {
+        for event in dag_events.iter() {
+            let event_id = event.id();
             // If it was seen, skip
-            match self.is_seen(event_id).await {
+            match self.is_seen(&event_id).await {
                 Ok(true) => continue,
                 Ok(false) => {}
                 Err(e) => {
@@ -985,9 +986,6 @@ impl Client {
                 }
             }
 
-            // Get the event from the DAG
-            let event = self.server.darkirc.event_graph.dag_get(event_id).await.unwrap().unwrap();
-
             // Try to deserialize it. (Here we skip errors)
             let Ok((mut privmsg, _)) = deserialize_async_partial(event.content()).await else {
                 continue
@@ -1014,7 +1012,7 @@ impl Client {
 
             let msg = format!("PRIVMSG {} :{}", privmsg.channel, privmsg.msg);
             replies.push(ReplyType::Client((privmsg.nick, msg)));
-            if let Err(e) = self.mark_seen(event_id).await {
+            if let Err(e) = self.mark_seen(&event_id).await {
                 error!("[IRC CLIENT] (get_history) self.mark_seen({}) failed: {}", event_id, e);
                 return Err(e)
             }

+ 2 - 4
bin/genev/genevd/src/rpc.rs

@@ -228,10 +228,8 @@ impl JsonRpcInterface {
         let mut seen_events = vec![];
         let dag_events = self.event_graph.order_events().await;
 
-        for event_id in dag_events.iter() {
-            // Get the event from the DAG
-            let event = self.event_graph.dag_get(event_id).await.unwrap().unwrap();
-
+        for event in dag_events.iter() {
+            let event_id = event.id();
             // Try to deserialize it. (Here we skip errors)
             let genevent: GenEvent = match deserialize_async_partial(event.content()).await {
                 Ok((v, _)) => v,

+ 2 - 4
bin/tau/taud/src/main.rs

@@ -425,15 +425,13 @@ async fn realmain(settings: Args, executor: Arc<smol::Executor<'static>>) -> Res
     let dag_events = event_graph.order_events().await;
     let seen_events = seen.get().unwrap();
 
-    for event_id in dag_events.iter() {
+    for event in dag_events.iter() {
+        let event_id = event.id();
         // If it was seen, skip
         if seen_events.contains_key(event_id.as_bytes()).unwrap() {
             continue
         }
 
-        // Get the event from the DAG
-        let event = event_graph.dag_get(event_id).await.unwrap().unwrap();
-
         // Try to deserialize it. (Here we skip errors)
         let Ok((enc_task, _)) = deserialize_async_partial(event.content()).await else { continue };
 

+ 2 - 2
src/event_graph/mod.rs

@@ -742,7 +742,7 @@ impl EventGraph {
     }
 
     /// Perform a topological sort of the DAG.
-    pub async fn order_events(&self) -> Vec<blake3::Hash> {
+    pub async fn order_events(&self) -> Vec<Event> {
         let mut ordered_events = VecDeque::new();
         let mut visited = HashSet::new();
 
@@ -758,7 +758,7 @@ impl EventGraph {
         ord_events_vec
             .sort_unstable_by(|a, b| a.0.cmp(&b.0).then(b.1.timestamp.cmp(&a.1.timestamp)));
 
-        ord_events_vec.iter().map(|a| a.1.id()).collect::<Vec<blake3::Hash>>()
+        ord_events_vec.iter().map(|a| a.1.clone()).collect::<Vec<Event>>()
     }
 
     /// We do a non-recursive DFS (<https://en.wikipedia.org/wiki/Depth-first_search>),