Skip to content

Commit 06c339c

Browse files
protocols/kad: Refactor KademliaEvent (#2321)
Rename `KademliaEvent::InboundRequestServed` to `KademliaEvent::InboundRequest` and move `InboundPutRecordRequest` into `InboundRequest::PutRecord` and `InboundAddProviderRequest` into `InboundRequest::AddProvider`. Co-authored-by: supercmmetry <[email protected]>
1 parent ff5d455 commit 06c339c

File tree

8 files changed

+89
-64
lines changed

8 files changed

+89
-64
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
## Version 0.41.0 [unreleased]
4646

4747
- Update individual crates.
48+
- `libp2p-kad`
4849
- `libp2p-websocket`
4950
- Forward `wasm-bindgen` feature to `futures-timer`, `instant`, `parking_lot`, `getrandom/js` and `rand/wasm-bindgen`.
5051

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ libp2p-core = { version = "0.30.0-rc.2", path = "core", default-features = fals
7575
libp2p-floodsub = { version = "0.31.0-rc.1", path = "protocols/floodsub", optional = true }
7676
libp2p-gossipsub = { version = "0.33.0-rc.1", path = "./protocols/gossipsub", optional = true }
7777
libp2p-identify = { version = "0.31.0-rc.2", path = "protocols/identify", optional = true }
78-
libp2p-kad = { version = "0.32.0-rc.2", path = "protocols/kad", optional = true }
78+
libp2p-kad = { version = "0.33.0", path = "protocols/kad", optional = true }
7979
libp2p-metrics = { version = "0.1.0-rc.1", path = "misc/metrics", optional = true }
8080
libp2p-mplex = { version = "0.30.0-rc.1", path = "muxers/mplex", optional = true }
8181
libp2p-noise = { version = "0.33.0-rc.1", path = "transports/noise", optional = true }

misc/metrics/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ ping = ["libp2p-ping"]
1717
[dependencies]
1818
libp2p-core= { version = "0.30.0-rc.1", path = "../../core" }
1919
libp2p-identify = { version = "0.31.0-rc.1", path = "../../protocols/identify", optional = true }
20-
libp2p-kad = { version = "0.32.0-rc.1", path = "../../protocols/kad", optional = true }
20+
libp2p-kad = { version = "0.33.0", path = "../../protocols/kad", optional = true }
2121
libp2p-ping = { version = "0.31.0-rc.1", path = "../../protocols/ping", optional = true }
2222
libp2p-swarm = { version = "0.31.0-rc.1", path = "../../swarm" }
2323
open-metrics-client = "0.12.0"

misc/metrics/src/kad.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ impl super::Recorder<libp2p_kad::KademliaEvent> for super::Metrics {
258258
}
259259
}
260260

261-
libp2p_kad::KademliaEvent::InboundRequestServed { request } => {
261+
libp2p_kad::KademliaEvent::InboundRequest { request } => {
262262
self.kad
263263
.inbound_requests
264264
.get_or_create(&request.into())

protocols/kad/CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1-
# 0.32.1 [unreleased]
1+
# 0.33.0 [unreleased]
22

33
- Use `instant` and `futures-timer` instead of `wasm-timer` (see [PR 2245]).
44

5+
- Rename `KademliaEvent::InboundRequestServed` to `KademliaEvent::InboundRequest` and move
6+
`InboundPutRecordRequest` into `InboundRequest::PutRecord` and `InboundAddProviderRequest` into
7+
`InboundRequest::AddProvider` (see [PR 2297]).
8+
59
[PR 2245]: https://github.com/libp2p/rust-libp2p/pull/2245
10+
[PR 2297]: https://github.com/libp2p/rust-libp2p/pull/2297
611

712
# 0.32.0-rc.2 [2021-10-15]
813

protocols/kad/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name = "libp2p-kad"
33
edition = "2018"
44
description = "Kademlia protocol for libp2p"
5-
version = "0.32.1"
5+
version = "0.33.0"
66
authors = ["Parity Technologies <[email protected]>"]
77
license = "MIT"
88
repository = "https://github.com/libp2p/rust-libp2p"

protocols/kad/src/behaviour.rs

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ pub enum KademliaStoreInserts {
148148
/// the record is forwarded immediately to the [`RecordStore`].
149149
Unfiltered,
150150
/// Whenever a (provider) record is received, an event is emitted.
151-
/// Provider records generate a [`KademliaEvent::InboundAddProviderRequest`],
152-
/// normal records generate a [`KademliaEvent::InboundPutRecordRequest`].
151+
/// Provider records generate a [`InboundRequest::AddProvider`] under [`KademliaEvent::InboundRequest`],
152+
/// normal records generate a [`InboundRequest::PutRecord`] under [`KademliaEvent::InboundRequest`].
153153
///
154154
/// When deemed valid, a (provider) record needs to be explicitly stored in
155155
/// the [`RecordStore`] via [`RecordStore::put`] or [`RecordStore::add_provider`],
@@ -1625,11 +1625,23 @@ where
16251625
// is a waste of resources.
16261626
match self.record_filtering {
16271627
KademliaStoreInserts::Unfiltered => match self.store.put(record.clone()) {
1628-
Ok(()) => debug!(
1629-
"Record stored: {:?}; {} bytes",
1630-
record.key,
1631-
record.value.len()
1632-
),
1628+
Ok(()) => {
1629+
debug!(
1630+
"Record stored: {:?}; {} bytes",
1631+
record.key,
1632+
record.value.len()
1633+
);
1634+
self.queued_events
1635+
.push_back(NetworkBehaviourAction::GenerateEvent(
1636+
KademliaEvent::InboundRequest {
1637+
request: InboundRequest::PutRecord {
1638+
source,
1639+
connection,
1640+
record: None,
1641+
},
1642+
},
1643+
));
1644+
}
16331645
Err(e) => {
16341646
info!("Record not stored: {:?}", e);
16351647
self.queued_events
@@ -1638,16 +1650,19 @@ where
16381650
handler: NotifyHandler::One(connection),
16391651
event: KademliaHandlerIn::Reset(request_id),
16401652
});
1653+
16411654
return;
16421655
}
16431656
},
16441657
KademliaStoreInserts::FilterBoth => {
16451658
self.queued_events
16461659
.push_back(NetworkBehaviourAction::GenerateEvent(
1647-
KademliaEvent::InboundPutRecordRequest {
1648-
source,
1649-
connection,
1650-
record: record.clone(),
1660+
KademliaEvent::InboundRequest {
1661+
request: InboundRequest::PutRecord {
1662+
source,
1663+
connection,
1664+
record: Some(record.clone()),
1665+
},
16511666
},
16521667
));
16531668
}
@@ -1686,12 +1701,24 @@ where
16861701
KademliaStoreInserts::Unfiltered => {
16871702
if let Err(e) = self.store.add_provider(record) {
16881703
info!("Provider record not stored: {:?}", e);
1704+
return;
16891705
}
1706+
1707+
self.queued_events
1708+
.push_back(NetworkBehaviourAction::GenerateEvent(
1709+
KademliaEvent::InboundRequest {
1710+
request: InboundRequest::AddProvider { record: None },
1711+
},
1712+
));
16901713
}
16911714
KademliaStoreInserts::FilterBoth => {
16921715
self.queued_events
16931716
.push_back(NetworkBehaviourAction::GenerateEvent(
1694-
KademliaEvent::InboundAddProviderRequest { record },
1717+
KademliaEvent::InboundRequest {
1718+
request: InboundRequest::AddProvider {
1719+
record: Some(record),
1720+
},
1721+
},
16951722
));
16961723
}
16971724
}
@@ -1951,7 +1978,7 @@ where
19511978

19521979
self.queued_events
19531980
.push_back(NetworkBehaviourAction::GenerateEvent(
1954-
KademliaEvent::InboundRequestServed {
1981+
KademliaEvent::InboundRequest {
19551982
request: InboundRequest::FindNode {
19561983
num_closer_peers: closer_peers.len(),
19571984
},
@@ -1982,7 +2009,7 @@ where
19822009

19832010
self.queued_events
19842011
.push_back(NetworkBehaviourAction::GenerateEvent(
1985-
KademliaEvent::InboundRequestServed {
2012+
KademliaEvent::InboundRequest {
19862013
request: InboundRequest::GetProvider {
19872014
num_closer_peers: closer_peers.len(),
19882015
num_provider_peers: provider_peers.len(),
@@ -2039,13 +2066,6 @@ where
20392066
}
20402067

20412068
self.provider_received(key, provider);
2042-
2043-
self.queued_events
2044-
.push_back(NetworkBehaviourAction::GenerateEvent(
2045-
KademliaEvent::InboundRequestServed {
2046-
request: InboundRequest::AddProvider {},
2047-
},
2048-
));
20492069
}
20502070

20512071
KademliaHandlerEvent::GetRecord { key, request_id } => {
@@ -2066,7 +2086,7 @@ where
20662086

20672087
self.queued_events
20682088
.push_back(NetworkBehaviourAction::GenerateEvent(
2069-
KademliaEvent::InboundRequestServed {
2089+
KademliaEvent::InboundRequest {
20702090
request: InboundRequest::GetRecord {
20712091
num_closer_peers: closer_peers.len(),
20722092
present_locally: record.is_some(),
@@ -2150,13 +2170,6 @@ where
21502170

21512171
KademliaHandlerEvent::PutRecord { record, request_id } => {
21522172
self.record_received(source, connection, request_id, record);
2153-
2154-
self.queued_events
2155-
.push_back(NetworkBehaviourAction::GenerateEvent(
2156-
KademliaEvent::InboundRequestServed {
2157-
request: InboundRequest::PutRecord {},
2158-
},
2159-
));
21602173
}
21612174

21622175
KademliaHandlerEvent::PutRecordRes { user_data, .. } => {
@@ -2371,26 +2384,12 @@ pub struct PeerRecord {
23712384
/// See [`NetworkBehaviour::poll`].
23722385
#[derive(Debug)]
23732386
pub enum KademliaEvent {
2374-
/// A peer sent a [`KademliaHandlerIn::PutRecord`] request and filtering is enabled.
2375-
///
2376-
/// See [`KademliaStoreInserts`] and [`KademliaConfig::set_record_filtering`].
2377-
InboundPutRecordRequest {
2378-
source: PeerId,
2379-
connection: ConnectionId,
2380-
record: Record,
2381-
},
2382-
2383-
/// A peer sent a [`KademliaHandlerIn::AddProvider`] request and filtering [`KademliaStoreInserts::FilterBoth`] is enabled.
2384-
///
2385-
/// See [`KademliaStoreInserts`] and [`KademliaConfig::set_record_filtering`] for details..
2386-
InboundAddProviderRequest { record: ProviderRecord },
2387-
23882387
/// An inbound request has been received and handled.
23892388
//
23902389
// Note on the difference between 'request' and 'query': A request is a
23912390
// single request-response style exchange with a single remote peer. A query
23922391
// is made of multiple requests across multiple remote peers.
2393-
InboundRequestServed { request: InboundRequest },
2392+
InboundRequest { request: InboundRequest },
23942393

23952394
/// An outbound query has produced a result.
23962395
OutboundQueryCompleted {
@@ -2464,15 +2463,26 @@ pub enum InboundRequest {
24642463
num_closer_peers: usize,
24652464
num_provider_peers: usize,
24662465
},
2467-
/// Request to store a peer as a provider.
2468-
AddProvider {},
2466+
/// A peer sent a [`KademliaHandlerIn::AddProvider`] request.
2467+
/// If filtering [`KademliaStoreInserts::FilterBoth`] is enabled, the [`ProviderRecord`] is
2468+
/// included.
2469+
///
2470+
/// See [`KademliaStoreInserts`] and [`KademliaConfig::set_record_filtering`] for details..
2471+
AddProvider { record: Option<ProviderRecord> },
24692472
/// Request to retrieve a record.
24702473
GetRecord {
24712474
num_closer_peers: usize,
24722475
present_locally: bool,
24732476
},
2474-
/// Request to store a record.
2475-
PutRecord {},
2477+
/// A peer sent a [`KademliaHandlerIn::PutRecord`] request.
2478+
/// If filtering [`KademliaStoreInserts::FilterBoth`] is enabled, the [`Record`] is included.
2479+
///
2480+
/// See [`KademliaStoreInserts`] and [`KademliaConfig::set_record_filtering`].
2481+
PutRecord {
2482+
source: PeerId,
2483+
connection: ConnectionId,
2484+
record: Option<Record>,
2485+
},
24762486
}
24772487

24782488
/// The results of Kademlia queries.

protocols/kad/src/behaviour/test.rs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -602,19 +602,28 @@ fn put_record() {
602602
}
603603
}
604604
Poll::Ready(Some(SwarmEvent::Behaviour(
605-
KademliaEvent::InboundPutRecordRequest { record, .. },
605+
KademliaEvent::InboundRequest {
606+
request: InboundRequest::PutRecord { record, .. },
607+
},
606608
))) => {
607-
assert_ne!(
608-
swarm.behaviour().record_filtering,
609-
KademliaStoreInserts::Unfiltered
610-
);
611609
if !drop_records {
612-
// Accept the record
613-
swarm
614-
.behaviour_mut()
615-
.store_mut()
616-
.put(record)
617-
.expect("record is stored");
610+
if let Some(record) = record {
611+
assert_eq!(
612+
swarm.behaviour().record_filtering,
613+
KademliaStoreInserts::FilterBoth
614+
);
615+
// Accept the record
616+
swarm
617+
.behaviour_mut()
618+
.store_mut()
619+
.put(record)
620+
.expect("record is stored");
621+
} else {
622+
assert_eq!(
623+
swarm.behaviour().record_filtering,
624+
KademliaStoreInserts::Unfiltered
625+
);
626+
}
618627
}
619628
}
620629
// Ignore any other event.

0 commit comments

Comments
 (0)