kad: Expose all peer records of GET_VALUE query#96
Merged
Conversation
Signed-off-by: Alexandru Vasile <[email protected]>
Signed-off-by: Alexandru Vasile <[email protected]>
Signed-off-by: Alexandru Vasile <[email protected]>
Signed-off-by: Alexandru Vasile <[email protected]>
Signed-off-by: Alexandru Vasile <[email protected]>
FIND_VALUE queryGET_VALUE query
alexggh
reviewed
Apr 30, 2024
src/protocol/libp2p/kademlia/mod.rs
Outdated
| pub use query::QueryId; | ||
| pub use record::{Key as RecordKey, PeerRecord, Record}; | ||
|
|
||
| use self::handle::RecordsType; |
There was a problem hiding this comment.
pub, so we can use this type to deconstruct it, or maybe we can try to keep the libp2p semantics for PeerRecord and we don't need this extra type:
/// A record either received by the given peer or retrieved from the local
/// record store.
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PeerRecord {
/// The peer from whom the record was received. `None` if the record was
/// retrieved from local storage.
pub peer: Option<PeerId>,
pub record: Record,
}
Signed-off-by: Alexandru Vasile <[email protected]>
alexggh
added a commit
to paritytech/polkadot-sdk
that referenced
this pull request
Apr 30, 2024
Signed-off-by: Alexandru Gheorghe <[email protected]>
4 tasks
github-merge-queue bot
pushed a commit
to paritytech/polkadot-sdk
that referenced
this pull request
May 2, 2024
This PR updates the litep2p crate to the latest version. This fixes the build for developers that want to perform `cargo update` on all their dependencies: #4343, by porting the latest changes. The peer records were introduced to litep2p to be able to distinguish and update peers with outdated records. It is going to be properly used in substrate via: #3786, however that is pending the commit to merge on litep2p master: paritytech/litep2p#96. Closes: #4343 --------- Signed-off-by: Alexandru Vasile <[email protected]>
jmg-duarte
pushed a commit
to eigerco/polkadot-sdk
that referenced
this pull request
May 8, 2024
This PR updates the litep2p crate to the latest version. This fixes the build for developers that want to perform `cargo update` on all their dependencies: paritytech#4343, by porting the latest changes. The peer records were introduced to litep2p to be able to distinguish and update peers with outdated records. It is going to be properly used in substrate via: paritytech#3786, however that is pending the commit to merge on litep2p master: paritytech/litep2p#96. Closes: paritytech#4343 --------- Signed-off-by: Alexandru Vasile <[email protected]>
dmitry-markin
approved these changes
May 9, 2024
Comment on lines
+642
to
+654
| // Considering this gives a view of all peers and their records, some peers may have | ||
| // outdated records. Store only the record which is backed by most | ||
| // peers. | ||
| let rec = records | ||
| .iter() | ||
| .map(|peer_record| &peer_record.record) | ||
| .fold(HashMap::new(), |mut acc, rec| { | ||
| *acc.entry(rec).or_insert(0) += 1; | ||
| acc | ||
| }) | ||
| .into_iter() | ||
| .max_by_key(|(_, v)| *v) | ||
| .map(|(k, _)| k); |
Collaborator
There was a problem hiding this comment.
Would be nice to have tests for correctly updating the local store and also discarding the expired records. At least as a follow-up planned / TODO issue if it's too much work to implement straight away.
bgallois
pushed a commit
to duniter/duniter-polkadot-sdk
that referenced
this pull request
May 10, 2024
This PR updates the litep2p crate to the latest version. This fixes the build for developers that want to perform `cargo update` on all their dependencies: paritytech#4343, by porting the latest changes. The peer records were introduced to litep2p to be able to distinguish and update peers with outdated records. It is going to be properly used in substrate via: paritytech#3786, however that is pending the commit to merge on litep2p master: paritytech/litep2p#96. Closes: paritytech#4343 --------- Signed-off-by: Alexandru Vasile <[email protected]>
koushiro
pushed a commit
to koushiro-contrib/polkadot-sdk
that referenced
this pull request
May 11, 2024
This PR updates the litep2p crate to the latest version. This fixes the build for developers that want to perform `cargo update` on all their dependencies: paritytech#4343, by porting the latest changes. The peer records were introduced to litep2p to be able to distinguish and update peers with outdated records. It is going to be properly used in substrate via: paritytech#3786, however that is pending the commit to merge on litep2p master: paritytech/litep2p#96. Closes: paritytech#4343 --------- Signed-off-by: Alexandru Vasile <[email protected]>
Signed-off-by: Alexandru Vasile <[email protected]>
Signed-off-by: Alexandru Vasile <[email protected]>
Signed-off-by: Alexandru Vasile <[email protected]>
Collaborator
Author
|
Thanks @dmitry-markin for the review 🙏 I've added to tests to validate the kademlia behavior in this case:
|
Signed-off-by: Alexandru Vasile <[email protected]>
lexnv
added a commit
that referenced
this pull request
May 16, 2024
This PR refactors the `GetRecord` query to make it more robust. - Avoid panics on unwraps and unimplemented logic - Separate config immutable variables from main query logic - Simplifies logic of `next_action` method - Private methods for internal logic Builds on top of: #96 cc @paritytech/networking --------- Signed-off-by: Alexandru Vasile <[email protected]>
Merged
lexnv
added a commit
that referenced
this pull request
May 24, 2024
## [0.5.0] - 2023-05-24 This is a small patch release that makes the `FindNode` command a bit more robst: - The `FindNode` command now retains the K (replication factor) best results. - The `FindNode` command has been updated to handle errors and unexpected states without panicking. ### Changed - kad: Refactor FindNode query, keep K best results and add tests ([#114](#114)) ## [0.4.0] - 2023-05-23 This release introduces breaking changes to the litep2p crate, primarily affecting the `kad` module. Key updates include: - The `GetRecord` command now exposes all peer records, not just the latest one. - A new `RecordType` has been introduced to clearly distinguish between locally stored records and those discovered from the network. Significant refactoring has been done to enhance the efficiency and accuracy of the `kad` module. The updates are as follows: - The `GetRecord` command now exposes all peer records. - The `GetRecord` command has been updated to handle errors and unexpected states without panicking. Additionally, we've improved code coverage in the `kad` module by adding more tests. ### Added - Add release checklist ([#115](#115)) - Re-export `multihash` & `multiaddr` types ([#79](#79)) - kad: Expose all peer records of `GET_VALUE` query ([#96](#96)) ### Changed - multistream_select: Remove unneeded changelog.md ([#116](#116)) - kad: Refactor `GetRecord` query and add tests ([#97](#97)) - kad/store: Set memory-store on an incoming record for PutRecordTo ([#88](#88)) - multistream: Dialer deny multiple /multistream/1.0.0 headers ([#61](#61)) - kad: Limit MemoryStore entries ([#78](#78)) - Refactor WebRTC code ([#51](#51)) - Revert "Bring `rustfmt.toml` in sync with polkadot-sdk (#71)" ([#74](#74)) - cargo: Update str0m from 0.4.1 to 0.5.1 ([#95](#95)) ### Fixed - Fix clippy ([#83](#83)) - crypto: Don't panic on unsupported key types ([#84](#84)) --------- Signed-off-by: Alexandru Vasile <[email protected]>
TarekkMA
pushed a commit
to moonbeam-foundation/polkadot-sdk
that referenced
this pull request
Aug 2, 2024
This PR updates the litep2p crate to the latest version. This fixes the build for developers that want to perform `cargo update` on all their dependencies: paritytech#4343, by porting the latest changes. The peer records were introduced to litep2p to be able to distinguish and update peers with outdated records. It is going to be properly used in substrate via: paritytech#3786, however that is pending the commit to merge on litep2p master: paritytech/litep2p#96. Closes: paritytech#4343 --------- Signed-off-by: Alexandru Vasile <[email protected]>
68 tasks
Intel-driver
added a commit
to Intel-driver/litep2p
that referenced
this pull request
Dec 24, 2025
This PR refactors the `GetRecord` query to make it more robust. - Avoid panics on unwraps and unimplemented logic - Separate config immutable variables from main query logic - Simplifies logic of `next_action` method - Private methods for internal logic Builds on top of: paritytech/litep2p#96 cc @paritytech/networking --------- Signed-off-by: Alexandru Vasile <[email protected]>
Intel-driver
added a commit
to Intel-driver/litep2p
that referenced
this pull request
Dec 24, 2025
## [0.5.0] - 2023-05-24 This is a small patch release that makes the `FindNode` command a bit more robst: - The `FindNode` command now retains the K (replication factor) best results. - The `FindNode` command has been updated to handle errors and unexpected states without panicking. ### Changed - kad: Refactor FindNode query, keep K best results and add tests ([#114](paritytech/litep2p#114)) ## [0.4.0] - 2023-05-23 This release introduces breaking changes to the litep2p crate, primarily affecting the `kad` module. Key updates include: - The `GetRecord` command now exposes all peer records, not just the latest one. - A new `RecordType` has been introduced to clearly distinguish between locally stored records and those discovered from the network. Significant refactoring has been done to enhance the efficiency and accuracy of the `kad` module. The updates are as follows: - The `GetRecord` command now exposes all peer records. - The `GetRecord` command has been updated to handle errors and unexpected states without panicking. Additionally, we've improved code coverage in the `kad` module by adding more tests. ### Added - Add release checklist ([#115](paritytech/litep2p#115)) - Re-export `multihash` & `multiaddr` types ([#79](paritytech/litep2p#79)) - kad: Expose all peer records of `GET_VALUE` query ([#96](paritytech/litep2p#96)) ### Changed - multistream_select: Remove unneeded changelog.md ([#116](paritytech/litep2p#116)) - kad: Refactor `GetRecord` query and add tests ([#97](paritytech/litep2p#97)) - kad/store: Set memory-store on an incoming record for PutRecordTo ([#88](paritytech/litep2p#88)) - multistream: Dialer deny multiple /multistream/1.0.0 headers ([#61](paritytech/litep2p#61)) - kad: Limit MemoryStore entries ([#78](paritytech/litep2p#78)) - Refactor WebRTC code ([#51](paritytech/litep2p#51)) - Revert "Bring `rustfmt.toml` in sync with polkadot-sdk (#71)" ([#74](paritytech/litep2p#74)) - cargo: Update str0m from 0.4.1 to 0.5.1 ([#95](paritytech/litep2p#95)) ### Fixed - Fix clippy ([#83](paritytech/litep2p#83)) - crypto: Don't panic on unsupported key types ([#84](paritytech/litep2p#84)) --------- Signed-off-by: Alexandru Vasile <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR extends the
GetRecordSucessvariant of kad queries to provide all the query information.Previously, only the last stored query record was returned to the user.
In the libp2p crate, an event is generated for every found record. However, litep2p responds only when the query finishes.
Records are extended to offer similar information back to the user while sending a minimum number of events.
RecordsTypeis introduced to avoid confusion about records extracted from the local store and records found on the networkkad/querysince we now operate with a multitude of records and potentially nonecc @paritytech/networking