From bc247dff2400ed4f454f1d76e6a95bd82f05b792 Mon Sep 17 00:00:00 2001 From: cloudhead Date: Fri, 5 Apr 2024 12:17:17 +0200 Subject: [PATCH] node: Skip fetch early if no refs in announcement --- radicle-node/src/service.rs | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/radicle-node/src/service.rs b/radicle-node/src/service.rs index 54045fbb..f20122c4 100644 --- a/radicle-node/src/service.rs +++ b/radicle-node/src/service.rs @@ -1411,6 +1411,11 @@ where refs: message.refs.to_vec(), timestamp: message.timestamp, }); + // Empty announcements can be safely ignored. + let Some(refs) = NonEmpty::from_vec(message.refs.to_vec()) else { + debug!(target: "service", "Skipping fetch, no refs in announcement for {}", message.rid); + return Ok(false); + }; // We update inventories when receiving ref announcements, as these could come // from a new repository being initialized. if let Ok(result) = @@ -1428,7 +1433,7 @@ where } // Update sync status of announcer for this repo. - if let Some(refs) = message.refs.iter().find(|r| &r.remote == self.nid()) { + if let Some(refs) = refs.iter().find(|r| &r.remote == self.nid()) { debug!( target: "service", "Refs announcement of {announcer} for {} contains our own remote at {} (t={})", @@ -1487,20 +1492,15 @@ where ); return Ok(relay); }; - - // Finally, if there's anything to fetch, we fetch it from the remote. - if let Some(refs) = NonEmpty::from_vec(message.refs.to_vec()) { - self.fetch_refs_at( - message.rid, - remote.id, - refs, - repo_entry.scope, - FETCH_TIMEOUT, - None, - ); - } else { - debug!(target: "service", "Skipping fetch, no remote refs in announcement for {}", message.rid); - } + // Finally, start the fetch. + self.fetch_refs_at( + message.rid, + remote.id, + refs, + repo_entry.scope, + FETCH_TIMEOUT, + None, + ); return Ok(relay); } AnnouncementMessage::Node(