node: Add agent and version to node announcement
- Adds a user-agent string to the node announcement. This lets us keep track of what software version everyone is running. Especially useful to see what percentage of the network has upgraded to a new release.
For old nodes, this defaults to the string /radicle/.
The user agent format is roughly based on BIP 0014.
- Advertize protocol version in node announcement.
By advertizing the protocol version, nodes can decide to only connect to
peers with a compatible version. The default and current version is 1.
We bundle these two changes as they both modify the node announcement and node database.
24 files changed
+525
-114
5c0d1b10
→
83786fbd
modified radicle-cli/tests/commands.rs
@@ -8,6 +8,7 @@ use radicle::node::address::Store as _;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -21,6 +22,7 @@ use radicle_node::service::Event;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -1317,9 +1319,11 @@ fn rad_clone_partial_fail() {
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
@@ -1363,6 +1367,7 @@ fn rad_clone_connect() {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -1383,9 +1388,11 @@ fn rad_clone_connect() {
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
@@ -1397,9 +1404,11 @@ fn rad_clone_connect() {
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/lib.rs
@@ -10,12 +10,23 @@ pub mod tests;
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/main.rs
@@ -7,18 +7,10 @@ use crossbeam_channel as chan;
|
|
|
|
|
|
| - | |
|
|
| - | |
| + | |
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
modified radicle-node/src/runtime.rs
@@ -19,6 +19,7 @@ use radicle::node::address;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -127,7 +128,6 @@ impl Runtime {
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -174,13 +174,15 @@ impl Runtime {
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -189,14 +191,16 @@ impl Runtime {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/service.rs
@@ -36,7 +36,6 @@ use radicle::storage::refs::SIGREFS_BRANCH;
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -56,6 +55,7 @@ use crate::storage::{refs::RefsAt, Namespaces, ReadStorage};
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -1693,9 +1693,11 @@ where
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
| + | |
|
|
|
|
|
@@ -2380,6 +2382,7 @@ where
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/service/gossip.rs
@@ -1,9 +1,20 @@
|
|
|
|
| + | |
| + | |
|
|
| + | |
| + | |
| + | |
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -12,13 +23,17 @@ pub fn node(config: &Config, timestamp: Timestamp) -> NodeAnnouncement {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/service/message.rs
@@ -7,7 +7,7 @@ use radicle::storage::refs::RefsAt;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -54,6 +54,8 @@ impl Subscribe {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -64,6 +66,8 @@ pub struct NodeAnnouncement {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -125,11 +129,13 @@ impl wire::Encode for NodeAnnouncement {
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -137,18 +143,26 @@ impl wire::Encode for NodeAnnouncement {
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -330,10 +344,10 @@ impl fmt::Debug for AnnouncementMessage {
|
|
|
|
|
|
| - | |
| - | |
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -576,16 +590,18 @@ impl ZeroBytes {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| + | |
|
|
| - | |
| - | |
|
|
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -672,16 +688,18 @@ mod tests {
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/test/arbitrary.rs
@@ -2,6 +2,7 @@ use std::collections::HashSet;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -80,11 +81,13 @@ impl Arbitrary for Message {
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/test/environment.rs
@@ -20,8 +20,7 @@ use radicle::identity::{RepoId, Visibility};
|
|
|
|
|
|
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -134,7 +133,8 @@ impl Environment {
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/test/gossip.rs
@@ -1,11 +1,15 @@
| + | |
| + | |
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -28,11 +32,13 @@ pub fn messages(count: usize, now: LocalTime, delta: LocalDuration) -> Vec<Messa
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/test/peer.rs
@@ -10,6 +10,7 @@ use log::*;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -33,8 +34,7 @@ use crate::storage::{RemoteId, WriteStorage};
|
|
|
|
|
|
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -174,7 +174,8 @@ where
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -251,9 +252,11 @@ where
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
@@ -303,11 +306,13 @@ where
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
modified radicle-node/src/wire.rs
@@ -6,6 +6,7 @@ mod varint;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -54,6 +55,8 @@ pub enum Error {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -62,8 +65,8 @@ pub enum Error {
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -251,6 +254,12 @@ impl Encode for cyphernet::addr::tor::OnionAddrV3 {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -321,6 +330,13 @@ impl Decode for git::RefString {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/wire/frame.rs
@@ -2,10 +2,8 @@
|
|
|
|
|
|
| - | |
| + | |
|
|
| - | |
| - | |
|
|
|
|
|
@@ -193,16 +191,16 @@ impl TryFrom<u8> for StreamKind {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -222,14 +220,16 @@ impl Frame {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
| + | |
|
|
|
|
|
@@ -238,11 +238,11 @@ impl Frame {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -312,11 +312,11 @@ impl wire::Encode for Control {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -333,7 +333,7 @@ impl wire::Decode for Frame {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -354,7 +354,7 @@ impl wire::Decode for Frame {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/wire/message.rs
@@ -274,8 +274,8 @@ impl wire::Encode for Message {
|
|
|
|
|
|
| - | |
|
|
| + | |
|
|
|
|
|
@@ -317,8 +317,8 @@ impl wire::Decode for Message {
|
|
|
|
|
|
| - | |
|
|
| + | |
|
|
|
|
|
@@ -329,8 +329,8 @@ impl wire::Decode for Message {
|
|
|
|
|
|
| - | |
|
|
| + | |
|
|
|
|
|
@@ -341,8 +341,8 @@ impl wire::Decode for Message {
|
|
|
|
|
|
| - | |
|
|
| + | |
|
|
|
|
|
@@ -458,6 +458,7 @@ impl wire::Decode for ZeroBytes {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -502,11 +503,13 @@ mod tests {
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -555,10 +558,10 @@ mod tests {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/wire/protocol.rs
@@ -31,7 +31,6 @@ use crate::service;
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -419,7 +418,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -471,7 +470,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -839,15 +838,6 @@ where
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
@@ -1119,7 +1109,8 @@ where
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -1238,7 +1229,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1269,4 +1260,104 @@ mod test {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
modified radicle/src/node.rs
@@ -45,6 +45,8 @@ pub use features::Features;
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -217,6 +219,77 @@ impl PartialOrd for SyncStatus {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -232,6 +305,11 @@ impl Alias {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1283,6 +1361,27 @@ mod test {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle/src/node/address.rs
@@ -10,7 +10,7 @@ use localtime::LocalTime;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -120,6 +120,8 @@ impl<K: hash::Hash + Eq, V> DerefMut for AddressBook<K, V> {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -130,6 +132,8 @@ pub struct Node {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
modified radicle/src/node/address/store.rs
@@ -1,4 +1,5 @@
|
|
| + | |
|
|
|
|
|
@@ -7,6 +8,7 @@ use thiserror::Error;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -18,6 +20,8 @@ pub enum Error {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -28,6 +32,8 @@ pub enum Error {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -48,9 +54,11 @@ pub trait Store {
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
@@ -89,24 +97,30 @@ pub trait Store {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -207,26 +221,30 @@ impl Store for Database {
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -261,7 +279,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -278,12 +296,14 @@ impl Store for Database {
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -510,15 +530,34 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -528,8 +567,10 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
| + | |
|
|
|
|
|
@@ -541,9 +582,11 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
@@ -552,6 +595,7 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -566,6 +610,7 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -575,12 +620,12 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -593,6 +638,8 @@ mod test {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
@@ -604,17 +651,26 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -624,12 +680,21 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -639,6 +704,7 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -647,6 +713,7 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -666,15 +733,17 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -695,6 +764,7 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -711,11 +781,12 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -735,9 +806,19 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -762,6 +843,7 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -780,9 +862,11 @@ mod test {
|
|
|
|
|
|
| + | |
|
|
| - | |
| + | |
|
|
| + | |
|
|
|
|
|
modified radicle/src/node/config.rs
@@ -10,6 +10,9 @@ use crate::node;
|
|
|
|
|
|
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -63,14 +66,14 @@ pub enum Network {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle/src/node/db.rs
@@ -15,7 +15,9 @@ use std::{fmt, time};
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -31,6 +33,7 @@ const MIGRATIONS: &[&str] = &[
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -130,16 +133,19 @@ impl Database {
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|
|
| + | |
|
|
|
|
|
added radicle/src/node/db/migrations/6.sql
@@ -0,0 +1,3 @@
| + | |
| + | |
| + | |
modified radicle/src/profile.rs
@@ -27,7 +27,7 @@ use crate::node::policy::config::store::Read;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -318,7 +318,8 @@ impl Profile {
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
modified radicle/src/sql.rs
@@ -6,7 +6,7 @@ use sqlite::Value;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -39,7 +39,7 @@ impl TryFrom<&Value> for RepoId {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -65,7 +65,10 @@ impl TryFrom<&Value> for node::Features {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -82,7 +85,10 @@ impl TryFrom<&sql::Value> for Address {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -93,3 +99,23 @@ impl sql::BindableWithIndex for &Address {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
modified radicle/src/test/arbitrary.rs
@@ -19,7 +19,7 @@ use crate::identity::{
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -324,3 +324,12 @@ impl Arbitrary for Timestamp {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |