node: Don't re-use timestamps
There are rare cases where ref announcements may be sent in close succession, and the current clock time is re-used. This will cause the second (newer) announcement to be ignored by peers.
We add a timestamp method that checks if the timestamp is re-used, and
increments it if so, ensuring that we always use a fresh one.
16 files changed
+263
-134
7fc3b73e
→
2b771921
modified radicle-cli/tests/commands.rs
@@ -1221,7 +1221,7 @@ fn rad_clone_partial_fail() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1231,7 +1231,7 @@ fn rad_clone_partial_fail() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1263,7 +1263,7 @@ fn rad_clone_connect() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/runtime.rs
@@ -176,9 +176,7 @@ impl Runtime {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -202,7 +200,7 @@ impl Runtime {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -218,7 +216,7 @@ impl Runtime {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/service.rs
@@ -393,8 +393,10 @@ pub struct Service<D, S, G> {
|
|
|
|
|
|
| - | |
| + | |
|
|
| + | |
| + | |
|
|
|
|
|
@@ -455,6 +457,7 @@ where
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -598,7 +601,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -629,7 +632,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -719,7 +722,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -779,7 +782,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1044,7 +1047,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1169,14 +1172,17 @@ where
|
|
|
|
|
|
| - | |
|
|
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1360,7 +1366,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1752,9 +1758,10 @@ where
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
| + | |
|
|
|
|
|
@@ -1775,8 +1782,8 @@ where
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -1787,7 +1794,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1804,7 +1811,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1860,12 +1867,12 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1891,8 +1898,7 @@ where
|
|
|
|
|
|
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -1901,13 +1907,15 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1924,9 +1932,10 @@ where
|
|
|
|
|
|
| - | |
| - | |
| + | |
|
|
| + | |
| + | |
|
|
|
|
|
@@ -1934,14 +1943,14 @@ where
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1955,7 +1964,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -2004,9 +2013,9 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
| - | |
| + | |
|
|
|
|
|
@@ -2079,9 +2088,16 @@ where
|
|
|
|
|
|
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -2090,23 +2106,7 @@ where
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
|
|
|
|
|
@@ -2114,7 +2114,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -2127,7 +2127,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/service/gossip/store.rs
@@ -1,3 +1,4 @@
| + | |
|
|
|
|
|
@@ -17,6 +18,9 @@ pub enum Error {
|
|
|
|
|
|
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -54,7 +58,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -66,9 +70,10 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -101,7 +106,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -119,10 +124,10 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -145,9 +150,9 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/service/message.rs
@@ -601,7 +601,7 @@ mod tests {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -621,7 +621,7 @@ mod tests {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -646,7 +646,7 @@ mod tests {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -669,7 +669,7 @@ mod tests {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/service/session.rs
@@ -6,7 +6,7 @@ use crate::node::Severity;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -15,7 +15,7 @@ pub enum Error {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/test/gossip.rs
@@ -29,7 +29,7 @@ pub fn messages(count: usize, now: LocalTime, delta: LocalDuration) -> Vec<Messa
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -41,7 +41,7 @@ pub fn messages(count: usize, now: LocalTime, delta: LocalDuration) -> Vec<Messa
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/test/peer.rs
@@ -174,7 +174,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -249,7 +249,7 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/tests.rs
@@ -60,7 +60,7 @@ use crate::{git, identity, rad, runtime, service, test};
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -260,7 +260,7 @@ fn test_inventory_sync() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -374,7 +374,7 @@ fn test_inventory_pruning() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -567,8 +567,8 @@ fn test_announcement_rebroadcast_timestamp_filtered() {
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -946,7 +946,7 @@ fn test_inventory_relay() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1274,7 +1274,7 @@ fn test_seed_repo_subscribe() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1292,7 +1292,7 @@ fn test_fetch_missing_inventory_on_gossip() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1317,7 +1317,7 @@ fn test_fetch_missing_inventory_on_schedule() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/wire.rs
@@ -28,6 +28,7 @@ use crate::service::filter;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -527,6 +528,20 @@ impl Decode for tor::OnionAddrV3 {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle/src/node.rs
@@ -11,6 +11,7 @@ pub mod policy;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -41,6 +42,7 @@ pub use db::Database;
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -65,9 +67,6 @@ pub const NODE_ANNOUNCEMENT_FILE: &str = "announcement.wire.debug";
|
|
|
|
|
|
| - | |
| - | |
| - | |
|
|
|
|
|
modified radicle/src/node/address/store.rs
@@ -89,7 +89,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -185,7 +185,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -200,7 +200,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -265,7 +265,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -284,7 +284,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -435,7 +435,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -455,7 +455,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -490,7 +490,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -517,7 +517,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -572,7 +572,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -620,7 +620,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -660,7 +660,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle/src/node/routing.rs
@@ -97,7 +97,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -108,7 +108,6 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -130,7 +129,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -184,7 +183,6 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
|
|
|
|
|
@@ -194,7 +192,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -243,7 +241,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -265,7 +263,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -284,7 +282,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -306,7 +304,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -325,15 +323,15 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -345,14 +343,14 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -363,18 +361,18 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -389,7 +387,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -402,7 +400,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -417,7 +415,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -425,16 +423,16 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
| - | |
| + | |
|
|
|
|
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -446,7 +444,7 @@ mod test {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle/src/node/seed/store.rs
@@ -64,7 +64,7 @@ impl Store for Database {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
added radicle/src/node/timestamp.rs
@@ -0,0 +1,108 @@
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
modified radicle/src/test/arbitrary.rs
@@ -19,7 +19,7 @@ use crate::identity::{
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -312,3 +312,9 @@ impl Arbitrary for Alias {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |