Avoid self-lookups in Authority Discovery (#6317)

* Ensure authority discovery avoids self-lookups.

Thereby additionally guard the `NetworkService` against
adding the local peer to the PSM or registering a
"known address" for the local peer.

* Clarify comments.

* See if returning errors is ok.
This commit is contained in:
Roman Borschel
2020-06-10 18:50:37 +02:00
committed by GitHub
parent 3ec4844616
commit 273f31b7aa
2 changed files with 43 additions and 9 deletions
@@ -294,13 +294,26 @@ where
.authorities(&id)
.map_err(Error::CallingRuntime)?;
for authority_id in authorities.iter() {
if let Some(metrics) = &self.metrics {
metrics.request.inc();
}
let local_keys = match &self.role {
Role::Authority(key_store) => {
key_store.read()
.sr25519_public_keys(key_types::AUTHORITY_DISCOVERY)
.into_iter()
.collect::<HashSet<_>>()
},
Role::Sentry => HashSet::new(),
};
self.network
.get_value(&hash_authority_id(authority_id.as_ref()));
for authority_id in authorities.iter() {
// Make sure we don't look up our own keys.
if !local_keys.contains(authority_id.as_ref()) {
if let Some(metrics) = &self.metrics {
metrics.request.inc();
}
self.network
.get_value(&hash_authority_id(authority_id.as_ref()));
}
}
Ok(())