fix trust-graph

This commit is contained in:
folex
2021-01-07 19:41:41 +03:00
parent e3d6fb4823
commit f837ceb91e
4 changed files with 24 additions and 8 deletions

View File

@ -97,7 +97,7 @@ libp2p-websocket = { package = "fluence-fork-libp2p-websocket", version = "0.27.
async-std = "1.6.2" async-std = "1.6.2"
env_logger = "0.8.1" env_logger = "0.8.1"
tokio = { version = "0.3", features = ["io-util", "io-std", "stream", "macros", "rt", "rt-multi-thread"] } tokio = { version = "0.3", features = ["io-util", "io-std", "stream", "macros", "rt", "rt-multi-thread"] }
trust-graph = "0.1.0" trust-graph = "0.2.0"
[workspace] [workspace]
members = [ members = [

View File

@ -33,7 +33,7 @@ void = "1.0"
bs58 = "0.3.0" bs58 = "0.3.0"
derivative = "2.0.2" derivative = "2.0.2"
trust-graph = "0.1.0" trust-graph = "0.2.0"
prometheus = "0.9.0" prometheus = "0.9.0"
[dev-dependencies] [dev-dependencies]

View File

@ -48,7 +48,7 @@ use libp2p_swarm::{
NotifyHandler, NotifyHandler,
PollParameters, PollParameters,
}; };
use log::{info, debug, warn}; use log::{info, debug, warn, LevelFilter};
use smallvec::SmallVec; use smallvec::SmallVec;
use std::{borrow::Cow, error, iter, time::Duration}; use std::{borrow::Cow, error, iter, time::Duration};
use std::collections::{HashSet, VecDeque}; use std::collections::{HashSet, VecDeque};
@ -878,9 +878,16 @@ where
let kbuckets = &mut self.kbuckets; let kbuckets = &mut self.kbuckets;
let connected = &mut self.connected_peers; let connected = &mut self.connected_peers;
let local_addrs = &self.local_addrs; let local_addrs = &self.local_addrs;
let trust = &self.trust;
self.store.providers(key) self.store.providers(key)
.into_iter() .into_iter()
.filter_map(move |p| { .filter_map(move |p| {
let provider_id = if log::max_level() >= LevelFilter::Debug {
p.provider.to_string()
} else {
String::new()
};
let kad_peer = if &p.provider != source { let kad_peer = if &p.provider != source {
let node_id = p.provider; let node_id = p.provider;
let connection_ty = if connected.contains(&node_id) { let connection_ty = if connected.contains(&node_id) {
@ -892,8 +899,8 @@ where
if &node_id == kbuckets.local_key().preimage() { if &node_id == kbuckets.local_key().preimage() {
// The provider is either the local node and we fill in // The provider is either the local node and we fill in
// the local addresses on demand, // the local addresses on demand,
let self_key = self.kbuckets.local_public_key(); let self_key = kbuckets.local_public_key();
let certificates = self.trust.get_all_certs(&self_key, &[]); let certificates = trust.get_all_certs(&self_key, &[]);
let multiaddrs = local_addrs.iter().cloned().collect::<Vec<_>>(); let multiaddrs = local_addrs.iter().cloned().collect::<Vec<_>>();
Some(KadPeer { Some(KadPeer {
public_key: self_key, public_key: self_key,
@ -913,8 +920,15 @@ where
} else { } else {
p.addresses p.addresses
}; };
let certificates = node_id.as_public_key().map(|provider_pk| let certificates = node_id.as_public_key().and_then(|provider_pk|
self.trust.get_all_certs(provider_pk, &[]) match provider_pk {
libp2p_core::identity::PublicKey::Ed25519(pk) =>
Some(trust.get_all_certs(pk, &[])),
key => {
log::warn!("Provider {} has a non-Ed25519 public key: {:?}", node_id, key);
None
}
}
).unwrap_or_default(); ).unwrap_or_default();
KadPeer { KadPeer {
@ -935,7 +949,7 @@ where
debug!( debug!(
"Local provider for {}: {}; source: {}; found? {}", "Local provider for {}: {}; source: {}; found? {}",
bs58::encode(key).into_string(), bs58::encode(key).into_string(),
p.provider, provider_id,
source, source,
kad_peer.is_some() kad_peer.is_some()
); );

View File

@ -162,9 +162,11 @@ impl Metrics {
KademliaHandlerEvent::GetProvidersRes { .. } => ("get_providers_res", Response), KademliaHandlerEvent::GetProvidersRes { .. } => ("get_providers_res", Response),
KademliaHandlerEvent::GetRecordRes { .. } => ("get_record_res", Response), KademliaHandlerEvent::GetRecordRes { .. } => ("get_record_res", Response),
KademliaHandlerEvent::PutRecordRes { .. } => ("put_record_res", Response), KademliaHandlerEvent::PutRecordRes { .. } => ("put_record_res", Response),
KademliaHandlerEvent::ProtocolConfirmed { .. } => ("protocol_confirmed", Response),
// error // error
KademliaHandlerEvent::QueryError { .. } => ("query_error_from_handler", Error), KademliaHandlerEvent::QueryError { .. } => ("query_error_from_handler", Error),
}; };
self.with_metrics(|m| { self.with_metrics(|m| {