fetch: only send changed wants and haves
This change limits the amount of wants and haves data that is sent
to the serving side of a fetch.
When a RefsAt announcement is sent, the fetching peer can calculate
the difference between the rad/sigrefs they’re aware of – if it
exists – and the newly advertised rad/sigrefs. This means they can
efficiently ask for the wants and haves of references that have
changed – saving some data sent over to the serving side.
10 files changed
+416
-65
0f0f9ff9
→
3ad2b443
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,7 +1,8 @@
|
|
| - | |
| + | |
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -150,6 +151,67 @@ impl<'a> IntoIterator for &'a RemoteRefs {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-fetch/src/stage.rs
@@ -15,17 +15,18 @@
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -380,7 +381,7 @@ impl ProtocolStage for SigrefsAt {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -493,6 +494,112 @@ impl ProtocolStage for DataRefs {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-fetch/src/state.rs
@@ -8,7 +8,7 @@ use radicle::identity::{Doc, DocError};
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -273,18 +273,23 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
| - | |
| + | |
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
|
|
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -292,18 +297,19 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
|
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -314,14 +320,22 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -336,7 +350,7 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -347,7 +361,14 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -374,7 +395,7 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -413,7 +434,7 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -423,21 +444,8 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
| - | |
| + | |
|
|
|
|
|
@@ -459,7 +467,6 @@ impl FetchState {
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -467,7 +474,7 @@ impl FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -637,6 +644,13 @@ impl<'a, S> Cached<'a, S> {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/service.rs
@@ -30,6 +30,7 @@ use radicle::node::routing::Store as _;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -250,7 +251,7 @@ struct FetchState {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -272,7 +273,7 @@ struct QueuedFetch {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -806,7 +807,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -828,7 +829,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -883,7 +884,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1043,6 +1044,7 @@ where
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/service/io.rs
@@ -2,7 +2,7 @@ use std::collections::VecDeque;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -30,7 +30,7 @@ pub enum Io {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -115,7 +115,7 @@ impl Outbox {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/service/message.rs
@@ -1,7 +1,7 @@
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -170,7 +170,7 @@ pub struct RefsAnnouncement {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -188,10 +188,18 @@ impl RefsStatus {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
| - | |
| + | |
|
|
| - | |
| + | |
|
|
|
|
|
@@ -212,12 +220,20 @@ impl RefsStatus {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/worker.rs
@@ -13,7 +13,7 @@ use crossbeam_channel as chan;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -106,7 +106,7 @@ pub enum FetchRequest {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -285,7 +285,7 @@ impl Worker {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/worker/fetch.rs
@@ -7,7 +7,7 @@ use localtime::LocalTime;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -67,7 +67,7 @@ impl Handle {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle/src/storage/refs.rs
@@ -437,6 +437,156 @@ impl Deref for SignedRefsAt {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|