node: Change behavior on conflicting connections
Instead of dropping the existing connection(s), we drop the same connection on both sides, by using a simple rule that yields the same result whether the node sees the connection as inbound or outbound.
The trick is to use something that both nodes agree on, for instance whos public key is greater than the other, and use that information to close the same connection on both sides.
7 files changed
+273
-113
e695d06b
→
0bcec941
modified radicle-node/src/runtime/handle.rs
@@ -5,7 +5,7 @@ use std::sync::Arc;
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -264,6 +264,11 @@ impl radicle::node::Handle for Handle {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/service.rs
@@ -1148,8 +1148,19 @@ where
|
|
|
|
|
|
| - | |
| + | |
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1157,13 +1168,6 @@ where
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
@@ -1210,7 +1214,9 @@ where
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -2307,6 +2313,10 @@ pub enum DisconnectReason {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -2333,6 +2343,8 @@ impl fmt::Display for DisconnectReason {
|
|
|
|
|
|
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/test/simulator.rs
@@ -396,7 +396,8 @@ impl<S: WriteStorage + 'static, G: Signer> Simulation<S, G> {
|
|
|
|
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/tests.rs
@@ -900,7 +900,11 @@ fn test_refs_announcement_offline() {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1079,7 +1083,7 @@ fn test_persistent_peer_reconnect_attempt() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1116,7 +1120,11 @@ fn test_persistent_peer_reconnect_success() {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1163,7 +1171,7 @@ fn test_maintain_connections() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1197,7 +1205,11 @@ fn test_maintain_connections_transient() {
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -1212,9 +1224,9 @@ fn test_maintain_connections_failed_attempt() {
|
|
|
|
|
|
| - | |
|
|
| - | |
| + | |
| + | |
|
|
|
|
|
@@ -1222,7 +1234,7 @@ fn test_maintain_connections_failed_attempt() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -1236,7 +1248,7 @@ fn test_maintain_connections_failed_attempt() {
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
modified radicle-node/src/tests/e2e.rs
@@ -1,7 +1,7 @@
|
|
|
|
|
|
| - | |
| + | |
|
|
|
|
|
@@ -769,10 +769,6 @@ fn test_concurrent_fetches() {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
@@ -780,33 +776,61 @@ fn test_connection_crossing() {
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle-node/src/wire/protocol.rs
@@ -178,6 +178,7 @@ enum Peer {
|
|
|
|
|
|
| + | |
|
|
|
|
|
@@ -201,6 +202,13 @@ impl Peer {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -211,20 +219,6 @@ impl Peer {
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
@@ -263,9 +257,9 @@ impl Peers {
|
|
|
|
|
|
| - | |
| + | |
|
|
| - | |
| + | |
|
|
|
|
|
@@ -336,22 +330,44 @@ where
|
|
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -435,8 +451,11 @@ where
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -542,36 +561,10 @@ where
|
|
|
|
|
|
| + | |
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
| - | |
|
|
|
|
|
@@ -581,9 +574,97 @@ where
|
|
|
|
|
|
| - | |
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -726,8 +807,11 @@ where
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -748,7 +832,9 @@ where
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -756,7 +842,13 @@ where
|
|
|
|
|
|
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
@@ -847,8 +939,11 @@ where
|
|
|
|
|
|
| - | |
| - | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
modified radicle/src/node.rs
@@ -506,10 +506,21 @@ impl Command {
|
|
|
|
|
|
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
| + | |
|
|
|
|
|
|
|
|
| + | |
|
|
|
|
|