Tidy networking crates

This commit is contained in:
Age Manning 2019-03-19 22:53:51 +11:00
parent dc014d07bc
commit e7f87112fb
No known key found for this signature in database
GPG Key ID: 05EED64B79E06A93
9 changed files with 26 additions and 45 deletions

View File

@ -3,7 +3,7 @@ use beacon_chain::{
db::{ClientDB, DiskDB, MemoryDB}, db::{ClientDB, DiskDB, MemoryDB},
fork_choice::BitwiseLMDGhost, fork_choice::BitwiseLMDGhost,
initialise, initialise,
slot_clock::{SlotClock, SystemTimeSlotClock, TestingSlotClock}, slot_clock::{SlotClock, SystemTimeSlotClock},
BeaconChain, BeaconChain,
}; };
use fork_choice::ForkChoice; use fork_choice::ForkChoice;

View File

@ -11,7 +11,7 @@ pub use client_types::ClientTypes;
//use beacon_chain::BeaconChain; //use beacon_chain::BeaconChain;
use beacon_chain::BeaconChain; use beacon_chain::BeaconChain;
use exit_future::{Exit, Signal}; use exit_future::Signal;
use network::Service as NetworkService; use network::Service as NetworkService;
use slog::o; use slog::o;
use std::marker::PhantomData; use std::marker::PhantomData;
@ -55,7 +55,7 @@ impl<TClientType: ClientTypes> Client<TClientType> {
// TODO: Add beacon_chain reference to network parameters // TODO: Add beacon_chain reference to network parameters
let network_config = &config.net_conf; let network_config = &config.net_conf;
let network_logger = log.new(o!("Service" => "Network")); let network_logger = log.new(o!("Service" => "Network"));
let (network, network_send) = NetworkService::new( let (network, _network_send) = NetworkService::new(
beacon_chain.clone(), beacon_chain.clone(),
network_config, network_config,
executor, executor,

View File

@ -1,12 +1,8 @@
use crate::Client; use crate::Client;
use crate::ClientTypes; use crate::ClientTypes;
use db::ClientDB;
use exit_future::Exit; use exit_future::Exit;
use fork_choice::ForkChoice;
use futures::{Future, Stream}; use futures::{Future, Stream};
use network::NodeMessage;
use slog::{debug, info, o}; use slog::{debug, info, o};
use slot_clock::SlotClock;
use std::sync::{Arc, Mutex}; use std::sync::{Arc, Mutex};
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use tokio::runtime::TaskExecutor; use tokio::runtime::TaskExecutor;
@ -27,12 +23,13 @@ pub fn run<T: ClientTypes>(client: &Client<T>, executor: TaskExecutor, exit: Exi
// build heartbeat logic here // build heartbeat logic here
let heartbeat = move |_| { let heartbeat = move |_| {
info!(log, "Temp heartbeat output"); info!(log, "Temp heartbeat output");
//TODO: Remove this logic. Testing only
let mut count = counter.lock().unwrap(); let mut count = counter.lock().unwrap();
*count += 1; *count += 1;
if *count % 5 == 0 { if *count % 5 == 0 {
debug!(log, "Sending Message"); debug!(log, "Sending Message");
network.send_message(String::from("Testing network channel")) network.send_message();
} }
Ok(()) Ok(())

View File

@ -2,10 +2,8 @@
pub mod beacon_chain; pub mod beacon_chain;
pub mod error; pub mod error;
mod message_handler; mod message_handler;
mod messages;
mod service; mod service;
pub mod sync; pub mod sync;
pub use libp2p::NetworkConfig; pub use libp2p::NetworkConfig;
pub use messages::NodeMessage;
pub use service::Service; pub use service::Service;

View File

@ -1,11 +1,9 @@
use crate::beacon_chain::BeaconChain; use crate::beacon_chain::BeaconChain;
use crate::error; use crate::error;
use crate::messages::NodeMessage;
use crate::service::{NetworkMessage, OutgoingMessage}; use crate::service::{NetworkMessage, OutgoingMessage};
use crate::sync::SimpleSync; use crate::sync::SimpleSync;
use crossbeam_channel::{unbounded as channel, Sender}; use crossbeam_channel::{unbounded as channel, Sender};
use futures::future; use futures::future;
use futures::prelude::*;
use libp2p::{ use libp2p::{
rpc::{RPCMethod, RPCRequest, RPCResponse}, rpc::{RPCMethod, RPCRequest, RPCResponse},
HelloMessage, PeerId, RPCEvent, HelloMessage, PeerId, RPCEvent,
@ -15,7 +13,6 @@ use slog::{debug, trace};
use std::collections::HashMap; use std::collections::HashMap;
use std::sync::Arc; use std::sync::Arc;
use std::time::{Duration, Instant}; use std::time::{Duration, Instant};
use types::Hash256;
/// Timeout for RPC requests. /// Timeout for RPC requests.
const REQUEST_TIMEOUT: Duration = Duration::from_secs(30); const REQUEST_TIMEOUT: Duration = Duration::from_secs(30);
@ -45,8 +42,6 @@ pub enum HandlerMessage {
PeerDialed(PeerId), PeerDialed(PeerId),
/// Peer has disconnected, /// Peer has disconnected,
PeerDisconnected(PeerId), PeerDisconnected(PeerId),
/// A Node message has been received.
Message(PeerId, NodeMessage),
/// An RPC response/request has been received. /// An RPC response/request has been received.
RPC(PeerId, RPCEvent), RPC(PeerId, RPCEvent),
} }

View File

@ -1,15 +0,0 @@
use libp2p::PeerId;
use libp2p::{HelloMessage, RPCEvent};
use types::{Hash256, Slot};
//TODO: This module can be entirely replaced in the RPC rewrite
/// Messages between nodes across the network.
//TODO: Remove this in the RPC rewrite
#[derive(Debug, Clone)]
pub enum NodeMessage {
RPC(RPCEvent),
BlockRequest,
// TODO: only for testing - remove
Message(String),
}

View File

@ -1,7 +1,6 @@
use crate::beacon_chain::BeaconChain; use crate::beacon_chain::BeaconChain;
use crate::error; use crate::error;
use crate::message_handler::{HandlerMessage, MessageHandler}; use crate::message_handler::{HandlerMessage, MessageHandler};
use crate::messages::NodeMessage;
use crate::NetworkConfig; use crate::NetworkConfig;
use crossbeam_channel::{unbounded as channel, Sender, TryRecvError}; use crossbeam_channel::{unbounded as channel, Sender, TryRecvError};
use futures::prelude::*; use futures::prelude::*;
@ -53,21 +52,22 @@ impl Service {
executor, executor,
log, log,
)?; )?;
let network = Service { let network_service = Service {
libp2p_exit, libp2p_exit,
network_send: network_send.clone(), network_send: network_send.clone(),
}; };
Ok((Arc::new(network), network_send)) Ok((Arc::new(network_service), network_send))
} }
// TODO: Testing only // TODO: Testing only
pub fn send_message(&self, message: String) { pub fn send_message(&self) {
let node_message = NodeMessage::Message(message); self.network_send
self.network_send.send(NetworkMessage::Send( .send(NetworkMessage::Send(
PeerId::random(), PeerId::random(),
OutgoingMessage::NotifierTest, OutgoingMessage::NotifierTest,
)); ))
.unwrap();
} }
} }

View File

@ -4,7 +4,7 @@ mod run;
use clap::{App, Arg}; use clap::{App, Arg};
use client::ClientConfig; use client::ClientConfig;
use slog::{o, Drain}; use slog::{error, o, Drain};
fn main() { fn main() {
let decorator = slog_term::TermDecorator::new().build(); let decorator = slog_term::TermDecorator::new().build();
@ -42,5 +42,8 @@ fn main() {
// invalid arguments, panic // invalid arguments, panic
let config = ClientConfig::parse_args(matches, &logger).unwrap(); let config = ClientConfig::parse_args(matches, &logger).unwrap();
run::run_beacon_node(config, logger); match run::run_beacon_node(config, &logger) {
Ok(_) => {}
Err(e) => error!(logger, "Beacon node failed because {:?}", e),
}
} }

View File

@ -1,4 +1,4 @@
use client::client_types::{StandardClientType, TestingClientType}; use client::client_types::TestingClientType;
use client::error; use client::error;
use client::{notifier, Client, ClientConfig}; use client::{notifier, Client, ClientConfig};
use futures::sync::oneshot; use futures::sync::oneshot;
@ -7,7 +7,7 @@ use slog::info;
use std::cell::RefCell; use std::cell::RefCell;
use tokio::runtime::Builder; use tokio::runtime::Builder;
pub fn run_beacon_node(config: ClientConfig, log: slog::Logger) -> error::Result<()> { pub fn run_beacon_node(config: ClientConfig, log: &slog::Logger) -> error::Result<()> {
let mut runtime = Builder::new() let mut runtime = Builder::new()
.name_prefix("main-") .name_prefix("main-")
.build() .build()
@ -25,7 +25,8 @@ pub fn run_beacon_node(config: ClientConfig, log: slog::Logger) -> error::Result
if let Some(ctrlc_send) = ctrlc_send_c.try_borrow_mut().unwrap().take() { if let Some(ctrlc_send) = ctrlc_send_c.try_borrow_mut().unwrap().take() {
ctrlc_send.send(()).expect("Error sending ctrl-c message"); ctrlc_send.send(()).expect("Error sending ctrl-c message");
} }
}); })
.map_err(|e| format!("Could not set ctrlc hander: {:?}", e))?;
let (exit_signal, exit) = exit_future::signal(); let (exit_signal, exit) = exit_future::signal();
@ -35,7 +36,9 @@ pub fn run_beacon_node(config: ClientConfig, log: slog::Logger) -> error::Result
let client: Client<TestingClientType> = Client::new(config, log.clone(), &executor)?; let client: Client<TestingClientType> = Client::new(config, log.clone(), &executor)?;
notifier::run(&client, executor, exit); notifier::run(&client, executor, exit);
runtime.block_on(ctrlc); runtime
.block_on(ctrlc)
.map_err(|e| format!("Ctrlc oneshot failed: {:?}", e))?;
// perform global shutdown operations. // perform global shutdown operations.
info!(log, "Shutting down.."); info!(log, "Shutting down..");