Update dependencies to get rid of the yanked deps (#4994)
* Initial attempt to upgrade hashbrown to latest to get rid of the crate warnings. * Replace `.expect()` usage with use of `const`. * Update ahash 0.7 as well * Remove unsafe code. * Update `lru` to 0.12 and fix release test errors. * Set non-blocking socket * Bump testcontainers to 0.15. * Fix lint --------- Co-authored-by: Michael Sproul <michael@sigmaprime.io>
This commit is contained in:
parent
f1113540d8
commit
b0c374c1ca
243
Cargo.lock
generated
243
Cargo.lock
generated
@ -130,9 +130,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ahash"
|
name = "ahash"
|
||||||
version = "0.7.6"
|
version = "0.7.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
|
checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom",
|
"getrandom",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
@ -141,13 +141,14 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ahash"
|
name = "ahash"
|
||||||
version = "0.8.3"
|
version = "0.8.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
|
checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"version_check",
|
"version_check",
|
||||||
|
"zerocopy",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -355,7 +356,7 @@ version = "0.16.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fdb8867f378f33f78a811a8eb9bf108ad99430d7aad43315dd9319c827ef6247"
|
checksum = "fdb8867f378f33f78a811a8eb9bf108ad99430d7aad43315dd9319c827ef6247"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"log",
|
"log",
|
||||||
"url",
|
"url",
|
||||||
"wildmatch",
|
"wildmatch",
|
||||||
@ -367,7 +368,7 @@ version = "0.24.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2"
|
checksum = "8d9a9bf8b79a749ee0b911b91b671cc2b6c670bdbc7e3dfd537576ddc94bb2a2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"log",
|
"log",
|
||||||
"url",
|
"url",
|
||||||
]
|
]
|
||||||
@ -403,18 +404,19 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "axum"
|
name = "axum"
|
||||||
version = "0.6.20"
|
version = "0.7.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
|
checksum = "202651474fe73c62d9e0a56c6133f7a0ff1dc1c8cf7a5b03381af2a26553ac9d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"axum-core",
|
"axum-core",
|
||||||
"bitflags 1.3.2",
|
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"http",
|
"http 1.0.0",
|
||||||
"http-body",
|
"http-body 1.0.0",
|
||||||
"hyper",
|
"http-body-util",
|
||||||
|
"hyper 1.0.1",
|
||||||
|
"hyper-util",
|
||||||
"itoa",
|
"itoa",
|
||||||
"matchit",
|
"matchit",
|
||||||
"memchr",
|
"memchr",
|
||||||
@ -435,17 +437,20 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "axum-core"
|
name = "axum-core"
|
||||||
version = "0.3.4"
|
version = "0.4.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
|
checksum = "77cb22c689c44d4c07b0ab44ebc25d69d8ae601a2f28fb8d672d344178fa17aa"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"http",
|
"http 1.0.0",
|
||||||
"http-body",
|
"http-body 1.0.0",
|
||||||
|
"http-body-util",
|
||||||
"mime",
|
"mime",
|
||||||
|
"pin-project-lite",
|
||||||
"rustversion",
|
"rustversion",
|
||||||
|
"sync_wrapper",
|
||||||
"tower-layer",
|
"tower-layer",
|
||||||
"tower-service",
|
"tower-service",
|
||||||
]
|
]
|
||||||
@ -528,7 +533,7 @@ dependencies = [
|
|||||||
"lazy_static",
|
"lazy_static",
|
||||||
"lighthouse_metrics",
|
"lighthouse_metrics",
|
||||||
"logging",
|
"logging",
|
||||||
"lru 0.7.8",
|
"lru 0.12.0",
|
||||||
"maplit",
|
"maplit",
|
||||||
"merkle_proof",
|
"merkle_proof",
|
||||||
"oneshot_broadcast",
|
"oneshot_broadcast",
|
||||||
@ -580,7 +585,7 @@ dependencies = [
|
|||||||
"genesis",
|
"genesis",
|
||||||
"hex",
|
"hex",
|
||||||
"http_api",
|
"http_api",
|
||||||
"hyper",
|
"hyper 1.0.1",
|
||||||
"lighthouse_network",
|
"lighthouse_network",
|
||||||
"lighthouse_version",
|
"lighthouse_version",
|
||||||
"monitoring_api",
|
"monitoring_api",
|
||||||
@ -2474,7 +2479,7 @@ dependencies = [
|
|||||||
"getrandom",
|
"getrandom",
|
||||||
"hashers",
|
"hashers",
|
||||||
"hex",
|
"hex",
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"parking_lot 0.11.2",
|
"parking_lot 0.11.2",
|
||||||
"pin-project",
|
"pin-project",
|
||||||
@ -2548,7 +2553,7 @@ dependencies = [
|
|||||||
"kzg",
|
"kzg",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"lighthouse_metrics",
|
"lighthouse_metrics",
|
||||||
"lru 0.7.8",
|
"lru 0.12.0",
|
||||||
"parking_lot 0.12.1",
|
"parking_lot 0.12.1",
|
||||||
"pretty_reqwest_error",
|
"pretty_reqwest_error",
|
||||||
"rand",
|
"rand",
|
||||||
@ -3052,7 +3057,7 @@ dependencies = [
|
|||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-sink",
|
"futures-sink",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"indexmap 1.9.3",
|
"indexmap 1.9.3",
|
||||||
"slab",
|
"slab",
|
||||||
"tokio",
|
"tokio",
|
||||||
@ -3060,6 +3065,25 @@ dependencies = [
|
|||||||
"tracing",
|
"tracing",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "h2"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e1d308f63daf4181410c242d34c11f928dcb3aa105852019e043c9d1f4e4368a"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fnv",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"futures-util",
|
||||||
|
"http 1.0.0",
|
||||||
|
"indexmap 2.0.2",
|
||||||
|
"slab",
|
||||||
|
"tokio",
|
||||||
|
"tokio-util 0.7.9",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "half"
|
name = "half"
|
||||||
version = "1.8.2"
|
version = "1.8.2"
|
||||||
@ -3087,7 +3111,7 @@ version = "0.11.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
|
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash 0.7.6",
|
"ahash 0.7.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3096,16 +3120,16 @@ version = "0.12.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
|
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash 0.7.6",
|
"ahash 0.7.7",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hashbrown"
|
name = "hashbrown"
|
||||||
version = "0.14.1"
|
version = "0.14.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
|
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash 0.8.3",
|
"ahash 0.8.6",
|
||||||
"allocator-api2",
|
"allocator-api2",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -3133,7 +3157,7 @@ version = "0.8.4"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
|
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hashbrown 0.14.1",
|
"hashbrown 0.14.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3145,7 +3169,7 @@ dependencies = [
|
|||||||
"base64 0.21.5",
|
"base64 0.21.5",
|
||||||
"bytes",
|
"bytes",
|
||||||
"headers-core",
|
"headers-core",
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"httpdate",
|
"httpdate",
|
||||||
"mime",
|
"mime",
|
||||||
"sha1",
|
"sha1",
|
||||||
@ -3157,7 +3181,7 @@ version = "0.2.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
|
checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"http",
|
"http 0.2.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3319,6 +3343,17 @@ dependencies = [
|
|||||||
"itoa",
|
"itoa",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"fnv",
|
||||||
|
"itoa",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "http-body"
|
name = "http-body"
|
||||||
version = "0.4.5"
|
version = "0.4.5"
|
||||||
@ -3326,7 +3361,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
|
checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"http",
|
"http 0.2.9",
|
||||||
|
"pin-project-lite",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http-body"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"http 1.0.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "http-body-util"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"futures-util",
|
||||||
|
"http 1.0.0",
|
||||||
|
"http-body 1.0.0",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -3353,7 +3411,7 @@ dependencies = [
|
|||||||
"lighthouse_network",
|
"lighthouse_network",
|
||||||
"lighthouse_version",
|
"lighthouse_version",
|
||||||
"logging",
|
"logging",
|
||||||
"lru 0.7.8",
|
"lru 0.12.0",
|
||||||
"network",
|
"network",
|
||||||
"operation_pool",
|
"operation_pool",
|
||||||
"parking_lot 0.12.1",
|
"parking_lot 0.12.1",
|
||||||
@ -3426,9 +3484,9 @@ dependencies = [
|
|||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"h2",
|
"h2 0.3.21",
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"http-body",
|
"http-body 0.4.5",
|
||||||
"httparse",
|
"httparse",
|
||||||
"httpdate",
|
"httpdate",
|
||||||
"itoa",
|
"itoa",
|
||||||
@ -3440,6 +3498,25 @@ dependencies = [
|
|||||||
"want",
|
"want",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hyper"
|
||||||
|
version = "1.0.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "403f9214f3e703236b221f1a9cd88ec8b4adfa5296de01ab96216361f4692f56"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"futures-channel",
|
||||||
|
"futures-util",
|
||||||
|
"h2 0.4.0",
|
||||||
|
"http 1.0.0",
|
||||||
|
"http-body 1.0.0",
|
||||||
|
"httparse",
|
||||||
|
"httpdate",
|
||||||
|
"itoa",
|
||||||
|
"pin-project-lite",
|
||||||
|
"tokio",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hyper-rustls"
|
name = "hyper-rustls"
|
||||||
version = "0.24.1"
|
version = "0.24.1"
|
||||||
@ -3447,8 +3524,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"
|
checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"hyper",
|
"hyper 0.14.27",
|
||||||
"rustls",
|
"rustls",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-rustls",
|
"tokio-rustls",
|
||||||
@ -3461,12 +3538,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
|
checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"hyper",
|
"hyper 0.14.27",
|
||||||
"native-tls",
|
"native-tls",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-native-tls",
|
"tokio-native-tls",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hyper-util"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9ca339002caeb0d159cc6e023dff48e199f081e42fa039895c7c6f38b37f2e9d"
|
||||||
|
dependencies = [
|
||||||
|
"bytes",
|
||||||
|
"futures-channel",
|
||||||
|
"futures-util",
|
||||||
|
"http 1.0.0",
|
||||||
|
"http-body 1.0.0",
|
||||||
|
"hyper 1.0.1",
|
||||||
|
"pin-project-lite",
|
||||||
|
"socket2 0.5.5",
|
||||||
|
"tokio",
|
||||||
|
"tower",
|
||||||
|
"tower-service",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iana-time-zone"
|
name = "iana-time-zone"
|
||||||
version = "0.1.58"
|
version = "0.1.58"
|
||||||
@ -3579,8 +3676,8 @@ dependencies = [
|
|||||||
"attohttpc 0.24.1",
|
"attohttpc 0.24.1",
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures",
|
"futures",
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"hyper",
|
"hyper 0.14.27",
|
||||||
"log",
|
"log",
|
||||||
"rand",
|
"rand",
|
||||||
"tokio",
|
"tokio",
|
||||||
@ -3667,7 +3764,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
|
checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"equivalent",
|
"equivalent",
|
||||||
"hashbrown 0.14.1",
|
"hashbrown 0.14.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -4585,7 +4682,7 @@ dependencies = [
|
|||||||
"libp2p-mplex",
|
"libp2p-mplex",
|
||||||
"lighthouse_metrics",
|
"lighthouse_metrics",
|
||||||
"lighthouse_version",
|
"lighthouse_version",
|
||||||
"lru 0.7.8",
|
"lru 0.12.0",
|
||||||
"lru_cache",
|
"lru_cache",
|
||||||
"parking_lot 0.12.1",
|
"parking_lot 0.12.1",
|
||||||
"prometheus-client",
|
"prometheus-client",
|
||||||
@ -4728,7 +4825,7 @@ version = "0.12.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1efa59af2ddfad1854ae27d75009d538d0998b4b2fd47083e743ac1a10e46c60"
|
checksum = "1efa59af2ddfad1854ae27d75009d538d0998b4b2fd47083e743ac1a10e46c60"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hashbrown 0.14.1",
|
"hashbrown 0.14.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -5158,7 +5255,7 @@ dependencies = [
|
|||||||
"lighthouse_metrics",
|
"lighthouse_metrics",
|
||||||
"lighthouse_network",
|
"lighthouse_network",
|
||||||
"logging",
|
"logging",
|
||||||
"lru 0.7.8",
|
"lru 0.12.0",
|
||||||
"lru_cache",
|
"lru_cache",
|
||||||
"matches",
|
"matches",
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
@ -6406,10 +6503,10 @@ dependencies = [
|
|||||||
"encoding_rs",
|
"encoding_rs",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"h2",
|
"h2 0.3.21",
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"http-body",
|
"http-body 0.4.5",
|
||||||
"hyper",
|
"hyper 0.14.27",
|
||||||
"hyper-rustls",
|
"hyper-rustls",
|
||||||
"hyper-tls",
|
"hyper-tls",
|
||||||
"ipnet",
|
"ipnet",
|
||||||
@ -6986,14 +7083,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_yaml"
|
name = "serde_yaml"
|
||||||
version = "0.8.26"
|
version = "0.9.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
|
checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 1.9.3",
|
"indexmap 2.0.2",
|
||||||
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
"yaml-rust",
|
"unsafe-libyaml",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -7158,7 +7256,7 @@ dependencies = [
|
|||||||
"lmdb-rkv",
|
"lmdb-rkv",
|
||||||
"lmdb-rkv-sys",
|
"lmdb-rkv-sys",
|
||||||
"logging",
|
"logging",
|
||||||
"lru 0.7.8",
|
"lru 0.12.0",
|
||||||
"maplit",
|
"maplit",
|
||||||
"parking_lot 0.12.1",
|
"parking_lot 0.12.1",
|
||||||
"rand",
|
"rand",
|
||||||
@ -7478,7 +7576,7 @@ dependencies = [
|
|||||||
"lazy_static",
|
"lazy_static",
|
||||||
"leveldb",
|
"leveldb",
|
||||||
"lighthouse_metrics",
|
"lighthouse_metrics",
|
||||||
"lru 0.7.8",
|
"lru 0.12.0",
|
||||||
"parking_lot 0.12.1",
|
"parking_lot 0.12.1",
|
||||||
"serde",
|
"serde",
|
||||||
"slog",
|
"slog",
|
||||||
@ -7740,8 +7838,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "testcontainers"
|
name = "testcontainers"
|
||||||
version = "0.14.0"
|
version = "0.15.0"
|
||||||
source = "git+https://github.com/testcontainers/testcontainers-rs/?rev=0f2c9851#0f2c985160e51a200cfc847097c15b8d85ed7df1"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f83d2931d7f521af5bae989f716c3fa43a6af9af7ec7a5e21b59ae40878cec00"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bollard-stubs",
|
"bollard-stubs",
|
||||||
"futures",
|
"futures",
|
||||||
@ -8354,6 +8453,12 @@ dependencies = [
|
|||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unsafe-libyaml"
|
||||||
|
version = "0.2.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unsigned-varint"
|
name = "unsigned-varint"
|
||||||
version = "0.6.0"
|
version = "0.6.0"
|
||||||
@ -8436,7 +8541,7 @@ dependencies = [
|
|||||||
"filesystem",
|
"filesystem",
|
||||||
"futures",
|
"futures",
|
||||||
"hex",
|
"hex",
|
||||||
"hyper",
|
"hyper 1.0.1",
|
||||||
"itertools",
|
"itertools",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libsecp256k1",
|
"libsecp256k1",
|
||||||
@ -8579,8 +8684,8 @@ dependencies = [
|
|||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"headers",
|
"headers",
|
||||||
"http",
|
"http 0.2.9",
|
||||||
"hyper",
|
"hyper 0.14.27",
|
||||||
"log",
|
"log",
|
||||||
"mime",
|
"mime",
|
||||||
"mime_guess",
|
"mime_guess",
|
||||||
@ -8733,7 +8838,7 @@ dependencies = [
|
|||||||
"eth2",
|
"eth2",
|
||||||
"hex",
|
"hex",
|
||||||
"http_api",
|
"http_api",
|
||||||
"hyper",
|
"hyper 1.0.1",
|
||||||
"log",
|
"log",
|
||||||
"logging",
|
"logging",
|
||||||
"network",
|
"network",
|
||||||
@ -9158,6 +9263,26 @@ dependencies = [
|
|||||||
"time",
|
"time",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zerocopy"
|
||||||
|
version = "0.7.29"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5d075cf85bbb114e933343e087b92f2146bac0d55b534cbb8188becf0039948e"
|
||||||
|
dependencies = [
|
||||||
|
"zerocopy-derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "zerocopy-derive"
|
||||||
|
version = "0.7.29"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "86cd5ca076997b97ef09d3ad65efe811fa68c9e874cb636ccb211223a813b0c2"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.38",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zeroize"
|
name = "zeroize"
|
||||||
version = "1.6.0"
|
version = "1.6.0"
|
||||||
|
@ -120,12 +120,12 @@ fnv = "1"
|
|||||||
fs2 = "0.4"
|
fs2 = "0.4"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
hex = "0.4"
|
hex = "0.4"
|
||||||
hyper = "0.14"
|
hyper = "1"
|
||||||
itertools = "0.10"
|
itertools = "0.10"
|
||||||
lazy_static = "1"
|
lazy_static = "1"
|
||||||
libsecp256k1 = "0.7"
|
libsecp256k1 = "0.7"
|
||||||
log = "0.4"
|
log = "0.4"
|
||||||
lru = "0.7"
|
lru = "0.12"
|
||||||
maplit = "1"
|
maplit = "1"
|
||||||
num_cpus = "1"
|
num_cpus = "1"
|
||||||
parking_lot = "0.12"
|
parking_lot = "0.12"
|
||||||
@ -143,7 +143,7 @@ rusqlite = { version = "0.28", features = ["bundled"] }
|
|||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
serde_repr = "0.1"
|
serde_repr = "0.1"
|
||||||
serde_yaml = "0.8"
|
serde_yaml = "0.9"
|
||||||
sha2 = "0.9"
|
sha2 = "0.9"
|
||||||
slog = { version = "2", features = ["max_level_trace", "release_max_level_trace", "nested-values"] }
|
slog = { version = "2", features = ["max_level_trace", "release_max_level_trace", "nested-values"] }
|
||||||
slog-async = "2"
|
slog-async = "2"
|
||||||
@ -220,7 +220,7 @@ swap_or_not_shuffle = { path = "consensus/swap_or_not_shuffle" }
|
|||||||
task_executor = { path = "common/task_executor" }
|
task_executor = { path = "common/task_executor" }
|
||||||
types = { path = "consensus/types" }
|
types = { path = "consensus/types" }
|
||||||
unused_port = { path = "common/unused_port" }
|
unused_port = { path = "common/unused_port" }
|
||||||
validator_client = { path = "validator_client/" }
|
validator_client = { path = "validator_client" }
|
||||||
validator_dir = { path = "common/validator_dir" }
|
validator_dir = { path = "common/validator_dir" }
|
||||||
warp_utils = { path = "common/warp_utils" }
|
warp_utils = { path = "common/warp_utils" }
|
||||||
|
|
||||||
|
@ -14,13 +14,15 @@ use lru::LruCache;
|
|||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
use state_processing::state_advance::partial_state_advance;
|
use state_processing::state_advance::partial_state_advance;
|
||||||
use std::cmp::Ordering;
|
use std::cmp::Ordering;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
use types::{
|
use types::{
|
||||||
BeaconState, BeaconStateError, ChainSpec, CloneConfig, Epoch, EthSpec, Fork, Hash256, Slot,
|
BeaconState, BeaconStateError, ChainSpec, CloneConfig, Epoch, EthSpec, Fork, Hash256, Slot,
|
||||||
Unsigned,
|
Unsigned,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The number of sets of proposer indices that should be cached.
|
/// The number of sets of proposer indices that should be cached.
|
||||||
const CACHE_SIZE: usize = 16;
|
const CACHE_SIZE: NonZeroUsize = new_non_zero_usize(16);
|
||||||
|
|
||||||
/// This value is fairly unimportant, it's used to avoid heap allocations. The result of it being
|
/// This value is fairly unimportant, it's used to avoid heap allocations. The result of it being
|
||||||
/// incorrect is non-substantial from a consensus perspective (and probably also from a
|
/// incorrect is non-substantial from a consensus perspective (and probably also from a
|
||||||
|
@ -17,6 +17,7 @@ use slog::{debug, error, Logger};
|
|||||||
use slot_clock::SlotClock;
|
use slot_clock::SlotClock;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use task_executor::TaskExecutor;
|
use task_executor::TaskExecutor;
|
||||||
use types::beacon_block_body::{KzgCommitmentOpts, KzgCommitments};
|
use types::beacon_block_body::{KzgCommitmentOpts, KzgCommitments};
|
||||||
@ -32,15 +33,17 @@ mod processing_cache;
|
|||||||
mod state_lru_cache;
|
mod state_lru_cache;
|
||||||
|
|
||||||
pub use error::{Error as AvailabilityCheckError, ErrorCategory as AvailabilityCheckErrorCategory};
|
pub use error::{Error as AvailabilityCheckError, ErrorCategory as AvailabilityCheckErrorCategory};
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
|
|
||||||
/// The LRU Cache stores `PendingComponents` which can store up to
|
/// The LRU Cache stores `PendingComponents` which can store up to
|
||||||
/// `MAX_BLOBS_PER_BLOCK = 6` blobs each. A `BlobSidecar` is 0.131256 MB. So
|
/// `MAX_BLOBS_PER_BLOCK = 6` blobs each. A `BlobSidecar` is 0.131256 MB. So
|
||||||
/// the maximum size of a `PendingComponents` is ~ 0.787536 MB. Setting this
|
/// the maximum size of a `PendingComponents` is ~ 0.787536 MB. Setting this
|
||||||
/// to 1024 means the maximum size of the cache is ~ 0.8 GB. But the cache
|
/// to 1024 means the maximum size of the cache is ~ 0.8 GB. But the cache
|
||||||
/// will target a size of less than 75% of capacity.
|
/// will target a size of less than 75% of capacity.
|
||||||
pub const OVERFLOW_LRU_CAPACITY: usize = 1024;
|
pub const OVERFLOW_LRU_CAPACITY: NonZeroUsize = new_non_zero_usize(1024);
|
||||||
/// Until tree-states is implemented, we can't store very many states in memory :(
|
/// Until tree-states is implemented, we can't store very many states in memory :(
|
||||||
pub const STATE_LRU_CAPACITY: usize = 2;
|
pub const STATE_LRU_CAPACITY_NON_ZERO: NonZeroUsize = new_non_zero_usize(2);
|
||||||
|
pub const STATE_LRU_CAPACITY: usize = STATE_LRU_CAPACITY_NON_ZERO.get();
|
||||||
|
|
||||||
/// This includes a cache for any blocks or blobs that have been received over gossip or RPC
|
/// This includes a cache for any blocks or blobs that have been received over gossip or RPC
|
||||||
/// and are awaiting more components before they can be imported. Additionally the
|
/// and are awaiting more components before they can be imported. Additionally the
|
||||||
|
@ -42,6 +42,7 @@ use parking_lot::{Mutex, RwLock, RwLockUpgradableReadGuard};
|
|||||||
use ssz::{Decode, Encode};
|
use ssz::{Decode, Encode};
|
||||||
use ssz_derive::{Decode, Encode};
|
use ssz_derive::{Decode, Encode};
|
||||||
use ssz_types::{FixedVector, VariableList};
|
use ssz_types::{FixedVector, VariableList};
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::{collections::HashSet, sync::Arc};
|
use std::{collections::HashSet, sync::Arc};
|
||||||
use types::blob_sidecar::BlobIdentifier;
|
use types::blob_sidecar::BlobIdentifier;
|
||||||
use types::{BlobSidecar, ChainSpec, Epoch, EthSpec, Hash256};
|
use types::{BlobSidecar, ChainSpec, Epoch, EthSpec, Hash256};
|
||||||
@ -288,7 +289,7 @@ struct Critical<T: BeaconChainTypes> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T: BeaconChainTypes> Critical<T> {
|
impl<T: BeaconChainTypes> Critical<T> {
|
||||||
pub fn new(capacity: usize) -> Self {
|
pub fn new(capacity: NonZeroUsize) -> Self {
|
||||||
Self {
|
Self {
|
||||||
in_memory: LruCache::new(capacity),
|
in_memory: LruCache::new(capacity),
|
||||||
store_keys: HashSet::new(),
|
store_keys: HashSet::new(),
|
||||||
@ -329,7 +330,7 @@ impl<T: BeaconChainTypes> Critical<T> {
|
|||||||
pending_components: PendingComponents<T::EthSpec>,
|
pending_components: PendingComponents<T::EthSpec>,
|
||||||
overflow_store: &OverflowStore<T>,
|
overflow_store: &OverflowStore<T>,
|
||||||
) -> Result<(), AvailabilityCheckError> {
|
) -> Result<(), AvailabilityCheckError> {
|
||||||
if self.in_memory.len() == self.in_memory.cap() {
|
if self.in_memory.len() == self.in_memory.cap().get() {
|
||||||
// cache will overflow, must write lru entry to disk
|
// cache will overflow, must write lru entry to disk
|
||||||
if let Some((lru_key, lru_value)) = self.in_memory.pop_lru() {
|
if let Some((lru_key, lru_value)) = self.in_memory.pop_lru() {
|
||||||
overflow_store.persist_pending_components(lru_key, lru_value)?;
|
overflow_store.persist_pending_components(lru_key, lru_value)?;
|
||||||
@ -377,12 +378,12 @@ pub struct OverflowLRUCache<T: BeaconChainTypes> {
|
|||||||
/// Mutex to guard maintenance methods which move data between disk and memory
|
/// Mutex to guard maintenance methods which move data between disk and memory
|
||||||
maintenance_lock: Mutex<()>,
|
maintenance_lock: Mutex<()>,
|
||||||
/// The capacity of the LRU cache
|
/// The capacity of the LRU cache
|
||||||
capacity: usize,
|
capacity: NonZeroUsize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: BeaconChainTypes> OverflowLRUCache<T> {
|
impl<T: BeaconChainTypes> OverflowLRUCache<T> {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
capacity: usize,
|
capacity: NonZeroUsize,
|
||||||
beacon_store: BeaconStore<T>,
|
beacon_store: BeaconStore<T>,
|
||||||
spec: ChainSpec,
|
spec: ChainSpec,
|
||||||
) -> Result<Self, AvailabilityCheckError> {
|
) -> Result<Self, AvailabilityCheckError> {
|
||||||
@ -514,7 +515,7 @@ impl<T: BeaconChainTypes> OverflowLRUCache<T> {
|
|||||||
/// maintain the cache
|
/// maintain the cache
|
||||||
pub fn do_maintenance(&self, cutoff_epoch: Epoch) -> Result<(), AvailabilityCheckError> {
|
pub fn do_maintenance(&self, cutoff_epoch: Epoch) -> Result<(), AvailabilityCheckError> {
|
||||||
// ensure memory usage is below threshold
|
// ensure memory usage is below threshold
|
||||||
let threshold = self.capacity * 3 / 4;
|
let threshold = self.capacity.get() * 3 / 4;
|
||||||
self.maintain_threshold(threshold, cutoff_epoch)?;
|
self.maintain_threshold(threshold, cutoff_epoch)?;
|
||||||
// clean up any keys on the disk that shouldn't be there
|
// clean up any keys on the disk that shouldn't be there
|
||||||
self.prune_disk(cutoff_epoch)?;
|
self.prune_disk(cutoff_epoch)?;
|
||||||
@ -753,6 +754,7 @@ mod test {
|
|||||||
use std::ops::AddAssign;
|
use std::ops::AddAssign;
|
||||||
use store::{HotColdDB, ItemStore, LevelDB, StoreConfig};
|
use store::{HotColdDB, ItemStore, LevelDB, StoreConfig};
|
||||||
use tempfile::{tempdir, TempDir};
|
use tempfile::{tempdir, TempDir};
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
use types::{ChainSpec, ExecPayload, MinimalEthSpec};
|
use types::{ChainSpec, ExecPayload, MinimalEthSpec};
|
||||||
|
|
||||||
const LOW_VALIDATOR_COUNT: usize = 32;
|
const LOW_VALIDATOR_COUNT: usize = 32;
|
||||||
@ -974,8 +976,9 @@ mod test {
|
|||||||
let harness = get_deneb_chain(log.clone(), &chain_db_path).await;
|
let harness = get_deneb_chain(log.clone(), &chain_db_path).await;
|
||||||
let spec = harness.spec.clone();
|
let spec = harness.spec.clone();
|
||||||
let test_store = harness.chain.store.clone();
|
let test_store = harness.chain.store.clone();
|
||||||
|
let capacity_non_zero = new_non_zero_usize(capacity);
|
||||||
let cache = Arc::new(
|
let cache = Arc::new(
|
||||||
OverflowLRUCache::<T>::new(capacity, test_store, spec.clone())
|
OverflowLRUCache::<T>::new(capacity_non_zero, test_store, spec.clone())
|
||||||
.expect("should create cache"),
|
.expect("should create cache"),
|
||||||
);
|
);
|
||||||
(harness, cache, chain_db_path)
|
(harness, cache, chain_db_path)
|
||||||
@ -1477,7 +1480,7 @@ mod test {
|
|||||||
|
|
||||||
// create a new cache with the same store
|
// create a new cache with the same store
|
||||||
let recovered_cache = OverflowLRUCache::<T>::new(
|
let recovered_cache = OverflowLRUCache::<T>::new(
|
||||||
capacity,
|
new_non_zero_usize(capacity),
|
||||||
harness.chain.store.clone(),
|
harness.chain.store.clone(),
|
||||||
harness.chain.spec.clone(),
|
harness.chain.spec.clone(),
|
||||||
)
|
)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use crate::block_verification_types::AsBlock;
|
use crate::block_verification_types::AsBlock;
|
||||||
use crate::{
|
use crate::{
|
||||||
block_verification_types::BlockImportData,
|
block_verification_types::BlockImportData,
|
||||||
data_availability_checker::{AvailabilityCheckError, STATE_LRU_CAPACITY},
|
data_availability_checker::{AvailabilityCheckError, STATE_LRU_CAPACITY_NON_ZERO},
|
||||||
eth1_finalization_cache::Eth1FinalizationData,
|
eth1_finalization_cache::Eth1FinalizationData,
|
||||||
AvailabilityPendingExecutedBlock, BeaconChainTypes, BeaconStore, PayloadVerificationOutcome,
|
AvailabilityPendingExecutedBlock, BeaconChainTypes, BeaconStore, PayloadVerificationOutcome,
|
||||||
};
|
};
|
||||||
@ -61,7 +61,7 @@ pub struct StateLRUCache<T: BeaconChainTypes> {
|
|||||||
impl<T: BeaconChainTypes> StateLRUCache<T> {
|
impl<T: BeaconChainTypes> StateLRUCache<T> {
|
||||||
pub fn new(store: BeaconStore<T>, spec: ChainSpec) -> Self {
|
pub fn new(store: BeaconStore<T>, spec: ChainSpec) -> Self {
|
||||||
Self {
|
Self {
|
||||||
states: RwLock::new(LruCache::new(STATE_LRU_CAPACITY)),
|
states: RwLock::new(LruCache::new(STATE_LRU_CAPACITY_NON_ZERO)),
|
||||||
store,
|
store,
|
||||||
spec,
|
spec,
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,13 @@ use itertools::process_results;
|
|||||||
use lru::LruCache;
|
use lru::LruCache;
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use slog::debug;
|
use slog::debug;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
use types::Hash256;
|
use types::Hash256;
|
||||||
|
|
||||||
const BLOCK_ROOT_CACHE_LIMIT: usize = 512;
|
const BLOCK_ROOT_CACHE_LIMIT: NonZeroUsize = new_non_zero_usize(512);
|
||||||
const LOOKUP_LIMIT: usize = 8;
|
const LOOKUP_LIMIT: NonZeroUsize = new_non_zero_usize(8);
|
||||||
const METRICS_TIMEOUT: Duration = Duration::from_millis(100);
|
const METRICS_TIMEOUT: Duration = Duration::from_millis(100);
|
||||||
|
|
||||||
/// Cache for rejecting attestations to blocks from before finalization.
|
/// Cache for rejecting attestations to blocks from before finalization.
|
||||||
@ -78,7 +80,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
|
|
||||||
// 3. Check the network with a single block lookup.
|
// 3. Check the network with a single block lookup.
|
||||||
cache.in_progress_lookups.put(block_root, ());
|
cache.in_progress_lookups.put(block_root, ());
|
||||||
if cache.in_progress_lookups.len() == LOOKUP_LIMIT {
|
if cache.in_progress_lookups.len() == LOOKUP_LIMIT.get() {
|
||||||
// NOTE: we expect this to occur sometimes if a lot of blocks that we look up fail to be
|
// NOTE: we expect this to occur sometimes if a lot of blocks that we look up fail to be
|
||||||
// imported for reasons other than being pre-finalization. The cache will eventually
|
// imported for reasons other than being pre-finalization. The cache will eventually
|
||||||
// self-repair in this case by replacing old entries with new ones until all the failed
|
// self-repair in this case by replacing old entries with new ones until all the failed
|
||||||
|
@ -8,17 +8,19 @@ use crate::HttpJsonRpc;
|
|||||||
use lru::LruCache;
|
use lru::LruCache;
|
||||||
use slog::{debug, error, info, warn, Logger};
|
use slog::{debug, error, info, warn, Logger};
|
||||||
use std::future::Future;
|
use std::future::Future;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use task_executor::TaskExecutor;
|
use task_executor::TaskExecutor;
|
||||||
use tokio::sync::{watch, Mutex, RwLock};
|
use tokio::sync::{watch, Mutex, RwLock};
|
||||||
use tokio_stream::wrappers::WatchStream;
|
use tokio_stream::wrappers::WatchStream;
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
use types::ExecutionBlockHash;
|
use types::ExecutionBlockHash;
|
||||||
|
|
||||||
/// The number of payload IDs that will be stored for each `Engine`.
|
/// The number of payload IDs that will be stored for each `Engine`.
|
||||||
///
|
///
|
||||||
/// Since the size of each value is small (~800 bytes) a large number is used for safety.
|
/// Since the size of each value is small (~800 bytes) a large number is used for safety.
|
||||||
const PAYLOAD_ID_LRU_CACHE_SIZE: usize = 512;
|
const PAYLOAD_ID_LRU_CACHE_SIZE: NonZeroUsize = new_non_zero_usize(512);
|
||||||
const CACHED_ENGINE_CAPABILITIES_AGE_LIMIT: Duration = Duration::from_secs(900); // 15 minutes
|
const CACHED_ENGINE_CAPABILITIES_AGE_LIMIT: Duration = Duration::from_secs(900); // 15 minutes
|
||||||
|
|
||||||
/// Stores the remembered state of a engine.
|
/// Stores the remembered state of a engine.
|
||||||
|
@ -29,6 +29,7 @@ use std::collections::HashMap;
|
|||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::future::Future;
|
use std::future::Future;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH};
|
use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH};
|
||||||
@ -42,6 +43,7 @@ use tokio_stream::wrappers::WatchStream;
|
|||||||
use tree_hash::TreeHash;
|
use tree_hash::TreeHash;
|
||||||
use types::beacon_block_body::KzgCommitments;
|
use types::beacon_block_body::KzgCommitments;
|
||||||
use types::builder_bid::BuilderBid;
|
use types::builder_bid::BuilderBid;
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
use types::payload::BlockProductionVersion;
|
use types::payload::BlockProductionVersion;
|
||||||
use types::{
|
use types::{
|
||||||
AbstractExecPayload, BlobsList, ExecutionPayloadDeneb, KzgProofs, SignedBlindedBeaconBlock,
|
AbstractExecPayload, BlobsList, ExecutionPayloadDeneb, KzgProofs, SignedBlindedBeaconBlock,
|
||||||
@ -68,7 +70,7 @@ pub const DEFAULT_JWT_FILE: &str = "jwt.hex";
|
|||||||
|
|
||||||
/// Each time the `ExecutionLayer` retrieves a block from an execution node, it stores that block
|
/// Each time the `ExecutionLayer` retrieves a block from an execution node, it stores that block
|
||||||
/// in an LRU cache to avoid redundant lookups. This is the size of that cache.
|
/// in an LRU cache to avoid redundant lookups. This is the size of that cache.
|
||||||
const EXECUTION_BLOCKS_LRU_CACHE_SIZE: usize = 128;
|
const EXECUTION_BLOCKS_LRU_CACHE_SIZE: NonZeroUsize = new_non_zero_usize(128);
|
||||||
|
|
||||||
/// A fee recipient address for use during block production. Only used as a very last resort if
|
/// A fee recipient address for use during block production. Only used as a very last resort if
|
||||||
/// there is no address provided by the user.
|
/// there is no address provided by the user.
|
||||||
|
@ -1,10 +1,12 @@
|
|||||||
use eth2::types::FullPayloadContents;
|
use eth2::types::FullPayloadContents;
|
||||||
use lru::LruCache;
|
use lru::LruCache;
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use tree_hash::TreeHash;
|
use tree_hash::TreeHash;
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
use types::{EthSpec, Hash256};
|
use types::{EthSpec, Hash256};
|
||||||
|
|
||||||
pub const DEFAULT_PAYLOAD_CACHE_SIZE: usize = 10;
|
pub const DEFAULT_PAYLOAD_CACHE_SIZE: NonZeroUsize = new_non_zero_usize(10);
|
||||||
|
|
||||||
/// A cache mapping execution payloads by tree hash roots.
|
/// A cache mapping execution payloads by tree hash roots.
|
||||||
pub struct PayloadCache<T: EthSpec> {
|
pub struct PayloadCache<T: EthSpec> {
|
||||||
|
@ -3,13 +3,13 @@ use eth2::lighthouse::{BlockReward, BlockRewardsQuery};
|
|||||||
use lru::LruCache;
|
use lru::LruCache;
|
||||||
use slog::{debug, warn, Logger};
|
use slog::{debug, warn, Logger};
|
||||||
use state_processing::BlockReplayer;
|
use state_processing::BlockReplayer;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use types::beacon_block::BlindedBeaconBlock;
|
use types::beacon_block::BlindedBeaconBlock;
|
||||||
use warp_utils::reject::{
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
beacon_chain_error, beacon_state_error, custom_bad_request, custom_server_error,
|
use warp_utils::reject::{beacon_chain_error, beacon_state_error, custom_bad_request};
|
||||||
};
|
|
||||||
|
|
||||||
const STATE_CACHE_SIZE: usize = 2;
|
const STATE_CACHE_SIZE: NonZeroUsize = new_non_zero_usize(2);
|
||||||
|
|
||||||
/// Fetch block rewards for blocks from the canonical chain.
|
/// Fetch block rewards for blocks from the canonical chain.
|
||||||
pub fn get_block_rewards<T: BeaconChainTypes>(
|
pub fn get_block_rewards<T: BeaconChainTypes>(
|
||||||
@ -164,11 +164,7 @@ pub fn compute_block_rewards<T: BeaconChainTypes>(
|
|||||||
.build_all_committee_caches(&chain.spec)
|
.build_all_committee_caches(&chain.spec)
|
||||||
.map_err(beacon_state_error)?;
|
.map_err(beacon_state_error)?;
|
||||||
|
|
||||||
state_cache
|
state_cache.get_or_insert((parent_root, block.slot()), || state)
|
||||||
.get_or_insert((parent_root, block.slot()), || state)
|
|
||||||
.ok_or_else(|| {
|
|
||||||
custom_server_error("LRU cache insert should always succeed".into())
|
|
||||||
})?
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Compute block reward.
|
// Compute block reward.
|
||||||
|
@ -35,6 +35,7 @@ pub use libp2p::{
|
|||||||
use lru::LruCache;
|
use lru::LruCache;
|
||||||
use slog::{crit, debug, error, info, trace, warn};
|
use slog::{crit, debug, error, info, trace, warn};
|
||||||
use ssz::Encode;
|
use ssz::Encode;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::{
|
use std::{
|
||||||
collections::{HashMap, VecDeque},
|
collections::{HashMap, VecDeque},
|
||||||
net::{IpAddr, SocketAddr},
|
net::{IpAddr, SocketAddr},
|
||||||
@ -49,6 +50,7 @@ use types::{EnrForkId, EthSpec};
|
|||||||
|
|
||||||
mod subnet_predicate;
|
mod subnet_predicate;
|
||||||
pub use subnet_predicate::subnet_predicate;
|
pub use subnet_predicate::subnet_predicate;
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
|
|
||||||
/// Local ENR storage filename.
|
/// Local ENR storage filename.
|
||||||
pub const ENR_FILENAME: &str = "enr.dat";
|
pub const ENR_FILENAME: &str = "enr.dat";
|
||||||
@ -70,6 +72,8 @@ const MAX_SUBNETS_IN_QUERY: usize = 3;
|
|||||||
pub const FIND_NODE_QUERY_CLOSEST_PEERS: usize = 16;
|
pub const FIND_NODE_QUERY_CLOSEST_PEERS: usize = 16;
|
||||||
/// The threshold for updating `min_ttl` on a connected peer.
|
/// The threshold for updating `min_ttl` on a connected peer.
|
||||||
const DURATION_DIFFERENCE: Duration = Duration::from_millis(1);
|
const DURATION_DIFFERENCE: Duration = Duration::from_millis(1);
|
||||||
|
/// The capacity of the Discovery ENR cache.
|
||||||
|
const ENR_CACHE_CAPACITY: NonZeroUsize = new_non_zero_usize(50);
|
||||||
|
|
||||||
/// A query has completed. This result contains a mapping of discovered peer IDs to the `min_ttl`
|
/// A query has completed. This result contains a mapping of discovered peer IDs to the `min_ttl`
|
||||||
/// of the peer if it is specified.
|
/// of the peer if it is specified.
|
||||||
@ -318,7 +322,7 @@ impl<TSpec: EthSpec> Discovery<TSpec> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
cached_enrs: LruCache::new(50),
|
cached_enrs: LruCache::new(ENR_CACHE_CAPACITY),
|
||||||
network_globals,
|
network_globals,
|
||||||
find_peer_active: false,
|
find_peer_active: false,
|
||||||
queued_queries: VecDeque::with_capacity(10),
|
queued_queries: VecDeque::with_capacity(10),
|
||||||
|
@ -2,12 +2,14 @@ use crate::{DBColumn, Error, StoreItem};
|
|||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use ssz::{Decode, Encode};
|
use ssz::{Decode, Encode};
|
||||||
use ssz_derive::{Decode, Encode};
|
use ssz_derive::{Decode, Encode};
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
use types::{EthSpec, MinimalEthSpec};
|
use types::{EthSpec, MinimalEthSpec};
|
||||||
|
|
||||||
pub const PREV_DEFAULT_SLOTS_PER_RESTORE_POINT: u64 = 2048;
|
pub const PREV_DEFAULT_SLOTS_PER_RESTORE_POINT: u64 = 2048;
|
||||||
pub const DEFAULT_SLOTS_PER_RESTORE_POINT: u64 = 8192;
|
pub const DEFAULT_SLOTS_PER_RESTORE_POINT: u64 = 8192;
|
||||||
pub const DEFAULT_BLOCK_CACHE_SIZE: usize = 5;
|
pub const DEFAULT_BLOCK_CACHE_SIZE: NonZeroUsize = new_non_zero_usize(5);
|
||||||
pub const DEFAULT_HISTORIC_STATE_CACHE_SIZE: usize = 1;
|
pub const DEFAULT_HISTORIC_STATE_CACHE_SIZE: NonZeroUsize = new_non_zero_usize(1);
|
||||||
pub const DEFAULT_EPOCHS_PER_BLOB_PRUNE: u64 = 1;
|
pub const DEFAULT_EPOCHS_PER_BLOB_PRUNE: u64 = 1;
|
||||||
pub const DEFAULT_BLOB_PUNE_MARGIN_EPOCHS: u64 = 0;
|
pub const DEFAULT_BLOB_PUNE_MARGIN_EPOCHS: u64 = 0;
|
||||||
|
|
||||||
@ -19,9 +21,9 @@ pub struct StoreConfig {
|
|||||||
/// Flag indicating whether the `slots_per_restore_point` was set explicitly by the user.
|
/// Flag indicating whether the `slots_per_restore_point` was set explicitly by the user.
|
||||||
pub slots_per_restore_point_set_explicitly: bool,
|
pub slots_per_restore_point_set_explicitly: bool,
|
||||||
/// Maximum number of blocks to store in the in-memory block cache.
|
/// Maximum number of blocks to store in the in-memory block cache.
|
||||||
pub block_cache_size: usize,
|
pub block_cache_size: NonZeroUsize,
|
||||||
/// Maximum number of states from freezer database to store in the in-memory state cache.
|
/// Maximum number of states from freezer database to store in the in-memory state cache.
|
||||||
pub historic_state_cache_size: usize,
|
pub historic_state_cache_size: NonZeroUsize,
|
||||||
/// Whether to compact the database on initialization.
|
/// Whether to compact the database on initialization.
|
||||||
pub compact_on_init: bool,
|
pub compact_on_init: bool,
|
||||||
/// Whether to compact the database during database pruning.
|
/// Whether to compact the database during database pruning.
|
||||||
|
@ -35,6 +35,7 @@ use state_processing::{
|
|||||||
use std::cmp::min;
|
use std::cmp::min;
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
@ -85,7 +86,7 @@ struct BlockCache<E: EthSpec> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<E: EthSpec> BlockCache<E> {
|
impl<E: EthSpec> BlockCache<E> {
|
||||||
pub fn new(size: usize) -> Self {
|
pub fn new(size: NonZeroUsize) -> Self {
|
||||||
Self {
|
Self {
|
||||||
block_cache: LruCache::new(size),
|
block_cache: LruCache::new(size),
|
||||||
blob_cache: LruCache::new(size),
|
blob_cache: LruCache::new(size),
|
||||||
|
@ -367,7 +367,8 @@ impl ValidatorDefinitions {
|
|||||||
pub fn save<P: AsRef<Path>>(&self, validators_dir: P) -> Result<(), Error> {
|
pub fn save<P: AsRef<Path>>(&self, validators_dir: P) -> Result<(), Error> {
|
||||||
let config_path = validators_dir.as_ref().join(CONFIG_FILENAME);
|
let config_path = validators_dir.as_ref().join(CONFIG_FILENAME);
|
||||||
let temp_path = validators_dir.as_ref().join(CONFIG_TEMP_FILENAME);
|
let temp_path = validators_dir.as_ref().join(CONFIG_TEMP_FILENAME);
|
||||||
let bytes = serde_yaml::to_vec(self).map_err(Error::UnableToEncodeFile)?;
|
let mut bytes = vec![];
|
||||||
|
serde_yaml::to_writer(&mut bytes, self).map_err(Error::UnableToEncodeFile)?;
|
||||||
|
|
||||||
write_file_via_temporary(&config_path, &temp_path, &bytes)
|
write_file_via_temporary(&config_path, &temp_path, &bytes)
|
||||||
.map_err(Error::UnableToWriteFile)?;
|
.map_err(Error::UnableToWriteFile)?;
|
||||||
|
@ -100,6 +100,7 @@ pub mod sqlite;
|
|||||||
|
|
||||||
pub mod blob_sidecar;
|
pub mod blob_sidecar;
|
||||||
pub mod light_client_header;
|
pub mod light_client_header;
|
||||||
|
pub mod non_zero_usize;
|
||||||
|
|
||||||
use ethereum_types::{H160, H256};
|
use ethereum_types::{H160, H256};
|
||||||
|
|
||||||
|
8
consensus/types/src/non_zero_usize.rs
Normal file
8
consensus/types/src/non_zero_usize.rs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
use std::num::NonZeroUsize;
|
||||||
|
|
||||||
|
pub const fn new_non_zero_usize(x: usize) -> NonZeroUsize {
|
||||||
|
match NonZeroUsize::new(x) {
|
||||||
|
Some(n) => n,
|
||||||
|
None => panic!("Expected a non zero usize."),
|
||||||
|
}
|
||||||
|
}
|
@ -18,6 +18,7 @@ use std::str::FromStr;
|
|||||||
use std::string::ToString;
|
use std::string::ToString;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use tempfile::TempDir;
|
use tempfile::TempDir;
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
use types::{
|
use types::{
|
||||||
Address, Checkpoint, Epoch, ExecutionBlockHash, ForkName, Hash256, MainnetEthSpec,
|
Address, Checkpoint, Epoch, ExecutionBlockHash, ForkName, Hash256, MainnetEthSpec,
|
||||||
ProgressiveBalancesMode,
|
ProgressiveBalancesMode,
|
||||||
@ -1769,14 +1770,19 @@ fn block_cache_size_flag() {
|
|||||||
CommandLineTest::new()
|
CommandLineTest::new()
|
||||||
.flag("block-cache-size", Some("4"))
|
.flag("block-cache-size", Some("4"))
|
||||||
.run_with_zero_port()
|
.run_with_zero_port()
|
||||||
.with_config(|config| assert_eq!(config.store.block_cache_size, 4_usize));
|
.with_config(|config| assert_eq!(config.store.block_cache_size, new_non_zero_usize(4)));
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn historic_state_cache_size_flag() {
|
fn historic_state_cache_size_flag() {
|
||||||
CommandLineTest::new()
|
CommandLineTest::new()
|
||||||
.flag("historic-state-cache-size", Some("4"))
|
.flag("historic-state-cache-size", Some("4"))
|
||||||
.run_with_zero_port()
|
.run_with_zero_port()
|
||||||
.with_config(|config| assert_eq!(config.store.historic_state_cache_size, 4_usize));
|
.with_config(|config| {
|
||||||
|
assert_eq!(
|
||||||
|
config.store.historic_state_cache_size,
|
||||||
|
new_non_zero_usize(4)
|
||||||
|
)
|
||||||
|
});
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn historic_state_cache_size_default() {
|
fn historic_state_cache_size_default() {
|
||||||
@ -2001,7 +2007,10 @@ fn slasher_attestation_cache_size_flag() {
|
|||||||
.slasher
|
.slasher
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.expect("Unable to parse Slasher config");
|
.expect("Unable to parse Slasher config");
|
||||||
assert_eq!(slasher_config.attestation_root_cache_size, 10000);
|
assert_eq!(
|
||||||
|
slasher_config.attestation_root_cache_size,
|
||||||
|
new_non_zero_usize(10000)
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
use crate::Error;
|
use crate::Error;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use strum::{Display, EnumString, EnumVariantNames};
|
use strum::{Display, EnumString, EnumVariantNames};
|
||||||
|
use types::non_zero_usize::new_non_zero_usize;
|
||||||
use types::{Epoch, EthSpec, IndexedAttestation};
|
use types::{Epoch, EthSpec, IndexedAttestation};
|
||||||
|
|
||||||
pub const DEFAULT_CHUNK_SIZE: usize = 16;
|
pub const DEFAULT_CHUNK_SIZE: usize = 16;
|
||||||
@ -10,7 +12,7 @@ pub const DEFAULT_HISTORY_LENGTH: usize = 4096;
|
|||||||
pub const DEFAULT_UPDATE_PERIOD: u64 = 12;
|
pub const DEFAULT_UPDATE_PERIOD: u64 = 12;
|
||||||
pub const DEFAULT_SLOT_OFFSET: f64 = 10.5;
|
pub const DEFAULT_SLOT_OFFSET: f64 = 10.5;
|
||||||
pub const DEFAULT_MAX_DB_SIZE: usize = 256 * 1024; // 256 GiB
|
pub const DEFAULT_MAX_DB_SIZE: usize = 256 * 1024; // 256 GiB
|
||||||
pub const DEFAULT_ATTESTATION_ROOT_CACHE_SIZE: usize = 100_000;
|
pub const DEFAULT_ATTESTATION_ROOT_CACHE_SIZE: NonZeroUsize = new_non_zero_usize(100_000);
|
||||||
pub const DEFAULT_BROADCAST: bool = false;
|
pub const DEFAULT_BROADCAST: bool = false;
|
||||||
|
|
||||||
#[cfg(all(feature = "mdbx", not(feature = "lmdb")))]
|
#[cfg(all(feature = "mdbx", not(feature = "lmdb")))]
|
||||||
@ -38,7 +40,7 @@ pub struct Config {
|
|||||||
/// Maximum size of the database in megabytes.
|
/// Maximum size of the database in megabytes.
|
||||||
pub max_db_size_mbs: usize,
|
pub max_db_size_mbs: usize,
|
||||||
/// Maximum size of the in-memory cache for attestation roots.
|
/// Maximum size of the in-memory cache for attestation roots.
|
||||||
pub attestation_root_cache_size: usize,
|
pub attestation_root_cache_size: NonZeroUsize,
|
||||||
/// Whether to broadcast slashings found to the network.
|
/// Whether to broadcast slashings found to the network.
|
||||||
pub broadcast: bool,
|
pub broadcast: bool,
|
||||||
/// Database backend to use.
|
/// Database backend to use.
|
||||||
|
@ -21,7 +21,7 @@ types = { workspace = true }
|
|||||||
eth2 = { workspace = true }
|
eth2 = { workspace = true }
|
||||||
beacon_node = { workspace = true }
|
beacon_node = { workspace = true }
|
||||||
tokio = { workspace = true }
|
tokio = { workspace = true }
|
||||||
axum = "0.6.18"
|
axum = "0.7"
|
||||||
hyper = { workspace = true }
|
hyper = { workspace = true }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
@ -41,8 +41,7 @@ tokio-postgres = "0.7.5"
|
|||||||
http_api = { workspace = true }
|
http_api = { workspace = true }
|
||||||
beacon_chain = { workspace = true }
|
beacon_chain = { workspace = true }
|
||||||
network = { workspace = true }
|
network = { workspace = true }
|
||||||
# TODO: update to 0.15 when released: https://github.com/testcontainers/testcontainers-rs/issues/497
|
testcontainers = "0.15"
|
||||||
testcontainers = { git = "https://github.com/testcontainers/testcontainers-rs/", rev = "0f2c9851" }
|
|
||||||
unused_port = { workspace = true }
|
unused_port = { workspace = true }
|
||||||
task_executor = { workspace = true }
|
task_executor = { workspace = true }
|
||||||
logging = { workspace = true }
|
logging = { workspace = true }
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use crate::{config::Config, logger, server, updater};
|
use crate::{config::Config, logger, server, updater};
|
||||||
use clap::{App, Arg};
|
use clap::{App, Arg};
|
||||||
use tokio::sync::oneshot;
|
|
||||||
|
|
||||||
pub const SERVE: &str = "serve";
|
pub const SERVE: &str = "serve";
|
||||||
pub const RUN_UPDATER: &str = "run-updater";
|
pub const RUN_UPDATER: &str = "run-updater";
|
||||||
@ -44,12 +43,9 @@ pub async fn run() -> Result<(), String> {
|
|||||||
(RUN_UPDATER, Some(_)) => updater::run_updater(config)
|
(RUN_UPDATER, Some(_)) => updater::run_updater(config)
|
||||||
.await
|
.await
|
||||||
.map_err(|e| format!("Failure: {:?}", e)),
|
.map_err(|e| format!("Failure: {:?}", e)),
|
||||||
(SERVE, Some(_)) => {
|
(SERVE, Some(_)) => server::serve(config)
|
||||||
let (_shutdown_tx, shutdown_rx) = oneshot::channel();
|
.await
|
||||||
server::serve(config, shutdown_rx)
|
.map_err(|e| format!("Failure: {:?}", e)),
|
||||||
.await
|
|
||||||
.map_err(|e| format!("Failure: {:?}", e))
|
|
||||||
}
|
|
||||||
_ => Err("Unsupported subcommand. See --help".into()),
|
_ => Err("Unsupported subcommand. See --help".into()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,14 @@ use axum::Error as AxumError;
|
|||||||
use axum::{http::StatusCode, response::IntoResponse, Json};
|
use axum::{http::StatusCode, response::IntoResponse, Json};
|
||||||
use hyper::Error as HyperError;
|
use hyper::Error as HyperError;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
|
use std::io::Error as IoError;
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum Error {
|
pub enum Error {
|
||||||
Axum(AxumError),
|
Axum(AxumError),
|
||||||
Hyper(HyperError),
|
Hyper(HyperError),
|
||||||
Database(DbError),
|
Database(DbError),
|
||||||
|
IoError(IoError),
|
||||||
BadRequest,
|
BadRequest,
|
||||||
NotFound,
|
NotFound,
|
||||||
Other(String),
|
Other(String),
|
||||||
@ -43,6 +45,12 @@ impl From<DbError> for Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<IoError> for Error {
|
||||||
|
fn from(e: IoError) -> Self {
|
||||||
|
Error::IoError(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<String> for Error {
|
impl From<String> for Error {
|
||||||
fn from(e: String) -> Self {
|
fn from(e: String) -> Self {
|
||||||
Error::Other(e)
|
Error::Other(e)
|
||||||
|
@ -11,9 +11,8 @@ use axum::{
|
|||||||
};
|
};
|
||||||
use eth2::types::ErrorMessage;
|
use eth2::types::ErrorMessage;
|
||||||
use log::info;
|
use log::info;
|
||||||
use std::future::Future;
|
use std::future::{Future, IntoFuture};
|
||||||
use std::net::SocketAddr;
|
use std::net::{SocketAddr, TcpListener};
|
||||||
use tokio::sync::oneshot;
|
|
||||||
|
|
||||||
pub use config::Config;
|
pub use config::Config;
|
||||||
pub use error::Error;
|
pub use error::Error;
|
||||||
@ -22,7 +21,7 @@ mod config;
|
|||||||
mod error;
|
mod error;
|
||||||
mod handler;
|
mod handler;
|
||||||
|
|
||||||
pub async fn serve(config: FullConfig, shutdown: oneshot::Receiver<()>) -> Result<(), Error> {
|
pub async fn serve(config: FullConfig) -> Result<(), Error> {
|
||||||
let db = database::build_connection_pool(&config.database)?;
|
let db = database::build_connection_pool(&config.database)?;
|
||||||
let (_, slots_per_epoch) = database::get_active_config(&mut database::get_connection(&db)?)?
|
let (_, slots_per_epoch) = database::get_active_config(&mut database::get_connection(&db)?)?
|
||||||
.ok_or_else(|| {
|
.ok_or_else(|| {
|
||||||
@ -32,9 +31,7 @@ pub async fn serve(config: FullConfig, shutdown: oneshot::Receiver<()>) -> Resul
|
|||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let server = start_server(&config, slots_per_epoch as u64, db, async {
|
let server = start_server(&config, slots_per_epoch as u64, db)?;
|
||||||
let _ = shutdown.await;
|
|
||||||
})?;
|
|
||||||
|
|
||||||
server.await?;
|
server.await?;
|
||||||
|
|
||||||
@ -61,8 +58,7 @@ pub fn start_server(
|
|||||||
config: &FullConfig,
|
config: &FullConfig,
|
||||||
slots_per_epoch: u64,
|
slots_per_epoch: u64,
|
||||||
pool: PgPool,
|
pool: PgPool,
|
||||||
shutdown: impl Future<Output = ()> + Send + Sync + 'static,
|
) -> Result<impl Future<Output = Result<(), std::io::Error>> + 'static, Error> {
|
||||||
) -> Result<impl Future<Output = Result<(), hyper::Error>> + 'static, Error> {
|
|
||||||
let mut routes = Router::new()
|
let mut routes = Router::new()
|
||||||
.route("/v1/slots", get(handler::get_slots_by_range))
|
.route("/v1/slots", get(handler::get_slots_by_range))
|
||||||
.route("/v1/slots/:slot", get(handler::get_slot))
|
.route("/v1/slots/:slot", get(handler::get_slot))
|
||||||
@ -108,16 +104,13 @@ pub fn start_server(
|
|||||||
.layer(Extension(slots_per_epoch));
|
.layer(Extension(slots_per_epoch));
|
||||||
|
|
||||||
let addr = SocketAddr::new(config.server.listen_addr, config.server.listen_port);
|
let addr = SocketAddr::new(config.server.listen_addr, config.server.listen_port);
|
||||||
|
let listener = TcpListener::bind(addr)?;
|
||||||
let server = axum::Server::try_bind(&addr)?.serve(app.into_make_service());
|
listener.set_nonblocking(true)?;
|
||||||
|
let serve = axum::serve(tokio::net::TcpListener::from_std(listener)?, app);
|
||||||
let server = server.with_graceful_shutdown(async {
|
|
||||||
shutdown.await;
|
|
||||||
});
|
|
||||||
|
|
||||||
info!("HTTP server listening on {}", addr);
|
info!("HTTP server listening on {}", addr);
|
||||||
|
|
||||||
Ok(server)
|
Ok(serve.into_future())
|
||||||
}
|
}
|
||||||
|
|
||||||
// The default route indicating that no available routes matched the request.
|
// The default route indicating that no available routes matched the request.
|
||||||
|
@ -17,7 +17,6 @@ use std::env;
|
|||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use testcontainers::{clients::Cli, core::WaitFor, Image, RunnableImage};
|
use testcontainers::{clients::Cli, core::WaitFor, Image, RunnableImage};
|
||||||
use tokio::sync::oneshot;
|
|
||||||
use tokio::{runtime, task::JoinHandle};
|
use tokio::{runtime, task::JoinHandle};
|
||||||
use tokio_postgres::{config::Config as PostgresConfig, Client, NoTls};
|
use tokio_postgres::{config::Config as PostgresConfig, Client, NoTls};
|
||||||
use types::{Hash256, MainnetEthSpec, Slot};
|
use types::{Hash256, MainnetEthSpec, Slot};
|
||||||
@ -188,11 +187,7 @@ impl TesterBuilder {
|
|||||||
/*
|
/*
|
||||||
* Spawn a Watch HTTP API.
|
* Spawn a Watch HTTP API.
|
||||||
*/
|
*/
|
||||||
let (_watch_shutdown_tx, watch_shutdown_rx) = oneshot::channel();
|
let watch_server = start_server(&self.config, SLOTS_PER_EPOCH, pool).unwrap();
|
||||||
let watch_server = start_server(&self.config, SLOTS_PER_EPOCH, pool, async {
|
|
||||||
let _ = watch_shutdown_rx.await;
|
|
||||||
})
|
|
||||||
.unwrap();
|
|
||||||
tokio::spawn(watch_server);
|
tokio::spawn(watch_server);
|
||||||
|
|
||||||
let addr = SocketAddr::new(
|
let addr = SocketAddr::new(
|
||||||
@ -228,7 +223,6 @@ impl TesterBuilder {
|
|||||||
config: self.config,
|
config: self.config,
|
||||||
updater,
|
updater,
|
||||||
_bn_network_rx: self._bn_network_rx,
|
_bn_network_rx: self._bn_network_rx,
|
||||||
_watch_shutdown_tx,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async fn initialize_database(&self) -> PgPool {
|
async fn initialize_database(&self) -> PgPool {
|
||||||
@ -245,7 +239,6 @@ struct Tester {
|
|||||||
pub config: Config,
|
pub config: Config,
|
||||||
pub updater: UpdateHandler<E>,
|
pub updater: UpdateHandler<E>,
|
||||||
_bn_network_rx: NetworkReceivers<E>,
|
_bn_network_rx: NetworkReceivers<E>,
|
||||||
_watch_shutdown_tx: oneshot::Sender<()>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Tester {
|
impl Tester {
|
||||||
|
Loading…
Reference in New Issue
Block a user