Upgrade to tokio 0.3 (#1839)

## Description

This PR updates Lighthouse to tokio 0.3. It includes a number of dependency updates and some structural changes as to how we create and spawn tasks.

This also brings with it a number of various improvements:

- Discv5 update
- Libp2p update
- Fix for recompilation issues
- Improved UPnP port mapping handling
- Futures dependency update
- Log downgrade to traces for rejecting peers when we've reached our max



Co-authored-by: blacktemplar <blacktemplar@a1.net>
This commit is contained in:
Age Manning
2020-11-28 05:30:57 +00:00
parent 5a3b94cbb4
commit a567f788bd
81 changed files with 3666 additions and 2762 deletions

View File

@@ -5,9 +5,9 @@ authors = ["Paul Hauner <paul@paulhauner.com>"]
edition = "2018"
[dependencies]
tokio = { version = "0.2.22", features = ["time"] }
tokio = { version = "0.3.2", features = ["time"] }
web3 = "0.11.0"
futures = { version = "0.3.5", features = ["compat"] }
futures = { version = "0.3.7", features = ["compat"] }
types = { path = "../../consensus/types"}
serde_json = "1.0.58"
deposit_contract = { path = "../../common/deposit_contract"}

View File

@@ -13,7 +13,7 @@ use deposit_contract::{
use futures::compat::Future01CompatExt;
use ganache::GanacheInstance;
use std::time::Duration;
use tokio::time::delay_for;
use tokio::time::sleep;
use types::DepositData;
use types::{test_utils::generate_deterministic_keypair, EthSpec, Hash256, Keypair, Signature};
use web3::contract::{Contract, Options};
@@ -220,7 +220,7 @@ impl DepositContract {
/// Peforms many deposits, each preceded by a delay.
pub async fn deposit_multiple(&self, deposits: Vec<DelayThenDeposit>) -> Result<(), String> {
for deposit in deposits.into_iter() {
delay_for(deposit.delay).await;
sleep(deposit.delay).await;
self.deposit_async(deposit.deposit).await?;
}
Ok(())

View File

@@ -13,7 +13,7 @@ tempdir = "0.3.7"
reqwest = { version = "0.10.8", features = ["native-tls-vendored"] }
url = "2.1.1"
serde = "1.0.116"
futures = "0.3.5"
futures = "0.3.7"
genesis = { path = "../../beacon_node/genesis" }
eth2 = { path = "../../common/eth2" }
validator_client = { path = "../../validator_client" }

View File

@@ -86,6 +86,7 @@ pub fn testing_client_config() -> ClientConfig {
// Setting ports to `0` means that the OS will choose some available port.
client_config.network.libp2p_port = 0;
client_config.network.discovery_port = 0;
client_config.network.upnp_enabled = false;
client_config.http_api.enabled = true;
client_config.http_api.listen_port = 0;
client_config.websocket_server.enabled = true;

View File

@@ -12,9 +12,10 @@ eth1 = {path = "../../beacon_node/eth1"}
types = { path = "../../consensus/types" }
validator_client = { path = "../../validator_client" }
parking_lot = "0.11.0"
futures = "0.3.5"
tokio = "0.2.22"
futures = "0.3.7"
tokio = "0.3.2"
eth1_test_rig = { path = "../eth1_test_rig" }
env_logger = "0.7.1"
clap = "2.33.3"
rayon = "1.4.1"
tokio-compat-02 = "0.1"

View File

@@ -46,13 +46,13 @@ pub async fn verify_first_finalization<E: EthSpec>(
/// Delays for `epochs`, plus half a slot extra.
pub async fn epoch_delay(epochs: Epoch, slot_duration: Duration, slots_per_epoch: u64) {
let duration = slot_duration * (epochs.as_u64() * slots_per_epoch) as u32 + slot_duration / 2;
tokio::time::delay_for(duration).await
tokio::time::sleep(duration).await
}
/// Delays for `slots`, plus half a slot extra.
async fn slot_delay(slots: Slot, slot_duration: Duration) {
let duration = slot_duration * slots.as_u64() as u32 + slot_duration / 2;
tokio::time::delay_for(duration).await;
tokio::time::sleep(duration).await;
}
/// Verifies that all beacon nodes in the given network have a head state that has a finalized

View File

@@ -197,6 +197,12 @@ pub fn run_eth1_sim(matches: &ArgMatches) -> Result<(), String> {
Ok::<(), String>(())
};
env.runtime().block_on(main_future).unwrap();
env.runtime()
.block_on(tokio_compat_02::FutureExt::compat(main_future))
.unwrap();
env.fire_signal();
env.shutdown_on_idle();
Ok(())
}

View File

@@ -8,7 +8,7 @@ use node_test_rig::{
use rayon::prelude::*;
use std::net::{IpAddr, Ipv4Addr};
use std::time::{Duration, SystemTime, UNIX_EPOCH};
use tokio::time::{delay_until, Instant};
use tokio::time::{sleep_until, Instant};
use types::{Epoch, EthSpec, MainnetEthSpec};
pub fn run_no_eth1_sim(matches: &ArgMatches) -> Result<(), String> {
@@ -111,7 +111,7 @@ pub fn run_no_eth1_sim(matches: &ArgMatches) -> Result<(), String> {
* The processes that will run checks on the network as it runs.
*/
let checks_fut = async {
delay_until(genesis_instant).await;
sleep_until(genesis_instant).await;
let (finalization, block_prod) = futures::join!(
// Check that the chain finalizes at the first given opportunity.
@@ -156,6 +156,11 @@ pub fn run_no_eth1_sim(matches: &ArgMatches) -> Result<(), String> {
Ok::<(), String>(())
};
env.runtime().block_on(main_future).unwrap();
env.runtime()
.block_on(tokio_compat_02::FutureExt::compat(main_future))
.unwrap();
env.fire_signal();
env.shutdown_on_idle();
Ok(())
}