client/authority-discovery: Remove sentry node logic (#7368)

* client/authority-discovery: Remove sentry node logic

The notion of sentry nodes has been deprecated (see [1] for details).
This commit removes support for sentry nodes in the
`client/authority-discovery` module.

While removing `Role::Sentry` this commit also introduces
`Role::Discover`, allowing a node to discover addresses of authorities
without publishing ones own addresses. This will be needed in Polkadot
for collator nodes.

[1] https://github.com/paritytech/substrate/issues/6845

* client/authority-discovery/service: Improve PeerId comment
This commit is contained in:
Max Inden
2020-10-26 11:06:56 +01:00
committed by GitHub
parent 52a49e7f51
commit 653868c01e
6 changed files with 69 additions and 214 deletions
@@ -303,9 +303,8 @@ fn new_registers_metrics() {
from_service,
test_api,
network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Authority(key_store.into()),
Role::PublishAndDiscover(key_store.into()),
Some(registry.clone()),
);
@@ -332,9 +331,8 @@ fn triggers_dht_get_query() {
from_service,
test_api,
network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Authority(key_store.into()),
Role::PublishAndDiscover(key_store.into()),
None,
);
@@ -381,9 +379,8 @@ fn publish_discover_cycle() {
from_service,
test_api,
network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Authority(key_store.into()),
Role::PublishAndDiscover(key_store.into()),
None,
);
@@ -412,9 +409,8 @@ fn publish_discover_cycle() {
from_service,
test_api,
network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Authority(key_store.into()),
Role::PublishAndDiscover(key_store.into()),
None,
);
@@ -442,6 +438,7 @@ fn publish_discover_cycle() {
pool.run();
}
/// Don't terminate when sender side of service channel is dropped. Terminate when network event
/// stream terminates.
#[test]
@@ -458,9 +455,8 @@ fn terminate_when_event_stream_terminates() {
from_service,
test_api,
network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Authority(key_store.into()),
Role::PublishAndDiscover(key_store.into()),
None,
).run();
futures::pin_mut!(worker);
@@ -485,7 +481,8 @@ fn terminate_when_event_stream_terminates() {
"Expect the authority discovery module to terminate once the \
sending side of the dht event channel is closed.",
);
});}
});
}
#[test]
fn dont_stop_polling_dht_event_stream_after_bogus_event() {
@@ -520,9 +517,8 @@ fn dont_stop_polling_dht_event_stream_after_bogus_event() {
from_service,
test_api,
network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Authority(Arc::new(key_store)),
Role::PublishAndDiscover(Arc::new(key_store)),
None,
);
@@ -569,79 +565,6 @@ fn dont_stop_polling_dht_event_stream_after_bogus_event() {
});
}
/// In the scenario of a validator publishing the address of its sentry node to
/// the DHT, said sentry node should not add its own Multiaddr to the
/// peerset "authority" priority group.
#[test]
fn never_add_own_address_to_priority_group() {
let validator_key_store = KeyStore::new();
let validator_public = block_on(validator_key_store
.sr25519_generate_new(key_types::AUTHORITY_DISCOVERY, None))
.unwrap();
let sentry_network: Arc<TestNetwork> = Arc::new(Default::default());
let sentry_multiaddr = {
let peer_id = sentry_network.local_peer_id();
let address: Multiaddr = "/ip6/2001:db8:0:0:0:0:0:2/tcp/30333".parse().unwrap();
address.with(multiaddr::Protocol::P2p(peer_id.into()))
};
// Address of some other sentry node of `validator`.
let random_multiaddr = {
let peer_id = PeerId::random();
let address: Multiaddr = "/ip6/2001:db8:0:0:0:0:0:1/tcp/30333".parse().unwrap();
address.with(multiaddr::Protocol::P2p(
peer_id.into(),
))
};
let dht_event = block_on(build_dht_event(
vec![sentry_multiaddr, random_multiaddr.clone()],
validator_public.into(),
&validator_key_store,
));
let (_dht_event_tx, dht_event_rx) = channel(1);
let sentry_test_api = Arc::new(TestApi {
// Make sure the sentry node identifies its validator as an authority.
authorities: vec![validator_public.into()],
});
let (_to_worker, from_service) = mpsc::channel(0);
let mut sentry_worker = Worker::new(
from_service,
sentry_test_api,
sentry_network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Sentry,
None,
);
block_on(sentry_worker.refill_pending_lookups_queue()).unwrap();
sentry_worker.start_new_lookups();
sentry_worker.handle_dht_value_found_event(vec![dht_event]).unwrap();
block_on(sentry_worker.set_priority_group()).unwrap();
assert_eq!(
sentry_network.set_priority_group_call.lock().unwrap().len(), 1,
"Expect authority discovery to set the priority set.",
);
assert_eq!(
sentry_network.set_priority_group_call.lock().unwrap()[0],
(
"authorities".to_string(),
HashSet::from_iter(vec![random_multiaddr.clone()].into_iter(),)
),
"Expect authority discovery to only add `random_multiaddr`."
);
}
#[test]
fn limit_number_of_addresses_added_to_cache_per_authority() {
let remote_key_store = KeyStore::new();
@@ -670,9 +593,8 @@ fn limit_number_of_addresses_added_to_cache_per_authority() {
from_service,
Arc::new(TestApi { authorities: vec![remote_public.into()] }),
Arc::new(TestNetwork::default()),
vec![],
Box::pin(dht_event_rx),
Role::Sentry,
Role::Discover,
None,
);
@@ -713,7 +635,6 @@ fn do_not_cache_addresses_without_peer_id() {
let (_dht_event_tx, dht_event_rx) = channel(1);
let local_test_api = Arc::new(TestApi {
// Make sure the sentry node identifies its validator as an authority.
authorities: vec![remote_public.into()],
});
let local_network: Arc<TestNetwork> = Arc::new(Default::default());
@@ -724,9 +645,8 @@ fn do_not_cache_addresses_without_peer_id() {
from_service,
local_test_api,
local_network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Authority(Arc::new(local_key_store)),
Role::PublishAndDiscover(Arc::new(local_key_store)),
None,
);
@@ -759,9 +679,8 @@ fn addresses_to_publish_adds_p2p() {
authorities: vec![],
}),
network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Authority(Arc::new(KeyStore::new())),
Role::PublishAndDiscover(Arc::new(KeyStore::new())),
Some(prometheus_endpoint::Registry::new()),
);
@@ -794,9 +713,8 @@ fn addresses_to_publish_respects_existing_p2p_protocol() {
authorities: vec![],
}),
network.clone(),
vec![],
Box::pin(dht_event_rx),
Role::Authority(Arc::new(KeyStore::new())),
Role::PublishAndDiscover(Arc::new(KeyStore::new())),
Some(prometheus_endpoint::Registry::new()),
);
@@ -836,9 +754,8 @@ fn lookup_throttling() {
from_service,
Arc::new(TestApi { authorities: remote_public_keys.clone() }),
network.clone(),
vec![],
dht_event_rx.boxed(),
Role::Sentry,
Role::Discover,
Some(default_registry().clone()),
);