Skip to content
This repository has been archived by the owner on Jun 25, 2021. It is now read-only.

Commit

Permalink
fix: restore EldersChange to a previous version
Browse files Browse the repository at this point in the history
- Also removes Genesis event.
- Also updates sn_messaging and sn_data_types versions.
BREAKING CHANGE: Events removed and event members changed.
  • Loading branch information
oetyng committed Mar 31, 2021
1 parent 7a73187 commit 0a85b87
Show file tree
Hide file tree
Showing 12 changed files with 54 additions and 83 deletions.
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ qp2p = "~0.10.1"
rand = "~0.7.3"
rand_chacha = "~0.2.2"
resource_proof = "0.8.0"
sn_messaging = "~9.0.0"
sn_data_types = "~0.17.0"
sn_messaging = "~12.0.0"
sn_data_types = "~0.18.0"
thiserror = "1.0.23"
tokio = "1.3.0"
xor_name = "1.1.0"
Expand Down
11 changes: 5 additions & 6 deletions examples/minimal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -223,9 +223,6 @@ fn run_node(index: usize, mut node: Routing, mut event_stream: EventStream) -> J
// Handles the event emitted by the node.
async fn handle_event(index: usize, node: &mut Routing, event: Event) -> bool {
match event {
Event::Genesis => {
info!("Node #{} is Genesis", index);
}
Event::MemberJoined {
name,
previous_name,
Expand All @@ -240,13 +237,15 @@ async fn handle_event(index: usize, node: &mut Routing, event: Event) -> bool {
info!("Node #{} member left - name: {}, age: {}", index, name, age);
}
Event::EldersChanged {
prefix,
key,
sibling_key,
elders,
sibling_elders,
self_status_change,
} => {
info!(
"Node #{} elders changed - prefix: {:b}, key: {:?}, sibling elders: {:?}, elders: {:?}, node elder status change: {:?}",
index, elders.prefix, elders.key, sibling_elders, elders.elders, self_status_change
"Node #{} elders changed - prefix: {:b}, key: {:?}, sibling key: {:?}, elders: {:?}, node elder status change: {:?}",
index, prefix, key, sibling_key, elders, self_status_change
);
}
Event::MessageReceived {
Expand Down
10 changes: 6 additions & 4 deletions examples/stress.rs
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,8 @@ impl Network {
}
Event::Routing { id, event } => match event {
RoutingEvent::EldersChanged {
prefix: new_prefix,
key,
elders,
self_status_change,
..
Expand All @@ -311,12 +313,12 @@ impl Network {
..
}) = self.nodes.get_mut(&id)
{
*prefix = elders.prefix;
*prefix = new_prefix;

if elders.elders.contains(name) {
if elders.contains(name) {
*elder = Some(ElderState {
key: elders.key,
num_elders: elders.elders.len(),
key,
num_elders: elders.len(),
});
} else {
*elder = None;
Expand Down
51 changes: 14 additions & 37 deletions src/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,34 +32,6 @@ pub enum NodeElderChange {
None,
}

///
#[derive(Debug, Clone, PartialEq)]
pub struct Elders {
/// The prefix of the section.
pub prefix: Prefix,
/// The BLS public key of a section.
pub key: bls::PublicKey,
/// The set of elders of a section.
pub elders: BTreeSet<XorName>,
}

impl Elders {
/// The BLS public key
pub fn key(&self) -> sn_data_types::PublicKey {
sn_data_types::PublicKey::Bls(self.key)
}

/// The BLS based name
pub fn name(&self) -> XorName {
self.key().into()
}

/// The prefix based address
pub fn address(&self) -> XorName {
self.prefix.name()
}
}

/// An Event raised by a `Node` or `Client` via its event sender.
///
/// These are sent by sn_routing to the library's user. It allows the user to handle requests and
Expand All @@ -69,8 +41,6 @@ impl Elders {
/// been reached, i.e. enough members of the section have sent the same message.
#[allow(clippy::large_enum_variant)]
pub enum Event {
/// This is the very first node in a network.
Genesis,
/// Received a message.
MessageReceived {
/// The content of the message.
Expand Down Expand Up @@ -100,11 +70,15 @@ pub enum Event {
},
/// The set of elders in our section has changed.
EldersChanged {
/// The Elders of our section.
elders: Elders,
/// The Elders of the sibling section, if this event is fired during a split.
/// The prefix of our section.
prefix: Prefix,
/// The BLS public key of our section.
key: bls::PublicKey,
/// The BLS public key of the sibling section, if this event is fired during a split.
/// Otherwise `None`.
sibling_elders: Option<Elders>,
sibling_key: Option<bls::PublicKey>,
/// The set of elders of our section.
elders: BTreeSet<XorName>,
/// Promoted, demoted or no change?
self_status_change: NodeElderChange,
},
Expand Down Expand Up @@ -138,7 +112,6 @@ pub enum Event {
impl Debug for Event {
fn fmt(&self, formatter: &mut Formatter) -> fmt::Result {
match self {
Self::Genesis => write!(formatter, "Genesis"),
Self::MessageReceived {
content, src, dst, ..
} => write!(
Expand All @@ -164,13 +137,17 @@ impl Debug for Event {
.field("age", age)
.finish(),
Self::EldersChanged {
prefix,
key,
sibling_key,
elders,
sibling_elders,
self_status_change,
} => formatter
.debug_struct("EldersChanged")
.field("prefix", prefix)
.field("key", key)
.field("sibling_key", sibling_key)
.field("elders", elders)
.field("sibling_elders", sibling_elders)
.field("self_status_change", self_status_change)
.finish(),
Self::RelocationStarted { previous_name } => formatter
Expand Down
2 changes: 1 addition & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ extern crate tracing;
// ############################################################################
pub use self::{
error::{Error, Result},
event::{Elders, Event, NodeElderChange, SendStream},
event::{Event, NodeElderChange, SendStream},
routing::{Config, EventStream, Routing},
section::{SectionChain, SectionChainError, MIN_AGE},
};
Expand Down
1 change: 1 addition & 0 deletions src/network/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ impl Network {
}

/// Get `EldersInfo` of a known section with the given prefix.
#[allow(unused)]
pub fn get(&self, prefix: &Prefix) -> Option<&EldersInfo> {
self.sections
.get(prefix)
Expand Down
26 changes: 5 additions & 21 deletions src/routing/core.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use crate::{
},
crypto, delivery_group,
error::{Error, Result},
event::{Elders, Event, NodeElderChange},
event::{Event, NodeElderChange},
message_filter::MessageFilter,
messages::{
JoinRequest, Message, MessageHash, MessageStatus, PlainMessage, ResourceProofResponse,
Expand Down Expand Up @@ -1734,20 +1734,8 @@ impl Core {
commands.extend(self.send_sync(self.section.clone(), self.network.clone())?);
}

let sibling_elders = if new.prefix != old.prefix {
if let Some(sibling_key) = self.section_key(&new.prefix.sibling()) {
if let Some(info) = self.network.get(&new.prefix.sibling()) {
Some(Elders {
prefix: new.prefix.sibling(),
key: *sibling_key,
elders: info.elders.keys().copied().collect(),
})
} else {
None
}
} else {
None
}
let sibling_key = if new.prefix != old.prefix {
self.section_key(&new.prefix.sibling()).copied()
} else {
None
};
Expand All @@ -1765,15 +1753,11 @@ impl Core {
NodeElderChange::None
};

let elders = Elders {
self.send_event(Event::EldersChanged {
prefix: new.prefix,
key: new.last_key,
sibling_key,
elders: self.section.elders_info().elders.keys().copied().collect(),
};

self.send_event(Event::EldersChanged {
elders,
sibling_elders,
self_status_change,
});
}
Expand Down
12 changes: 10 additions & 2 deletions src/routing/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ use self::{
use crate::{
crypto,
error::Result,
event::Event,
event::{Event, NodeElderChange},
messages::Message,
node::Node,
peer::Peer,
Expand Down Expand Up @@ -106,7 +106,15 @@ impl Routing {
let node = Node::new(keypair, comm.our_connection_info());
let state = Core::first_node(node, event_tx)?;

state.send_event(Event::Genesis);
let section = state.section();

state.send_event(Event::EldersChanged {
prefix: *section.prefix(),
key: *section.chain().last_key(),
sibling_key: None,
elders: section.elders_info().elders.keys().copied().collect(),
self_status_change: NodeElderChange::Promoted,
});

(state, comm, vec![])
} else {
Expand Down
12 changes: 6 additions & 6 deletions src/routing/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1282,9 +1282,9 @@ async fn handle_sync() -> Result<()> {
// Verify our `Section` got updated.
assert_matches!(
event_rx.recv().await,
Some(Event::EldersChanged { elders, .. }) => {
assert_eq!(elders.key, pk2);
assert_eq!(elders.elders, new_elders);
Some(Event::EldersChanged { key, elders, .. }) => {
assert_eq!(key, pk2);
assert_eq!(elders, new_elders);
}
);

Expand Down Expand Up @@ -1698,9 +1698,9 @@ async fn handle_elders_update() -> Result<()> {

assert_matches!(
event_rx.recv().await,
Some(Event::EldersChanged { elders, .. }) => {
assert_eq!(elders.key, pk1);
assert_eq!(elders.elders, elder_names1);
Some(Event::EldersChanged { key, elders, .. }) => {
assert_eq!(key, pk1);
assert_eq!(elders, elder_names1);
}
);

Expand Down
4 changes: 2 additions & 2 deletions tests/bootstrap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ async fn test_genesis_node() -> Result<()> {

assert_eq!(pub_key, node.public_key().await);

assert_next_event!(event_stream, Event::Genesis);
assert_next_event!(event_stream, Event::EldersChanged { .. });

assert!(node.is_elder().await);

Expand All @@ -46,7 +46,7 @@ async fn test_node_bootstrapping() -> Result<()> {

// spawn genesis node events listener
let genesis_handler = tokio::spawn(async move {
assert_next_event!(event_stream, Event::Genesis);
assert_next_event!(event_stream, Event::EldersChanged { .. });

assert_next_event!(event_stream, Event::MemberJoined { .. });
});
Expand Down
2 changes: 1 addition & 1 deletion tests/drop.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ async fn test_node_drop() -> Result<()> {
continue;
}

assert_event!(events, Event::EldersChanged { elders, .. } if elders.elders.len() == node_count);
assert_event!(events, Event::EldersChanged { elders, .. } if elders.len() == node_count);
}

// Drop one node
Expand Down
2 changes: 1 addition & 1 deletion tests/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ pub async fn create_connected_nodes(count: usize) -> Result<Vec<(Routing, EventS
..Default::default()
})
.await?;
assert_next_event!(event_stream, Event::Genesis);
assert_next_event!(event_stream, Event::EldersChanged { .. });

let bootstrap_contact = node.our_connection_info();

Expand Down

0 comments on commit 0a85b87

Please sign in to comment.