build(deps): bump the prod group with 6 updates (#8125)
* build(deps): bump the prod group with 6 updates Bumps the prod group with 6 updates: | Package | From | To | | --- | --- | --- | | [futures](https://github.com/rust-lang/futures-rs) | `0.3.29` | `0.3.30` | | [tokio](https://github.com/tokio-rs/tokio) | `1.35.0` | `1.35.1` | | [metrics](https://github.com/metrics-rs/metrics) | `0.21.1` | `0.22.0` | | [metrics-exporter-prometheus](https://github.com/metrics-rs/metrics) | `0.12.2` | `0.13.0` | | [reqwest](https://github.com/seanmonstar/reqwest) | `0.11.22` | `0.11.23` | | [owo-colors](https://github.com/jam1garner/owo-colors) | `3.5.0` | `4.0.0` | Updates `futures` from 0.3.29 to 0.3.30 - [Release notes](https://github.com/rust-lang/futures-rs/releases) - [Changelog](https://github.com/rust-lang/futures-rs/blob/master/CHANGELOG.md) - [Commits](https://github.com/rust-lang/futures-rs/compare/0.3.29...0.3.30) Updates `tokio` from 1.35.0 to 1.35.1 - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.35.0...tokio-1.35.1) Updates `metrics` from 0.21.1 to 0.22.0 - [Changelog](https://github.com/metrics-rs/metrics/blob/main/release.toml) - [Commits](https://github.com/metrics-rs/metrics/compare/metrics-v0.21.1...metrics-v0.22.0) Updates `metrics-exporter-prometheus` from 0.12.2 to 0.13.0 - [Changelog](https://github.com/metrics-rs/metrics/blob/main/release.toml) - [Commits](https://github.com/metrics-rs/metrics/compare/metrics-exporter-prometheus-v0.12.2...metrics-exporter-prometheus-v0.13.0) Updates `reqwest` from 0.11.22 to 0.11.23 - [Release notes](https://github.com/seanmonstar/reqwest/releases) - [Changelog](https://github.com/seanmonstar/reqwest/blob/master/CHANGELOG.md) - [Commits](https://github.com/seanmonstar/reqwest/compare/v0.11.22...v0.11.23) Updates `owo-colors` from 3.5.0 to 4.0.0 - [Commits](https://github.com/jam1garner/owo-colors/compare/v3.5.0...v4.0.0) --- updated-dependencies: - dependency-name: futures dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod - dependency-name: tokio dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod - dependency-name: metrics dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod - dependency-name: metrics-exporter-prometheus dependency-type: direct:production update-type: version-update:semver-minor dependency-group: prod - dependency-name: reqwest dependency-type: direct:production update-type: version-update:semver-patch dependency-group: prod - dependency-name: owo-colors dependency-type: direct:production update-type: version-update:semver-major dependency-group: prod ... Signed-off-by: dependabot[bot] <support@github.com> * update all metric macros * fix deprecated function * fix duplicated deps * Fix an incorrect gauge method call * Expand documentation and error messages for best chain length --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alfredo Garcia <oxarbitrage@gmail.com> Co-authored-by: teor <teor@riseup.net>
This commit is contained in:
parent
c0f88ede8e
commit
f21d7c6934
100
Cargo.lock
100
Cargo.lock
|
@ -825,7 +825,7 @@ dependencies = [
|
|||
"eyre",
|
||||
"indenter",
|
||||
"once_cell",
|
||||
"owo-colors",
|
||||
"owo-colors 3.5.0",
|
||||
"tracing-error",
|
||||
"url",
|
||||
]
|
||||
|
@ -837,7 +837,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "cd6be1b2a7e382e2b98b43b2adcca6bb0e465af0bdd38123873ae61eb17a72c2"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
"owo-colors",
|
||||
"owo-colors 3.5.0",
|
||||
"tracing-core",
|
||||
"tracing-error",
|
||||
]
|
||||
|
@ -1491,9 +1491,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
|
|||
|
||||
[[package]]
|
||||
name = "futures"
|
||||
version = "0.3.29"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
|
||||
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
|
@ -1506,9 +1506,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-channel"
|
||||
version = "0.3.29"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
|
||||
checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
|
@ -1516,15 +1516,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-core"
|
||||
version = "0.3.29"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
|
||||
checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
|
||||
|
||||
[[package]]
|
||||
name = "futures-executor"
|
||||
version = "0.3.29"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
|
||||
checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-task",
|
||||
|
@ -1533,15 +1533,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-io"
|
||||
version = "0.3.29"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
|
||||
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
|
||||
|
||||
[[package]]
|
||||
name = "futures-macro"
|
||||
version = "0.3.29"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
|
||||
checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -1550,21 +1550,21 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "futures-sink"
|
||||
version = "0.3.29"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
|
||||
checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
|
||||
|
||||
[[package]]
|
||||
name = "futures-task"
|
||||
version = "0.3.29"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
|
||||
checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
|
||||
|
||||
[[package]]
|
||||
name = "futures-util"
|
||||
version = "0.3.29"
|
||||
version = "0.3.30"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
|
||||
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
|
||||
dependencies = [
|
||||
"futures-channel",
|
||||
"futures-core",
|
||||
|
@ -2497,16 +2497,26 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "metrics-exporter-prometheus"
|
||||
version = "0.12.2"
|
||||
name = "metrics"
|
||||
version = "0.22.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d4fa7ce7c4862db464a37b0b31d89bca874562f034bd7993895572783d02950"
|
||||
checksum = "77b9e10a211c839210fd7f99954bda26e5f8e26ec686ad68da6a32df7c80e782"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"portable-atomic",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "metrics-exporter-prometheus"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "83a4c4718a371ddfb7806378f23617876eea8b82e5ff1324516bcd283249d9ea"
|
||||
dependencies = [
|
||||
"base64 0.21.5",
|
||||
"hyper",
|
||||
"indexmap 1.9.3",
|
||||
"ipnet",
|
||||
"metrics",
|
||||
"metrics 0.22.0",
|
||||
"metrics-util",
|
||||
"quanta",
|
||||
"thiserror",
|
||||
|
@ -2526,14 +2536,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "metrics-util"
|
||||
version = "0.15.1"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4de2ed6e491ed114b40b732e4d1659a9d53992ebd87490c44a6ffe23739d973e"
|
||||
checksum = "2670b8badcc285d486261e2e9f1615b506baff91427b61bd336a472b65bbf5ed"
|
||||
dependencies = [
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-utils",
|
||||
"hashbrown 0.13.1",
|
||||
"metrics",
|
||||
"metrics 0.22.0",
|
||||
"num_cpus",
|
||||
"quanta",
|
||||
"sketches-ddsketch",
|
||||
|
@ -2789,6 +2799,12 @@ version = "3.5.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
|
||||
|
||||
[[package]]
|
||||
name = "owo-colors"
|
||||
version = "4.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f"
|
||||
|
||||
[[package]]
|
||||
name = "pairing"
|
||||
version = "0.23.0"
|
||||
|
@ -3245,9 +3261,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "quanta"
|
||||
version = "0.11.1"
|
||||
version = "0.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab"
|
||||
checksum = "577c55a090a94ed7da0e6580cc38a553558e2d736398b5d8ebf81bc9880f8acd"
|
||||
dependencies = [
|
||||
"crossbeam-utils",
|
||||
"libc",
|
||||
|
@ -3394,11 +3410,11 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "raw-cpuid"
|
||||
version = "10.7.0"
|
||||
version = "11.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332"
|
||||
checksum = "9d86a7c4638d42c44551f4791a20e687dbb4c3de1f33c43dd71e355cd429def1"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"bitflags 2.4.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -3527,9 +3543,9 @@ checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
|
|||
|
||||
[[package]]
|
||||
name = "reqwest"
|
||||
version = "0.11.22"
|
||||
version = "0.11.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
|
||||
checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41"
|
||||
dependencies = [
|
||||
"async-compression",
|
||||
"base64 0.21.5",
|
||||
|
@ -4405,9 +4421,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
|||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.35.0"
|
||||
version = "1.35.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c"
|
||||
checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"bytes",
|
||||
|
@ -5669,7 +5685,7 @@ dependencies = [
|
|||
"jubjub",
|
||||
"libc",
|
||||
"memuse",
|
||||
"metrics",
|
||||
"metrics 0.21.1",
|
||||
"orchard",
|
||||
"rand 0.8.5",
|
||||
"rand_core 0.6.4",
|
||||
|
@ -5762,7 +5778,7 @@ dependencies = [
|
|||
"howudoin",
|
||||
"jubjub",
|
||||
"lazy_static",
|
||||
"metrics",
|
||||
"metrics 0.22.0",
|
||||
"num-integer",
|
||||
"once_cell",
|
||||
"orchard",
|
||||
|
@ -5807,7 +5823,7 @@ dependencies = [
|
|||
"indexmap 2.1.0",
|
||||
"itertools 0.12.0",
|
||||
"lazy_static",
|
||||
"metrics",
|
||||
"metrics 0.22.0",
|
||||
"num-integer",
|
||||
"ordered-map",
|
||||
"pin-project",
|
||||
|
@ -5938,7 +5954,7 @@ dependencies = [
|
|||
"itertools 0.12.0",
|
||||
"jubjub",
|
||||
"lazy_static",
|
||||
"metrics",
|
||||
"metrics 0.22.0",
|
||||
"mset",
|
||||
"once_cell",
|
||||
"proptest",
|
||||
|
@ -5975,7 +5991,7 @@ dependencies = [
|
|||
"itertools 0.12.0",
|
||||
"lazy_static",
|
||||
"once_cell",
|
||||
"owo-colors",
|
||||
"owo-colors 4.0.0",
|
||||
"proptest",
|
||||
"rand 0.8.5",
|
||||
"regex",
|
||||
|
@ -6039,7 +6055,7 @@ dependencies = [
|
|||
"jsonrpc-core",
|
||||
"lazy_static",
|
||||
"log",
|
||||
"metrics",
|
||||
"metrics 0.22.0",
|
||||
"metrics-exporter-prometheus",
|
||||
"num-integer",
|
||||
"once_cell",
|
||||
|
|
|
@ -70,11 +70,17 @@ skip-tree = [
|
|||
# wait for `parking_lot` crate inside `jsonrpc-http-server` to upgrade
|
||||
{ name = "redox_syscall", version = "=0.2.16" },
|
||||
|
||||
# wait for `color-eyre` to upgrade
|
||||
{ name = "owo-colors", version = "=3.5.0" },
|
||||
|
||||
# ZF crates
|
||||
|
||||
# wait for indexmap, toml_edit, serde_json, tower to upgrade
|
||||
{ name = "hashbrown", version = "=0.12.3" },
|
||||
|
||||
# wait for zcash_script to upgrade
|
||||
{ name = "metrics", version = "=0.21.1" },
|
||||
|
||||
# ECC crates
|
||||
|
||||
# wait for hdwallet to upgrade
|
||||
|
|
|
@ -22,11 +22,11 @@ keywords = ["tower", "batch"]
|
|||
categories = ["algorithms", "asynchronous"]
|
||||
|
||||
[dependencies]
|
||||
futures = "0.3.29"
|
||||
futures = "0.3.30"
|
||||
futures-core = "0.3.28"
|
||||
pin-project = "1.1.3"
|
||||
rayon = "1.7.0"
|
||||
tokio = { version = "1.34.0", features = ["time", "sync", "tracing", "macros"] }
|
||||
tokio = { version = "1.35.1", features = ["time", "sync", "tracing", "macros"] }
|
||||
tokio-util = "0.7.10"
|
||||
tower = { version = "0.4.13", features = ["util", "buffer"] }
|
||||
tracing = "0.1.39"
|
||||
|
@ -41,7 +41,7 @@ tinyvec = { version = "1.6.0", features = ["rustc_1_55"] }
|
|||
ed25519-zebra = "4.0.3"
|
||||
rand = "0.8.5"
|
||||
|
||||
tokio = { version = "1.34.0", features = ["full", "tracing", "test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["full", "tracing", "test-util"] }
|
||||
tokio-test = "0.4.3"
|
||||
tower-fallback = { path = "../tower-fallback/" }
|
||||
tower-test = "0.4.0"
|
||||
|
|
|
@ -22,6 +22,6 @@ futures-core = "0.3.28"
|
|||
tracing = "0.1.39"
|
||||
|
||||
[dev-dependencies]
|
||||
tokio = { version = "1.34.0", features = ["full", "tracing", "test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["full", "tracing", "test-util"] }
|
||||
|
||||
zebra-test = { path = "../zebra-test/" }
|
||||
|
|
|
@ -101,7 +101,7 @@ serde_with = "3.4.0"
|
|||
serde-big-array = "0.5.1"
|
||||
|
||||
# Processing
|
||||
futures = "0.3.29"
|
||||
futures = "0.3.30"
|
||||
itertools = "0.12.0"
|
||||
rayon = "1.7.0"
|
||||
|
||||
|
@ -114,7 +114,7 @@ reddsa = "0.5.1"
|
|||
serde_json = { version = "1.0.108", optional = true }
|
||||
|
||||
# Production feature async-error and testing feature proptest-impl
|
||||
tokio = { version = "1.34.0", optional = true }
|
||||
tokio = { version = "1.35.1", optional = true }
|
||||
|
||||
# Experimental feature getblocktemplate-rpcs
|
||||
zcash_address = { version = "0.3.0", optional = true }
|
||||
|
@ -147,7 +147,7 @@ proptest-derive = "0.4.0"
|
|||
rand = "0.8.5"
|
||||
rand_chacha = "0.3.1"
|
||||
|
||||
tokio = { version = "1.34.0", features = ["full", "tracing", "test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["full", "tracing", "test-util"] }
|
||||
|
||||
zebra-test = { path = "../zebra-test/" }
|
||||
|
||||
|
|
|
@ -49,11 +49,11 @@ lazy_static = "1.4.0"
|
|||
once_cell = "1.18.0"
|
||||
serde = { version = "1.0.193", features = ["serde_derive"] }
|
||||
|
||||
futures = "0.3.29"
|
||||
futures = "0.3.30"
|
||||
futures-util = "0.3.28"
|
||||
metrics = "0.21.1"
|
||||
metrics = "0.22.0"
|
||||
thiserror = "1.0.51"
|
||||
tokio = { version = "1.34.0", features = ["time", "sync", "tracing", "rt-multi-thread"] }
|
||||
tokio = { version = "1.35.1", features = ["time", "sync", "tracing", "rt-multi-thread"] }
|
||||
tower = { version = "0.4.13", features = ["timeout", "util", "buffer"] }
|
||||
tracing = "0.1.39"
|
||||
tracing-futures = "0.2.5"
|
||||
|
@ -90,7 +90,7 @@ proptest = "1.4.0"
|
|||
proptest-derive = "0.4.0"
|
||||
spandoc = "0.2.2"
|
||||
|
||||
tokio = { version = "1.34.0", features = ["full", "tracing", "test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["full", "tracing", "test-util"] }
|
||||
tracing-error = "0.2.0"
|
||||
tracing-subscriber = "0.3.18"
|
||||
|
||||
|
|
|
@ -103,8 +103,8 @@ fn progress_from_tip(
|
|||
if height >= checkpoint_list.max_height() {
|
||||
(None, Progress::FinalCheckpoint)
|
||||
} else {
|
||||
metrics::gauge!("checkpoint.verified.height", height.0 as f64);
|
||||
metrics::gauge!("checkpoint.processing.next.height", height.0 as f64);
|
||||
metrics::gauge!("checkpoint.verified.height").set(height.0 as f64);
|
||||
metrics::gauge!("checkpoint.processing.next.height").set(height.0 as f64);
|
||||
(Some(hash), Progress::InitialTip(height))
|
||||
}
|
||||
}
|
||||
|
@ -303,7 +303,7 @@ where
|
|||
.next_back()
|
||||
.expect("queued has at least one entry");
|
||||
|
||||
metrics::gauge!("checkpoint.queued.max.height", max_queued_height.0 as f64);
|
||||
metrics::gauge!("checkpoint.queued.max.height").set(max_queued_height.0 as f64);
|
||||
|
||||
let is_checkpoint = self.checkpoint_list.contains(height);
|
||||
tracing::debug!(?height, ?hash, ?is_checkpoint, "queued block");
|
||||
|
@ -326,12 +326,12 @@ where
|
|||
return;
|
||||
};
|
||||
|
||||
metrics::gauge!("checkpoint.verified.height", verified_height.0 as f64);
|
||||
metrics::gauge!("checkpoint.verified.height").set(verified_height.0 as f64);
|
||||
|
||||
let checkpoint_index = self.checkpoint_list.prev_checkpoint_index(verified_height);
|
||||
let checkpoint_count = self.checkpoint_list.len();
|
||||
|
||||
metrics::gauge!("checkpoint.verified.count", checkpoint_index as f64);
|
||||
metrics::gauge!("checkpoint.verified.count").set(checkpoint_index as f64);
|
||||
|
||||
tracing::debug!(
|
||||
?verified_height,
|
||||
|
@ -409,7 +409,7 @@ where
|
|||
// Check if we have the genesis block as a special case, to simplify the loop
|
||||
BeforeGenesis if !self.queued.contains_key(&block::Height(0)) => {
|
||||
tracing::trace!("Waiting for genesis block");
|
||||
metrics::counter!("checkpoint.waiting.count", 1);
|
||||
metrics::counter!("checkpoint.waiting.count").increment(1);
|
||||
return WaitingForBlocks;
|
||||
}
|
||||
BeforeGenesis => block::Height(0),
|
||||
|
@ -444,10 +444,7 @@ where
|
|||
break;
|
||||
}
|
||||
}
|
||||
metrics::gauge!(
|
||||
"checkpoint.queued.continuous.height",
|
||||
pending_height.0 as f64,
|
||||
);
|
||||
metrics::gauge!("checkpoint.queued.continuous.height").set(pending_height.0 as f64);
|
||||
|
||||
// Now find the start of the checkpoint range
|
||||
let start = self.current_start_bound().expect(
|
||||
|
@ -466,14 +463,11 @@ where
|
|||
);
|
||||
|
||||
if let Some(block::Height(target_checkpoint)) = target_checkpoint {
|
||||
metrics::gauge!(
|
||||
"checkpoint.processing.next.height",
|
||||
target_checkpoint as f64,
|
||||
);
|
||||
metrics::gauge!("checkpoint.processing.next.height").set(target_checkpoint as f64);
|
||||
} else {
|
||||
// Use the start height if there is no potential next checkpoint
|
||||
metrics::gauge!("checkpoint.processing.next.height", start_height.0 as f64);
|
||||
metrics::counter!("checkpoint.waiting.count", 1);
|
||||
metrics::gauge!("checkpoint.processing.next.height").set(start_height.0 as f64);
|
||||
metrics::counter!("checkpoint.waiting.count").increment(1);
|
||||
}
|
||||
|
||||
target_checkpoint
|
||||
|
@ -541,12 +535,12 @@ where
|
|||
/// Increase the current checkpoint height to `verified_height`,
|
||||
fn update_progress(&mut self, verified_height: block::Height) {
|
||||
if let Some(max_height) = self.queued.keys().next_back() {
|
||||
metrics::gauge!("checkpoint.queued.max.height", max_height.0 as f64);
|
||||
metrics::gauge!("checkpoint.queued.max.height").set(max_height.0 as f64);
|
||||
} else {
|
||||
// use f64::NAN as a sentinel value for "None", because 0 is a valid height
|
||||
metrics::gauge!("checkpoint.queued.max.height", f64::NAN);
|
||||
metrics::gauge!("checkpoint.queued.max.height").set(f64::NAN);
|
||||
}
|
||||
metrics::gauge!("checkpoint.queued_slots", self.queued.len() as f64);
|
||||
metrics::gauge!("checkpoint.queued_slots").set(self.queued.len() as f64);
|
||||
|
||||
// Ignore blocks that are below the previous checkpoint, or otherwise
|
||||
// have invalid heights.
|
||||
|
@ -869,7 +863,7 @@ where
|
|||
|
||||
let block_count = rev_valid_blocks.len();
|
||||
tracing::info!(?block_count, ?current_range, "verified checkpoint range");
|
||||
metrics::counter!("checkpoint.verified.block.count", block_count as u64);
|
||||
metrics::counter!("checkpoint.verified.block.count").increment(block_count as u64);
|
||||
|
||||
// All the blocks we've kept are valid, so let's verify them
|
||||
// in height order.
|
||||
|
@ -1058,7 +1052,7 @@ where
|
|||
|
||||
self.process_checkpoint_range();
|
||||
|
||||
metrics::gauge!("checkpoint.queued_slots", self.queued.len() as f64);
|
||||
metrics::gauge!("checkpoint.queued_slots").set(self.queued.len() as f64);
|
||||
|
||||
// Because the checkpoint verifier duplicates state from the state
|
||||
// service (it tracks which checkpoints have been verified), we must
|
||||
|
|
|
@ -164,10 +164,10 @@ impl Service<BatchControl<Item>> for Verifier {
|
|||
|
||||
if result.is_ok() {
|
||||
tracing::trace!(?result, "validated ed25519 signature");
|
||||
metrics::counter!("signatures.ed25519.validated", 1);
|
||||
metrics::counter!("signatures.ed25519.validated").increment(1);
|
||||
} else {
|
||||
tracing::trace!(?result, "invalid ed25519 signature");
|
||||
metrics::counter!("signatures.ed25519.invalid", 1);
|
||||
metrics::counter!("signatures.ed25519.invalid").increment(1);
|
||||
}
|
||||
result.map_err(BoxError::from)
|
||||
}
|
||||
|
|
|
@ -485,10 +485,10 @@ impl Service<BatchControl<Item>> for Verifier {
|
|||
|
||||
if result.is_ok() {
|
||||
tracing::trace!(?result, "verified groth16 proof");
|
||||
metrics::counter!("proofs.groth16.verified", 1);
|
||||
metrics::counter!("proofs.groth16.verified").increment(1);
|
||||
} else {
|
||||
tracing::trace!(?result, "invalid groth16 proof");
|
||||
metrics::counter!("proofs.groth16.invalid", 1);
|
||||
metrics::counter!("proofs.groth16.invalid").increment(1);
|
||||
}
|
||||
|
||||
result.map_err(BoxError::from)
|
||||
|
|
|
@ -348,10 +348,10 @@ impl Service<BatchControl<Item>> for Verifier {
|
|||
|
||||
if result.is_ok() {
|
||||
tracing::trace!(?result, "verified halo2 proof");
|
||||
metrics::counter!("proofs.halo2.verified", 1);
|
||||
metrics::counter!("proofs.halo2.verified").increment(1);
|
||||
} else {
|
||||
tracing::trace!(?result, "invalid halo2 proof");
|
||||
metrics::counter!("proofs.halo2.invalid", 1);
|
||||
metrics::counter!("proofs.halo2.invalid").increment(1);
|
||||
}
|
||||
|
||||
result.map_err(BoxError::from)
|
||||
|
|
|
@ -165,10 +165,10 @@ impl Service<BatchControl<Item>> for Verifier {
|
|||
|
||||
if result.is_ok() {
|
||||
tracing::trace!(?result, "validated redjubjub signature");
|
||||
metrics::counter!("signatures.redjubjub.validated", 1);
|
||||
metrics::counter!("signatures.redjubjub.validated").increment(1);
|
||||
} else {
|
||||
tracing::trace!(?result, "invalid redjubjub signature");
|
||||
metrics::counter!("signatures.redjubjub.invalid", 1);
|
||||
metrics::counter!("signatures.redjubjub.invalid").increment(1);
|
||||
}
|
||||
|
||||
result.map_err(BoxError::from)
|
||||
|
|
|
@ -164,10 +164,10 @@ impl Service<BatchControl<Item>> for Verifier {
|
|||
|
||||
if result.is_ok() {
|
||||
tracing::trace!(?result, "validated redpallas signature");
|
||||
metrics::counter!("signatures.redpallas.validated", 1);
|
||||
metrics::counter!("signatures.redpallas.validated").increment(1);
|
||||
} else {
|
||||
tracing::trace!(?result, "invalid redpallas signature");
|
||||
metrics::counter!("signatures.redpallas.invalid", 1);
|
||||
metrics::counter!("signatures.redpallas.invalid").increment(1);
|
||||
}
|
||||
|
||||
result.map_err(BoxError::from)
|
||||
|
|
|
@ -60,13 +60,13 @@ serde = { version = "1.0.193", features = ["serde_derive"] }
|
|||
tempfile = "3.8.1"
|
||||
thiserror = "1.0.51"
|
||||
|
||||
futures = "0.3.29"
|
||||
tokio = { version = "1.34.0", features = ["fs", "io-util", "net", "time", "tracing", "macros", "rt-multi-thread"] }
|
||||
futures = "0.3.30"
|
||||
tokio = { version = "1.35.1", features = ["fs", "io-util", "net", "time", "tracing", "macros", "rt-multi-thread"] }
|
||||
tokio-stream = { version = "0.1.14", features = ["sync", "time"] }
|
||||
tokio-util = { version = "0.7.10", features = ["codec"] }
|
||||
tower = { version = "0.4.13", features = ["retry", "discover", "load", "load-shed", "timeout", "util", "buffer"] }
|
||||
|
||||
metrics = "0.21.1"
|
||||
metrics = "0.22.0"
|
||||
tracing-futures = "0.2.5"
|
||||
tracing-error = { version = "0.2.0", features = ["traced-error"] }
|
||||
tracing = "0.1.39"
|
||||
|
@ -90,7 +90,7 @@ proptest = "1.4.0"
|
|||
proptest-derive = "0.4.0"
|
||||
|
||||
static_assertions = "1.1.0"
|
||||
tokio = { version = "1.34.0", features = ["full", "tracing", "test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["full", "tracing", "test-util"] }
|
||||
toml = "0.8.8"
|
||||
|
||||
zebra-chain = { path = "../zebra-chain", features = ["proptest-impl"] }
|
||||
|
|
|
@ -696,18 +696,15 @@ impl AddressBook {
|
|||
let _ = self.address_metrics_tx.send(m);
|
||||
|
||||
// TODO: rename to address_book.[state_name]
|
||||
metrics::gauge!("candidate_set.responded", m.responded as f64);
|
||||
metrics::gauge!("candidate_set.gossiped", m.never_attempted_gossiped as f64);
|
||||
metrics::gauge!("candidate_set.failed", m.failed as f64);
|
||||
metrics::gauge!("candidate_set.pending", m.attempt_pending as f64);
|
||||
metrics::gauge!("candidate_set.responded").set(m.responded as f64);
|
||||
metrics::gauge!("candidate_set.gossiped").set(m.never_attempted_gossiped as f64);
|
||||
metrics::gauge!("candidate_set.failed").set(m.failed as f64);
|
||||
metrics::gauge!("candidate_set.pending").set(m.attempt_pending as f64);
|
||||
|
||||
// TODO: rename to address_book.responded.recently_live
|
||||
metrics::gauge!("candidate_set.recently_live", m.recently_live as f64);
|
||||
metrics::gauge!("candidate_set.recently_live").set(m.recently_live as f64);
|
||||
// TODO: rename to address_book.responded.stopped_responding
|
||||
metrics::gauge!(
|
||||
"candidate_set.disconnected",
|
||||
m.recently_stopped_responding as f64,
|
||||
);
|
||||
metrics::gauge!("candidate_set.disconnected").set(m.recently_stopped_responding as f64);
|
||||
|
||||
std::mem::drop(_guard);
|
||||
self.log_metrics(&m, instant_now);
|
||||
|
|
|
@ -353,10 +353,10 @@ impl Config {
|
|||
// (But we only make one initial connection attempt to each IP.)
|
||||
metrics::counter!(
|
||||
"zcash.net.peers.initial",
|
||||
1,
|
||||
"seed" => host.to_string(),
|
||||
"remote_ip" => ip.to_string()
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
}
|
||||
|
||||
Ok(ip_addrs.into_iter().collect())
|
||||
|
@ -440,10 +440,10 @@ impl Config {
|
|||
// (But we only make one initial connection attempt to each IP.)
|
||||
metrics::counter!(
|
||||
"zcash.net.peers.initial",
|
||||
1,
|
||||
"cache" => peer_cache_file.display().to_string(),
|
||||
"remote_ip" => ip.to_string()
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
}
|
||||
|
||||
Ok(peer_list)
|
||||
|
@ -553,10 +553,10 @@ impl Config {
|
|||
for ip in &peer_list {
|
||||
metrics::counter!(
|
||||
"zcash.net.peers.cache",
|
||||
1,
|
||||
"cache" => peer_cache_file.display().to_string(),
|
||||
"remote_ip" => ip.to_string()
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
@ -790,10 +790,10 @@ where
|
|||
// Add a metric for inbound responses to outbound requests.
|
||||
metrics::counter!(
|
||||
"zebra.net.in.responses",
|
||||
1,
|
||||
"command" => response.command(),
|
||||
"addr" => self.metrics_label.clone(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
} else {
|
||||
debug!(error = ?response, "error in peer response to Zebra request");
|
||||
}
|
||||
|
@ -969,15 +969,15 @@ where
|
|||
let InProgressClientRequest { request, tx, span } = req;
|
||||
|
||||
if tx.is_canceled() {
|
||||
metrics::counter!("peer.canceled", 1);
|
||||
metrics::counter!("peer.canceled").increment(1);
|
||||
debug!(state = %self.state, %request, "ignoring canceled request");
|
||||
|
||||
metrics::counter!(
|
||||
"zebra.net.out.requests.canceled",
|
||||
1,
|
||||
"command" => request.command(),
|
||||
"addr" => self.metrics_label.clone(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
self.update_state_metrics(format!("Out::Req::Canceled::{}", request.command()));
|
||||
|
||||
return;
|
||||
|
@ -988,10 +988,10 @@ where
|
|||
// Add a metric for outbound requests.
|
||||
metrics::counter!(
|
||||
"zebra.net.out.requests",
|
||||
1,
|
||||
"command" => request.command(),
|
||||
"addr" => self.metrics_label.clone(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
self.update_state_metrics(format!("Out::Req::{}", request.command()));
|
||||
|
||||
let new_handler = match (&self.state, request) {
|
||||
|
@ -1360,10 +1360,10 @@ where
|
|||
// Add a metric for inbound requests
|
||||
metrics::counter!(
|
||||
"zebra.net.in.requests",
|
||||
1,
|
||||
"command" => req.command(),
|
||||
"addr" => self.metrics_label.clone(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
self.update_state_metrics(format!("In::Req::{}", req.command()));
|
||||
|
||||
// Give the inbound service time to clear its queue,
|
||||
|
@ -1431,10 +1431,10 @@ where
|
|||
// Add a metric for outbound responses to inbound requests
|
||||
metrics::counter!(
|
||||
"zebra.net.out.responses",
|
||||
1,
|
||||
"command" => rsp.command(),
|
||||
"addr" => self.metrics_label.clone(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
self.update_state_metrics(format!("In::Rsp::{}", rsp.command()));
|
||||
|
||||
// TODO: split response handler into its own method
|
||||
|
@ -1570,9 +1570,9 @@ where
|
|||
|
||||
if thread_rng().gen::<f32>() < drop_connection_probability {
|
||||
if matches!(error, PeerError::Overloaded) {
|
||||
metrics::counter!("pool.closed.loadshed", 1);
|
||||
metrics::counter!("pool.closed.loadshed").increment(1);
|
||||
} else {
|
||||
metrics::counter!("pool.closed.inbound.timeout", 1);
|
||||
metrics::counter!("pool.closed.inbound.timeout").increment(1);
|
||||
}
|
||||
|
||||
tracing::info!(
|
||||
|
@ -1594,9 +1594,9 @@ where
|
|||
self.update_state_metrics(format!("In::Req::{}/Rsp::{error}::Ignored", req.command()));
|
||||
|
||||
if matches!(error, PeerError::Overloaded) {
|
||||
metrics::counter!("pool.ignored.loadshed", 1);
|
||||
metrics::counter!("pool.ignored.loadshed").increment(1);
|
||||
} else {
|
||||
metrics::counter!("pool.ignored.inbound.timeout", 1);
|
||||
metrics::counter!("pool.ignored.inbound.timeout").increment(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1659,12 +1659,12 @@ where
|
|||
self.erase_state_metrics();
|
||||
|
||||
// Set the new state
|
||||
metrics::increment_gauge!(
|
||||
metrics::gauge!(
|
||||
"zebra.net.connection.state",
|
||||
1.0,
|
||||
"command" => current_metrics_state.clone(),
|
||||
"addr" => self.metrics_label.clone(),
|
||||
);
|
||||
)
|
||||
.increment(1.0);
|
||||
|
||||
self.last_metrics_state = Some(current_metrics_state);
|
||||
}
|
||||
|
@ -1674,10 +1674,10 @@ where
|
|||
if let Some(last_metrics_state) = self.last_metrics_state.take() {
|
||||
metrics::gauge!(
|
||||
"zebra.net.connection.state",
|
||||
0.0,
|
||||
"command" => last_metrics_state,
|
||||
"addr" => self.metrics_label.clone(),
|
||||
);
|
||||
)
|
||||
.set(0.0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -743,19 +743,19 @@ where
|
|||
// the value is the number of rejected handshakes, by peer IP and protocol version
|
||||
metrics::counter!(
|
||||
"zcash.net.peers.obsolete",
|
||||
1,
|
||||
"remote_ip" => their_addr.to_string(),
|
||||
"remote_version" => remote.version.to_string(),
|
||||
"min_version" => min_version.to_string(),
|
||||
"user_agent" => remote.user_agent.clone(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
|
||||
// the value is the remote version of the most recent rejected handshake from each peer
|
||||
metrics::gauge!(
|
||||
"zcash.net.peers.version.obsolete",
|
||||
remote.version.0 as f64,
|
||||
"remote_ip" => their_addr.to_string(),
|
||||
);
|
||||
)
|
||||
.set(remote.version.0 as f64);
|
||||
|
||||
// Disconnect if peer is using an obsolete version.
|
||||
return Err(HandshakeError::ObsoleteVersion(remote.version));
|
||||
|
@ -782,20 +782,20 @@ where
|
|||
// the value is the number of connected handshakes, by peer IP and protocol version
|
||||
metrics::counter!(
|
||||
"zcash.net.peers.connected",
|
||||
1,
|
||||
"remote_ip" => their_addr.to_string(),
|
||||
"remote_version" => connection_info.remote.version.to_string(),
|
||||
"negotiated_version" => negotiated_version.to_string(),
|
||||
"min_version" => min_version.to_string(),
|
||||
"user_agent" => connection_info.remote.user_agent.clone(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
|
||||
// the value is the remote version of the most recent connected handshake from each peer
|
||||
metrics::gauge!(
|
||||
"zcash.net.peers.version.connected",
|
||||
connection_info.remote.version.0 as f64,
|
||||
"remote_ip" => their_addr.to_string(),
|
||||
);
|
||||
)
|
||||
.set(connection_info.remote.version.0 as f64);
|
||||
|
||||
peer_conn.send(Message::Verack).await?;
|
||||
|
||||
|
@ -954,10 +954,10 @@ where
|
|||
// Add a metric for outbound messages.
|
||||
metrics::counter!(
|
||||
"zcash.net.out.messages",
|
||||
1,
|
||||
"command" => msg.command(),
|
||||
"addr" => connected_addr.get_transient_addr_label(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
// We need to use future::ready rather than an async block here,
|
||||
// because we need the sink to be Unpin, and the With<Fut, ...>
|
||||
// returned by .with is Unpin only if Fut is Unpin, and the
|
||||
|
@ -991,10 +991,10 @@ where
|
|||
Ok(msg) => {
|
||||
metrics::counter!(
|
||||
"zcash.net.in.messages",
|
||||
1,
|
||||
"command" => msg.command(),
|
||||
"addr" => connected_addr.get_transient_addr_label(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
|
||||
// # Security
|
||||
//
|
||||
|
@ -1004,10 +1004,10 @@ where
|
|||
Err(err) => {
|
||||
metrics::counter!(
|
||||
"zebra.net.in.errors",
|
||||
1,
|
||||
"error" => err.to_string(),
|
||||
"addr" => connected_addr.get_transient_addr_label(),
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
|
||||
// # Security
|
||||
//
|
||||
|
|
|
@ -813,8 +813,7 @@ where
|
|||
// To avoid hangs and starvation, the crawler must spawn a separate task for each crawl
|
||||
// and handshake, so they can make progress independently (and avoid deadlocking each other).
|
||||
loop {
|
||||
metrics::gauge!(
|
||||
"crawler.in_flight_handshakes",
|
||||
metrics::gauge!("crawler.in_flight_handshakes").set(
|
||||
handshakes
|
||||
.len()
|
||||
.checked_sub(1)
|
||||
|
|
|
@ -342,8 +342,8 @@ impl InventoryRegistry {
|
|||
Poll::Ready(Some(Err(BroadcastStreamRecvError::Lagged(count)))) => {
|
||||
// This isn't a fatal inventory error, it's expected behaviour when Zebra is
|
||||
// under load from peers.
|
||||
metrics::counter!("pool.inventory.dropped", 1);
|
||||
metrics::counter!("pool.inventory.dropped.messages", count);
|
||||
metrics::counter!("pool.inventory.dropped").increment(1);
|
||||
metrics::counter!("pool.inventory.dropped.messages").increment(count);
|
||||
|
||||
// If this message happens a lot, we should improve inventory registry
|
||||
// performance, or poll the registry or peer set in a separate task.
|
||||
|
|
|
@ -1080,9 +1080,9 @@ where
|
|||
let num_ready = self.ready_services.len();
|
||||
let num_unready = self.unready_services.len();
|
||||
let num_peers = num_ready + num_unready;
|
||||
metrics::gauge!("pool.num_ready", num_ready as f64);
|
||||
metrics::gauge!("pool.num_unready", num_unready as f64);
|
||||
metrics::gauge!("zcash.net.peers", num_peers as f64);
|
||||
metrics::gauge!("pool.num_ready").set(num_ready as f64);
|
||||
metrics::gauge!("pool.num_unready").set(num_unready as f64);
|
||||
metrics::gauge!("zcash.net.peers").set(num_peers as f64);
|
||||
|
||||
// Security: make sure we haven't exceeded the connection limit
|
||||
if num_peers > self.peerset_total_connection_limit {
|
||||
|
|
|
@ -126,8 +126,8 @@ impl Encoder<Message> for Codec {
|
|||
|
||||
if let Some(addr_label) = self.builder.metrics_addr_label.clone() {
|
||||
metrics::counter!("zcash.net.out.bytes.total",
|
||||
(body_length + HEADER_LEN) as u64,
|
||||
"addr" => addr_label);
|
||||
"addr" => addr_label)
|
||||
.increment((body_length + HEADER_LEN) as u64);
|
||||
}
|
||||
|
||||
use Message::*;
|
||||
|
@ -397,7 +397,8 @@ impl Decoder for Codec {
|
|||
}
|
||||
|
||||
if let Some(label) = self.builder.metrics_addr_label.clone() {
|
||||
metrics::counter!("zcash.net.in.bytes.total", (body_len + HEADER_LEN) as u64, "addr" => label);
|
||||
metrics::counter!("zcash.net.in.bytes.total", "addr" => label)
|
||||
.increment((body_len + HEADER_LEN) as u64);
|
||||
}
|
||||
|
||||
// Reserve buffer space for the expected body and the following header.
|
||||
|
|
|
@ -43,7 +43,7 @@ zebra-chain = { path = "../zebra-chain" , version = "1.0.0-beta.32" }
|
|||
color-eyre = { version = "0.6.2", optional = true }
|
||||
jsonrpc-core = { version = "18.0.0", optional = true }
|
||||
# Security: avoid default dependency on openssl
|
||||
reqwest = { version = "0.11.22", default-features = false, features = ["rustls-tls"], optional = true }
|
||||
reqwest = { version = "0.11.23", default-features = false, features = ["rustls-tls"], optional = true }
|
||||
serde = { version = "1.0.193", optional = true }
|
||||
serde_json = { version = "1.0.108", optional = true }
|
||||
|
||||
|
@ -51,6 +51,6 @@ serde_json = { version = "1.0.108", optional = true }
|
|||
|
||||
color-eyre = "0.6.2"
|
||||
jsonrpc-core = "18.0.0"
|
||||
reqwest = { version = "0.11.22", default-features = false, features = ["rustls-tls"] }
|
||||
reqwest = { version = "0.11.23", default-features = false, features = ["rustls-tls"] }
|
||||
serde = "1.0.193"
|
||||
serde_json = "1.0.108"
|
||||
|
|
|
@ -40,7 +40,7 @@ proptest-impl = [
|
|||
|
||||
[dependencies]
|
||||
chrono = { version = "0.4.31", default-features = false, features = ["clock", "std"] }
|
||||
futures = "0.3.29"
|
||||
futures = "0.3.30"
|
||||
|
||||
# lightwalletd sends JSON-RPC requests over HTTP 1.1
|
||||
hyper = { version = "0.14.28", features = ["http1", "server"] }
|
||||
|
@ -54,7 +54,7 @@ num_cpus = "1.16.0"
|
|||
serde_json = { version = "1.0.108", features = ["preserve_order"] }
|
||||
indexmap = { version = "2.0.1", features = ["serde"] }
|
||||
|
||||
tokio = { version = "1.34.0", features = ["time", "rt-multi-thread", "macros", "tracing"] }
|
||||
tokio = { version = "1.35.1", features = ["time", "rt-multi-thread", "macros", "tracing"] }
|
||||
tower = "0.4.13"
|
||||
|
||||
tracing = "0.1.39"
|
||||
|
@ -83,7 +83,7 @@ insta = { version = "1.33.0", features = ["redactions", "json", "ron"] }
|
|||
proptest = "1.4.0"
|
||||
|
||||
thiserror = "1.0.51"
|
||||
tokio = { version = "1.34.0", features = ["full", "tracing", "test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["full", "tracing", "test-util"] }
|
||||
|
||||
zebra-chain = { path = "../zebra-chain", features = ["proptest-impl"] }
|
||||
zebra-consensus = { path = "../zebra-consensus", features = ["proptest-impl"] }
|
||||
|
|
|
@ -41,7 +41,7 @@ indexmap = { version = "2.0.1", features = ["serde"] }
|
|||
itertools = "0.12.0"
|
||||
semver = "1.0.20"
|
||||
serde = { version = "1.0.193", features = ["serde_derive"] }
|
||||
tokio = { version = "1.34.0", features = ["time"] }
|
||||
tokio = { version = "1.35.1", features = ["time"] }
|
||||
tower = "0.4.13"
|
||||
tracing = "0.1.39"
|
||||
|
||||
|
@ -69,7 +69,7 @@ zebra-test = { path = "../zebra-test", version = "1.0.0-beta.31", optional = tru
|
|||
[dev-dependencies]
|
||||
|
||||
insta = { version = "1.33.0", features = ["ron", "redactions"] }
|
||||
tokio = { version = "1.34.0", features = ["test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["test-util"] }
|
||||
|
||||
proptest = "1.4.0"
|
||||
proptest-derive = "0.4.0"
|
||||
|
|
|
@ -49,14 +49,14 @@ elasticsearch = [
|
|||
bincode = "1.3.3"
|
||||
chrono = { version = "0.4.31", default-features = false, features = ["clock", "std"] }
|
||||
dirs = "5.0.1"
|
||||
futures = "0.3.29"
|
||||
futures = "0.3.30"
|
||||
hex = "0.4.3"
|
||||
hex-literal = "0.4.1"
|
||||
humantime-serde = "1.1.1"
|
||||
indexmap = "2.0.1"
|
||||
itertools = "0.12.0"
|
||||
lazy_static = "1.4.0"
|
||||
metrics = "0.21.1"
|
||||
metrics = "0.22.0"
|
||||
mset = "0.1.1"
|
||||
regex = "1.10.2"
|
||||
rlimit = "0.10.1"
|
||||
|
@ -67,7 +67,7 @@ tempfile = "3.8.1"
|
|||
thiserror = "1.0.51"
|
||||
|
||||
rayon = "1.7.0"
|
||||
tokio = { version = "1.34.0", features = ["rt-multi-thread", "sync", "tracing"] }
|
||||
tokio = { version = "1.35.1", features = ["rt-multi-thread", "sync", "tracing"] }
|
||||
tower = { version = "0.4.13", features = ["buffer", "util"] }
|
||||
tracing = "0.1.39"
|
||||
|
||||
|
@ -105,7 +105,7 @@ rand = "0.8.5"
|
|||
halo2 = { package = "halo2_proofs", version = "0.3.0" }
|
||||
jubjub = "0.10.0"
|
||||
|
||||
tokio = { version = "1.34.0", features = ["full", "tracing", "test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["full", "tracing", "test-util"] }
|
||||
|
||||
zebra-chain = { path = "../zebra-chain", features = ["proptest-impl"] }
|
||||
zebra-test = { path = "../zebra-test/" }
|
||||
|
|
|
@ -742,10 +742,10 @@ impl Request {
|
|||
pub fn count_metric(&self) {
|
||||
metrics::counter!(
|
||||
"state.requests",
|
||||
1,
|
||||
"service" => "state",
|
||||
"type" => self.variant_name()
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1031,10 +1031,10 @@ impl ReadRequest {
|
|||
pub fn count_metric(&self) {
|
||||
metrics::counter!(
|
||||
"state.requests",
|
||||
1,
|
||||
"service" => "read_state",
|
||||
"type" => self.variant_name()
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -520,14 +520,9 @@ impl StateService {
|
|||
self.max_finalized_queue_height = queued_height.0 as f64;
|
||||
}
|
||||
|
||||
metrics::gauge!(
|
||||
"state.checkpoint.queued.max.height",
|
||||
self.max_finalized_queue_height,
|
||||
);
|
||||
metrics::gauge!(
|
||||
"state.checkpoint.queued.block.count",
|
||||
self.finalized_state_queued_blocks.len() as f64,
|
||||
);
|
||||
metrics::gauge!("state.checkpoint.queued.max.height").set(self.max_finalized_queue_height);
|
||||
metrics::gauge!("state.checkpoint.queued.block.count")
|
||||
.set(self.finalized_state_queued_blocks.len() as f64);
|
||||
|
||||
rsp_rx
|
||||
}
|
||||
|
@ -583,10 +578,8 @@ impl StateService {
|
|||
"block commit task exited. Is Zebra shutting down?",
|
||||
);
|
||||
} else {
|
||||
metrics::gauge!(
|
||||
"state.checkpoint.sent.block.height",
|
||||
last_sent_finalized_block_height.0 as f64,
|
||||
);
|
||||
metrics::gauge!("state.checkpoint.sent.block.height")
|
||||
.set(last_sent_finalized_block_height.0 as f64);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -255,26 +255,20 @@ impl FinalizedState {
|
|||
);
|
||||
|
||||
if result.is_ok() {
|
||||
metrics::counter!("state.checkpoint.finalized.block.count", 1);
|
||||
metrics::gauge!(
|
||||
"state.checkpoint.finalized.block.height",
|
||||
checkpoint_verified.height.0 as f64,
|
||||
);
|
||||
metrics::counter!("state.checkpoint.finalized.block.count").increment(1);
|
||||
metrics::gauge!("state.checkpoint.finalized.block.height")
|
||||
.set(checkpoint_verified.height.0 as f64);
|
||||
|
||||
// This height gauge is updated for both fully verified and checkpoint blocks.
|
||||
// These updates can't conflict, because the state makes sure that blocks
|
||||
// are committed in order.
|
||||
metrics::gauge!(
|
||||
"zcash.chain.verified.block.height",
|
||||
checkpoint_verified.height.0 as f64,
|
||||
);
|
||||
metrics::counter!("zcash.chain.verified.block.total", 1);
|
||||
metrics::gauge!("zcash.chain.verified.block.height")
|
||||
.set(checkpoint_verified.height.0 as f64);
|
||||
metrics::counter!("zcash.chain.verified.block.total").increment(1);
|
||||
} else {
|
||||
metrics::counter!("state.checkpoint.error.block.count", 1);
|
||||
metrics::gauge!(
|
||||
"state.checkpoint.error.block.height",
|
||||
checkpoint_verified.height.0 as f64,
|
||||
);
|
||||
metrics::counter!("state.checkpoint.error.block.count").increment(1);
|
||||
metrics::gauge!("state.checkpoint.error.block.height")
|
||||
.set(checkpoint_verified.height.0 as f64);
|
||||
};
|
||||
|
||||
// Make the error cloneable, so we can send it to the block verify future,
|
||||
|
|
|
@ -38,36 +38,24 @@ pub(crate) fn block_precommit_metrics(block: &Block, hash: block::Hash, height:
|
|||
if height.is_min() { "genesis " } else { "" }
|
||||
);
|
||||
|
||||
metrics::counter!("state.finalized.block.count", 1);
|
||||
metrics::gauge!("state.finalized.block.height", height.0 as f64);
|
||||
metrics::counter!("state.finalized.block.count").increment(1);
|
||||
metrics::gauge!("state.finalized.block.height").set(height.0 as f64);
|
||||
|
||||
metrics::counter!(
|
||||
"state.finalized.cumulative.transactions",
|
||||
transaction_count as u64
|
||||
);
|
||||
metrics::counter!("state.finalized.cumulative.transactions")
|
||||
.increment(transaction_count as u64);
|
||||
|
||||
metrics::counter!(
|
||||
"state.finalized.cumulative.sprout_nullifiers",
|
||||
sprout_nullifier_count as u64
|
||||
);
|
||||
metrics::counter!(
|
||||
"state.finalized.cumulative.sapling_nullifiers",
|
||||
sapling_nullifier_count as u64
|
||||
);
|
||||
metrics::counter!(
|
||||
"state.finalized.cumulative.orchard_nullifiers",
|
||||
orchard_nullifier_count as u64
|
||||
);
|
||||
metrics::counter!("state.finalized.cumulative.sprout_nullifiers")
|
||||
.increment(sprout_nullifier_count as u64);
|
||||
metrics::counter!("state.finalized.cumulative.sapling_nullifiers")
|
||||
.increment(sapling_nullifier_count as u64);
|
||||
metrics::counter!("state.finalized.cumulative.orchard_nullifiers")
|
||||
.increment(orchard_nullifier_count as u64);
|
||||
|
||||
// The outputs from the genesis block can't be spent, so we skip them here.
|
||||
if !height.is_min() {
|
||||
metrics::counter!(
|
||||
"state.finalized.cumulative.transparent_prevouts",
|
||||
transparent_prevout_count as u64
|
||||
);
|
||||
metrics::counter!(
|
||||
"state.finalized.cumulative.transparent_newouts",
|
||||
transparent_newout_count as u64
|
||||
);
|
||||
metrics::counter!("state.finalized.cumulative.transparent_prevouts")
|
||||
.increment(transparent_prevout_count as u64);
|
||||
metrics::counter!("state.finalized.cumulative.transparent_newouts")
|
||||
.increment(transparent_newout_count as u64);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -418,12 +418,12 @@ impl NonFinalizedState {
|
|||
chain_push_result.expect("scope has finished")
|
||||
}
|
||||
|
||||
/// Returns the length of the non-finalized portion of the current best chain.
|
||||
pub fn best_chain_len(&self) -> u32 {
|
||||
self.best_chain()
|
||||
.expect("only called after inserting a block")
|
||||
.blocks
|
||||
.len() as u32
|
||||
/// Returns the length of the non-finalized portion of the current best chain
|
||||
/// or `None` if the best chain has no blocks.
|
||||
pub fn best_chain_len(&self) -> Option<u32> {
|
||||
// This `as` can't overflow because the number of blocks in the chain is limited to i32::MAX,
|
||||
// and the non-finalized chain is further limited by the fork length (slightly over 100 blocks).
|
||||
Some(self.best_chain()?.blocks.len() as u32)
|
||||
}
|
||||
|
||||
/// Returns `true` if `hash` is contained in the non-finalized portion of any
|
||||
|
@ -619,8 +619,8 @@ impl NonFinalizedState {
|
|||
return;
|
||||
}
|
||||
|
||||
metrics::counter!("state.memory.committed.block.count", 1);
|
||||
metrics::gauge!("state.memory.committed.block.height", height.0 as f64);
|
||||
metrics::counter!("state.memory.committed.block.count").increment(1);
|
||||
metrics::gauge!("state.memory.committed.block.height").set(height.0 as f64);
|
||||
|
||||
if self
|
||||
.best_chain()
|
||||
|
@ -628,8 +628,8 @@ impl NonFinalizedState {
|
|||
.non_finalized_tip_hash()
|
||||
== hash
|
||||
{
|
||||
metrics::counter!("state.memory.best.committed.block.count", 1);
|
||||
metrics::gauge!("state.memory.best.committed.block.height", height.0 as f64);
|
||||
metrics::counter!("state.memory.best.committed.block.count").increment(1);
|
||||
metrics::gauge!("state.memory.best.committed.block.height").set(height.0 as f64);
|
||||
}
|
||||
|
||||
self.update_metrics_for_chains();
|
||||
|
@ -641,11 +641,9 @@ impl NonFinalizedState {
|
|||
return;
|
||||
}
|
||||
|
||||
metrics::gauge!("state.memory.chain.count", self.chain_set.len() as f64);
|
||||
metrics::gauge!(
|
||||
"state.memory.best.chain.length",
|
||||
self.best_chain_len() as f64,
|
||||
);
|
||||
metrics::gauge!("state.memory.chain.count").set(self.chain_set.len() as f64);
|
||||
metrics::gauge!("state.memory.best.chain.length",)
|
||||
.set(self.best_chain_len().unwrap_or_default() as f64);
|
||||
}
|
||||
|
||||
/// Update the progress bars after any chain is modified.
|
||||
|
|
|
@ -327,7 +327,7 @@ fn shorter_chain_can_be_best_chain_for_network(network: Network) -> Result<()> {
|
|||
state.commit_block(short_chain_block.prepare(), &finalized_state)?;
|
||||
assert_eq!(2, state.chain_set.len());
|
||||
|
||||
assert_eq!(2, state.best_chain_len());
|
||||
assert_eq!(Some(2), state.best_chain_len());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -381,7 +381,7 @@ fn longer_chain_with_more_work_wins_for_network(network: Network) -> Result<()>
|
|||
state.commit_block(short_chain_block.prepare(), &finalized_state)?;
|
||||
assert_eq!(2, state.chain_set.len());
|
||||
|
||||
assert_eq!(5, state.best_chain_len());
|
||||
assert_eq!(Some(5), state.best_chain_len());
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -186,19 +186,19 @@ impl QueuedBlocks {
|
|||
/// Update metrics after the queue is modified
|
||||
fn update_metrics(&self) {
|
||||
if let Some(min_height) = self.by_height.keys().next() {
|
||||
metrics::gauge!("state.memory.queued.min.height", min_height.0 as f64);
|
||||
metrics::gauge!("state.memory.queued.min.height").set(min_height.0 as f64);
|
||||
} else {
|
||||
// use f64::NAN as a sentinel value for "None", because 0 is a valid height
|
||||
metrics::gauge!("state.memory.queued.min.height", f64::NAN);
|
||||
metrics::gauge!("state.memory.queued.min.height").set(f64::NAN);
|
||||
}
|
||||
if let Some(max_height) = self.by_height.keys().next_back() {
|
||||
metrics::gauge!("state.memory.queued.max.height", max_height.0 as f64);
|
||||
metrics::gauge!("state.memory.queued.max.height").set(max_height.0 as f64);
|
||||
} else {
|
||||
// use f64::NAN as a sentinel value for "None", because 0 is a valid height
|
||||
metrics::gauge!("state.memory.queued.max.height", f64::NAN);
|
||||
metrics::gauge!("state.memory.queued.max.height").set(f64::NAN);
|
||||
}
|
||||
|
||||
metrics::gauge!("state.memory.queued.block.count", self.blocks.len() as f64);
|
||||
metrics::gauge!("state.memory.queued.block.count").set(self.blocks.len() as f64);
|
||||
}
|
||||
|
||||
/// Try to look up this UTXO in any queued block.
|
||||
|
@ -357,8 +357,8 @@ impl SentHashes {
|
|||
|
||||
/// Update sent block metrics after a block is sent.
|
||||
fn update_metrics_for_block(&self, height: block::Height) {
|
||||
metrics::counter!("state.memory.sent.block.count", 1);
|
||||
metrics::gauge!("state.memory.sent.block.height", height.0 as f64);
|
||||
metrics::counter!("state.memory.sent.block.count").increment(1);
|
||||
metrics::gauge!("state.memory.sent.block.height").set(height.0 as f64);
|
||||
|
||||
self.update_metrics_for_cache();
|
||||
}
|
||||
|
@ -371,30 +371,25 @@ impl SentHashes {
|
|||
.flat_map(|batch| batch.front().map(|(_hash, height)| height))
|
||||
.min()
|
||||
{
|
||||
metrics::gauge!("state.memory.sent.cache.min.height", min_height.0 as f64);
|
||||
metrics::gauge!("state.memory.sent.cache.min.height").set(min_height.0 as f64);
|
||||
} else {
|
||||
// use f64::NAN as a sentinel value for "None", because 0 is a valid height
|
||||
metrics::gauge!("state.memory.sent.cache.min.height", f64::NAN);
|
||||
metrics::gauge!("state.memory.sent.cache.min.height").set(f64::NAN);
|
||||
}
|
||||
|
||||
if let Some(max_height) = batch_iter()
|
||||
.flat_map(|batch| batch.back().map(|(_hash, height)| height))
|
||||
.max()
|
||||
{
|
||||
metrics::gauge!("state.memory.sent.cache.max.height", max_height.0 as f64);
|
||||
metrics::gauge!("state.memory.sent.cache.max.height").set(max_height.0 as f64);
|
||||
} else {
|
||||
// use f64::NAN as a sentinel value for "None", because 0 is a valid height
|
||||
metrics::gauge!("state.memory.sent.cache.max.height", f64::NAN);
|
||||
metrics::gauge!("state.memory.sent.cache.max.height").set(f64::NAN);
|
||||
}
|
||||
|
||||
metrics::gauge!(
|
||||
"state.memory.sent.cache.block.count",
|
||||
batch_iter().flatten().count() as f64,
|
||||
);
|
||||
metrics::gauge!("state.memory.sent.cache.block.count")
|
||||
.set(batch_iter().flatten().count() as f64);
|
||||
|
||||
metrics::gauge!(
|
||||
"state.memory.sent.cache.batch.count",
|
||||
batch_iter().count() as f64,
|
||||
);
|
||||
metrics::gauge!("state.memory.sent.cache.batch.count").set(batch_iter().count() as f64);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -290,7 +290,11 @@ pub fn write_blocks_from_channels(
|
|||
// Update the caller with the result.
|
||||
let _ = rsp_tx.send(result.clone().map(|()| child_hash).map_err(BoxError::from));
|
||||
|
||||
while non_finalized_state.best_chain_len() > MAX_BLOCK_REORG_HEIGHT {
|
||||
while non_finalized_state
|
||||
.best_chain_len()
|
||||
.expect("just successfully inserted a non-finalized block above")
|
||||
> MAX_BLOCK_REORG_HEIGHT
|
||||
{
|
||||
tracing::trace!("finalizing block past the reorg limit");
|
||||
let contextually_verified_with_trees = non_finalized_state.finalize();
|
||||
prev_finalized_note_commitment_trees = finalized_state
|
||||
|
@ -303,21 +307,16 @@ pub fn write_blocks_from_channels(
|
|||
// Update the metrics if semantic and contextual validation passes
|
||||
//
|
||||
// TODO: split this out into a function?
|
||||
metrics::counter!("state.full_verifier.committed.block.count", 1);
|
||||
metrics::counter!("zcash.chain.verified.block.total", 1);
|
||||
metrics::counter!("state.full_verifier.committed.block.count").increment(1);
|
||||
metrics::counter!("zcash.chain.verified.block.total").increment(1);
|
||||
|
||||
metrics::gauge!(
|
||||
"state.full_verifier.committed.block.height",
|
||||
tip_block_height.0 as f64,
|
||||
);
|
||||
metrics::gauge!("state.full_verifier.committed.block.height")
|
||||
.set(tip_block_height.0 as f64);
|
||||
|
||||
// This height gauge is updated for both fully verified and checkpoint blocks.
|
||||
// These updates can't conflict, because this block write task makes sure that blocks
|
||||
// are committed in order.
|
||||
metrics::gauge!(
|
||||
"zcash.chain.verified.block.height",
|
||||
tip_block_height.0 as f64,
|
||||
);
|
||||
metrics::gauge!("zcash.chain.verified.block.height").set(tip_block_height.0 as f64);
|
||||
|
||||
tracing::trace!("finished processing queued block");
|
||||
}
|
||||
|
|
|
@ -25,9 +25,9 @@ once_cell = "1.18.0"
|
|||
rand = "0.8.5"
|
||||
regex = "1.10.2"
|
||||
|
||||
tokio = { version = "1.34.0", features = ["full", "tracing", "test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["full", "tracing", "test-util"] }
|
||||
tower = { version = "0.4.13", features = ["util"] }
|
||||
futures = "0.3.29"
|
||||
futures = "0.3.30"
|
||||
|
||||
color-eyre = "0.6.2"
|
||||
# This is a transitive dependency via color-eyre.
|
||||
|
@ -35,7 +35,7 @@ color-eyre = "0.6.2"
|
|||
tinyvec = { version = "1.6.0", features = ["rustc_1_55"] }
|
||||
|
||||
humantime = "2.1.0"
|
||||
owo-colors = "3.5.0"
|
||||
owo-colors = "4.0.0"
|
||||
spandoc = "0.2.2"
|
||||
thiserror = "1.0.51"
|
||||
|
||||
|
|
|
@ -100,10 +100,10 @@ itertools = { version = "0.12.0", optional = true }
|
|||
# These crates are needed for the search-issue-refs binary
|
||||
regex = { version = "1.10.2", optional = true }
|
||||
# Avoid default openssl dependency to reduce the dependency tree and security alerts.
|
||||
reqwest = { version = "0.11.22", default-features = false, features = ["rustls-tls"], optional = true }
|
||||
reqwest = { version = "0.11.23", default-features = false, features = ["rustls-tls"], optional = true }
|
||||
|
||||
# These crates are needed for the zebra-checkpoints and search-issue-refs binaries
|
||||
tokio = { version = "1.34.0", features = ["full"], optional = true }
|
||||
tokio = { version = "1.35.1", features = ["full"], optional = true }
|
||||
|
||||
jsonrpc = { version = "0.16.0", optional = true }
|
||||
|
||||
|
|
|
@ -172,9 +172,9 @@ semver = "1.0.20"
|
|||
serde = { version = "1.0.193", features = ["serde_derive"] }
|
||||
toml = "0.8.8"
|
||||
|
||||
futures = "0.3.29"
|
||||
futures = "0.3.30"
|
||||
rayon = "1.7.0"
|
||||
tokio = { version = "1.34.0", features = ["time", "rt-multi-thread", "macros", "tracing", "signal"] }
|
||||
tokio = { version = "1.35.1", features = ["time", "rt-multi-thread", "macros", "tracing", "signal"] }
|
||||
tokio-stream = { version = "0.1.14", features = ["time"] }
|
||||
tower = { version = "0.4.13", features = ["hedge", "limit"] }
|
||||
pin-project = "1.1.3"
|
||||
|
@ -192,7 +192,7 @@ tracing-error = "0.2.0"
|
|||
tracing-futures = "0.2.5"
|
||||
tracing = "0.1.39"
|
||||
|
||||
metrics = "0.21.1"
|
||||
metrics = "0.22.0"
|
||||
|
||||
dirs = "5.0.1"
|
||||
atty = "0.2.14"
|
||||
|
@ -214,7 +214,7 @@ tracing-journald = { version = "0.3.0", optional = true }
|
|||
hyper = { version = "0.14.28", features = ["http1", "http2", "server"], optional = true }
|
||||
|
||||
# prod feature prometheus
|
||||
metrics-exporter-prometheus = { version = "0.12.2", default-features = false, features = ["http-listener"], optional = true }
|
||||
metrics-exporter-prometheus = { version = "0.13.0", default-features = false, features = ["http-listener"], optional = true }
|
||||
|
||||
# prod feature release_max_level_info
|
||||
#
|
||||
|
@ -255,7 +255,7 @@ tempfile = "3.8.1"
|
|||
hyper = { version = "0.14.28", features = ["http1", "http2", "server"]}
|
||||
tracing-test = { version = "0.2.4", features = ["no-env-filter"] }
|
||||
|
||||
tokio = { version = "1.34.0", features = ["full", "tracing", "test-util"] }
|
||||
tokio = { version = "1.35.1", features = ["full", "tracing", "test-util"] }
|
||||
tokio-stream = "0.1.14"
|
||||
|
||||
# test feature lightwalletd-grpc-tests
|
||||
|
|
|
@ -213,8 +213,8 @@ where
|
|||
"block hash already queued for inbound download: ignored block",
|
||||
);
|
||||
|
||||
metrics::gauge!("gossip.queued.block.count", self.pending.len() as f64);
|
||||
metrics::counter!("gossip.already.queued.dropped.block.hash.count", 1);
|
||||
metrics::gauge!("gossip.queued.block.count").set(self.pending.len() as f64);
|
||||
metrics::counter!("gossip.already.queued.dropped.block.hash.count").increment(1);
|
||||
|
||||
return DownloadAction::AlreadyQueued;
|
||||
}
|
||||
|
@ -227,8 +227,8 @@ where
|
|||
"too many blocks queued for inbound download: ignored block",
|
||||
);
|
||||
|
||||
metrics::gauge!("gossip.queued.block.count", self.pending.len() as f64);
|
||||
metrics::counter!("gossip.full.queue.dropped.block.hash.count", 1);
|
||||
metrics::gauge!("gossip.queued.block.count").set(self.pending.len() as f64);
|
||||
metrics::counter!("gossip.full.queue.dropped.block.hash.count").increment(1);
|
||||
|
||||
return DownloadAction::FullQueue;
|
||||
}
|
||||
|
@ -271,7 +271,7 @@ where
|
|||
} else {
|
||||
unreachable!("wrong response to block request");
|
||||
};
|
||||
metrics::counter!("gossip.downloaded.block.count", 1);
|
||||
metrics::counter!("gossip.downloaded.block.count").increment(1);
|
||||
|
||||
// # Security & Performance
|
||||
//
|
||||
|
@ -312,7 +312,7 @@ where
|
|||
?hash,
|
||||
"gossiped block with no height: dropped downloaded block"
|
||||
);
|
||||
metrics::counter!("gossip.no.height.dropped.block.count", 1);
|
||||
metrics::counter!("gossip.no.height.dropped.block.count").increment(1);
|
||||
|
||||
BoxError::from("gossiped block with no height")
|
||||
})?;
|
||||
|
@ -326,7 +326,7 @@ where
|
|||
lookahead_limit = full_verify_concurrency_limit,
|
||||
"gossiped block height too far ahead of the tip: dropped downloaded block",
|
||||
);
|
||||
metrics::counter!("gossip.max.height.limit.dropped.block.count", 1);
|
||||
metrics::counter!("gossip.max.height.limit.dropped.block.count").increment(1);
|
||||
|
||||
Err("gossiped block height too far ahead")?;
|
||||
} else if block_height < min_accepted_height {
|
||||
|
@ -338,7 +338,7 @@ where
|
|||
behind_tip_limit = ?zs::MAX_BLOCK_REORG_HEIGHT,
|
||||
"gossiped block height behind the finalized tip: dropped downloaded block",
|
||||
);
|
||||
metrics::counter!("gossip.min.height.limit.dropped.block.count", 1);
|
||||
metrics::counter!("gossip.min.height.limit.dropped.block.count").increment(1);
|
||||
|
||||
Err("gossiped block height behind the finalized tip")?;
|
||||
}
|
||||
|
@ -350,7 +350,7 @@ where
|
|||
}
|
||||
.map_ok(|(hash, height)| {
|
||||
info!(?height, "downloaded and verified gossiped block");
|
||||
metrics::counter!("gossip.verified.block.count", 1);
|
||||
metrics::counter!("gossip.verified.block.count").increment(1);
|
||||
hash
|
||||
})
|
||||
// Tack the hash onto the error so we can remove the cancel handle
|
||||
|
@ -364,7 +364,7 @@ where
|
|||
biased;
|
||||
_ = &mut cancel_rx => {
|
||||
trace!("task cancelled prior to completion");
|
||||
metrics::counter!("gossip.cancelled.count", 1);
|
||||
metrics::counter!("gossip.cancelled.count").increment(1);
|
||||
Err(("canceled".into(), hash))
|
||||
}
|
||||
verification = fut => verification,
|
||||
|
@ -383,7 +383,7 @@ where
|
|||
concurrency_limit = self.full_verify_concurrency_limit,
|
||||
"queued hash for download",
|
||||
);
|
||||
metrics::gauge!("gossip.queued.block.count", self.pending.len() as f64);
|
||||
metrics::gauge!("gossip.queued.block.count").set(self.pending.len() as f64);
|
||||
|
||||
DownloadAction::AddedToQueue
|
||||
}
|
||||
|
|
|
@ -615,7 +615,7 @@ impl Service<Request> for Mempool {
|
|||
Ok(Err((txid, error))) => {
|
||||
tracing::debug!(?txid, ?error, "mempool transaction failed to verify");
|
||||
|
||||
metrics::counter!("mempool.failed.verify.tasks.total", 1, "reason" => error.to_string());
|
||||
metrics::counter!("mempool.failed.verify.tasks.total", "reason" => error.to_string()).increment(1);
|
||||
storage.reject_if_needed(txid, error);
|
||||
}
|
||||
Err(_elapsed) => {
|
||||
|
@ -624,7 +624,7 @@ impl Service<Request> for Mempool {
|
|||
|
||||
tracing::info!("mempool transaction failed to verify due to timeout");
|
||||
|
||||
metrics::counter!("mempool.failed.verify.tasks.total", 1, "reason" => "timeout");
|
||||
metrics::counter!("mempool.failed.verify.tasks.total", "reason" => "timeout").increment(1);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -253,10 +253,8 @@ where
|
|||
?MAX_INBOUND_CONCURRENCY,
|
||||
"transaction id already queued for inbound download: ignored transaction"
|
||||
);
|
||||
metrics::gauge!(
|
||||
"mempool.currently.queued.transactions",
|
||||
self.pending.len() as f64,
|
||||
);
|
||||
metrics::gauge!("mempool.currently.queued.transactions",)
|
||||
.set(self.pending.len() as f64);
|
||||
|
||||
return Err(MempoolError::AlreadyQueued);
|
||||
}
|
||||
|
@ -268,10 +266,8 @@ where
|
|||
?MAX_INBOUND_CONCURRENCY,
|
||||
"too many transactions queued for inbound download: ignored transaction"
|
||||
);
|
||||
metrics::gauge!(
|
||||
"mempool.currently.queued.transactions",
|
||||
self.pending.len() as f64,
|
||||
);
|
||||
metrics::gauge!("mempool.currently.queued.transactions",)
|
||||
.set(self.pending.len() as f64);
|
||||
|
||||
return Err(MempoolError::FullQueue);
|
||||
}
|
||||
|
@ -327,17 +323,15 @@ where
|
|||
|
||||
metrics::counter!(
|
||||
"mempool.downloaded.transactions.total",
|
||||
1,
|
||||
"version" => format!("{}",tx.transaction.version()),
|
||||
);
|
||||
).increment(1);
|
||||
tx
|
||||
}
|
||||
Gossip::Tx(tx) => {
|
||||
metrics::counter!(
|
||||
"mempool.pushed.transactions.total",
|
||||
1,
|
||||
"version" => format!("{}",tx.transaction.version()),
|
||||
);
|
||||
).increment(1);
|
||||
tx
|
||||
}
|
||||
};
|
||||
|
@ -363,9 +357,8 @@ where
|
|||
.map_ok(|(tx, tip_height)| {
|
||||
metrics::counter!(
|
||||
"mempool.verified.transactions.total",
|
||||
1,
|
||||
"version" => format!("{}", tx.transaction.transaction.version()),
|
||||
);
|
||||
).increment(1);
|
||||
(tx, tip_height)
|
||||
})
|
||||
// Tack the hash onto the error so we can remove the cancel handle
|
||||
|
@ -384,7 +377,7 @@ where
|
|||
biased;
|
||||
_ = &mut cancel_rx => {
|
||||
trace!("task cancelled prior to completion");
|
||||
metrics::counter!("mempool.cancelled.verify.tasks.total", 1);
|
||||
metrics::counter!("mempool.cancelled.verify.tasks.total").increment(1);
|
||||
Err((TransactionDownloadVerifyError::Cancelled, txid))
|
||||
}
|
||||
verification = fut => verification,
|
||||
|
@ -405,11 +398,8 @@ where
|
|||
?MAX_INBOUND_CONCURRENCY,
|
||||
"queued transaction hash for download"
|
||||
);
|
||||
metrics::gauge!(
|
||||
"mempool.currently.queued.transactions",
|
||||
self.pending.len() as f64,
|
||||
);
|
||||
metrics::counter!("mempool.queued.transactions.total", 1);
|
||||
metrics::gauge!("mempool.currently.queued.transactions",).set(self.pending.len() as f64);
|
||||
metrics::counter!("mempool.queued.transactions.total").increment(1);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
@ -446,10 +436,7 @@ where
|
|||
}
|
||||
assert!(self.pending.is_empty());
|
||||
assert!(self.cancel_handles.is_empty());
|
||||
metrics::gauge!(
|
||||
"mempool.currently.queued.transactions",
|
||||
self.pending.len() as f64,
|
||||
);
|
||||
metrics::gauge!("mempool.currently.queued.transactions",).set(self.pending.len() as f64);
|
||||
}
|
||||
|
||||
/// Get the number of currently in-flight download tasks.
|
||||
|
@ -498,6 +485,6 @@ where
|
|||
fn drop(mut self: Pin<&mut Self>) {
|
||||
self.cancel_all();
|
||||
|
||||
metrics::gauge!("mempool.currently.queued.transactions", 0 as f64);
|
||||
metrics::gauge!("mempool.currently.queued.transactions").set(0 as f64);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ where
|
|||
// broadcast requests don't return errors, and we'd just want to ignore them anyway
|
||||
let _ = broadcast_network.ready().await?.call(request).await;
|
||||
|
||||
metrics::counter!("mempool.gossiped.transactions.total", txs_len as u64);
|
||||
metrics::counter!("mempool.gossiped.transactions.total").increment(txs_len as u64);
|
||||
|
||||
// wait for at least the network timeout between gossips
|
||||
//
|
||||
|
|
|
@ -651,16 +651,12 @@ impl Storage {
|
|||
///
|
||||
/// Must be called every time the rejected lists change.
|
||||
fn update_rejected_metrics(&mut self) {
|
||||
metrics::gauge!(
|
||||
"mempool.rejected.transaction.ids",
|
||||
self.rejected_transaction_count() as f64,
|
||||
);
|
||||
metrics::gauge!("mempool.rejected.transaction.ids",)
|
||||
.set(self.rejected_transaction_count() as f64);
|
||||
// This is just an approximation.
|
||||
// TODO: make it more accurate #2869
|
||||
let item_size = size_of::<(transaction::Hash, SameEffectsTipRejectionError)>();
|
||||
metrics::gauge!(
|
||||
"mempool.rejected.transaction.ids.bytes",
|
||||
(self.rejected_transaction_count() * item_size) as f64,
|
||||
);
|
||||
metrics::gauge!("mempool.rejected.transaction.ids.bytes",)
|
||||
.set((self.rejected_transaction_count() * item_size) as f64);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -337,63 +337,57 @@ impl VerifiedSet {
|
|||
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.actions.unpaid",
|
||||
unpaid_actions_with_weight_lt20pct as f64,
|
||||
"bk" => "< 0.2",
|
||||
);
|
||||
)
|
||||
.set(unpaid_actions_with_weight_lt20pct as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.actions.unpaid",
|
||||
unpaid_actions_with_weight_lt40pct as f64,
|
||||
"bk" => "< 0.4",
|
||||
);
|
||||
)
|
||||
.set(unpaid_actions_with_weight_lt40pct as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.actions.unpaid",
|
||||
unpaid_actions_with_weight_lt60pct as f64,
|
||||
"bk" => "< 0.6",
|
||||
);
|
||||
)
|
||||
.set(unpaid_actions_with_weight_lt60pct as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.actions.unpaid",
|
||||
unpaid_actions_with_weight_lt80pct as f64,
|
||||
"bk" => "< 0.8",
|
||||
);
|
||||
)
|
||||
.set(unpaid_actions_with_weight_lt80pct as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.actions.unpaid",
|
||||
unpaid_actions_with_weight_lt1 as f64,
|
||||
"bk" => "< 1",
|
||||
);
|
||||
metrics::gauge!("zcash.mempool.actions.paid", paid_actions as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.size.transactions",
|
||||
self.transaction_count() as f64,
|
||||
);
|
||||
)
|
||||
.set(unpaid_actions_with_weight_lt1 as f64);
|
||||
metrics::gauge!("zcash.mempool.actions.paid").set(paid_actions as f64);
|
||||
metrics::gauge!("zcash.mempool.size.transactions",).set(self.transaction_count() as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.size.weighted",
|
||||
size_with_weight_lt1 as f64,
|
||||
"bk" => "< 1",
|
||||
);
|
||||
)
|
||||
.set(size_with_weight_lt1 as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.size.weighted",
|
||||
size_with_weight_eq1 as f64,
|
||||
"bk" => "1",
|
||||
);
|
||||
)
|
||||
.set(size_with_weight_eq1 as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.size.weighted",
|
||||
size_with_weight_gt1 as f64,
|
||||
"bk" => "> 1",
|
||||
);
|
||||
)
|
||||
.set(size_with_weight_gt1 as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.size.weighted",
|
||||
size_with_weight_gt2 as f64,
|
||||
"bk" => "> 2",
|
||||
);
|
||||
)
|
||||
.set(size_with_weight_gt2 as f64);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.size.weighted",
|
||||
size_with_weight_gt3 as f64,
|
||||
"bk" => "> 3",
|
||||
);
|
||||
metrics::gauge!(
|
||||
"zcash.mempool.size.bytes",
|
||||
self.transactions_serialized_size as f64,
|
||||
);
|
||||
metrics::gauge!("zcash.mempool.cost.bytes", self.total_cost as f64);
|
||||
)
|
||||
.set(size_with_weight_gt3 as f64);
|
||||
metrics::gauge!("zcash.mempool.size.bytes",).set(self.transactions_serialized_size as f64);
|
||||
metrics::gauge!("zcash.mempool.cost.bytes").set(self.total_cost as f64);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,10 +27,11 @@ impl MetricsEndpoint {
|
|||
// Expose binary metadata to metrics, using a single time series with
|
||||
// value 1:
|
||||
// https://www.robustperception.io/exposing-the-software-version-to-prometheus
|
||||
metrics::increment_counter!(
|
||||
metrics::counter!(
|
||||
format!("{}.build.info", env!("CARGO_PKG_NAME")),
|
||||
"version" => env!("CARGO_PKG_VERSION")
|
||||
);
|
||||
)
|
||||
.increment(1);
|
||||
}
|
||||
Err(e) => panic!(
|
||||
"Opening metrics endpoint listener {addr:?} failed: {e:?}. \
|
||||
|
|
|
@ -789,7 +789,8 @@ where
|
|||
let new_download_len = download_set.len();
|
||||
let new_hashes = new_download_len - prev_download_len;
|
||||
debug!(new_hashes, "added hashes to download set");
|
||||
metrics::histogram!("sync.obtain.response.hash.count", new_hashes as f64);
|
||||
metrics::histogram!("sync.obtain.response.hash.count")
|
||||
.record(new_hashes as f64);
|
||||
}
|
||||
Ok(_) => unreachable!("network returned wrong response"),
|
||||
// We ignore this error because we made multiple fanout requests.
|
||||
|
@ -809,7 +810,7 @@ where
|
|||
|
||||
let new_downloads = download_set.len();
|
||||
debug!(new_downloads, "queueing new downloads");
|
||||
metrics::gauge!("sync.obtain.queued.hash.count", new_downloads as f64);
|
||||
metrics::gauge!("sync.obtain.queued.hash.count").set(new_downloads as f64);
|
||||
|
||||
// security: use the actual number of new downloads from all peers,
|
||||
// so the last peer to respond can't toggle our mempool
|
||||
|
@ -935,7 +936,8 @@ where
|
|||
let new_download_len = download_set.len();
|
||||
let new_hashes = new_download_len - prev_download_len;
|
||||
debug!(new_hashes, "added hashes to download set");
|
||||
metrics::histogram!("sync.extend.response.hash.count", new_hashes as f64);
|
||||
metrics::histogram!("sync.extend.response.hash.count")
|
||||
.record(new_hashes as f64);
|
||||
}
|
||||
Ok(_) => unreachable!("network returned wrong response"),
|
||||
// We ignore this error because we made multiple fanout requests.
|
||||
|
@ -946,7 +948,7 @@ where
|
|||
|
||||
let new_downloads = download_set.len();
|
||||
debug!(new_downloads, "queueing new downloads");
|
||||
metrics::gauge!("sync.extend.queued.hash.count", new_downloads as f64);
|
||||
metrics::gauge!("sync.extend.queued.hash.count").set(new_downloads as f64);
|
||||
|
||||
// security: use the actual number of new downloads from all peers,
|
||||
// so the last peer to respond can't toggle our mempool
|
||||
|
@ -1149,14 +1151,8 @@ where
|
|||
}
|
||||
|
||||
fn update_metrics(&mut self) {
|
||||
metrics::gauge!(
|
||||
"sync.prospective_tips.len",
|
||||
self.prospective_tips.len() as f64,
|
||||
);
|
||||
metrics::gauge!(
|
||||
"sync.downloads.in_flight",
|
||||
self.downloads.in_flight() as f64,
|
||||
);
|
||||
metrics::gauge!("sync.prospective_tips.len",).set(self.prospective_tips.len() as f64);
|
||||
metrics::gauge!("sync.downloads.in_flight",).set(self.downloads.in_flight() as f64);
|
||||
}
|
||||
|
||||
/// Return if the sync should be restarted based on the given error
|
||||
|
|
|
@ -330,7 +330,7 @@ where
|
|||
hash: block::Hash,
|
||||
) -> Result<(), BlockDownloadVerifyError> {
|
||||
if self.cancel_handles.contains_key(&hash) {
|
||||
metrics::counter!("sync.already.queued.dropped.block.hash.count", 1);
|
||||
metrics::counter!("sync.already.queued.dropped.block.hash.count").increment(1);
|
||||
return Err(BlockDownloadVerifyError::DuplicateBlockQueuedForDownload { hash });
|
||||
}
|
||||
|
||||
|
@ -368,7 +368,7 @@ where
|
|||
biased;
|
||||
_ = &mut cancel_rx => {
|
||||
trace!("task cancelled prior to download completion");
|
||||
metrics::counter!("sync.cancelled.download.count", 1);
|
||||
metrics::counter!("sync.cancelled.download.count").increment(1);
|
||||
return Err(BlockDownloadVerifyError::CancelledDuringDownload { hash })
|
||||
}
|
||||
rsp = block_req => rsp.map_err(|error| BlockDownloadVerifyError::DownloadFailed { error, hash})?,
|
||||
|
@ -389,7 +389,7 @@ where
|
|||
} else {
|
||||
unreachable!("wrong response to block request");
|
||||
};
|
||||
metrics::counter!("sync.downloaded.block.count", 1);
|
||||
metrics::counter!("sync.downloaded.block.count").increment(1);
|
||||
|
||||
// Security & Performance: reject blocks that are too far ahead of our tip.
|
||||
// Avoids denial of service attacks, and reduces wasted work on high blocks
|
||||
|
@ -440,7 +440,7 @@ where
|
|||
?hash,
|
||||
"synced block with no height: dropped downloaded block"
|
||||
);
|
||||
metrics::counter!("sync.no.height.dropped.block.count", 1);
|
||||
metrics::counter!("sync.no.height.dropped.block.count").increment(1);
|
||||
|
||||
return Err(BlockDownloadVerifyError::InvalidHeight { hash });
|
||||
};
|
||||
|
@ -480,16 +480,16 @@ where
|
|||
);
|
||||
}
|
||||
|
||||
metrics::counter!("sync.max.height.limit.paused.count", 1);
|
||||
metrics::counter!("sync.max.height.limit.paused.count").increment(1);
|
||||
} else if block_height <= lookahead_reset_height && past_lookahead_limit_receiver.cloned_watch_data() {
|
||||
// Reset the watched value to false, since we're well under the limit.
|
||||
// We need to block here, because if we don't the syncer can hang.
|
||||
|
||||
// But if Zebra is shutting down, ignore the send error.
|
||||
let _ = past_lookahead_limit_sender.lock().expect("thread panicked while holding the past_lookahead_limit_sender mutex guard").send(false);
|
||||
metrics::counter!("sync.max.height.limit.reset.count", 1);
|
||||
metrics::counter!("sync.max.height.limit.reset.count").increment(1);
|
||||
|
||||
metrics::counter!("sync.max.height.limit.reset.attempt.count", 1);
|
||||
metrics::counter!("sync.max.height.limit.reset.attempt.count").increment(1);
|
||||
}
|
||||
|
||||
if block_height < min_accepted_height {
|
||||
|
@ -501,7 +501,7 @@ where
|
|||
behind_tip_limit = ?zs::MAX_BLOCK_REORG_HEIGHT,
|
||||
"synced block height behind the finalized tip: dropped downloaded block"
|
||||
);
|
||||
metrics::counter!("gossip.min.height.limit.dropped.block.count", 1);
|
||||
metrics::counter!("gossip.min.height.limit.dropped.block.count").increment(1);
|
||||
|
||||
Err(BlockDownloadVerifyError::BehindTipHeightLimit { height: block_height, hash })?;
|
||||
}
|
||||
|
@ -513,7 +513,7 @@ where
|
|||
biased;
|
||||
_ = &mut cancel_rx => {
|
||||
trace!("task cancelled waiting for verifier service readiness");
|
||||
metrics::counter!("sync.cancelled.verify.ready.count", 1);
|
||||
metrics::counter!("sync.cancelled.verify.ready.count").increment(1);
|
||||
return Err(BlockDownloadVerifyError::CancelledAwaitingVerifierReadiness { height: block_height, hash })
|
||||
}
|
||||
verifier = readiness => verifier,
|
||||
|
@ -536,14 +536,14 @@ where
|
|||
biased;
|
||||
_ = &mut cancel_rx => {
|
||||
trace!("task cancelled prior to verification");
|
||||
metrics::counter!("sync.cancelled.verify.count", 1);
|
||||
metrics::counter!("sync.cancelled.verify.count").increment(1);
|
||||
return Err(BlockDownloadVerifyError::CancelledDuringVerification { height: block_height, hash })
|
||||
}
|
||||
verification = rsp => verification,
|
||||
};
|
||||
|
||||
if verification.is_ok() {
|
||||
metrics::counter!("sync.verified.block.count", 1);
|
||||
metrics::counter!("sync.verified.block.count").increment(1);
|
||||
}
|
||||
|
||||
verification
|
||||
|
|
Loading…
Reference in New Issue