node: Use refs cache to decide on fetching
When deciding whether or not to fetch a repo based on a refs announcement, we need to know whether our signed refs are stale or not, compared to the ones in the announcement. This can be quite expensive as it requires multiple reads from Git’s ODB, which often results in packfile loading.
To remedy this, we introduce a refs cache in our node database that is consulted when an announcement is received.
We also remove the logic that generates info messages, since they are
rarely needed and introduced more complexity.
Additionally, we revert commit 3ad2b4431f4406fbb96c30d1edc77c5d969f17cb, which introduced logic to minimze wants and haves with additional logic, since it potentially also increases the load on the ODB.
18 files changed
+472
-582
345fa57b
→
256c620d
modified radicle-fetch/src/lib.rs
@@ -20,7 +20,7 @@ pub use state::{FetchLimit, FetchResult};
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -54,7 +54,7 @@ pub fn pull<S>(
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-fetch/src/sigrefs.rs
@@ -1,10 +1,8 @@
|
|
| - | |
| + | |
|
|
| - | |
| + | |
|
|
| - | |
| - | |
|
|
|
|
|
@@ -152,67 +150,6 @@ impl<'a> IntoIterator for &'a RemoteRefs {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
modified radicle-fetch/src/stage.rs
@@ -15,18 +15,17 @@
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -381,7 +380,7 @@ impl ProtocolStage for SigrefsAt {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -494,112 +493,6 @@ impl ProtocolStage for DataRefs {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
modified radicle-fetch/src/state.rs
@@ -8,7 +8,7 @@ use radicle::identity::{Doc, DocError};
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -273,23 +273,18 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
| - | |
| + | |
|
|
| - | |
| - | |
| - | |
| - | |
| + | |
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -297,19 +292,18 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
|
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -320,22 +314,14 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
| - | |
|
|
|
|
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -350,7 +336,7 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -361,14 +347,7 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -395,7 +374,7 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -434,7 +413,7 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -444,8 +423,21 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -467,6 +459,7 @@ impl FetchState {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -474,7 +467,7 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -644,13 +637,6 @@ impl<'a, S> Cached<'a, S> {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
modified radicle-node/src/runtime.rs
@@ -157,7 +157,8 @@ impl Runtime {
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -206,13 +207,13 @@ impl Runtime {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -221,14 +222,14 @@ impl Runtime {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -264,6 +265,7 @@ impl Runtime {
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/service.rs
@@ -26,11 +26,12 @@ use radicle::node::address;
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -44,13 +45,12 @@ use crate::node::{
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
|
|
| - | |
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -64,7 +64,7 @@ pub use radicle::node::policy::config as policy;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -159,7 +159,10 @@ pub enum Error {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -251,7 +254,7 @@ struct FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -273,7 +276,7 @@ struct QueuedFetch {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -325,6 +328,16 @@ where
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -767,7 +780,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -809,7 +822,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -831,7 +844,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -886,7 +899,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1051,7 +1064,6 @@ where
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -1398,8 +1410,12 @@ where
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1430,71 +1446,29 @@ where
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1549,6 +1523,7 @@ where
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -1562,39 +1537,6 @@ where
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
@@ -1720,6 +1662,37 @@ where
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1858,7 +1831,32 @@ where
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1882,6 +1880,7 @@ where
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -1890,7 +1889,6 @@ where
|
|
|
|
|
|
| - | |
|
|
|
|
|
modified radicle-node/src/service/io.rs
@@ -2,7 +2,7 @@ use std::collections::VecDeque;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -30,7 +30,7 @@ pub enum Io {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -126,7 +126,7 @@ impl Outbox {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/service/message.rs
@@ -1,8 +1,7 @@
|
|
|
|
|
|
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -12,7 +11,6 @@ use crate::prelude::BoundedVec;
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -170,7 +168,7 @@ pub struct RefsAnnouncement {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -178,86 +176,49 @@ pub struct RefsStatus {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
| - | |
| + | |
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
| + | |
|
|
| - | |
| + | |
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
modified radicle-node/src/tests.rs
@@ -10,6 +10,7 @@ use crossbeam_channel as chan;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -29,6 +30,7 @@ use crate::service::ServiceState as _;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -1431,10 +1433,16 @@ fn test_queued_fetch_from_ann_same_rid() {
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/worker.rs
@@ -13,7 +13,7 @@ use crossbeam_channel as chan;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -106,7 +106,7 @@ pub enum FetchRequest {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -180,6 +180,7 @@ struct Worker {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -200,13 +201,7 @@ impl Worker {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -229,7 +224,6 @@ impl Worker {
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -240,7 +234,7 @@ impl Worker {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -294,10 +288,9 @@ impl Worker {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
| - | |
|
|
|
|
|
@@ -309,6 +302,7 @@ impl Worker {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -318,7 +312,15 @@ impl Worker {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -343,6 +345,7 @@ impl Pool {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -361,6 +364,7 @@ impl Pool {
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/worker/fetch.rs
@@ -7,7 +7,7 @@ use localtime::LocalTime;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -62,14 +62,15 @@ impl Handle {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -123,6 +124,7 @@ impl Handle {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -203,6 +205,45 @@ fn notify(
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/worker/fetch/error.rs
@@ -17,6 +17,8 @@ pub enum Fetch {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
modified radicle/src/node.rs
@@ -8,6 +8,7 @@ pub mod db;
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified radicle/src/node/db.rs
@@ -8,6 +8,7 @@
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -38,8 +39,9 @@ pub enum Error {
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
|
|
|
@@ -50,7 +52,7 @@ impl fmt::Debug for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -65,7 +67,7 @@ impl Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -78,7 +80,7 @@ impl Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -87,7 +89,7 @@ impl Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle/src/node/db/schema.sql
@@ -96,3 +96,24 @@ create table if not exists "repo-sync-status" (
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
added radicle/src/node/refs.rs
@@ -0,0 +1,2 @@
| + | |
| + | |
added radicle/src/node/refs/store.rs
@@ -0,0 +1,182 @@
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
modified radicle/src/storage/refs.rs
@@ -437,156 +437,6 @@ impl Deref for SignedRefsAt {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|