aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/members.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/swarm/members.rs')
-rw-r--r--src/swarm/members.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/swarm/members.rs b/src/swarm/members.rs
index 3bfb9cf..94db4c9 100644
--- a/src/swarm/members.rs
+++ b/src/swarm/members.rs
@@ -135,6 +135,28 @@ pub(crate) fn addresses(doc: &AutoCommit, pk: &str) -> Vec<String> {
}
}
+/// What the member list tells this node besides who its neighbours are: where members
+/// are (`learn_addresses`), what they call themselves (`set_aliases`), and the relays
+/// listed (`relays`). Done whenever the neighbours are recomputed (`topology::refresh`).
+pub(crate) fn apply(state: &AppState, doc: &AutoCommit) {
+ learn_addresses(state, doc);
+ set_aliases(state, aliases(doc));
+ state.transport.learn_relays(&relays(doc));
+}
+
+/// Hands the members' `aliases` to the logger, under every name that stands for each:
+/// its node ID, and its addresses (`logging`, which renames them bare too).
+fn set_aliases(state: &AppState, aliases: HashMap<String, String>) {
+ let mut names = HashMap::new();
+ for (member, alias) in aliases {
+ for address in state.transport.identities_of(&member) {
+ names.insert(address, alias.clone());
+ }
+ names.insert(member, alias);
+ }
+ crate::logging::set_aliases(names);
+}
+
/// Hands every other member's addresses to the transport (`Transport::learn_addresses`):
/// the member list is how a node finds where members it never met are.
pub(crate) fn learn_addresses(state: &AppState, doc: &AutoCommit) {