diff --git a/Cargo.lock b/Cargo.lock
index 393e1e4..24e0c10 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4,13 +4,14 @@ version = 3
[[package]]
name = "actix"
-version = "0.13.0"
+version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f728064aca1c318585bf4bb04ffcfac9e75e508ab4e8b1bd9ba5dfe04e2cbed5"
+checksum = "cba56612922b907719d4a01cf11c8d5b458e7d3dba946d0435f20f58d6795ed2"
dependencies = [
+ "actix-macros",
"actix-rt",
"actix_derive",
- "bitflags 1.3.2",
+ "bitflags 2.4.1",
"bytes",
"crossbeam-channel",
"futures-core",
@@ -33,7 +34,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb"
dependencies = [
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
@@ -49,71 +50,85 @@ dependencies = [
[[package]]
name = "actix_derive"
-version = "0.6.0"
+version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d44b8fee1ced9671ba043476deddef739dd0959bf77030b26b738cc591737a7"
+checksum = "7c7db3d5a9718568e4cf4a537cfd7070e6e6ff7481510d0237fb529ac850f6d3"
dependencies = [
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.43",
]
[[package]]
-name = "aho-corasick"
-version = "1.0.1"
+name = "addr2line"
+version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
"memchr",
]
[[package]]
name = "anstream"
-version = "0.3.2"
+version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
- "is-terminal",
"utf8parse",
]
[[package]]
name = "anstyle"
-version = "1.0.0"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
[[package]]
name = "anstyle-parse"
-version = "0.2.0"
+version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
-version = "1.0.0"
+version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
name = "anstyle-wincon"
-version = "1.0.1"
+version = "3.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
dependencies = [
"anstyle",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -122,14 +137,14 @@ version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcd04a72664a65fb9adeae7ced0c98efd68a2b7a45adda8319b3bb36538404b8"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.193",
]
[[package]]
name = "anyhow"
-version = "1.0.71"
+version = "1.0.77"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+checksum = "c9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9"
[[package]]
name = "arc-swap"
@@ -162,18 +177,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
name = "async-trait"
-version = "0.1.68"
+version = "0.1.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+checksum = "fdf6721fb0140e4f897002dd086c06f6c27775df19cfe1fccb21181a48fd2c98"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
@@ -214,7 +229,7 @@ dependencies = [
"percent-encoding",
"pin-project-lite",
"rustversion",
- "serde 1.0.163",
+ "serde 1.0.193",
"sync_wrapper",
"tower",
"tower-layer",
@@ -238,6 +253,21 @@ dependencies = [
"tower-service",
]
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
[[package]]
name = "base64"
version = "0.13.1"
@@ -246,9 +276,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]]
name = "base64"
-version = "0.21.1"
+version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f1e31e207a6b8fb791a38ea3105e6cb541f55e4d029902d3039a4ad07cc4105"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
[[package]]
name = "bincode"
@@ -256,7 +286,7 @@ version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.193",
]
[[package]]
@@ -286,21 +316,30 @@ version = "4.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.193",
"utf8-width",
]
[[package]]
name = "byteorder"
-version = "1.4.3"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "bytes"
-version = "1.4.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
[[package]]
name = "cfg-if"
@@ -310,45 +349,43 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "clap"
-version = "4.3.0"
+version = "4.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc"
+checksum = "dcfab8ba68f3668e89f6ff60f5b205cea56aa7b769451a59f34b8682f51c056d"
dependencies = [
"clap_builder",
"clap_derive",
- "once_cell",
]
[[package]]
name = "clap_builder"
-version = "4.3.0"
+version = "4.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990"
+checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9"
dependencies = [
"anstream",
"anstyle",
- "bitflags 1.3.2",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_derive"
-version = "4.3.0"
+version = "4.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
name = "clap_lex"
-version = "0.5.0"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
[[package]]
name = "colorchoice"
@@ -379,7 +416,7 @@ dependencies = [
"lazy_static",
"nom",
"rust-ini",
- "serde 1.0.163",
+ "serde 1.0.193",
"serde-hjson",
"serde_json",
"toml",
@@ -394,9 +431,9 @@ checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
[[package]]
name = "cpufeatures"
-version = "0.2.7"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
dependencies = [
"libc",
]
@@ -409,9 +446,9 @@ checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff"
[[package]]
name = "crossbeam-channel"
-version = "0.5.8"
+version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2"
dependencies = [
"cfg-if",
"crossbeam-utils",
@@ -419,9 +456,9 @@ dependencies = [
[[package]]
name = "crossbeam-utils"
-version = "0.8.15"
+version = "0.8.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c"
dependencies = [
"cfg-if",
]
@@ -471,6 +508,20 @@ dependencies = [
"syn 1.0.109",
]
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.3",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+ "serde 1.0.193",
+]
+
[[package]]
name = "dcache"
version = "0.1.0"
@@ -484,8 +535,10 @@ dependencies = [
"byteorder",
"clap",
"config",
+ "dashmap",
"derive_builder 0.11.2",
"derive_more",
+ "futures",
"futures-util",
"lazy_static",
"libmcaptcha",
@@ -493,12 +546,13 @@ dependencies = [
"openraft",
"pretty_env_logger 0.4.0",
"prost",
- "serde 1.0.163",
+ "serde 1.0.193",
"serde_json",
"tokio",
"tokio-stream",
"tonic",
"tonic-build",
+ "tower-service",
"tracing",
"tracing-subscriber",
"url",
@@ -640,12 +694,9 @@ dependencies = [
[[package]]
name = "fastrand"
-version = "1.9.0"
+version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-dependencies = [
- "instant",
-]
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
[[package]]
name = "fixedbitset"
@@ -661,18 +712,18 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "form_urlencoded"
-version = "1.1.0"
+version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
dependencies = [
"percent-encoding",
]
[[package]]
name = "futures"
-version = "0.3.28"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
dependencies = [
"futures-channel",
"futures-core",
@@ -685,9 +736,9 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.28"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
dependencies = [
"futures-core",
"futures-sink",
@@ -695,15 +746,15 @@ dependencies = [
[[package]]
name = "futures-core"
-version = "0.3.28"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
[[package]]
name = "futures-executor"
-version = "0.3.28"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
dependencies = [
"futures-core",
"futures-task",
@@ -712,38 +763,38 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.28"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
[[package]]
name = "futures-macro"
-version = "0.3.28"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
name = "futures-sink"
-version = "0.3.28"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
[[package]]
name = "futures-task"
-version = "0.3.28"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
[[package]]
name = "futures-util"
-version = "0.3.28"
+version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
dependencies = [
"futures-channel",
"futures-core",
@@ -769,9 +820,9 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.9"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
dependencies = [
"cfg-if",
"libc",
@@ -779,10 +830,16 @@ dependencies = [
]
[[package]]
-name = "h2"
-version = "0.3.19"
+name = "gimli"
+version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "h2"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
dependencies = [
"bytes",
"fnv",
@@ -790,7 +847,7 @@ dependencies = [
"futures-sink",
"futures-util",
"http",
- "indexmap 1.9.3",
+ "indexmap 2.1.0",
"slab",
"tokio",
"tokio-util",
@@ -826,18 +883,9 @@ dependencies = [
[[package]]
name = "hermit-abi"
-version = "0.2.6"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
[[package]]
name = "home"
@@ -850,9 +898,9 @@ dependencies = [
[[package]]
name = "http"
-version = "0.2.9"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
dependencies = [
"bytes",
"fnv",
@@ -861,9 +909,9 @@ dependencies = [
[[package]]
name = "http-body"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
dependencies = [
"bytes",
"http",
@@ -878,9 +926,9 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
[[package]]
name = "httpdate"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "humantime"
@@ -899,9 +947,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
-version = "0.14.26"
+version = "0.14.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
dependencies = [
"bytes",
"futures-channel",
@@ -914,7 +962,7 @@ dependencies = [
"httpdate",
"itoa",
"pin-project-lite",
- "socket2",
+ "socket2 0.5.5",
"tokio",
"tower-service",
"tracing",
@@ -941,9 +989,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "idna"
-version = "0.3.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
dependencies = [
"unicode-bidi",
"unicode-normalization",
@@ -969,36 +1017,15 @@ dependencies = [
"hashbrown 0.14.3",
]
-[[package]]
-name = "instant"
-version = "0.1.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
-name = "io-lifetimes"
-version = "1.0.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
-dependencies = [
- "hermit-abi 0.3.1",
- "libc",
- "windows-sys 0.48.0",
-]
-
[[package]]
name = "is-terminal"
-version = "0.4.7"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455"
dependencies = [
- "hermit-abi 0.3.1",
- "io-lifetimes",
- "rustix 0.37.19",
- "windows-sys 0.48.0",
+ "hermit-abi 0.3.3",
+ "rustix",
+ "windows-sys 0.52.0",
]
[[package]]
@@ -1012,9 +1039,9 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.6"
+version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
[[package]]
name = "lazy_static"
@@ -1044,7 +1071,7 @@ checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
[[package]]
name = "libmcaptcha"
version = "0.2.4"
-source = "git+https://github.com/mcaptcha/libmcaptcha?branch=feat-dcache#d543e58bb8222bceb811db0ebb62094970b1f4e2"
+source = "git+https://github.com/mcaptcha/libmcaptcha?branch=feat-dcache#21486a055caba380258f771bb19853ec040c9f55"
dependencies = [
"actix",
"crossbeam-channel",
@@ -1056,7 +1083,7 @@ dependencies = [
"pretty_env_logger 0.5.0",
"rand",
"redis",
- "serde 1.0.163",
+ "serde 1.0.193",
"serde_json",
"tokio",
]
@@ -1067,12 +1094,6 @@ version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
-[[package]]
-name = "linux-raw-sys"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
-
[[package]]
name = "linux-raw-sys"
version = "0.4.12"
@@ -1081,9 +1102,9 @@ checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
[[package]]
name = "lock_api"
-version = "0.4.9"
+version = "0.4.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
dependencies = [
"autocfg",
"scopeguard",
@@ -1091,12 +1112,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.17"
+version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-dependencies = [
- "cfg-if",
-]
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "maplit"
@@ -1110,7 +1128,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
dependencies = [
- "regex-automata",
+ "regex-automata 0.1.10",
]
[[package]]
@@ -1128,15 +1146,15 @@ dependencies = [
"bincode",
"derive_builder 0.12.0",
"num",
- "serde 1.0.163",
+ "serde 1.0.193",
"sha2",
]
[[package]]
name = "memchr"
-version = "2.5.0"
+version = "2.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
[[package]]
name = "mime"
@@ -1145,15 +1163,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
-name = "mio"
-version = "0.8.6"
+name = "miniz_oxide"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
dependencies = [
"libc",
- "log",
"wasi",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -1185,38 +1211,38 @@ dependencies = [
[[package]]
name = "num"
-version = "0.4.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606"
+checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
dependencies = [
"num-bigint",
"num-complex",
"num-integer",
"num-iter",
"num-rational",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
name = "num-bigint"
-version = "0.4.3"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
dependencies = [
"autocfg",
"num-integer",
- "num-traits 0.2.15",
- "serde 1.0.163",
+ "num-traits 0.2.17",
+ "serde 1.0.193",
]
[[package]]
name = "num-complex"
-version = "0.4.3"
+version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
+checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
dependencies = [
- "num-traits 0.2.15",
- "serde 1.0.163",
+ "num-traits 0.2.17",
+ "serde 1.0.193",
]
[[package]]
@@ -1226,7 +1252,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
dependencies = [
"autocfg",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
@@ -1237,7 +1263,7 @@ checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
dependencies = [
"autocfg",
"num-integer",
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
@@ -1248,8 +1274,8 @@ checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
dependencies = [
"autocfg",
"num-integer",
- "num-traits 0.2.15",
- "serde 1.0.163",
+ "num-traits 0.2.17",
+ "serde 1.0.193",
]
[[package]]
@@ -1258,33 +1284,42 @@ version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
dependencies = [
- "num-traits 0.2.15",
+ "num-traits 0.2.17",
]
[[package]]
name = "num-traits"
-version = "0.2.15"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
dependencies = [
"autocfg",
]
[[package]]
name = "num_cpus"
-version = "1.15.0"
+version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
dependencies = [
- "hermit-abi 0.2.6",
+ "hermit-abi 0.3.3",
"libc",
]
[[package]]
-name = "once_cell"
-version = "1.17.1"
+name = "object"
+version = "0.32.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
[[package]]
name = "openraft"
@@ -1301,7 +1336,7 @@ dependencies = [
"maplit",
"pin-utils",
"rand",
- "serde 1.0.163",
+ "serde 1.0.193",
"thiserror",
"tokio",
"tracing",
@@ -1326,22 +1361,22 @@ dependencies = [
[[package]]
name = "parking_lot_core"
-version = "0.9.7"
+version = "0.9.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
dependencies = [
"cfg-if",
"libc",
- "redox_syscall 0.2.16",
+ "redox_syscall",
"smallvec",
- "windows-sys 0.45.0",
+ "windows-targets 0.48.5",
]
[[package]]
name = "percent-encoding"
-version = "2.2.0"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "petgraph"
@@ -1355,29 +1390,29 @@ dependencies = [
[[package]]
name = "pin-project"
-version = "1.1.0"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
-version = "1.1.0"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
name = "pin-project-lite"
-version = "0.2.9"
+version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
[[package]]
name = "pin-utils"
@@ -1413,19 +1448,19 @@ dependencies = [
[[package]]
name = "prettyplease"
-version = "0.2.9"
+version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9825a04601d60621feed79c4e6b56d65db77cdca55cef43b46b0de1096d1c282"
+checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
dependencies = [
"proc-macro2",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
name = "proc-macro2"
-version = "1.0.58"
+version = "1.0.71"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8"
+checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8"
dependencies = [
"unicode-ident",
]
@@ -1457,7 +1492,7 @@ dependencies = [
"prost",
"prost-types",
"regex",
- "syn 2.0.16",
+ "syn 2.0.43",
"tempfile",
"which",
]
@@ -1472,7 +1507,7 @@ dependencies = [
"itertools",
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
@@ -1492,9 +1527,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
[[package]]
name = "quote"
-version = "1.0.27"
+version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
dependencies = [
"proc-macro2",
]
@@ -1560,7 +1595,7 @@ dependencies = [
"rand",
"ryu",
"sha1_smol",
- "socket2",
+ "socket2 0.4.10",
"tokio",
"tokio-retry",
"tokio-util",
@@ -1569,31 +1604,23 @@ dependencies = [
[[package]]
name = "redox_syscall"
-version = "0.2.16"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags 1.3.2",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.3.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
dependencies = [
"bitflags 1.3.2",
]
[[package]]
name = "regex"
-version = "1.8.2"
+version = "1.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1a59b5d8e97dee33696bf13c5ba8ab85341c002922fba050069326b9c498974"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax 0.7.2",
+ "regex-automata 0.4.3",
+ "regex-syntax 0.8.2",
]
[[package]]
@@ -1605,6 +1632,17 @@ dependencies = [
"regex-syntax 0.6.29",
]
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
[[package]]
name = "regex-syntax"
version = "0.6.29"
@@ -1613,9 +1651,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
-version = "0.7.2"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "rust-ini"
@@ -1623,6 +1661,12 @@ version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e52c148ef37f8c375d49d5a73aa70713125b7f19095948a923f80afdeb22ec2"
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
[[package]]
name = "rustc_version"
version = "0.4.0"
@@ -1632,20 +1676,6 @@ dependencies = [
"semver",
]
-[[package]]
-name = "rustix"
-version = "0.37.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
-dependencies = [
- "bitflags 1.3.2",
- "errno",
- "io-lifetimes",
- "libc",
- "linux-raw-sys 0.3.8",
- "windows-sys 0.48.0",
-]
-
[[package]]
name = "rustix"
version = "0.38.28"
@@ -1655,7 +1685,7 @@ dependencies = [
"bitflags 2.4.1",
"errno",
"libc",
- "linux-raw-sys 0.4.12",
+ "linux-raw-sys",
"windows-sys 0.52.0",
]
@@ -1667,9 +1697,9 @@ checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
[[package]]
name = "ryu"
-version = "1.0.13"
+version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
[[package]]
name = "scheduled-thread-pool"
@@ -1682,15 +1712,15 @@ dependencies = [
[[package]]
name = "scopeguard"
-version = "1.1.0"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "semver"
-version = "1.0.17"
+version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
[[package]]
name = "serde"
@@ -1700,9 +1730,9 @@ checksum = "9dad3f759919b92c3068c696c15c3d17238234498bbdcc80f2c469606f948ac8"
[[package]]
name = "serde"
-version = "1.0.163"
+version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
dependencies = [
"serde_derive",
]
@@ -1721,24 +1751,24 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.163"
+version = "1.0.193"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
name = "serde_json"
-version = "1.0.96"
+version = "1.0.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
dependencies = [
"itoa",
"ryu",
- "serde 1.0.163",
+ "serde 1.0.193",
]
[[package]]
@@ -1749,9 +1779,9 @@ checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
[[package]]
name = "sha2"
-version = "0.10.6"
+version = "0.10.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
dependencies = [
"cfg-if",
"cpufeatures",
@@ -1760,9 +1790,9 @@ dependencies = [
[[package]]
name = "sharded-slab"
-version = "0.1.4"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
dependencies = [
"lazy_static",
]
@@ -1778,29 +1808,39 @@ dependencies = [
[[package]]
name = "slab"
-version = "0.4.8"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
dependencies = [
"autocfg",
]
[[package]]
name = "smallvec"
-version = "1.10.0"
+version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
[[package]]
name = "socket2"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
dependencies = [
"libc",
"winapi",
]
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "static_assertions"
version = "1.1.0"
@@ -1826,9 +1866,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.16"
+version = "2.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01"
+checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53"
dependencies = [
"proc-macro2",
"quote",
@@ -1843,44 +1883,44 @@ checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
[[package]]
name = "tempfile"
-version = "3.5.0"
+version = "3.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
dependencies = [
"cfg-if",
"fastrand",
- "redox_syscall 0.3.5",
- "rustix 0.37.19",
- "windows-sys 0.45.0",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.52.0",
]
[[package]]
name = "termcolor"
-version = "1.2.0"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
dependencies = [
"winapi-util",
]
[[package]]
name = "thiserror"
-version = "1.0.40"
+version = "1.0.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.40"
+version = "1.0.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
@@ -1910,11 +1950,11 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.28.1"
+version = "1.35.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
dependencies = [
- "autocfg",
+ "backtrace",
"bytes",
"libc",
"mio",
@@ -1922,7 +1962,7 @@ dependencies = [
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
- "socket2",
+ "socket2 0.5.5",
"tokio-macros",
"windows-sys 0.48.0",
]
@@ -1939,13 +1979,13 @@ dependencies = [
[[package]]
name = "tokio-macros"
-version = "2.1.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
@@ -1972,9 +2012,9 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.8"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
dependencies = [
"bytes",
"futures-core",
@@ -1990,7 +2030,7 @@ version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
dependencies = [
- "serde 1.0.163",
+ "serde 1.0.193",
]
[[package]]
@@ -2002,7 +2042,7 @@ dependencies = [
"async-stream",
"async-trait",
"axum",
- "base64 0.21.1",
+ "base64 0.21.5",
"bytes",
"h2",
"http",
@@ -2030,7 +2070,7 @@ dependencies = [
"proc-macro2",
"prost-build",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
@@ -2067,11 +2107,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
-version = "0.1.37"
+version = "0.1.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [
- "cfg-if",
"log",
"pin-project-lite",
"tracing-attributes",
@@ -2080,20 +2119,20 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.24"
+version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.16",
+ "syn 2.0.43",
]
[[package]]
name = "tracing-core"
-version = "0.1.31"
+version = "0.1.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
dependencies = [
"once_cell",
"valuable",
@@ -2111,20 +2150,20 @@ dependencies = [
[[package]]
name = "tracing-log"
-version = "0.1.3"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
dependencies = [
- "lazy_static",
"log",
+ "once_cell",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
-version = "0.3.17"
+version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
dependencies = [
"matchers",
"nu-ansi-term",
@@ -2140,27 +2179,27 @@ dependencies = [
[[package]]
name = "try-lock"
-version = "0.2.4"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "typenum"
-version = "1.16.0"
+version = "1.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
[[package]]
name = "unicode-bidi"
-version = "0.3.13"
+version = "0.3.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416"
[[package]]
name = "unicode-ident"
-version = "1.0.8"
+version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
[[package]]
name = "unicode-normalization"
@@ -2173,21 +2212,21 @@ dependencies = [
[[package]]
name = "url"
-version = "2.3.1"
+version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
dependencies = [
"form_urlencoded",
"idna",
"percent-encoding",
- "serde 1.0.163",
+ "serde 1.0.193",
]
[[package]]
name = "utf8-width"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
+checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3"
[[package]]
name = "utf8parse"
@@ -2197,9 +2236,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]]
name = "uuid"
-version = "1.3.3"
+version = "1.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
+checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
dependencies = [
"getrandom",
]
@@ -2218,11 +2257,10 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "want"
-version = "0.3.0"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
dependencies = [
- "log",
"try-lock",
]
@@ -2241,7 +2279,7 @@ dependencies = [
"either",
"home",
"once_cell",
- "rustix 0.38.28",
+ "rustix",
]
[[package]]
@@ -2262,9 +2300,9 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
-version = "0.1.5"
+version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
dependencies = [
"winapi",
]
@@ -2275,22 +2313,13 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-[[package]]
-name = "windows-sys"
-version = "0.45.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
-dependencies = [
- "windows-targets 0.42.2",
-]
-
[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
- "windows-targets 0.48.0",
+ "windows-targets 0.48.5",
]
[[package]]
@@ -2304,32 +2333,17 @@ dependencies = [
[[package]]
name = "windows-targets"
-version = "0.42.2"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
- "windows_aarch64_gnullvm 0.42.2",
- "windows_aarch64_msvc 0.42.2",
- "windows_i686_gnu 0.42.2",
- "windows_i686_msvc 0.42.2",
- "windows_x86_64_gnu 0.42.2",
- "windows_x86_64_gnullvm 0.42.2",
- "windows_x86_64_msvc 0.42.2",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
-dependencies = [
- "windows_aarch64_gnullvm 0.48.0",
- "windows_aarch64_msvc 0.48.0",
- "windows_i686_gnu 0.48.0",
- "windows_i686_msvc 0.48.0",
- "windows_x86_64_gnu 0.48.0",
- "windows_x86_64_gnullvm 0.48.0",
- "windows_x86_64_msvc 0.48.0",
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
]
[[package]]
@@ -2349,15 +2363,9 @@ dependencies = [
[[package]]
name = "windows_aarch64_gnullvm"
-version = "0.42.2"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_gnullvm"
@@ -2367,15 +2375,9 @@ checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
[[package]]
name = "windows_aarch64_msvc"
-version = "0.42.2"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_aarch64_msvc"
@@ -2385,15 +2387,9 @@ checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
[[package]]
name = "windows_i686_gnu"
-version = "0.42.2"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_gnu"
@@ -2403,15 +2399,9 @@ checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
[[package]]
name = "windows_i686_msvc"
-version = "0.42.2"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_i686_msvc"
@@ -2421,15 +2411,9 @@ checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
[[package]]
name = "windows_x86_64_gnu"
-version = "0.42.2"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnu"
@@ -2439,15 +2423,9 @@ checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
[[package]]
name = "windows_x86_64_gnullvm"
-version = "0.42.2"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_gnullvm"
@@ -2457,15 +2435,9 @@ checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
[[package]]
name = "windows_x86_64_msvc"
-version = "0.42.2"
+version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
[[package]]
name = "windows_x86_64_msvc"
diff --git a/Cargo.toml b/Cargo.toml
index e5e6d72..230b782 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,8 +13,8 @@ openraft = { version = "0.8.8", features = ["serde", "single-term-leader"]}
#libmcaptcha = { path="/src/atm/code/mcaptcha/libmcaptcha", features=["full"] }
libmcaptcha = { git = "https://github.com/mcaptcha/libmcaptcha", branch = "feat-dcache", features = ["full"]}
tracing = { version = "0.1.37", features = ["log"] }
-serde_json = "1.0.96"
-serde = { version = "1.0.163", features = ["derive"] }
+serde_json = "1"
+serde = { version = "1", features = ["derive"] }
byteorder = "1.4.3"
futures-util = { version = "0.3.17", default-features = false, features = ["std"] }
lazy_static = "1.4.0"
@@ -26,7 +26,7 @@ derive_more = "0.99.17"
url = { version = "2.2.2", features = ["serde"]}
async-trait = "0.1.36"
clap = { version = "4.1.11", features = ["derive", "env"] }
-tokio = { version = "1.0", default-features = false, features = ["sync", "macros", "rt-multi-thread"] }
+tokio = { version = "1.0", default-features = false, features = ["sync", "macros", "rt-multi-thread", "time"] }
tracing-subscriber = { version = "0.3.0", features = ["env-filter"] }
actix = "0.13.0"
tonic = { version = "0.10.2", features = ["transport", "channel"] }
@@ -34,6 +34,9 @@ prost = "0.12.3"
tokio-stream = "0.1.14"
async-stream = "0.3.5"
actix-rt = "2.9.0"
+futures = "0.3.30"
+tower-service = "0.3.2"
+dashmap = { version = "5.5.3", features = ["serde"] }
[build-dependencies]
@@ -44,3 +47,6 @@ tonic-build = "0.10.2"
base64 = "0.13.0"
anyhow = "1.0.63"
maplit = "1.0.2"
+
+#[profile.release]
+#debug = true
diff --git a/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/exceptions_1703860236.8946772.csv b/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/exceptions_1703860236.8946772.csv
new file mode 100644
index 0000000..5e0e870
--- /dev/null
+++ b/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/exceptions_1703860236.8946772.csv
@@ -0,0 +1 @@
+Count,Message,Traceback,Nodes
diff --git a/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/failures_1703860234.043255.csv b/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/failures_1703860234.043255.csv
new file mode 100644
index 0000000..f87ff75
--- /dev/null
+++ b/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/failures_1703860234.043255.csv
@@ -0,0 +1 @@
+Method,Name,Error,Occurrences
diff --git a/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/report_1703860240.2841291.html b/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/report_1703860240.2841291.html
new file mode 100644
index 0000000..6993866
--- /dev/null
+++ b/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/report_1703860240.2841291.html
@@ -0,0 +1,592 @@
+
+
+
+ Test Report for locustfile.py
+
+
+
+
+
+
Locust Test Report
+
+
+
+
During: 2023-12-29 14:29:09 - 2023-12-29 14:29:46
+
Target Host: localhost:9001
+
Script: locustfile.py
+
+
+
+
Request Statistics
+
+
+
+ Method |
+ Name |
+ # Requests |
+ # Fails |
+ Average (ms) |
+ Min (ms) |
+ Max (ms) |
+ Average size (bytes) |
+ RPS |
+ Failures/s |
+
+
+
+
+
+ grpc |
+ /dcache.DcacheService/PipelineDcacheOps |
+ 3480 |
+ 0 |
+ 104 |
+ 85 |
+ 842 |
+ 14999 |
+ 95.7 |
+ 0.0 |
+
+
+
+ |
+ Aggregated |
+ 3480 |
+ 0 |
+ 104 |
+ 85 |
+ 842 |
+ 14999 |
+ 95.7 |
+ 0.0 |
+
+
+
+
+
+
+
+
Response Time Statistics
+
+
+
+ Method |
+ Name |
+ 50%ile (ms) |
+ 60%ile (ms) |
+ 70%ile (ms) |
+ 80%ile (ms) |
+ 90%ile (ms) |
+ 95%ile (ms) |
+ 99%ile (ms) |
+ 100%ile (ms) |
+
+
+
+
+
+ grpc |
+ /dcache.DcacheService/PipelineDcacheOps |
+ 98 |
+ 99 |
+ 100 |
+ 100 |
+ 100 |
+ 110 |
+ 360 |
+ 840 |
+
+
+
+ |
+ Aggregated |
+ 98 |
+ 99 |
+ 100 |
+ 100 |
+ 100 |
+ 110 |
+ 360 |
+ 840 |
+
+
+
+
+
+
+
+
+
+
+
+
+
Charts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/requests_1703860193.7302322.csv b/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/requests_1703860193.7302322.csv
new file mode 100644
index 0000000..7b0f07a
--- /dev/null
+++ b/bench/results/v2/grpc-conn-pool-post-bottleneck/pipeline/requests_1703860193.7302322.csv
@@ -0,0 +1,3 @@
+Type,Name,Request Count,Failure Count,Median Response Time,Average Response Time,Min Response Time,Max Response Time,Average Content Size,Requests/s,Failures/s,50%,66%,75%,80%,90%,95%,98%,99%,99.9%,99.99%,100%
+grpc,/dcache.DcacheService/PipelineDcacheOps,3480,0,98,104.35343347919283,85.40578499378171,842.1087349997833,14999.985632183909,95.67244900465325,0.0,98,99,100,100,100,110,120,360,840,840,840
+,Aggregated,3480,0,98,104.35343347919283,85.40578499378171,842.1087349997833,14999.985632183909,95.67244900465325,0.0,98,99,100,100,100,110,120,360,840,840,840
diff --git a/bench/results/v2/grpc-conn-pool-post-bottleneck/single/exceptions_1703860337.049019.csv b/bench/results/v2/grpc-conn-pool-post-bottleneck/single/exceptions_1703860337.049019.csv
new file mode 100644
index 0000000..5e0e870
--- /dev/null
+++ b/bench/results/v2/grpc-conn-pool-post-bottleneck/single/exceptions_1703860337.049019.csv
@@ -0,0 +1 @@
+Count,Message,Traceback,Nodes
diff --git a/bench/results/v2/grpc-conn-pool-post-bottleneck/single/failures_1703860334.665045.csv b/bench/results/v2/grpc-conn-pool-post-bottleneck/single/failures_1703860334.665045.csv
new file mode 100644
index 0000000..f87ff75
--- /dev/null
+++ b/bench/results/v2/grpc-conn-pool-post-bottleneck/single/failures_1703860334.665045.csv
@@ -0,0 +1 @@
+Method,Name,Error,Occurrences
diff --git a/bench/results/v2/grpc-conn-pool-post-bottleneck/single/report_1703860343.117871.html b/bench/results/v2/grpc-conn-pool-post-bottleneck/single/report_1703860343.117871.html
new file mode 100644
index 0000000..15d3abd
--- /dev/null
+++ b/bench/results/v2/grpc-conn-pool-post-bottleneck/single/report_1703860343.117871.html
@@ -0,0 +1,592 @@
+
+
+
+ Test Report for locustfile.py
+
+
+
+
+
+
Locust Test Report
+
+
+
+
During: 2023-12-29 14:31:23 - 2023-12-29 14:32:01
+
Target Host: localhost:9001
+
Script: locustfile.py
+
+
+
+
Request Statistics
+
+
+
+ Method |
+ Name |
+ # Requests |
+ # Fails |
+ Average (ms) |
+ Min (ms) |
+ Max (ms) |
+ Average size (bytes) |
+ RPS |
+ Failures/s |
+
+
+
+
+
+ grpc |
+ /dcache.DcacheService/AddVisitor |
+ 186109 |
+ 0 |
+ 74 |
+ 3 |
+ 119 |
+ 10 |
+ 4816.3 |
+ 0.0 |
+
+
+
+ |
+ Aggregated |
+ 186109 |
+ 0 |
+ 74 |
+ 3 |
+ 119 |
+ 10 |
+ 4816.3 |
+ 0.0 |
+
+
+
+
+
+
+
+
Response Time Statistics
+
+
+
+ Method |
+ Name |
+ 50%ile (ms) |
+ 60%ile (ms) |
+ 70%ile (ms) |
+ 80%ile (ms) |
+ 90%ile (ms) |
+ 95%ile (ms) |
+ 99%ile (ms) |
+ 100%ile (ms) |
+
+
+
+
+
+ grpc |
+ /dcache.DcacheService/AddVisitor |
+ 79 |
+ 81 |
+ 84 |
+ 89 |
+ 93 |
+ 97 |
+ 110 |
+ 120 |
+
+
+
+ |
+ Aggregated |
+ 79 |
+ 81 |
+ 84 |
+ 89 |
+ 93 |
+ 97 |
+ 110 |
+ 120 |
+
+
+
+
+
+
+
+
+
+
+
+
+
Charts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/bench/results/v2/grpc-conn-pool-post-bottleneck/single/requests_1703860327.963138.csv b/bench/results/v2/grpc-conn-pool-post-bottleneck/single/requests_1703860327.963138.csv
new file mode 100644
index 0000000..4747b0f
--- /dev/null
+++ b/bench/results/v2/grpc-conn-pool-post-bottleneck/single/requests_1703860327.963138.csv
@@ -0,0 +1,3 @@
+Type,Name,Request Count,Failure Count,Median Response Time,Average Response Time,Min Response Time,Max Response Time,Average Content Size,Requests/s,Failures/s,50%,66%,75%,80%,90%,95%,98%,99%,99.9%,99.99%,100%
+grpc,/dcache.DcacheService/AddVisitor,186109,0,79,74.60541254397303,3.7561320059467107,119.94536400015932,10.999731340236098,4816.33283284295,0.0,79,83,86,89,93,97,100,110,120,120,120
+,Aggregated,186109,0,79,74.60541254397303,3.7561320059467107,119.94536400015932,10.999731340236098,4816.33283284295,0.0,79,83,86,89,93,97,100,110,120,120,120
diff --git a/bench/results/v2/libmcaptcha-bottleneck/problem/flamegraph.svg b/bench/results/v2/libmcaptcha-bottleneck/problem/flamegraph.svg
new file mode 100644
index 0000000..0ca1f87
--- /dev/null
+++ b/bench/results/v2/libmcaptcha-bottleneck/problem/flamegraph.svg
@@ -0,0 +1,491 @@
+
\ No newline at end of file
diff --git a/bench/results/v2/libmcaptcha-bottleneck/solution/flamegraph.svg b/bench/results/v2/libmcaptcha-bottleneck/solution/flamegraph.svg
new file mode 100644
index 0000000..f44d5b4
--- /dev/null
+++ b/bench/results/v2/libmcaptcha-bottleneck/solution/flamegraph.svg
@@ -0,0 +1,491 @@
+Flame Graph Reset ZoomSearch [[stack]] (2 samples, 0.02%)__vdso_clock_gettime (2 samples, 0.02%)[unknown] (2 samples, 0.02%)[ld-linux-x86-64.so.2] (2 samples, 0.02%)[ld-linux-x86-64.so.2] (2 samples, 0.02%)[ld-linux-x86-64.so.2] (2 samples, 0.02%)[ld-linux-x86-64.so.2] (6 samples, 0.05%)[unknown] (3 samples, 0.02%)[unknown] (3 samples, 0.02%)[unknown] (3 samples, 0.02%)[unknown] (2 samples, 0.02%)[unknown] (2 samples, 0.02%)[ld-linux-x86-64.so.2] (8 samples, 0.06%)[unknown] (2 samples, 0.02%)[unknown] (10 samples, 0.08%)[unknown] (8 samples, 0.06%)[unknown] (5 samples, 0.04%)[unknown] (2 samples, 0.02%)__mmap (3 samples, 0.02%)[unknown] (3 samples, 0.02%)[unknown] (3 samples, 0.02%)[unknown] (3 samples, 0.02%)[unknown] (3 samples, 0.02%)[unknown] (2 samples, 0.02%)core::ops::function::FnOnce::call_once{{vtable.shim}} (5 samples, 0.04%)std::thread::Builder::spawn_unchecked_::_{{closure}} (5 samples, 0.04%)std::sys::unix::thread::guard::current (5 samples, 0.04%)pthread_getattr_np (5 samples, 0.04%)malloc (5 samples, 0.04%)[libc.so.6] (5 samples, 0.04%)[libc.so.6] (5 samples, 0.04%)[libc.so.6] (4 samples, 0.03%)__mmap (3 samples, 0.02%)[unknown] (3 samples, 0.02%)[unknown] (3 samples, 0.02%)[unknown] (2 samples, 0.02%)[libc.so.6] (24 samples, 0.19%)[libc.so.6] (24 samples, 0.19%)std::sys::unix::thread::Thread::new::thread_start (13 samples, 0.11%)std::sys::unix::stack_overflow::imp::make_handler (8 samples, 0.06%)sigaltstack (5 samples, 0.04%)[unknown] (5 samples, 0.04%)[unknown] (5 samples, 0.04%)[unknown] (5 samples, 0.04%)[unknown] (4 samples, 0.03%)<dcache::protobuf::dcache::dcache_service_server::DcacheServiceServer<T> as tower_service::Service<http::request::Request<B>>>::call (3 samples, 0.02%)alloc::boxed::Box<T>::pin (2 samples, 0.02%)alloc::boxed::Box<T>::new (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)[libc.so.6] (73 samples, 0.59%)core::ptr::drop_in_place<openraft::raft::Raft<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::network::raft_network_impl::DcacheNetwork>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>::call_core<openraft::raft::ClientWriteResponse<dcache::DcacheTypeConfig>,openraft::error::ClientWriteError<u64,openraft::node::BasicNode>>::{{closure}}::{{closure}}> (6 samples, 0.05%)core::ptr::drop_in_place<tracing::span::Span> (6 samples, 0.05%)<tokio::sync::oneshot::Receiver<T> as core::future::future::Future>::poll (2 samples, 0.02%)core::option::Option<T>::as_ref (2 samples, 0.02%)[libc.so.6] (4 samples, 0.03%)core::ptr::drop_in_place<core::result::Result<(),tokio::sync::mpsc::error::SendError<openraft::raft::RaftMsg<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::network::raft_network_impl::DcacheNetwork>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>>>> (6 samples, 0.05%)core::ptr::drop_in_place<tokio::sync::oneshot::Receiver<core::result::Result<openraft::raft::ClientWriteResponse<dcache::DcacheTypeConfig>,openraft::error::ClientWriteError<u64,openraft::node::BasicNode>>>> (2 samples, 0.02%)<tokio::sync::oneshot::Receiver<T> as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::option::Option<T>::as_ref (2 samples, 0.02%)core::result::Result<T,E>::map_err (9 samples, 0.07%)openraft::raft::Raft<C,N,LS,SM>::call_core::_{{closure}}::_{{closure}} (81 samples, 0.66%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::send (4 samples, 0.03%)<hyper::proto::h2::server::H2Stream<F,B> as core::future::future::Future>::poll (211 samples, 1.71%)hyper::proto::h2::server::H2Stream<F,B>::poll2 (211 samples, 1.71%)<core::pin::Pin<P> as core::future::future::Future>::poll (211 samples, 1.71%)<tonic::transport::server::SvcFuture<F> as core::future::future::Future>::poll (211 samples, 1.71%)<tonic::transport::server::recover_error::ResponseFuture<F> as core::future::future::Future>::poll (211 samples, 1.71%)<tower::util::either::Either<A,B> as core::future::future::Future>::poll (211 samples, 1.71%)<tonic::transport::service::grpc_timeout::ResponseFuture<F> as core::future::future::Future>::poll (211 samples, 1.71%)<tonic::transport::service::router::RoutesFuture as core::future::future::Future>::poll (211 samples, 1.71%)<axum::routing::route::RouteFuture<B,E> as core::future::future::Future>::poll (211 samples, 1.71%)<tower::util::oneshot::Oneshot<S,Req> as core::future::future::Future>::poll (211 samples, 1.71%)<core::pin::Pin<P> as core::future::future::Future>::poll (211 samples, 1.71%)<tower::util::map_response::MapResponseFuture<F,N> as core::future::future::Future>::poll (211 samples, 1.71%)<futures_util::future::try_future::MapOk<Fut,F> as core::future::future::Future>::poll (211 samples, 1.71%)<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (211 samples, 1.71%)<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (211 samples, 1.71%)<futures_util::future::try_future::into_future::IntoFuture<Fut> as core::future::future::Future>::poll (211 samples, 1.71%)<F as futures_core::future::TryFuture>::try_poll (211 samples, 1.71%)<tower::util::map_response::MapResponseFuture<F,N> as core::future::future::Future>::poll (211 samples, 1.71%)<futures_util::future::try_future::MapOk<Fut,F> as core::future::future::Future>::poll (211 samples, 1.71%)<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (211 samples, 1.71%)<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (211 samples, 1.71%)<futures_util::future::try_future::into_future::IntoFuture<Fut> as core::future::future::Future>::poll (211 samples, 1.71%)<F as futures_core::future::TryFuture>::try_poll (211 samples, 1.71%)<core::pin::Pin<P> as core::future::future::Future>::poll (211 samples, 1.71%)<dcache::protobuf::dcache::dcache_service_server::DcacheServiceServer<T> as tower_service::Service<http::request::Request<B>>>::call::_{{closure}} (211 samples, 1.71%)tonic::server::grpc::Grpc<T>::unary::_{{closure}} (211 samples, 1.71%)<core::pin::Pin<P> as core::future::future::Future>::poll (211 samples, 1.71%)<<dcache::protobuf::dcache::dcache_service_server::DcacheServiceServer<T> as tower_service::Service<http::request::Request<B>>>::call::PipelineDcacheOpsSvc<T> as tonic::server::service::UnaryService<dcache::protobuf::dcache::DcacheBatchRequest>>::call::_{{closure}} (211 samples, 1.71%)<core::pin::Pin<P> as core::future::future::Future>::poll (211 samples, 1.71%)<dcache::protobuf::MyDcacheImpl as dcache::protobuf::dcache::dcache_service_server::DcacheService>::pipeline_dcache_ops::_{{closure}} (211 samples, 1.71%)openraft::raft::Raft<C,N,LS,SM>::client_write::_{{closure}} (211 samples, 1.71%)openraft::raft::Raft<C,N,LS,SM>::client_write::_{{closure}}::_{{closure}} (211 samples, 1.71%)openraft::raft::Raft<C,N,LS,SM>::call_core::_{{closure}} (211 samples, 1.71%)<axum::routing::path_router::PathRouter<S,B,_> as core::clone::Clone>::clone (2 samples, 0.02%)<std::collections::hash::map::HashMap<K,V,S> as core::clone::Clone>::clone (2 samples, 0.02%)<hashbrown::map::HashMap<K,V,S,A> as core::clone::Clone>::clone (2 samples, 0.02%)<hashbrown::raw::RawTable<T,A> as core::clone::Clone>::clone (2 samples, 0.02%)<T as hyper::service::http::HttpService<B1>>::call (4 samples, 0.03%)<tower::util::boxed::sync::BoxService<T,U,E> as tower_service::Service<T>>::call (4 samples, 0.03%)<alloc::boxed::Box<S> as tower_service::Service<Request>>::call (4 samples, 0.03%)<tower::util::map_future::MapFuture<S,F> as tower_service::Service<R>>::call (4 samples, 0.03%)<tower::util::map_request::MapRequest<S,F> as tower_service::Service<R1>>::call (4 samples, 0.03%)<tonic::transport::server::Svc<S> as tower_service::Service<http::request::Request<hyper::body::body::Body>>>::call (4 samples, 0.03%)<tonic::transport::server::recover_error::RecoverError<S> as tower_service::Service<R>>::call (4 samples, 0.03%)<tower::util::either::Either<A,B> as tower_service::Service<Request>>::call (4 samples, 0.03%)<tonic::transport::service::grpc_timeout::GrpcTimeout<S> as tower_service::Service<http::request::Request<ReqBody>>>::call (4 samples, 0.03%)<tonic::transport::service::router::Routes as tower_service::Service<http::request::Request<hyper::body::body::Body>>>::call (4 samples, 0.03%)<axum::routing::Router<(),B> as tower_service::Service<http::request::Request<B>>>::call (4 samples, 0.03%)axum::routing::Router<S,B>::call_with_state (4 samples, 0.03%)axum::routing::path_router::PathRouter<S,B,_>::call_with_state (2 samples, 0.02%)h2::codec::Codec<T,B>::buffer (4 samples, 0.03%)h2::codec::framed_write::FramedWrite<T,B>::buffer (4 samples, 0.03%)h2::codec::framed_write::Encoder<B>::buffer (4 samples, 0.03%)h2::frame::headers::Headers::encode (4 samples, 0.03%)h2::frame::headers::HeaderBlock::into_encoding (4 samples, 0.03%)h2::hpack::encoder::Encoder::encode (3 samples, 0.02%)h2::proto::streams::counts::Counts::transition_after (3 samples, 0.02%)<hyper::server::server::new_svc::NewSvcTask<I,N,S,E,W> as core::future::future::Future>::poll (13 samples, 0.11%)<hyper::server::conn::upgrades::UpgradeableConnection<I,S,E> as core::future::future::Future>::poll (13 samples, 0.11%)<hyper::server::conn::ProtoServer<T,B,S,E> as core::future::future::Future>::poll (13 samples, 0.11%)<hyper::proto::h2::server::Server<T,S,B,E> as core::future::future::Future>::poll (13 samples, 0.11%)hyper::proto::h2::server::Serving<T,B>::poll_server (13 samples, 0.11%)h2::server::Connection<T,B>::poll_accept (9 samples, 0.07%)h2::server::Connection<T,B>::poll_closed (9 samples, 0.07%)h2::proto::connection::Connection<T,P,B>::poll (9 samples, 0.07%)h2::proto::streams::streams::Streams<B,P>::poll_complete (8 samples, 0.06%)h2::proto::streams::streams::Inner::poll_complete (8 samples, 0.06%)h2::proto::streams::send::Send::poll_complete (8 samples, 0.06%)h2::proto::streams::prioritize::Prioritize::poll_complete (8 samples, 0.06%)h2::proto::streams::prioritize::Prioritize::pop_frame (4 samples, 0.03%)core::ptr::drop_in_place<tracing::span::Span> (4 samples, 0.03%)<tracing::span::Span as core::ops::drop::Drop>::drop (4 samples, 0.03%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (3 samples, 0.02%)core::mem::drop (4 samples, 0.03%)core::ptr::drop_in_place<alloc::sync::Weak<tokio::sync::oneshot::Inner<core::result::Result<openraft::raft::ClientWriteResponse<dcache::DcacheTypeConfig>,openraft::error::ClientWriteError<u64,openraft::node::BasicNode>>>,&alloc::alloc::Global>> (4 samples, 0.03%)<alloc::sync::Weak<T,A> as core::ops::drop::Drop>::drop (4 samples, 0.03%)tokio::io::interest::Interest::is_readable (3 samples, 0.02%)tokio::runtime::task::waker::drop_waker (4 samples, 0.03%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::drop_reference (4 samples, 0.03%)tokio::runtime::task::state::State::ref_dec (4 samples, 0.03%)tokio::sync::oneshot::State::is_tx_task_set (5 samples, 0.04%)<tokio::sync::oneshot::Inner<T> as core::ops::drop::Drop>::drop (15 samples, 0.12%)tokio::sync::oneshot::mut_load (2 samples, 0.02%)alloc::sync::Arc<T,A>::drop_slow (22 samples, 0.18%)core::ptr::drop_in_place<tokio::sync::oneshot::Inner<core::result::Result<openraft::raft::ClientWriteResponse<dcache::DcacheTypeConfig>,openraft::error::ClientWriteError<u64,openraft::node::BasicNode>>>> (18 samples, 0.15%)core::ptr::drop_in_place<tokio::loom::std::unsafe_cell::UnsafeCell<core::option::Option<core::result::Result<openraft::raft::ClientWriteResponse<dcache::DcacheTypeConfig>,openraft::error::ClientWriteError<u64,openraft::node::BasicNode>>>>> (3 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<alloc::sync::Arc<tokio::sync::oneshot::Inner<core::result::Result<openraft::raft::ClientWriteResponse<dcache::DcacheTypeConfig>,openraft::error::ClientWriteError<u64,openraft::node::BasicNode>>>>>> (40 samples, 0.32%)core::ptr::drop_in_place<alloc::sync::Arc<tokio::sync::oneshot::Inner<core::result::Result<openraft::raft::ClientWriteResponse<dcache::DcacheTypeConfig>,openraft::error::ClientWriteError<u64,openraft::node::BasicNode>>>>> (40 samples, 0.32%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (40 samples, 0.32%)cfree (12 samples, 0.10%)[libc.so.6] (4 samples, 0.03%)core::ptr::drop_in_place<tokio::runtime::coop::RestoreOnPending> (4 samples, 0.03%)<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop (4 samples, 0.03%)tokio::runtime::context::budget (2 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (2 samples, 0.02%)tokio::runtime::context::budget::_{{closure}} (2 samples, 0.02%)<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop::_{{closure}} (2 samples, 0.02%)core::cell::Cell<T>::set (2 samples, 0.02%)core::cell::Cell<T>::replace (2 samples, 0.02%)core::mem::replace (2 samples, 0.02%)core::ptr::write (2 samples, 0.02%)tokio::io::interest::Interest::is_readable (5 samples, 0.04%)tokio::io::interest::Interest::is_writable (8 samples, 0.06%)core::result::Result<T,E>::unwrap_or (5 samples, 0.04%)core::ptr::drop_in_place<core::task::poll::Poll<tokio::runtime::coop::RestoreOnPending>> (2 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::coop::RestoreOnPending> (2 samples, 0.02%)<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::cell::Cell<T>::set (28 samples, 0.23%)core::cell::Cell<T>::replace (28 samples, 0.23%)core::mem::replace (28 samples, 0.23%)core::ptr::write (28 samples, 0.23%)tokio::runtime::context::budget (36 samples, 0.29%)std::thread::local::LocalKey<T>::try_with (36 samples, 0.29%)tokio::runtime::context::budget::_{{closure}} (35 samples, 0.28%)tokio::runtime::coop::poll_proceed::_{{closure}} (35 samples, 0.28%)tokio::runtime::coop::Budget::decrement (5 samples, 0.04%)tokio::runtime::coop::poll_proceed (49 samples, 0.40%)tokio::sync::oneshot::State::is_closed (3 samples, 0.02%)tokio::sync::oneshot::State::load (3 samples, 0.02%)tokio::sync::oneshot::State::set_rx_task (8 samples, 0.06%)core::sync::atomic::AtomicUsize::fetch_or (8 samples, 0.06%)core::sync::atomic::atomic_or (8 samples, 0.06%)<core::task::wake::Waker as core::clone::Clone>::clone (5 samples, 0.04%)tokio::runtime::task::waker::clone_waker (5 samples, 0.04%)tokio::runtime::task::state::State::ref_inc (3 samples, 0.02%)<tokio::sync::oneshot::Receiver<T> as core::future::future::Future>::poll (162 samples, 1.31%)tokio::sync::oneshot::Inner<T>::poll_recv (113 samples, 0.92%)tokio::sync::oneshot::Task::set_task (9 samples, 0.07%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (6 samples, 0.05%)tokio::sync::oneshot::Task::set_task::_{{closure}} (6 samples, 0.05%)[libc.so.6] (8 samples, 0.06%)tokio::runtime::context::with_scheduler (6 samples, 0.05%)std::thread::local::LocalKey<T>::try_with (6 samples, 0.05%)tokio::runtime::context::with_scheduler::_{{closure}} (6 samples, 0.05%)tokio::runtime::context::scoped::Scoped<T>::with (6 samples, 0.05%)tokio::runtime::scheduler::current_thread::_<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>::schedule::_{{closure}} (5 samples, 0.04%)tokio::runtime::scheduler::current_thread::Core::push_task (5 samples, 0.04%)alloc::collections::vec_deque::VecDeque<T,A>::push_back (5 samples, 0.04%)alloc::collections::vec_deque::VecDeque<T,A>::is_full (2 samples, 0.02%)tokio::runtime::task::raw::RawTask::schedule (10 samples, 0.08%)tokio::runtime::task::raw::schedule (4 samples, 0.03%)tokio::runtime::task::core::Header::get_scheduler (4 samples, 0.03%)tokio::runtime::task::state::State::load (4 samples, 0.03%)core::sync::atomic::AtomicUsize::load (4 samples, 0.03%)core::sync::atomic::atomic_load (4 samples, 0.03%)tokio::runtime::task::waker::wake_by_val (18 samples, 0.15%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (18 samples, 0.15%)tokio::runtime::task::state::State::transition_to_notified_by_val (8 samples, 0.06%)tokio::runtime::task::state::State::fetch_update_action (7 samples, 0.06%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (31 samples, 0.25%)tokio::sync::mpsc::block::Block<T>::write::_{{closure}} (31 samples, 0.25%)core::ptr::write (31 samples, 0.25%)[libc.so.6] (31 samples, 0.25%)tokio::sync::mpsc::block::Block<T>::write (34 samples, 0.28%)tokio::sync::mpsc::block::Block<T>::set_ready (3 samples, 0.02%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (3 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_add (2 samples, 0.02%)core::sync::atomic::atomic_add (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::tx_release (2 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::tx_release::_{{closure}} (2 samples, 0.02%)tokio::sync::mpsc::list::Tx<T>::push (54 samples, 0.44%)tokio::sync::mpsc::list::Tx<T>::find_block (15 samples, 0.12%)tokio::sync::mpsc::block::start_index (4 samples, 0.03%)tokio::sync::mpsc::chan::Tx<T,S>::send (88 samples, 0.71%)tokio::sync::mpsc::chan::Chan<T,S>::send (88 samples, 0.71%)tokio::sync::task::atomic_waker::AtomicWaker::wake (16 samples, 0.13%)tokio::sync::task::atomic_waker::AtomicWaker::take_waker (9 samples, 0.07%)core::sync::atomic::AtomicUsize::fetch_or (9 samples, 0.07%)core::sync::atomic::atomic_or (9 samples, 0.07%)core::sync::atomic::AtomicUsize::compare_exchange (6 samples, 0.05%)core::sync::atomic::atomic_compare_exchange (6 samples, 0.05%)<tonic::transport::server::SvcFuture<F> as core::future::future::Future>::poll (281 samples, 2.28%)<..<tonic::transport::server::recover_error::ResponseFuture<F> as core::future::future::Future>::poll (281 samples, 2.28%)<..<tower::util::either::Either<A,B> as core::future::future::Future>::poll (281 samples, 2.28%)<..<tonic::transport::service::grpc_timeout::ResponseFuture<F> as core::future::future::Future>::poll (281 samples, 2.28%)<..<tonic::transport::service::router::RoutesFuture as core::future::future::Future>::poll (281 samples, 2.28%)<..<axum::routing::route::RouteFuture<B,E> as core::future::future::Future>::poll (281 samples, 2.28%)<..<tower::util::oneshot::Oneshot<S,Req> as core::future::future::Future>::poll (281 samples, 2.28%)<..<core::pin::Pin<P> as core::future::future::Future>::poll (281 samples, 2.28%)<..<tower::util::map_response::MapResponseFuture<F,N> as core::future::future::Future>::poll (281 samples, 2.28%)<..<futures_util::future::try_future::MapOk<Fut,F> as core::future::future::Future>::poll (281 samples, 2.28%)<..<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (281 samples, 2.28%)<..<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (281 samples, 2.28%)<..<futures_util::future::try_future::into_future::IntoFuture<Fut> as core::future::future::Future>::poll (281 samples, 2.28%)<..<F as futures_core::future::TryFuture>::try_poll (281 samples, 2.28%)<..<tower::util::map_response::MapResponseFuture<F,N> as core::future::future::Future>::poll (281 samples, 2.28%)<..<futures_util::future::try_future::MapOk<Fut,F> as core::future::future::Future>::poll (281 samples, 2.28%)<..<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (281 samples, 2.28%)<..<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (281 samples, 2.28%)<..<futures_util::future::try_future::into_future::IntoFuture<Fut> as core::future::future::Future>::poll (281 samples, 2.28%)<..<F as futures_core::future::TryFuture>::try_poll (281 samples, 2.28%)<..<core::pin::Pin<P> as core::future::future::Future>::poll (281 samples, 2.28%)<..<dcache::protobuf::dcache::dcache_service_server::DcacheServiceServer<T> as tower_service::Service<http::request::Request<B>>>::call::_{{closure}} (281 samples, 2.28%)<..tonic::server::grpc::Grpc<T>::unary::_{{closure}} (281 samples, 2.28%)t..<core::pin::Pin<P> as core::future::future::Future>::poll (281 samples, 2.28%)<..<<dcache::protobuf::dcache::dcache_service_server::DcacheServiceServer<T> as tower_service::Service<http::request::Request<B>>>::call::PipelineDcacheOpsSvc<T> as tonic::server::service::UnaryService<dcache::protobuf::dcache::DcacheBatchRequest>>::call::_{{closure}} (281 samples, 2.28%)<..<core::pin::Pin<P> as core::future::future::Future>::poll (281 samples, 2.28%)<..<dcache::protobuf::MyDcacheImpl as dcache::protobuf::dcache::dcache_service_server::DcacheService>::pipeline_dcache_ops::_{{closure}} (281 samples, 2.28%)<..openraft::raft::Raft<C,N,LS,SM>::client_write::_{{closure}} (281 samples, 2.28%)o..openraft::raft::Raft<C,N,LS,SM>::client_write::_{{closure}}::_{{closure}} (281 samples, 2.28%)o..openraft::raft::Raft<C,N,LS,SM>::call_core::_{{closure}} (281 samples, 2.28%)o..openraft::raft::Raft<C,N,LS,SM>::call_core::_{{closure}}::_{{closure}} (277 samples, 2.25%)o..tokio::sync::mpsc::unbounded::UnboundedSender<T>::send (115 samples, 0.93%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::inc_num_messages (19 samples, 0.15%)core::sync::atomic::AtomicUsize::load (6 samples, 0.05%)core::sync::atomic::atomic_load (6 samples, 0.05%)[libc.so.6] (4 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (3 samples, 0.02%)alloc::alloc::dealloc (3 samples, 0.02%)cfree (2 samples, 0.02%)alloc::collections::btree::navigate::LazyLeafRange<alloc::collections::btree::node::marker::Dying,K,V>::deallocating_end (5 samples, 0.04%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Dying,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::deallocating_end (5 samples, 0.04%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Dying,K,V,alloc::collections::btree::node::marker::LeafOrInternal>::deallocate_and_ascend (5 samples, 0.04%)alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>::ascend (2 samples, 0.02%)core::option::Option<T>::as_ref (2 samples, 0.02%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Dying,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::deallocating_next_unchecked (3 samples, 0.02%)alloc::collections::btree::mem::replace (3 samples, 0.02%)alloc::collections::btree::navigate::_<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Dying,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::deallocating_next_unchecked::_{{closure}} (3 samples, 0.02%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Dying,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::deallocating_next (3 samples, 0.02%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,NodeType>,alloc::collections::btree::node::marker::Edge>::right_kv (2 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<alloc::collections::btree::map::BTreeMap<u64,core::option::Option<openraft::log_id::LogId<u64>>>>> (15 samples, 0.12%)core::ptr::drop_in_place<alloc::collections::btree::map::BTreeMap<u64,core::option::Option<openraft::log_id::LogId<u64>>>> (15 samples, 0.12%)<alloc::collections::btree::map::BTreeMap<K,V,A> as core::ops::drop::Drop>::drop (15 samples, 0.12%)core::mem::drop (15 samples, 0.12%)core::ptr::drop_in_place<alloc::collections::btree::map::IntoIter<u64,core::option::Option<openraft::log_id::LogId<u64>>>> (15 samples, 0.12%)<alloc::collections::btree::map::IntoIter<K,V,A> as core::ops::drop::Drop>::drop (15 samples, 0.12%)alloc::collections::btree::map::IntoIter<K,V,A>::dying_next (14 samples, 0.11%)alloc::collections::btree::navigate::LazyLeafRange<alloc::collections::btree::node::marker::Dying,K,V>::deallocating_next_unchecked (5 samples, 0.04%)alloc::collections::btree::navigate::LazyLeafRange<BorrowType,K,V>::init_front (2 samples, 0.02%)core::ptr::drop_in_place<openraft::metrics::raft_metrics::RaftMetrics<u64,openraft::node::BasicNode>> (16 samples, 0.13%)tokio::sync::watch::Sender<T>::receiver_count (2 samples, 0.02%)core::mem::drop (2 samples, 0.02%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::RwLockWriteGuard<openraft::metrics::raft_metrics::RaftMetrics<u64,openraft::node::BasicNode>>> (2 samples, 0.02%)core::ptr::drop_in_place<lock_api::rwlock::RwLockWriteGuard<parking_lot::raw_rwlock::RawRwLock,openraft::metrics::raft_metrics::RaftMetrics<u64,openraft::node::BasicNode>>> (2 samples, 0.02%)<lock_api::rwlock::RwLockWriteGuard<R,T> as core::ops::drop::Drop>::drop (2 samples, 0.02%)<parking_lot::raw_rwlock::RawRwLock as lock_api::rwlock::RawRwLock>::unlock_exclusive (2 samples, 0.02%)core::ptr::read (8 samples, 0.06%)std::panic::catch_unwind (10 samples, 0.08%)std::panicking::try (10 samples, 0.08%)std::panicking::try::do_call (10 samples, 0.08%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (10 samples, 0.08%)tokio::sync::watch::Sender<T>::send_if_modified::_{{closure}} (10 samples, 0.08%)tokio::sync::watch::Sender<T>::send_modify::_{{closure}} (10 samples, 0.08%)tokio::sync::watch::Sender<T>::send_replace::_{{closure}} (10 samples, 0.08%)core::mem::swap (10 samples, 0.08%)core::ptr::swap_nonoverlapping (10 samples, 0.08%)core::ptr::swap_nonoverlapping_simple_untyped (10 samples, 0.08%)core::mem::swap_simple (10 samples, 0.08%)core::ptr::write (2 samples, 0.02%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::util::linked_list::LinkedList<tokio::sync::notify::Waiter,tokio::sync::notify::Waiter>>> (2 samples, 0.02%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::util::linked_list::LinkedList<tokio::sync::notify::Waiter,tokio::sync::notify::Waiter>>> (2 samples, 0.02%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (2 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (2 samples, 0.02%)tokio::sync::notify::Notify::notify_waiters (3 samples, 0.02%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::util::linked_list::LinkedList<tokio::sync::notify::Waiter,tokio::sync::notify::Waiter>>> (12 samples, 0.10%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::util::linked_list::LinkedList<tokio::sync::notify::Waiter,tokio::sync::notify::Waiter>>> (12 samples, 0.10%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (12 samples, 0.10%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (12 samples, 0.10%)tokio::loom::std::parking_lot::Mutex<T>::lock (11 samples, 0.09%)lock_api::mutex::Mutex<R,T>::lock (11 samples, 0.09%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (11 samples, 0.09%)tokio::sync::watch::big_notify::BigNotify::notify_waiters (35 samples, 0.28%)tokio::sync::notify::Notify::notify_waiters (34 samples, 0.28%)tokio::sync::notify::atomic_inc_num_notify_waiters_calls (6 samples, 0.05%)core::sync::atomic::AtomicUsize::fetch_add (6 samples, 0.05%)core::sync::atomic::atomic_add (6 samples, 0.05%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::flush_metrics (76 samples, 0.62%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::report_metrics (76 samples, 0.62%)tokio::sync::watch::Sender<T>::send (76 samples, 0.62%)tokio::sync::watch::Sender<T>::send_replace (52 samples, 0.42%)tokio::sync::watch::Sender<T>::send_modify (52 samples, 0.42%)tokio::sync::watch::Sender<T>::send_if_modified (52 samples, 0.42%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::try_purge_log (2 samples, 0.02%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::try_commit_granted (3 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_notify (9 samples, 0.07%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_replication_progress (9 samples, 0.07%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_progress (9 samples, 0.07%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_success_progress (6 samples, 0.05%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_matching (6 samples, 0.05%)<openraft::core::raft_core::RaftCore<C,N,LS,SM> as openraft::runtime::RaftRuntime<C>>::run_command (2 samples, 0.02%)alloc::boxed::Box<T>::pin (2 samples, 0.02%)alloc::boxed::Box<T>::new (2 samples, 0.02%)alloc::alloc::exchange_malloc (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (2 samples, 0.02%)alloc::alloc::Global::alloc_impl (2 samples, 0.02%)alloc::alloc::alloc (2 samples, 0.02%)malloc (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::process_notify::_{{closure}} (14 samples, 0.11%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}} (14 samples, 0.11%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}}::_{{closure}} (14 samples, 0.11%)__rust_alloc (2 samples, 0.02%)alloc::alloc::exchange_malloc (14 samples, 0.11%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (13 samples, 0.11%)alloc::alloc::Global::alloc_impl (13 samples, 0.11%)alloc::alloc::alloc (13 samples, 0.11%)malloc (11 samples, 0.09%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,Type>::force (4 samples, 0.03%)alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>::force (4 samples, 0.03%)alloc::collections::btree::map::BTreeMap<K,V,A>::entry (17 samples, 0.14%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::search_tree (17 samples, 0.14%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::search_node (13 samples, 0.11%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (13 samples, 0.11%)core::cmp::impls::<impl core::cmp::Ord for u64>::cmp (5 samples, 0.04%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_fit (7 samples, 0.06%)alloc::collections::btree::map::BTreeMap<K,V,A>::insert (50 samples, 0.41%)alloc::collections::btree::map::entry::VacantEntry<K,V,A>::insert (29 samples, 0.24%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (19 samples, 0.15%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert (10 samples, 0.08%)alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>::len (3 samples, 0.02%)openraft::engine::engine_impl::Engine<C>::get_leader_handler_or_reject (52 samples, 0.42%)openraft::engine::engine_impl::Engine<C>::leader_handler (7 samples, 0.06%)<alloc::vec::Vec<T,A> as core::ops::deref::Deref>::deref (3 samples, 0.02%)[libc.so.6] (15 samples, 0.12%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_write (28 samples, 0.23%)core::ptr::write (28 samples, 0.23%)[libc.so.6] (28 samples, 0.23%)alloc::collections::vec_deque::wrap_index (2 samples, 0.02%)openraft::engine::engine_output::EngineOutput<C>::push_command (52 samples, 0.42%)alloc::collections::vec_deque::VecDeque<T,A>::push_back (33 samples, 0.27%)alloc::collections::vec_deque::VecDeque<T,A>::to_physical_idx (4 samples, 0.03%)alloc::collections::vec_deque::VecDeque<T,A>::wrap_add (4 samples, 0.03%)core::num::<impl usize>::wrapping_add (2 samples, 0.02%)openraft::engine::handler::leader_handler::LeaderHandler<C>::replication_handler (2 samples, 0.02%)<tracing_core::metadata::Level as core::cmp::PartialOrd<tracing_core::metadata::LevelFilter>>::le (3 samples, 0.02%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (4 samples, 0.03%)<openraft::progress::inflight::Inflight<NID> as core::cmp::PartialEq>::eq (4 samples, 0.03%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &mut A>::eq (3 samples, 0.02%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::initiate_replication (55 samples, 0.45%)openraft::progress::entry::ProgressEntry<NID>::next_send (13 samples, 0.11%)<core::option::Option<&openraft::log_id::LogId<NID>> as openraft::log_id::log_id_option_ext::LogIdOptionExt>::next_index (14 samples, 0.11%)tracing_core::dispatcher::has_been_set (3 samples, 0.02%)core::sync::atomic::AtomicBool::load (3 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)openraft::raft_state::RaftState<NID,N>::assign_log_ids (21 samples, 0.17%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::write_entry (281 samples, 2.28%)o..openraft::engine::handler::leader_handler::LeaderHandler<C>::leader_append_entries (154 samples, 1.25%)openraft::raft_state::RaftState<NID,N>::extend_log_ids_from_same_leader (5 samples, 0.04%)openraft::engine::log_id_list::LogIdList<NID>::extend_from_same_leader (5 samples, 0.04%)openraft::engine::log_id_list::LogIdList<NID>::append (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_api_msg::_{{closure}} (329 samples, 2.67%)op..openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_api_msg::_{{closure}}::_{{closure}} (329 samples, 2.67%)op..tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)<F as core::future::into_future::IntoFuture>::into_future (22 samples, 0.18%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::next_kv (7 samples, 0.06%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,NodeType>,alloc::collections::btree::node::marker::Edge>::right_kv (7 samples, 0.06%)alloc::collections::btree::navigate::_<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::next_unchecked::_{{closure}} (9 samples, 0.07%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,NodeType>,alloc::collections::btree::node::marker::KV>::into_kv (2 samples, 0.02%)core::slice::<impl [T]>::get_unchecked (2 samples, 0.02%)<usize as core::slice::index::SliceIndex<[T]>>::get_unchecked (2 samples, 0.02%)core::ptr::const_ptr::<impl *const T>::add (2 samples, 0.02%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::next_unchecked (10 samples, 0.08%)alloc::collections::btree::mem::replace (10 samples, 0.08%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::first_leaf_edge (2 samples, 0.02%)<alloc::collections::btree::map::Iter<K,V> as core::iter::traits::iterator::Iterator>::next (32 samples, 0.26%)alloc::collections::btree::navigate::LazyLeafRange<alloc::collections::btree::node::marker::Immut,K,V>::next_unchecked (17 samples, 0.14%)alloc::collections::btree::navigate::LazyLeafRange<BorrowType,K,V>::init_front (7 samples, 0.06%)<alloc::collections::btree::map::Values<K,V> as core::iter::traits::iterator::Iterator>::next (33 samples, 0.27%)<core::option::Option<openraft::log_id::LogId<NID>> as openraft::log_id::log_id_option_ext::LogIdOptionExt>::next_index (6 samples, 0.05%)[libc.so.6] (186 samples, 1.51%)alloc::collections::btree::map::BTreeMap<K,V,A>::values (2 samples, 0.02%)alloc::collections::btree::map::BTreeMap<K,V,A>::iter (2 samples, 0.02%)core::ptr::drop_in_place<openraft::core::raft_core::RaftCore<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::network::raft_network_impl::DcacheNetwork>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>::append_to_log<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>>::{{closure}}> (4 samples, 0.03%)core::slice::<impl [T]>::last (2 samples, 0.02%)[libc.so.6] (35 samples, 0.28%)core::ptr::drop_in_place<openraft::core::raft_core::RaftCore<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::network::raft_network_impl::DcacheNetwork>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>::append_to_log<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>>::{{closure}}::{{closure}}> (3 samples, 0.02%)<tracing::span::Span as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Span> (11 samples, 0.09%)core::ptr::drop_in_place<core::option::Option<tracing::span::Inner>> (4 samples, 0.03%)<core::pin::Pin<P> as core::future::future::Future>::poll (3 samples, 0.02%)dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::append_to_log::_{{closure}} (3 samples, 0.02%)[libc.so.6] (66 samples, 0.54%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),openraft::storage_error::StorageError<u64>>+core::marker::Send>> (2 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (2 samples, 0.02%)alloc::alloc::dealloc (2 samples, 0.02%)__rdl_dealloc (2 samples, 0.02%)std::sys::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (2 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::rwlock::write_guard::RwLockWriteGuard<alloc::sync::Arc<dcache::store::DcacheStore>>> (4 samples, 0.03%)<tokio::sync::rwlock::write_guard::RwLockWriteGuard<T> as core::ops::drop::Drop>::drop (4 samples, 0.03%)tokio::sync::batch_semaphore::Semaphore::release (4 samples, 0.03%)<core::pin::Pin<P> as core::future::future::Future>::poll (117 samples, 0.95%)<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::v2::RaftLogStorage<C>>::append::_{{closure}} (117 samples, 0.95%)dcache::store::<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::append_to_log (11 samples, 0.09%)alloc::boxed::Box<T>::pin (11 samples, 0.09%)alloc::boxed::Box<T>::new (11 samples, 0.09%)[libc.so.6] (11 samples, 0.09%)[libc.so.6] (12 samples, 0.10%)__rdl_alloc (2 samples, 0.02%)<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::v2::RaftLogStorage<C>>::append (42 samples, 0.34%)alloc::boxed::Box<T>::pin (23 samples, 0.19%)alloc::boxed::Box<T>::new (23 samples, 0.19%)alloc::alloc::exchange_malloc (11 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (11 samples, 0.09%)alloc::alloc::Global::alloc_impl (11 samples, 0.09%)alloc::alloc::alloc (11 samples, 0.09%)malloc (8 samples, 0.06%)core::option::Option<T>::as_ref (4 samples, 0.03%)alloc::sync::Arc<T,A>::get_mut_unchecked (5 samples, 0.04%)core::mem::drop (5 samples, 0.04%)core::ptr::drop_in_place<alloc::sync::Weak<tokio::sync::oneshot::Inner<core::result::Result<core::option::Option<openraft::log_id::LogId<u64>>,std::io::error::Error>>,&alloc::alloc::Global>> (5 samples, 0.04%)<alloc::sync::Weak<T,A> as core::ops::drop::Drop>::drop (5 samples, 0.04%)tokio::io::interest::Interest::is_readable (2 samples, 0.02%)tokio::sync::oneshot::State::is_tx_task_set (2 samples, 0.02%)alloc::sync::Arc<T,A>::drop_slow (20 samples, 0.16%)core::ptr::drop_in_place<tokio::sync::oneshot::Inner<core::result::Result<core::option::Option<openraft::log_id::LogId<u64>>,std::io::error::Error>>> (10 samples, 0.08%)<tokio::sync::oneshot::Inner<T> as core::ops::drop::Drop>::drop (10 samples, 0.08%)tokio::sync::oneshot::mut_load (4 samples, 0.03%)tokio::loom::std::atomic_usize::AtomicUsize::with_mut (4 samples, 0.03%)core::ptr::drop_in_place<core::option::Option<alloc::sync::Arc<tokio::sync::oneshot::Inner<core::result::Result<core::option::Option<openraft::log_id::LogId<u64>>,std::io::error::Error>>>>> (31 samples, 0.25%)core::ptr::drop_in_place<alloc::sync::Arc<tokio::sync::oneshot::Inner<core::result::Result<core::option::Option<openraft::log_id::LogId<u64>>,std::io::error::Error>>>> (31 samples, 0.25%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (31 samples, 0.25%)cfree (10 samples, 0.08%)[libc.so.6] (7 samples, 0.06%)tokio::runtime::coop::RestoreOnPending::made_progress (8 samples, 0.06%)core::cell::Cell<T>::set (6 samples, 0.05%)core::cell::Cell<T>::replace (6 samples, 0.05%)core::mem::replace (6 samples, 0.05%)core::ptr::write (6 samples, 0.05%)core::cell::Cell<T>::set (17 samples, 0.14%)core::cell::Cell<T>::replace (17 samples, 0.14%)core::mem::replace (17 samples, 0.14%)core::ptr::write (17 samples, 0.14%)tokio::runtime::coop::poll_proceed (26 samples, 0.21%)tokio::runtime::context::budget (24 samples, 0.19%)std::thread::local::LocalKey<T>::try_with (24 samples, 0.19%)tokio::runtime::context::budget::_{{closure}} (23 samples, 0.19%)tokio::runtime::coop::poll_proceed::_{{closure}} (23 samples, 0.19%)tokio::runtime::coop::Budget::decrement (6 samples, 0.05%)<tokio::sync::oneshot::Receiver<T> as core::future::future::Future>::poll (83 samples, 0.67%)tokio::sync::oneshot::Inner<T>::poll_recv (45 samples, 0.37%)tokio::sync::oneshot::State::load (6 samples, 0.05%)core::sync::atomic::AtomicUsize::load (4 samples, 0.03%)core::sync::atomic::atomic_load (4 samples, 0.03%)[libc.so.6] (27 samples, 0.22%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (3 samples, 0.02%)alloc::alloc::dealloc (3 samples, 0.02%)cfree (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (4 samples, 0.03%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (6 samples, 0.05%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),openraft::storage_error::StorageError<u64>>+core::marker::Send>> (6 samples, 0.05%)core::ptr::drop_in_place<<openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>> as openraft::storage::v2::RaftLogStorage<dcache::DcacheTypeConfig>>::append<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>>::{{closure}}> (2 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::oneshot::Receiver<core::result::Result<core::option::Option<openraft::log_id::LogId<u64>>,std::io::error::Error>>> (9 samples, 0.07%)<tokio::sync::oneshot::Receiver<T> as core::ops::drop::Drop>::drop (8 samples, 0.06%)core::option::Option<T>::as_ref (8 samples, 0.06%)openraft::storage::callback::LogFlushed<NID>::new (2 samples, 0.02%)<alloc::sync::Arc<T,A> as core::clone::Clone>::clone (4 samples, 0.03%)__rust_alloc (3 samples, 0.02%)alloc::sync::Arc<T>::new (17 samples, 0.14%)alloc::boxed::Box<T>::new (17 samples, 0.14%)alloc::alloc::exchange_malloc (11 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (11 samples, 0.09%)alloc::alloc::Global::alloc_impl (11 samples, 0.09%)alloc::alloc::alloc (11 samples, 0.09%)malloc (7 samples, 0.06%)tokio::loom::std::atomic_usize::AtomicUsize::new (3 samples, 0.02%)tokio::sync::oneshot::State::as_usize (3 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::append_to_log::_{{closure}}::_{{closure}} (332 samples, 2.69%)op..tokio::sync::oneshot::channel (30 samples, 0.24%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::append_to_log::_{{closure}} (409 samples, 3.32%)ope..tracing::__macro_support::__disabled_span (6 samples, 0.05%)tracing::span::Span::new_disabled (6 samples, 0.05%)[libc.so.6] (40 samples, 0.32%)core::ptr::drop_in_place<tracing::span::Span> (2 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (3 samples, 0.02%)<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::RaftLogReader<C>>::try_get_log_entries::_{{closure}} (3 samples, 0.02%)[libc.so.6] (17 samples, 0.14%)<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::RaftLogReader<C>>::try_get_log_entries (29 samples, 0.24%)alloc::boxed::Box<T>::pin (29 samples, 0.24%)alloc::boxed::Box<T>::new (29 samples, 0.24%)alloc::alloc::exchange_malloc (11 samples, 0.09%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (11 samples, 0.09%)alloc::alloc::Global::alloc_impl (11 samples, 0.09%)alloc::alloc::alloc (11 samples, 0.09%)malloc (10 samples, 0.08%)[libc.so.6] (65 samples, 0.53%)__rdl_dealloc (3 samples, 0.02%)std::sys::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (3 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (7 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (7 samples, 0.06%)alloc::alloc::dealloc (7 samples, 0.06%)cfree (3 samples, 0.02%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (11 samples, 0.09%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>> (11 samples, 0.09%)core::ptr::drop_in_place<<openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>> as openraft::storage::RaftLogReader<dcache::DcacheTypeConfig>>::try_get_log_entries<core::ops::range::Range<u64>>::{{closure}}> (4 samples, 0.03%)<core::pin::Pin<P> as core::future::future::Future>::poll (131 samples, 1.06%)openraft::storage::log_store_ext::RaftLogReaderExt::get_log_entries::_{{closure}} (131 samples, 1.06%)[libc.so.6] (27 samples, 0.22%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (7 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (6 samples, 0.05%)alloc::alloc::dealloc (6 samples, 0.05%)cfree (6 samples, 0.05%)[libc.so.6] (5 samples, 0.04%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (9 samples, 0.07%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>> (9 samples, 0.07%)[libc.so.6] (11 samples, 0.09%)[libc.so.6] (14 samples, 0.11%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (2 samples, 0.02%)alloc::sync::Arc<T,A>::inner (2 samples, 0.02%)core::ptr::non_null::NonNull<T>::as_ref (2 samples, 0.02%)tokio::runtime::context::with_scheduler (6 samples, 0.05%)std::thread::local::LocalKey<T>::try_with (6 samples, 0.05%)tokio::runtime::context::with_scheduler::_{{closure}} (5 samples, 0.04%)tokio::runtime::context::scoped::Scoped<T>::with (5 samples, 0.04%)tokio::runtime::scheduler::current_thread::_<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>::schedule::_{{closure}} (5 samples, 0.04%)tokio::runtime::scheduler::current_thread::Core::push_task (3 samples, 0.02%)alloc::collections::vec_deque::VecDeque<T,A>::push_back (3 samples, 0.02%)tokio::runtime::task::raw::RawTask::schedule (14 samples, 0.11%)tokio::runtime::task::raw::schedule (8 samples, 0.06%)tokio::runtime::task::core::Header::get_scheduler (8 samples, 0.06%)tokio::runtime::task::waker::wake_by_val (22 samples, 0.18%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (22 samples, 0.18%)tokio::runtime::task::state::State::transition_to_notified_by_val (6 samples, 0.05%)tokio::runtime::task::state::State::fetch_update_action (6 samples, 0.05%)tokio::runtime::task::state::State::load (3 samples, 0.02%)core::sync::atomic::AtomicUsize::load (3 samples, 0.02%)core::sync::atomic::atomic_load (3 samples, 0.02%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (2 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (21 samples, 0.17%)tokio::sync::mpsc::block::Block<T>::write::_{{closure}} (21 samples, 0.17%)core::ptr::write (21 samples, 0.17%)[libc.so.6] (21 samples, 0.17%)tokio::sync::mpsc::block::Block<T>::write (24 samples, 0.19%)tokio::sync::mpsc::block::Block<T>::set_ready (3 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_or (3 samples, 0.02%)core::sync::atomic::atomic_or (3 samples, 0.02%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (2 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_add (2 samples, 0.02%)core::sync::atomic::atomic_add (2 samples, 0.02%)tokio::sync::mpsc::list::Tx<T>::push (39 samples, 0.32%)tokio::sync::mpsc::list::Tx<T>::find_block (13 samples, 0.11%)tokio::sync::mpsc::block::start_index (3 samples, 0.02%)tokio::sync::mpsc::chan::Tx<T,S>::send (78 samples, 0.63%)tokio::sync::mpsc::chan::Chan<T,S>::send (78 samples, 0.63%)tokio::sync::task::atomic_waker::AtomicWaker::wake (16 samples, 0.13%)tokio::sync::task::atomic_waker::AtomicWaker::take_waker (11 samples, 0.09%)core::sync::atomic::AtomicUsize::fetch_or (11 samples, 0.09%)core::sync::atomic::atomic_or (11 samples, 0.09%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (9 samples, 0.07%)core::sync::atomic::AtomicUsize::compare_exchange (3 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (3 samples, 0.02%)openraft::core::sm::Handle<C>::send (132 samples, 1.07%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::send (117 samples, 0.95%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::inc_num_messages (19 samples, 0.15%)core::sync::atomic::AtomicUsize::load (5 samples, 0.04%)core::sync::atomic::atomic_load (5 samples, 0.04%)openraft::storage::log_store_ext::RaftLogReaderExt::get_log_entries (22 samples, 0.18%)alloc::boxed::Box<T>::pin (20 samples, 0.16%)alloc::boxed::Box<T>::new (20 samples, 0.16%)alloc::alloc::exchange_malloc (5 samples, 0.04%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (5 samples, 0.04%)alloc::alloc::Global::alloc_impl (5 samples, 0.04%)alloc::alloc::alloc (5 samples, 0.04%)malloc (4 samples, 0.03%)tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::apply_to_state_machine::_{{closure}}::_{{closure}} (351 samples, 2.85%)op..tracing_core::metadata::LevelFilter::current (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)tracing::__macro_support::__disabled_span (2 samples, 0.02%)tracing::span::Span::new_disabled (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::apply_to_state_machine::_{{closure}} (418 samples, 3.39%)ope..tracing_core::metadata::LevelFilter::current (4 samples, 0.03%)core::sync::atomic::AtomicUsize::load (4 samples, 0.03%)core::sync::atomic::atomic_load (4 samples, 0.03%)openraft::engine::command::Command<C>::condition (16 samples, 0.13%)openraft::engine::engine_impl::Engine<C>::leader_handler (7 samples, 0.06%)<openraft::progress::VecProgress<ID,V,P,QS> as openraft::progress::Progress<ID,V,P,QS>>::get_mut (7 samples, 0.06%)openraft::progress::VecProgress<ID,V,P,QS>::index (4 samples, 0.03%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)core::cmp::PartialOrd::ge (7 samples, 0.06%)<core::option::Option<T> as core::cmp::PartialOrd>::partial_cmp (6 samples, 0.05%)<openraft::log_id::LogId<NID> as core::cmp::PartialOrd>::partial_cmp (4 samples, 0.03%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_matching (3 samples, 0.02%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_local_progress (27 samples, 0.22%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (4 samples, 0.03%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (14 samples, 0.11%)tokio::sync::mpsc::block::Block<T>::write::_{{closure}} (14 samples, 0.11%)core::ptr::write (14 samples, 0.11%)tokio::sync::mpsc::block::Block<T>::write (21 samples, 0.17%)tokio::sync::mpsc::block::Block<T>::set_ready (7 samples, 0.06%)core::sync::atomic::AtomicUsize::fetch_or (6 samples, 0.05%)core::sync::atomic::atomic_or (6 samples, 0.05%)core::sync::atomic::AtomicPtr<T>::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_add (4 samples, 0.03%)core::sync::atomic::atomic_add (4 samples, 0.03%)tokio::sync::mpsc::block::Block<T>::is_final (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::tx_release (2 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_or (2 samples, 0.02%)core::sync::atomic::atomic_or (2 samples, 0.02%)tokio::sync::mpsc::list::Tx<T>::push (54 samples, 0.44%)tokio::sync::mpsc::list::Tx<T>::find_block (29 samples, 0.24%)tokio::sync::mpsc::block::start_index (5 samples, 0.04%)core::sync::atomic::AtomicUsize::fetch_or (17 samples, 0.14%)core::sync::atomic::atomic_or (17 samples, 0.14%)tokio::sync::mpsc::chan::Tx<T,S>::send (85 samples, 0.69%)tokio::sync::mpsc::chan::Chan<T,S>::send (85 samples, 0.69%)tokio::sync::task::atomic_waker::AtomicWaker::wake (30 samples, 0.24%)tokio::sync::task::atomic_waker::AtomicWaker::take_waker (18 samples, 0.15%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (8 samples, 0.06%)core::sync::atomic::AtomicUsize::compare_exchange (12 samples, 0.10%)core::sync::atomic::atomic_compare_exchange (12 samples, 0.10%)core::sync::atomic::AtomicUsize::load (10 samples, 0.08%)core::sync::atomic::atomic_load (10 samples, 0.08%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::send (143 samples, 1.16%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::inc_num_messages (35 samples, 0.28%)tokio::sync::mpsc::chan::Tx<T,S>::semaphore (3 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (3 samples, 0.02%)alloc::sync::Arc<T,A>::inner (3 samples, 0.02%)core::ptr::non_null::NonNull<T>::as_ref (3 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (1,413 samples, 11.47%)<core::pin::Pin<P..<openraft::core::raft_core::RaftCore<C,N,LS,SM> as openraft::runtime::RaftRuntime<C>>::run_command::_{{closure}} (1,412 samples, 11.46%)<openraft::core::..[libc.so.6] (62 samples, 0.50%)__rust_alloc (3 samples, 0.02%)<openraft::core::raft_core::RaftCore<C,N,LS,SM> as openraft::runtime::RaftRuntime<C>>::run_command (184 samples, 1.49%)alloc::boxed::Box<T>::pin (182 samples, 1.48%)alloc::boxed::Box<T>::new (182 samples, 1.48%)alloc::alloc::exchange_malloc (118 samples, 0.96%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (118 samples, 0.96%)alloc::alloc::Global::alloc_impl (118 samples, 0.96%)alloc::alloc::alloc (118 samples, 0.96%)malloc (114 samples, 0.93%)[libc.so.6] (81 samples, 0.66%)[libc.so.6] (23 samples, 0.19%)[libc.so.6] (153 samples, 1.24%)__rdl_dealloc (2 samples, 0.02%)std::sys::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::dealloc (2 samples, 0.02%)__rust_dealloc (3 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (67 samples, 0.54%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (67 samples, 0.54%)alloc::alloc::dealloc (67 samples, 0.54%)cfree (62 samples, 0.50%)[libc.so.6] (55 samples, 0.45%)[libc.so.6] (32 samples, 0.26%)[libc.so.6] (16 samples, 0.13%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<core::option::Option<openraft::engine::command::Command<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (70 samples, 0.57%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<core::option::Option<openraft::engine::command::Command<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>> (70 samples, 0.57%)core::ptr::drop_in_place<<openraft::core::raft_core::RaftCore<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::network::raft_network_impl::DcacheNetwork>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>> as openraft::runtime::RaftRuntime<dcache::DcacheTypeConfig>>::run_command::{{closure}}> (3 samples, 0.02%)openraft::engine::engine_output::EngineOutput<C>::pop_command (35 samples, 0.28%)alloc::collections::vec_deque::VecDeque<T,A>::pop_front (35 samples, 0.28%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_read (30 samples, 0.24%)core::ptr::read (30 samples, 0.24%)[libc.so.6] (30 samples, 0.24%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::process_raft_msg::_{{closure}} (2,207 samples, 17.91%)openraft::core::raft_core::R..openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}} (1,878 samples, 15.24%)openraft::core::raft_co..openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}}::_{{closure}} (1,878 samples, 15.24%)openraft::core::raft_co..tracing_core::metadata::LevelFilter::current (3 samples, 0.02%)core::sync::atomic::AtomicUsize::load (3 samples, 0.02%)core::sync::atomic::atomic_load (3 samples, 0.02%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::search_tree (2 samples, 0.02%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::search_node (2 samples, 0.02%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (2 samples, 0.02%)alloc::collections::btree::map::BTreeMap<K,V,A>::get (4 samples, 0.03%)core::option::Option<T>::as_ref (2 samples, 0.02%)<openraft::core::raft_core::RaftCore<C,N,LS,SM> as openraft::runtime::RaftRuntime<C>>::run_command::_{{closure}} (10 samples, 0.08%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::send (2 samples, 0.02%)tokio::sync::mpsc::chan::Tx<T,S>::send (2 samples, 0.02%)tokio::sync::mpsc::chan::Chan<T,S>::send (2 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (11 samples, 0.09%)<openraft::core::raft_core::RaftCore<C,N,LS,SM> as openraft::runtime::RaftRuntime<C>>::run_command (8 samples, 0.06%)alloc::boxed::Box<T>::pin (8 samples, 0.06%)alloc::boxed::Box<T>::new (8 samples, 0.06%)alloc::alloc::exchange_malloc (7 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (7 samples, 0.06%)alloc::alloc::Global::alloc_impl (7 samples, 0.06%)alloc::alloc::alloc (7 samples, 0.06%)malloc (7 samples, 0.06%)[libc.so.6] (6 samples, 0.05%)[libc.so.6] (3 samples, 0.02%)<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll (2,335 samples, 18.95%)<tracing::instrument::Instrume..openraft::core::raft_core::RaftCore<C,N,LS,SM>::main::_{{closure}} (2,335 samples, 18.95%)openraft::core::raft_core::Raf..<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll (2,335 samples, 18.95%)<tracing::instrument::Instrume..openraft::core::raft_core::RaftCore<C,N,LS,SM>::do_main::_{{closure}} (2,335 samples, 18.95%)openraft::core::raft_core::Raf..openraft::core::raft_core::RaftCore<C,N,LS,SM>::do_main::_{{closure}}::_{{closure}} (2,335 samples, 18.95%)openraft::core::raft_core::Raf..openraft::core::raft_core::RaftCore<C,N,LS,SM>::runtime_loop::_{{closure}} (2,335 samples, 18.95%)openraft::core::raft_core::Raf..openraft::core::raft_core::RaftCore<C,N,LS,SM>::runtime_loop::_{{closure}}::_{{closure}} (2,335 samples, 18.95%)openraft::core::raft_core::Raf..openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}} (29 samples, 0.24%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}}::_{{closure}} (29 samples, 0.24%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (2 samples, 0.02%)core::str::converts::from_utf8 (2 samples, 0.02%)prost::encoding::<impl prost::encoding::sealed::BytesAdapter for alloc::vec::Vec<u8>>::replace_with (4 samples, 0.03%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)<dcache::protobuf::dcache::RaftReply as prost::message::Message>::merge_field (7 samples, 0.06%)prost::encoding::string::merge (7 samples, 0.06%)prost::encoding::bytes::merge_one_copy (5 samples, 0.04%)<tonic::codec::prost::ProstDecoder<U> as tonic::codec::Decoder>::decode (12 samples, 0.10%)prost::message::Message::decode (11 samples, 0.09%)prost::message::Message::merge (11 samples, 0.09%)prost::encoding::decode_key (3 samples, 0.02%)prost::encoding::decode_varint (2 samples, 0.02%)bytes::buf::buf_impl::Buf::get_u32 (2 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (2 samples, 0.02%)bytes::bytes_mut::BytesMut::set_start (2 samples, 0.02%)tonic::codec::decode::Streaming<T>::decode_chunk (20 samples, 0.16%)tonic::codec::decode::StreamingInner::decode_chunk (5 samples, 0.04%)h2::proto::streams::recv::Recv::release_capacity (8 samples, 0.06%)h2::proto::streams::recv::Recv::release_connection_capacity (4 samples, 0.03%)h2::share::FlowControl::release_capacity (10 samples, 0.08%)h2::proto::streams::streams::OpaqueStreamRef::release_capacity (10 samples, 0.08%)<h2::proto::streams::store::Ptr as core::ops::deref::DerefMut>::deref_mut (2 samples, 0.02%)<h2::proto::streams::store::Store as core::ops::index::IndexMut<h2::proto::streams::store::Key>>::index_mut (2 samples, 0.02%)slab::Slab<T>::get_mut (2 samples, 0.02%)h2::proto::streams::recv::Recv::poll_data (4 samples, 0.03%)h2::proto::streams::buffer::Deque::pop_front (4 samples, 0.03%)slab::Slab<T>::remove (2 samples, 0.02%)slab::Slab<T>::try_remove (2 samples, 0.02%)core::mem::replace (2 samples, 0.02%)core::ptr::read (2 samples, 0.02%)h2::share::RecvStream::poll_data (10 samples, 0.08%)h2::proto::streams::streams::OpaqueStreamRef::poll_data (7 samples, 0.06%)<hyper::body::body::Body as http_body::Body>::poll_data (27 samples, 0.22%)hyper::body::body::Body::poll_inner (26 samples, 0.21%)hyper::proto::h2::ping::Recorder::record_data (4 samples, 0.03%)<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::copy_to_bytes (2 samples, 0.02%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_data (33 samples, 0.27%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_data (33 samples, 0.27%)<http_body::combinators::map_data::MapData<B,F> as http_body::Body>::poll_data (32 samples, 0.26%)tonic::codec::decode::Streaming<T>::new::_{{closure}} (3 samples, 0.02%)<tokio_stream::stream_ext::try_next::TryNext<St> as core::future::future::Future>::poll (62 samples, 0.50%)<tokio_stream::stream_ext::next::Next<St> as core::future::future::Future>::poll (62 samples, 0.50%)<&mut S as futures_core::stream::Stream>::poll_next (62 samples, 0.50%)<core::pin::Pin<P> as futures_core::stream::Stream>::poll_next (62 samples, 0.50%)<tonic::codec::decode::Streaming<T> as futures_core::stream::Stream>::poll_next (62 samples, 0.50%)tonic::codec::decode::StreamingInner::poll_data (40 samples, 0.32%)bytes::bytes_mut::shared_v_drop (2 samples, 0.02%)<core::sync::atomic::AtomicPtr<T> as bytes::loom::sync::atomic::AtomicMut<T>>::with_mut (2 samples, 0.02%)core::task::wake::Waker::wake (3 samples, 0.02%)tokio::runtime::task::waker::wake_by_val (3 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (2 samples, 0.02%)h2::proto::streams::counts::Counts::transition_after (6 samples, 0.05%)h2::proto::streams::store::Ptr::remove (6 samples, 0.05%)slab::Slab<T>::remove (2 samples, 0.02%)slab::Slab<T>::try_remove (2 samples, 0.02%)core::mem::replace (2 samples, 0.02%)core::ptr::read (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)h2::proto::streams::counts::Counts::transition (9 samples, 0.07%)h2::proto::streams::streams::drop_stream_ref::_{{closure}} (2 samples, 0.02%)h2::proto::streams::store::Queue<N>::pop (2 samples, 0.02%)core::ptr::drop_in_place<h2::share::FlowControl> (17 samples, 0.14%)core::ptr::drop_in_place<h2::proto::streams::streams::OpaqueStreamRef> (17 samples, 0.14%)<h2::proto::streams::streams::OpaqueStreamRef as core::ops::drop::Drop>::drop (17 samples, 0.14%)h2::proto::streams::streams::drop_stream_ref (16 samples, 0.13%)core::ptr::drop_in_place<tonic::codec::decode::Streaming<dcache::protobuf::dcache::RaftReply>> (22 samples, 0.18%)core::ptr::drop_in_place<tonic::codec::decode::StreamingInner> (22 samples, 0.18%)core::ptr::drop_in_place<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>> (21 samples, 0.17%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn http_body::Body+Error = tonic::status::Status+Data = bytes::bytes::Bytes+core::marker::Send>>> (21 samples, 0.17%)core::ptr::drop_in_place<alloc::boxed::Box<dyn http_body::Body+Error = tonic::status::Status+Data = bytes::bytes::Bytes+core::marker::Send>> (21 samples, 0.17%)core::ptr::drop_in_place<hyper::body::body::Body> (20 samples, 0.16%)core::ptr::drop_in_place<hyper::body::body::Kind> (20 samples, 0.16%)core::ptr::drop_in_place<h2::share::RecvStream> (20 samples, 0.16%)tokio::sync::mpsc::list::Tx<T>::push (4 samples, 0.03%)tokio::sync::mpsc::block::Block<T>::write (2 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::write::_{{closure}} (2 samples, 0.02%)core::ptr::write (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)tokio::sync::mpsc::chan::Tx<T,S>::send (10 samples, 0.08%)tokio::sync::mpsc::chan::Chan<T,S>::send (9 samples, 0.07%)tokio::sync::task::atomic_waker::AtomicWaker::wake (3 samples, 0.02%)tokio::sync::task::atomic_waker::AtomicWaker::take_waker (3 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_or (3 samples, 0.02%)core::sync::atomic::atomic_or (3 samples, 0.02%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::send (12 samples, 0.10%)alloc::sync::Arc<T>::new (2 samples, 0.02%)alloc::boxed::Box<T>::new (2 samples, 0.02%)alloc::alloc::exchange_malloc (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (2 samples, 0.02%)alloc::alloc::Global::alloc_impl (2 samples, 0.02%)alloc::alloc::alloc (2 samples, 0.02%)malloc (2 samples, 0.02%)tokio::loom::std::atomic_usize::AtomicUsize::new (2 samples, 0.02%)tokio::sync::oneshot::channel (6 samples, 0.05%)thread_local::ThreadLocal<T>::get_inner (3 samples, 0.02%)<tracing_subscriber::fmt::Subscriber<N,E,F,W> as tracing_core::subscriber::Subscriber>::current_span (13 samples, 0.11%)<tracing_subscriber::layer::layered::Layered<L,S> as tracing_core::subscriber::Subscriber>::current_span (11 samples, 0.09%)<tracing_subscriber::layer::layered::Layered<L,S> as tracing_core::subscriber::Subscriber>::current_span (11 samples, 0.09%)<tracing_subscriber::registry::sharded::Registry as tracing_core::subscriber::Subscriber>::current_span (11 samples, 0.09%)thread_local::ThreadLocal<T>::get (7 samples, 0.06%)thread_local::thread_id::get (4 samples, 0.03%)std::thread::local::LocalKey<T>::with (4 samples, 0.03%)std::thread::local::LocalKey<T>::try_with (4 samples, 0.03%)thread_local::thread_id::get::_{{closure}} (2 samples, 0.02%)tracing_core::dispatcher::Dispatch::current_span (15 samples, 0.12%)tracing_core::dispatcher::Dispatch::subscriber (2 samples, 0.02%)<T as tonic::client::service::GrpcService<ReqBody>>::call (41 samples, 0.33%)<tonic::transport::channel::Channel as tower_service::Service<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>::call (41 samples, 0.33%)<tower::buffer::service::Buffer<T,Request> as tower_service::Service<Request>>::call (41 samples, 0.33%)tracing::span::Span::current (22 samples, 0.18%)tracing_core::dispatcher::get_default (20 samples, 0.16%)tracing::span::Span::current::_{{closure}} (19 samples, 0.15%)tracing_core::span::Current::into_inner (4 samples, 0.03%)core::ptr::drop_in_place<core::option::Option<alloc::sync::Arc<tokio::sync::oneshot::Inner<core::result::Result<tower::util::either::Either<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>,core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>>,tower::buffer::error::ServiceError>>>>> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::sync::Arc<tokio::sync::oneshot::Inner<core::result::Result<tower::util::either::Either<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>,core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>>,tower::buffer::error::ServiceError>>>> (2 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)alloc::sync::Arc<T,A>::drop_slow (2 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::oneshot::Inner<core::result::Result<tower::util::either::Either<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>,core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>>,tower::buffer::error::ServiceError>>> (2 samples, 0.02%)tokio::io::interest::Interest::is_writable (2 samples, 0.02%)tokio::runtime::context::budget (2 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (2 samples, 0.02%)tokio::runtime::context::budget::_{{closure}} (2 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (2 samples, 0.02%)tokio::runtime::coop::poll_proceed (3 samples, 0.02%)tokio::sync::oneshot::State::is_closed (3 samples, 0.02%)tokio::sync::oneshot::State::load (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)<tokio::sync::oneshot::Receiver<T> as core::future::future::Future>::poll (17 samples, 0.14%)tokio::sync::oneshot::Inner<T>::poll_recv (15 samples, 0.12%)cfree (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>> (4 samples, 0.03%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (4 samples, 0.03%)tokio::runtime::task::harness::Harness<T,S>::dealloc (9 samples, 0.07%)core::mem::drop (8 samples, 0.06%)core::ptr::drop_in_place<alloc::boxed::Box<tokio::runtime::task::core::Cell<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = ()+core::marker::Send>>,alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>>> (8 samples, 0.06%)core::ptr::drop_in_place<tokio::runtime::task::core::Cell<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = ()+core::marker::Send>>,alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>> (8 samples, 0.06%)core::ptr::drop_in_place<tokio::runtime::task::core::Core<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = ()+core::marker::Send>>,alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>> (8 samples, 0.06%)core::ptr::drop_in_place<tokio::runtime::task::core::CoreStage<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = ()+core::marker::Send>>>> (4 samples, 0.03%)core::ptr::drop_in_place<tokio::loom::std::unsafe_cell::UnsafeCell<tokio::runtime::task::core::Stage<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = ()+core::marker::Send>>>>> (4 samples, 0.03%)core::ptr::drop_in_place<core::cell::UnsafeCell<tokio::runtime::task::core::Stage<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = ()+core::marker::Send>>>>> (4 samples, 0.03%)core::ptr::drop_in_place<tokio::runtime::task::core::Stage<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = ()+core::marker::Send>>>> (2 samples, 0.02%)tokio::runtime::task::waker::drop_waker (2 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::drop_reference (2 samples, 0.02%)tokio::runtime::task::state::State::ref_dec (2 samples, 0.02%)alloc::sync::Arc<T,A>::drop_slow (16 samples, 0.13%)core::ptr::drop_in_place<tokio::sync::oneshot::Inner<core::result::Result<http::response::Response<hyper::body::body::Body>,hyper::error::Error>>> (16 samples, 0.13%)<tokio::sync::oneshot::Inner<T> as core::ops::drop::Drop>::drop (16 samples, 0.13%)core::ptr::drop_in_place<core::option::Option<alloc::sync::Arc<tokio::sync::oneshot::Inner<core::result::Result<http::response::Response<hyper::body::body::Body>,hyper::error::Error>>>>> (18 samples, 0.15%)core::ptr::drop_in_place<alloc::sync::Arc<tokio::sync::oneshot::Inner<core::result::Result<http::response::Response<hyper::body::body::Body>,hyper::error::Error>>>> (18 samples, 0.15%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (18 samples, 0.15%)tokio::io::interest::Interest::is_readable (3 samples, 0.02%)tokio::runtime::coop::poll_proceed (4 samples, 0.03%)tokio::runtime::context::budget (3 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (3 samples, 0.02%)tokio::runtime::context::budget::_{{closure}} (3 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (3 samples, 0.02%)core::cell::Cell<T>::set (2 samples, 0.02%)core::cell::Cell<T>::replace (2 samples, 0.02%)core::mem::replace (2 samples, 0.02%)core::ptr::write (2 samples, 0.02%)tokio::sync::oneshot::State::load (3 samples, 0.02%)core::sync::atomic::AtomicUsize::load (3 samples, 0.02%)core::sync::atomic::atomic_load (3 samples, 0.02%)<tokio::sync::oneshot::Receiver<T> as core::future::future::Future>::poll (35 samples, 0.28%)tokio::sync::oneshot::Inner<T>::poll_recv (15 samples, 0.12%)<tower::util::either::Either<A,B> as core::future::future::Future>::poll (39 samples, 0.32%)<tonic::transport::service::reconnect::ResponseFuture<F> as core::future::future::Future>::poll (39 samples, 0.32%)<hyper::client::conn::ResponseFuture as core::future::future::Future>::poll (39 samples, 0.32%)core::task::poll::Poll<T>::map (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<tower::util::either::Either<A,B> as core::future::future::Future>::poll (41 samples, 0.33%)<tonic::transport::service::grpc_timeout::ResponseFuture<F> as core::future::future::Future>::poll (45 samples, 0.37%)<tonic::transport::channel::ResponseFuture as core::future::future::Future>::poll (70 samples, 0.57%)<tower::buffer::future::ResponseFuture<F> as core::future::future::Future>::poll (70 samples, 0.57%)<tower::util::either::Either<A,B> as core::future::future::Future>::poll (53 samples, 0.43%)<core::pin::Pin<P> as core::future::future::Future>::poll (53 samples, 0.43%)<core::pin::Pin<P> as core::future::future::Future>::poll (53 samples, 0.43%)<tonic::transport::service::add_origin::AddOrigin<T> as tower_service::Service<http::request::Request<ReqBody>>>::call::_{{closure}} (52 samples, 0.42%)http::response::Response<T>::map (17 samples, 0.14%)tonic::client::grpc::Grpc<T>::create_response::_{{closure}} (15 samples, 0.12%)tonic::codec::decode::Streaming<T>::new (15 samples, 0.12%)bytes::bytes_mut::BytesMut::with_capacity (15 samples, 0.12%)alloc::vec::Vec<T>::with_capacity (15 samples, 0.12%)alloc::vec::Vec<T,A>::with_capacity_in (15 samples, 0.12%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (15 samples, 0.12%)alloc::raw_vec::RawVec<T,A>::allocate_in (15 samples, 0.12%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (15 samples, 0.12%)alloc::alloc::Global::alloc_impl (15 samples, 0.12%)alloc::alloc::alloc (15 samples, 0.12%)malloc (14 samples, 0.11%)[libc.so.6] (13 samples, 0.11%)[libc.so.6] (5 samples, 0.04%)<&str as http::header::map::as_header_name::Sealed>::find::_{{closure}} (4 samples, 0.03%)http::header::map::HeaderMap<T>::find (4 samples, 0.03%)http::header::map::hash_elem_using (4 samples, 0.03%)<http::header::name::HdrName as core::hash::Hash>::hash (3 samples, 0.02%)<http::header::name::Repr<T> as core::hash::Hash>::hash (3 samples, 0.02%)<http::header::name::MaybeLower as core::hash::Hash>::hash (3 samples, 0.02%)<fnv::FnvHasher as core::hash::Hasher>::write (3 samples, 0.02%)tonic::codec::compression::CompressionEncoding::from_encoding_header (12 samples, 0.10%)http::header::map::HeaderMap<T>::get (10 samples, 0.08%)http::header::map::HeaderMap<T>::get2 (10 samples, 0.08%)<&str as http::header::map::as_header_name::Sealed>::find (10 samples, 0.08%)http::header::name::HdrName::from_bytes (10 samples, 0.08%)http::header::name::parse_hdr (5 samples, 0.04%)http::header::name::StandardHeader::from_bytes (3 samples, 0.02%)tonic::response::Response<T>::from_http (3 samples, 0.02%)tonic::metadata::map::MetadataMap::from_headers (2 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find::_{{closure}} (2 samples, 0.02%)http::header::map::HeaderMap<T>::find (2 samples, 0.02%)tonic::client::grpc::Grpc<T>::create_response (38 samples, 0.31%)tonic::status::Status::from_header_map (5 samples, 0.04%)http::header::map::HeaderMap<T>::get (3 samples, 0.02%)http::header::map::HeaderMap<T>::get2 (3 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find (3 samples, 0.02%)http::header::name::HdrName::from_bytes (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)http::header::map::HeaderMap<T>::insert (9 samples, 0.07%)<http::header::name::HeaderName as http::header::map::into_header_name::Sealed>::insert (9 samples, 0.07%)http::header::map::HeaderMap<T>::insert2 (9 samples, 0.07%)http::header::map::HeaderMap<T>::reserve_one (6 samples, 0.05%)alloc::vec::from_elem (2 samples, 0.02%)<T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (2 samples, 0.02%)alloc::vec::Vec<T,A>::with_capacity_in (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::allocate_in (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (2 samples, 0.02%)alloc::alloc::Global::alloc_impl (2 samples, 0.02%)alloc::alloc::alloc (2 samples, 0.02%)http::header::value::HeaderValue::from_static (5 samples, 0.04%)http::header::value::is_visible_ascii (4 samples, 0.03%)http::uri::Uri::from_parts (3 samples, 0.02%)http::uri::authority::Authority::empty (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<http::header::map::HeaderMap> (2 samples, 0.02%)core::ptr::drop_in_place<http::uri::Uri> (2 samples, 0.02%)http::request::Request<T>::new (4 samples, 0.03%)http::request::Parts::new (4 samples, 0.03%)<http::header::map::HeaderMap<T> as core::default::Default>::default (4 samples, 0.03%)http::header::map::HeaderMap<T>::with_capacity (4 samples, 0.03%)core::iter::traits::iterator::Iterator::for_each (3 samples, 0.02%)core::iter::traits::iterator::Iterator::fold (3 samples, 0.02%)core::iter::traits::iterator::Iterator::for_each::call::_{{closure}} (3 samples, 0.02%)http::header::name::parse_hdr::_{{closure}} (3 samples, 0.02%)http::header::name::parse_hdr (16 samples, 0.13%)http::header::name::StandardHeader::from_bytes (7 samples, 0.06%)tonic::client::grpc::GrpcConfig::prepare_request (61 samples, 0.50%)tonic::request::Request<T>::into_http (39 samples, 0.32%)tonic::metadata::map::MetadataMap::into_sanitized_headers (26 samples, 0.21%)http::header::map::HeaderMap<T>::remove (24 samples, 0.19%)<&str as http::header::map::as_header_name::Sealed>::find (24 samples, 0.19%)http::header::name::HdrName::from_bytes (23 samples, 0.19%)http::header::name::uninit_u8_array (3 samples, 0.02%)core::ops::function::FnOnce::call_once (4 samples, 0.03%)http_body::combinators::box_body::UnsyncBoxBody<D,E>::new (4 samples, 0.03%)alloc::boxed::Box<T>::pin (4 samples, 0.03%)alloc::boxed::Box<T>::new (4 samples, 0.03%)alloc::alloc::exchange_malloc (3 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (3 samples, 0.02%)alloc::alloc::Global::alloc_impl (3 samples, 0.02%)alloc::alloc::alloc (3 samples, 0.02%)malloc (3 samples, 0.02%)tonic::client::grpc::Grpc<T>::streaming::_{{closure}} (222 samples, 1.80%)t..tonic::request::Request<T>::map (11 samples, 0.09%)tonic::client::grpc::Grpc<T>::streaming::_{{closure}}::_{{closure}} (6 samples, 0.05%)tonic::codec::encode::encode_client (6 samples, 0.05%)tonic::codec::encode::EncodedBytes<T,U>::new (6 samples, 0.05%)bytes::bytes_mut::BytesMut::with_capacity (6 samples, 0.05%)alloc::vec::Vec<T>::with_capacity (6 samples, 0.05%)alloc::vec::Vec<T,A>::with_capacity_in (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::allocate_in (6 samples, 0.05%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (6 samples, 0.05%)alloc::alloc::Global::alloc_impl (6 samples, 0.05%)alloc::alloc::alloc (6 samples, 0.05%)malloc (6 samples, 0.05%)[libc.so.6] (5 samples, 0.04%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<h2::proto::streams::streams::Inner>> (2 samples, 0.02%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (2 samples, 0.02%)h2::proto::streams::buffer::Deque::pop_front (3 samples, 0.02%)slab::Slab<T>::remove (3 samples, 0.02%)slab::Slab<T>::try_remove (3 samples, 0.02%)core::mem::replace (2 samples, 0.02%)core::ptr::read (2 samples, 0.02%)tonic::codec::decode::StreamingInner::poll_data (10 samples, 0.08%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_data (10 samples, 0.08%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_data (10 samples, 0.08%)<http_body::combinators::map_data::MapData<B,F> as http_body::Body>::poll_data (9 samples, 0.07%)<hyper::body::body::Body as http_body::Body>::poll_data (8 samples, 0.06%)hyper::body::body::Body::poll_inner (7 samples, 0.06%)h2::share::RecvStream::poll_data (7 samples, 0.06%)h2::proto::streams::streams::OpaqueStreamRef::poll_data (7 samples, 0.06%)h2::proto::streams::recv::Recv::poll_data (5 samples, 0.04%)h2::proto::streams::buffer::Deque::push_front (2 samples, 0.02%)slab::Slab<T>::insert (2 samples, 0.02%)slab::Slab<T>::insert_at (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<http_body::combinators::map_data::MapData<B,F> as http_body::Body>::poll_trailers (6 samples, 0.05%)<hyper::body::body::Body as http_body::Body>::poll_trailers (6 samples, 0.05%)h2::share::RecvStream::poll_trailers (5 samples, 0.04%)h2::proto::streams::streams::OpaqueStreamRef::poll_trailers (5 samples, 0.04%)h2::proto::streams::recv::Recv::poll_trailers (4 samples, 0.03%)h2::proto::streams::buffer::Deque::pop_front (4 samples, 0.03%)slab::Slab<T>::remove (3 samples, 0.02%)slab::Slab<T>::try_remove (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_trailers (8 samples, 0.06%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_trailers (9 samples, 0.07%)core::ptr::drop_in_place<tonic::status::Status> (4 samples, 0.03%)core::ptr::drop_in_place<bytes::bytes::Bytes> (2 samples, 0.02%)<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (2 samples, 0.02%)bytes::bytes::static_drop (2 samples, 0.02%)<alloc::boxed::Box<[T],A> as core::clone::Clone>::clone (2 samples, 0.02%)alloc::vec::Vec<T,A>::into_boxed_slice (2 samples, 0.02%)<http::header::map::Bucket<T> as core::clone::Clone>::clone (2 samples, 0.02%)<http::header::name::HeaderName as core::clone::Clone>::clone (2 samples, 0.02%)<http::header::name::Repr<T> as core::clone::Clone>::clone (2 samples, 0.02%)<http::header::name::Custom as core::clone::Clone>::clone (2 samples, 0.02%)<http::byte_str::ByteStr as core::clone::Clone>::clone (2 samples, 0.02%)<bytes::bytes::Bytes as core::clone::Clone>::clone (2 samples, 0.02%)bytes::bytes::shared_clone (2 samples, 0.02%)<http::header::map::HeaderMap<T> as core::clone::Clone>::clone (7 samples, 0.06%)<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (4 samples, 0.03%)alloc::slice::<impl [T]>::to_vec_in (3 samples, 0.02%)alloc::slice::hack::to_vec (3 samples, 0.02%)<T as alloc::slice::hack::ConvertVec>::to_vec (3 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find::_{{closure}} (4 samples, 0.03%)http::header::map::HeaderMap<T>::find (4 samples, 0.03%)http::header::map::hash_elem_using (4 samples, 0.03%)<http::header::name::HdrName as core::hash::Hash>::hash (4 samples, 0.03%)<http::header::name::Repr<T> as core::hash::Hash>::hash (4 samples, 0.03%)<http::header::name::MaybeLower as core::hash::Hash>::hash (4 samples, 0.03%)<fnv::FnvHasher as core::hash::Hasher>::write (4 samples, 0.03%)core::num::<impl u64>::wrapping_mul (2 samples, 0.02%)core::slice::<impl [T]>::contains (4 samples, 0.03%)<u8 as core::slice::cmp::SliceContains>::slice_contains (4 samples, 0.03%)core::slice::memchr::memchr (4 samples, 0.03%)core::slice::memchr::memchr_aligned (4 samples, 0.03%)http::header::map::HeaderMap<T>::get (14 samples, 0.11%)http::header::map::HeaderMap<T>::get2 (14 samples, 0.11%)<&str as http::header::map::as_header_name::Sealed>::find (14 samples, 0.11%)http::header::name::HdrName::from_bytes (14 samples, 0.11%)http::header::name::parse_hdr (9 samples, 0.07%)http::header::name::StandardHeader::from_bytes (3 samples, 0.02%)<http::header::name::HeaderName as core::cmp::PartialEq<http::header::name::HdrName>>::eq (2 samples, 0.02%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (2 samples, 0.02%)core::slice::cmp::<impl core::cmp::PartialEq<[B]> for [A]>::eq (2 samples, 0.02%)<[A] as core::slice::cmp::SlicePartialEq<B>>::equal (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find::_{{closure}} (4 samples, 0.03%)http::header::map::HeaderMap<T>::find (4 samples, 0.03%)http::header::map::hash_elem_using (2 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find (6 samples, 0.05%)http::header::name::HdrName::from_bytes (6 samples, 0.05%)core::option::Option<T>::map (31 samples, 0.25%)tonic::status::Status::from_header_map::_{{closure}} (29 samples, 0.24%)http::header::map::HeaderMap<T>::remove (7 samples, 0.06%)<http::header::name::HeaderName as core::cmp::PartialEq<http::header::name::HdrName>>::eq (4 samples, 0.03%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (2 samples, 0.02%)core::slice::cmp::<impl core::cmp::PartialEq<[B]> for [A]>::eq (2 samples, 0.02%)<[A] as core::slice::cmp::SlicePartialEq<B>>::equal (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find::_{{closure}} (5 samples, 0.04%)http::header::map::HeaderMap<T>::find (5 samples, 0.04%)tonic::codec::decode::Streaming<T>::trailers::_{{closure}} (69 samples, 0.56%)tonic::codec::decode::Streaming<T>::message::_{{closure}} (69 samples, 0.56%)<core::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (69 samples, 0.56%)tonic::codec::decode::Streaming<T>::message::_{{closure}}::_{{closure}} (69 samples, 0.56%)<tonic::codec::decode::Streaming<T> as futures_core::stream::Stream>::poll_next (69 samples, 0.56%)tonic::codec::decode::StreamingInner::poll_response (56 samples, 0.45%)tonic::status::infer_grpc_status (44 samples, 0.36%)tonic::status::Status::from_header_map (39 samples, 0.32%)http::header::map::HeaderMap<T>::get (8 samples, 0.06%)http::header::map::HeaderMap<T>::get2 (8 samples, 0.06%)<&str as http::header::map::as_header_name::Sealed>::find (8 samples, 0.06%)http::header::name::HdrName::from_bytes (8 samples, 0.06%)<http::header::map::HeaderMap<T> as core::iter::traits::collect::IntoIterator>::into_iter (3 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<[http::header::map::Pos]>> (2 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (2 samples, 0.02%)alloc::alloc::dealloc (2 samples, 0.02%)cfree (2 samples, 0.02%)http::header::map::HeaderMap<T>::reserve_one (2 samples, 0.02%)http::header::map::Pos::resolve (2 samples, 0.02%)http::header::map::Pos::is_some (2 samples, 0.02%)http::header::map::Pos::is_none (2 samples, 0.02%)http::header::map::HeaderMap<T>::entry2 (6 samples, 0.05%)http::header::map::hash_elem_using (2 samples, 0.02%)<http::header::name::HeaderName as core::hash::Hash>::hash (2 samples, 0.02%)<http::header::name::Repr<T> as core::hash::Hash>::hash (2 samples, 0.02%)<tracing_futures::Instrumented<T> as core::future::future::Future>::poll (396 samples, 3.21%)<tr..openraft::replication::ReplicationCore<C,N,LS>::main::_{{closure}} (396 samples, 3.21%)ope..openraft::replication::ReplicationCore<C,N,LS>::main::_{{closure}}::_{{closure}} (396 samples, 3.21%)ope..openraft::replication::ReplicationCore<C,N,LS>::send_log_entries::_{{closure}} (396 samples, 3.21%)ope..openraft::replication::ReplicationCore<C,N,LS>::send_log_entries::_{{closure}}::_{{closure}} (396 samples, 3.21%)ope..<tokio::time::timeout::Timeout<T> as core::future::future::Future>::poll (396 samples, 3.21%)<to..<core::pin::Pin<P> as core::future::future::Future>::poll (396 samples, 3.21%)<co..openraft::network::network::RaftNetwork::append_entries::_{{closure}} (396 samples, 3.21%)ope..<core::pin::Pin<P> as core::future::future::Future>::poll (396 samples, 3.21%)<co..<dcache::network::raft_network_impl::DcacheNetworkConnection as openraft::network::network::RaftNetwork<dcache::DcacheTypeConfig>>::send_append_entries::_{{closure}} (396 samples, 3.21%)<dc..dcache::network::raft_network_impl::DcacheNetwork::send_rpc::_{{closure}} (396 samples, 3.21%)dca..dcache::protobuf::dcache::dcache_service_client::DcacheServiceClient<T>::append_entries::_{{closure}} (396 samples, 3.21%)dca..tonic::client::grpc::Grpc<T>::unary::_{{closure}} (396 samples, 3.21%)ton..tonic::client::grpc::Grpc<T>::client_streaming::_{{closure}} (396 samples, 3.21%)ton..tonic::metadata::map::MetadataMap::merge (21 samples, 0.17%)<http::header::map::HeaderMap<T> as core::iter::traits::collect::Extend<(core::option::Option<http::header::name::HeaderName>,T)>>::extend (18 samples, 0.15%)http::header::map::VacantEntry<T>::insert_entry (3 samples, 0.02%)http::header::map::HeaderMap<T>::insert_phase_two (3 samples, 0.02%)http::header::map::HeaderMap<T>::insert_entry (3 samples, 0.02%)alloc::vec::Vec<T,A>::push (2 samples, 0.02%)core::ptr::write (2 samples, 0.02%)__vdso_clock_gettime (4 samples, 0.03%)[unknown] (4 samples, 0.03%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,Type>::force (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (5 samples, 0.04%)alloc::alloc::dealloc (5 samples, 0.04%)cfree (5 samples, 0.04%)[libc.so.6] (5 samples, 0.04%)[libc.so.6] (5 samples, 0.04%)[libc.so.6] (5 samples, 0.04%)alloc::collections::btree::node::move_to_slice (4 samples, 0.03%)core::intrinsics::copy_nonoverlapping (4 samples, 0.03%)[libc.so.6] (3 samples, 0.02%)alloc::collections::btree::fix::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::fix_node_and_affected_ancestors (11 samples, 0.09%)alloc::collections::btree::fix::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::fix_node_through_parent (11 samples, 0.09%)alloc::collections::btree::node::BalancingContext<K,V>::merge_tracking_parent (11 samples, 0.09%)alloc::collections::btree::node::BalancingContext<K,V>::do_merge (11 samples, 0.09%)alloc::collections::btree::node::slice_remove (2 samples, 0.02%)core::intrinsics::copy (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (11 samples, 0.09%)alloc::alloc::dealloc (11 samples, 0.09%)cfree (9 samples, 0.07%)[libc.so.6] (9 samples, 0.07%)[libc.so.6] (7 samples, 0.06%)[libc.so.6] (6 samples, 0.05%)[libc.so.6] (2 samples, 0.02%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>::correct_childrens_parent_links (2 samples, 0.02%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>,alloc::collections::btree::node::marker::Edge>::correct_parent_link (2 samples, 0.02%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>::set_parent_link (2 samples, 0.02%)alloc::collections::btree::node::move_to_slice (42 samples, 0.34%)core::intrinsics::copy_nonoverlapping (42 samples, 0.34%)[libc.so.6] (42 samples, 0.34%)core::intrinsics::copy (4 samples, 0.03%)[libc.so.6] (4 samples, 0.03%)alloc::collections::btree::node::BalancingContext<K,V>::merge_tracking_child_edge (60 samples, 0.49%)alloc::collections::btree::node::BalancingContext<K,V>::merge_tracking_child (60 samples, 0.49%)alloc::collections::btree::node::BalancingContext<K,V>::do_merge (60 samples, 0.49%)alloc::collections::btree::node::slice_remove (5 samples, 0.04%)core::intrinsics::copy (20 samples, 0.16%)[libc.so.6] (18 samples, 0.15%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>::remove (25 samples, 0.20%)alloc::collections::btree::node::slice_remove (23 samples, 0.19%)core::ptr::mut_ptr::<impl *mut T>::add (2 samples, 0.02%)alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (150 samples, 1.22%)alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_kv (150 samples, 1.22%)alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (109 samples, 0.88%)alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (105 samples, 0.85%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::search_tree (9 samples, 0.07%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::search_node (9 samples, 0.07%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (9 samples, 0.07%)alloc::collections::btree::map::BTreeMap<K,V,A>::remove_entry (163 samples, 1.32%)alloc::collections::btree::map::BTreeMap<K,V,A>::remove (166 samples, 1.35%)core::option::Option<T>::map (3 samples, 0.02%)cfree (26 samples, 0.21%)[libc.so.6] (24 samples, 0.19%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>>::next_kv (15 samples, 0.12%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,NodeType>,alloc::collections::btree::node::marker::Edge>::right_kv (15 samples, 0.12%)<alloc::collections::btree::map::Range<K,V> as core::iter::traits::iterator::Iterator>::next (23 samples, 0.19%)alloc::collections::btree::navigate::LeafRange<alloc::collections::btree::node::marker::Immut,K,V>::next_checked (23 samples, 0.19%)alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (23 samples, 0.19%)alloc::collections::btree::mem::replace (23 samples, 0.19%)alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked::_{{closure}} (23 samples, 0.19%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::next_leaf_edge (8 samples, 0.06%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::first_leaf_edge (8 samples, 0.06%)core::iter::traits::iterator::Iterator::collect (32 samples, 0.26%)<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (32 samples, 0.26%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (32 samples, 0.26%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (32 samples, 0.26%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (32 samples, 0.26%)alloc::vec::Vec<T,A>::extend_desugared (32 samples, 0.26%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (24 samples, 0.19%)core::ptr::drop_in_place<alloc::vec::into_iter::IntoIter<u64>> (22 samples, 0.18%)<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop (22 samples, 0.18%)core::ptr::drop_in_place<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<u64,alloc::alloc::Global>> (22 samples, 0.18%)<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<T,A> as core::ops::drop::Drop>::drop (22 samples, 0.18%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u64>> (22 samples, 0.18%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (22 samples, 0.18%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (22 samples, 0.18%)alloc::alloc::dealloc (22 samples, 0.18%)cfree (22 samples, 0.18%)[libc.so.6] (22 samples, 0.18%)[libc.so.6] (22 samples, 0.18%)[libc.so.6] (22 samples, 0.18%)[libc.so.6] (12 samples, 0.10%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::process_notify::_{{closure}} (255 samples, 2.07%)o..openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}} (255 samples, 2.07%)o..openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}}::_{{closure}} (255 samples, 2.07%)o..<core::pin::Pin<P> as core::future::future::Future>::poll (255 samples, 2.07%)<..<openraft::core::raft_core::RaftCore<C,N,LS,SM> as openraft::runtime::RaftRuntime<C>>::run_command::_{{closure}} (255 samples, 2.07%)<..<core::pin::Pin<P> as core::future::future::Future>::poll (255 samples, 2.07%)<..<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::v2::RaftLogStorage<C>>::purge::_{{closure}} (255 samples, 2.07%)<..<core::pin::Pin<P> as core::future::future::Future>::poll (255 samples, 2.07%)<..dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::purge_logs_upto::_{{closure}} (255 samples, 2.07%)d..dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::purge_logs_upto::_{{closure}}::_{{closure}} (255 samples, 2.07%)d..core::ptr::drop_in_place<core::option::Option<openraft::entry::Entry<dcache::DcacheTypeConfig>>> (9 samples, 0.07%)core::ptr::drop_in_place<openraft::entry::Entry<dcache::DcacheTypeConfig>> (5 samples, 0.04%)core::ptr::drop_in_place<openraft::entry::payload::EntryPayload<dcache::DcacheTypeConfig>> (5 samples, 0.04%)core::ptr::drop_in_place<dcache::store::DcacheRequest> (5 samples, 0.04%)[libc.so.6] (45 samples, 0.37%)core::ptr::drop_in_place<dcache::store::<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::append_to_log<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>>::{{closure}}::{{closure}}> (6 samples, 0.05%)core::ptr::drop_in_place<tracing::span::Span> (5 samples, 0.04%)<tracing::span::Span as core::ops::drop::Drop>::drop (3 samples, 0.02%)<alloc::vec::Vec<T,A> as core::iter::traits::collect::IntoIterator>::into_iter (2 samples, 0.02%)core::ptr::mut_ptr::<impl *mut T>::add (2 samples, 0.02%)[libc.so.6] (11 samples, 0.09%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::Internal>,alloc::collections::btree::node::marker::Edge>::descend (3 samples, 0.02%)core::mem::maybe_uninit::MaybeUninit<T>::assume_init_read (3 samples, 0.02%)core::ptr::const_ptr::<impl *const T>::read (3 samples, 0.02%)core::ptr::read (3 samples, 0.02%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,Type>::force (2 samples, 0.02%)alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>::force (2 samples, 0.02%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.03%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.03%)alloc::collections::btree::map::BTreeMap<K,V,A>::entry (89 samples, 0.72%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::search_tree (89 samples, 0.72%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::search_node (84 samples, 0.68%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (84 samples, 0.68%)core::cmp::impls::<impl core::cmp::Ord for u64>::cmp (27 samples, 0.22%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>::correct_childrens_parent_links (2 samples, 0.02%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>,alloc::collections::btree::node::marker::Edge>::correct_parent_link (2 samples, 0.02%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>::set_parent_link (2 samples, 0.02%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>,alloc::collections::btree::node::marker::Edge>::insert_fit (7 samples, 0.06%)alloc::collections::btree::node::slice_insert (5 samples, 0.04%)core::mem::maybe_uninit::MaybeUninit<T>::write (5 samples, 0.04%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,NodeType>,alloc::collections::btree::node::marker::KV>::split_leaf_data (2 samples, 0.02%)alloc::collections::btree::node::InternalNode<K,V>::new (4 samples, 0.03%)alloc::boxed::Box<T,A>::new_uninit_in (4 samples, 0.03%)alloc::boxed::Box<T,A>::try_new_uninit_in (4 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (4 samples, 0.03%)alloc::alloc::Global::alloc_impl (4 samples, 0.03%)alloc::alloc::alloc (4 samples, 0.03%)malloc (4 samples, 0.03%)[libc.so.6] (4 samples, 0.03%)[libc.so.6] (2 samples, 0.02%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>,alloc::collections::btree::node::marker::Edge>::insert (18 samples, 0.15%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>,alloc::collections::btree::node::marker::KV>::split (10 samples, 0.08%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Owned,K,V,alloc::collections::btree::node::marker::Internal>::from_new_internal (2 samples, 0.02%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>::correct_all_childrens_parent_links (2 samples, 0.02%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Internal>::correct_childrens_parent_links (2 samples, 0.02%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_fit (23 samples, 0.19%)alloc::collections::btree::node::slice_insert (14 samples, 0.11%)core::mem::maybe_uninit::MaybeUninit<T>::write (14 samples, 0.11%)alloc::collections::btree::node::move_to_slice (3 samples, 0.02%)core::intrinsics::copy_nonoverlapping (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,NodeType>,alloc::collections::btree::node::marker::KV>::split_leaf_data (14 samples, 0.11%)core::mem::maybe_uninit::MaybeUninit<T>::assume_init_read (11 samples, 0.09%)core::ptr::const_ptr::<impl *const T>::read (11 samples, 0.09%)core::ptr::read (11 samples, 0.09%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>::split (51 samples, 0.41%)alloc::collections::btree::node::LeafNode<K,V>::new (37 samples, 0.30%)alloc::boxed::Box<T,A>::new_uninit_in (37 samples, 0.30%)alloc::boxed::Box<T,A>::try_new_uninit_in (37 samples, 0.30%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (37 samples, 0.30%)alloc::alloc::Global::alloc_impl (37 samples, 0.30%)alloc::alloc::alloc (37 samples, 0.30%)malloc (37 samples, 0.30%)[libc.so.6] (35 samples, 0.28%)[libc.so.6] (6 samples, 0.05%)alloc::collections::btree::map::BTreeMap<K,V,A>::insert (226 samples, 1.83%)a..alloc::collections::btree::map::entry::VacantEntry<K,V,A>::insert (125 samples, 1.01%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert_recursing (107 samples, 0.87%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::Edge>::insert (78 samples, 0.63%)alloc::collections::btree::node::splitpoint (2 samples, 0.02%)<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::ptr::drop_in_place<alloc::vec::into_iter::IntoIter<openraft::entry::Entry<dcache::DcacheTypeConfig>>> (20 samples, 0.16%)cfree (17 samples, 0.14%)[libc.so.6] (11 samples, 0.09%)core::mem::drop (7 samples, 0.06%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::sync::batch_semaphore::Waitlist>> (7 samples, 0.06%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::sync::batch_semaphore::Waitlist>> (7 samples, 0.06%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (7 samples, 0.06%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (7 samples, 0.06%)tokio::sync::batch_semaphore::Semaphore::add_permits_locked (26 samples, 0.21%)core::ptr::drop_in_place<tokio::sync::rwlock::write_guard::RwLockWriteGuard<alloc::collections::btree::map::BTreeMap<u64,openraft::entry::Entry<dcache::DcacheTypeConfig>>>> (35 samples, 0.28%)<tokio::sync::rwlock::write_guard::RwLockWriteGuard<T> as core::ops::drop::Drop>::drop (35 samples, 0.28%)tokio::sync::batch_semaphore::Semaphore::release (9 samples, 0.07%)tokio::loom::std::parking_lot::Mutex<T>::lock (6 samples, 0.05%)lock_api::mutex::Mutex<R,T>::lock (6 samples, 0.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (6 samples, 0.05%)<F as core::future::into_future::IntoFuture>::into_future (15 samples, 0.12%)tokio::runtime::coop::poll_proceed (2 samples, 0.02%)tokio::runtime::context::budget (2 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (2 samples, 0.02%)tokio::runtime::context::budget::_{{closure}} (2 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (2 samples, 0.02%)tokio::runtime::coop::Budget::decrement (2 samples, 0.02%)<tokio::sync::batch_semaphore::Acquire as core::future::future::Future>::poll (17 samples, 0.14%)tokio::sync::batch_semaphore::Semaphore::poll_acquire (6 samples, 0.05%)core::sync::atomic::AtomicUsize::compare_exchange (5 samples, 0.04%)core::sync::atomic::atomic_compare_exchange (5 samples, 0.04%)core::ptr::drop_in_place<tokio::sync::batch_semaphore::Acquire> (2 samples, 0.02%)<tokio::sync::batch_semaphore::Acquire as core::ops::drop::Drop>::drop (2 samples, 0.02%)dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::append_to_log::_{{closure}}::_{{closure}} (408 samples, 3.31%)dca..tokio::sync::rwlock::RwLock<T>::write::_{{closure}} (81 samples, 0.66%)tokio::sync::rwlock::RwLock<T>::write::_{{closure}}::_{{closure}} (50 samples, 0.41%)tokio::sync::batch_semaphore::Semaphore::acquire (12 samples, 0.10%)tokio::sync::batch_semaphore::Acquire::new (12 samples, 0.10%)<core::pin::Pin<P> as core::future::future::Future>::poll (493 samples, 4.00%)<cor..dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::append_to_log::_{{closure}} (493 samples, 4.00%)dcac..tracing::__macro_support::__disabled_span (3 samples, 0.02%)tracing::span::Span::new_disabled (3 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (6 samples, 0.05%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (6 samples, 0.05%)alloc::alloc::dealloc (6 samples, 0.05%)cfree (6 samples, 0.05%)[libc.so.6] (4 samples, 0.03%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (8 samples, 0.06%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<(),openraft::storage_error::StorageError<u64>>+core::marker::Send>> (8 samples, 0.06%)core::ptr::drop_in_place<dcache::store::<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::append_to_log<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>>::{{closure}}> (2 samples, 0.02%)core::mem::drop (3 samples, 0.02%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::sync::batch_semaphore::Waitlist>> (3 samples, 0.02%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::sync::batch_semaphore::Waitlist>> (3 samples, 0.02%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (3 samples, 0.02%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (3 samples, 0.02%)tokio::util::wake_list::WakeList::new (3 samples, 0.02%)tokio::sync::batch_semaphore::Semaphore::add_permits_locked (13 samples, 0.11%)core::ptr::drop_in_place<tokio::sync::rwlock::write_guard::RwLockWriteGuard<alloc::sync::Arc<dcache::store::DcacheStore>>> (14 samples, 0.11%)<tokio::sync::rwlock::write_guard::RwLockWriteGuard<T> as core::ops::drop::Drop>::drop (14 samples, 0.11%)dcache::store::<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::append_to_log (6 samples, 0.05%)alloc::boxed::Box<T>::pin (6 samples, 0.05%)alloc::boxed::Box<T>::new (6 samples, 0.05%)alloc::alloc::exchange_malloc (6 samples, 0.05%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (6 samples, 0.05%)alloc::alloc::Global::alloc_impl (6 samples, 0.05%)alloc::alloc::alloc (6 samples, 0.05%)malloc (6 samples, 0.05%)<F as core::future::into_future::IntoFuture>::into_future (6 samples, 0.05%)<tokio::sync::batch_semaphore::Acquire as core::future::future::Future>::poll (9 samples, 0.07%)tokio::sync::batch_semaphore::Semaphore::poll_acquire (6 samples, 0.05%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::batch_semaphore::Acquire> (3 samples, 0.02%)<tokio::sync::batch_semaphore::Acquire as core::ops::drop::Drop>::drop (2 samples, 0.02%)openraft::storage::adapter::Adaptor<C,S>::storage_mut::_{{closure}} (54 samples, 0.44%)tokio::sync::rwlock::RwLock<T>::write::_{{closure}} (48 samples, 0.39%)tokio::sync::rwlock::RwLock<T>::write::_{{closure}}::_{{closure}} (43 samples, 0.35%)tokio::sync::batch_semaphore::Semaphore::acquire (19 samples, 0.15%)tokio::sync::batch_semaphore::Acquire::new (18 samples, 0.15%)core::option::Option<T>::unwrap (3 samples, 0.02%)core::ptr::drop_in_place<alloc::sync::Arc<tokio::sync::oneshot::Inner<core::result::Result<core::option::Option<openraft::log_id::LogId<u64>>,std::io::error::Error>>>> (2 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::oneshot::Sender<core::result::Result<core::option::Option<openraft::log_id::LogId<u64>>,std::io::error::Error>>> (3 samples, 0.02%)<tokio::sync::oneshot::Sender<T> as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::option::Option<T>::as_ref (2 samples, 0.02%)tokio::io::interest::Interest::is_readable (2 samples, 0.02%)tokio::sync::oneshot::State::is_closed (6 samples, 0.05%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::append_to_log::_{{closure}} (626 samples, 5.08%)openra..openraft::core::raft_core::RaftCore<C,N,LS,SM>::append_to_log::_{{closure}}::_{{closure}} (626 samples, 5.08%)openra..<core::pin::Pin<P> as core::future::future::Future>::poll (626 samples, 5.08%)<core:..<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::v2::RaftLogStorage<C>>::append::_{{closure}} (626 samples, 5.08%)<openr..openraft::storage::callback::LogFlushed<NID>::log_io_completed (51 samples, 0.41%)tokio::sync::oneshot::Sender<T>::send (40 samples, 0.32%)tokio::sync::oneshot::Inner<T>::complete (30 samples, 0.24%)tokio::sync::oneshot::State::set_complete (16 samples, 0.13%)core::sync::atomic::AtomicUsize::load (7 samples, 0.06%)core::sync::atomic::atomic_load (7 samples, 0.06%)[libc.so.6] (6 samples, 0.05%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::Internal>,alloc::collections::btree::node::marker::Edge>::descend (5 samples, 0.04%)core::mem::maybe_uninit::MaybeUninit<T>::assume_init_read (5 samples, 0.04%)core::ptr::const_ptr::<impl *const T>::read (5 samples, 0.04%)core::ptr::read (5 samples, 0.04%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (18 samples, 0.15%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (18 samples, 0.15%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_lower_bound_index (78 samples, 0.63%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (76 samples, 0.62%)core::cmp::impls::<impl core::cmp::Ord for u64>::cmp (24 samples, 0.19%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (5 samples, 0.04%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (5 samples, 0.04%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,Type>::keys (2 samples, 0.02%)alloc::collections::btree::map::BTreeMap<K,V,A>::range (111 samples, 0.90%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (106 samples, 0.86%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::find_leaf_edges_spanning_range (106 samples, 0.86%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::search_tree_for_bifurcation (106 samples, 0.86%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_upper_bound_index (18 samples, 0.15%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (13 samples, 0.11%)<alloc::collections::btree::map::Range<K,V> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (4 samples, 0.03%)alloc::vec::Vec<T,A>::extend_desugared (4 samples, 0.03%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.03%)alloc::collections::btree::mem::replace (2 samples, 0.02%)<alloc::collections::btree::map::Range<K,V> as core::iter::traits::iterator::Iterator>::next (10 samples, 0.08%)alloc::collections::btree::navigate::LeafRange<alloc::collections::btree::node::marker::Immut,K,V>::next_checked (8 samples, 0.06%)alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (8 samples, 0.06%)alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::is_empty (5 samples, 0.04%)<core::option::Option<T> as core::cmp::PartialEq>::eq (5 samples, 0.04%)<T as core::option::SpecOptionPartialEq>::eq (2 samples, 0.02%)__rust_alloc (3 samples, 0.02%)alloc::vec::Vec<T,A>::with_capacity_in (32 samples, 0.26%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (32 samples, 0.26%)alloc::raw_vec::RawVec<T,A>::allocate_in (32 samples, 0.26%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (32 samples, 0.26%)alloc::alloc::Global::alloc_impl (32 samples, 0.26%)alloc::alloc::alloc (32 samples, 0.26%)malloc (28 samples, 0.23%)[libc.so.6] (10 samples, 0.08%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (154 samples, 1.25%)core::option::Option<T>::map (143 samples, 1.16%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (130 samples, 1.06%)dcache::store::_<impl openraft::storage::RaftLogReader<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::try_get_log_entries::_{{closure}}::_{{closure}} (130 samples, 1.06%)<openraft::entry::Entry<C> as core::clone::Clone>::clone (130 samples, 1.06%)<openraft::entry::payload::EntryPayload<C> as core::clone::Clone>::clone (126 samples, 1.02%)<dcache::store::DcacheRequest as core::clone::Clone>::clone (80 samples, 0.65%)<alloc::string::String as core::clone::Clone>::clone (79 samples, 0.64%)<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (76 samples, 0.62%)alloc::slice::<impl [T]>::to_vec_in (76 samples, 0.62%)alloc::slice::hack::to_vec (76 samples, 0.62%)<T as alloc::slice::hack::ConvertVec>::to_vec (76 samples, 0.62%)core::ptr::const_ptr::<impl *const T>::copy_to_nonoverlapping (44 samples, 0.36%)core::intrinsics::copy_nonoverlapping (44 samples, 0.36%)[libc.so.6] (44 samples, 0.36%)alloc::vec::Vec<T>::with_capacity (17 samples, 0.14%)alloc::vec::Vec<T,A>::with_capacity_in (17 samples, 0.14%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (17 samples, 0.14%)alloc::raw_vec::RawVec<T,A>::allocate_in (17 samples, 0.14%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (17 samples, 0.14%)alloc::alloc::Global::alloc_impl (17 samples, 0.14%)alloc::alloc::alloc (17 samples, 0.14%)malloc (16 samples, 0.13%)[libc.so.6] (2 samples, 0.02%)core::iter::traits::iterator::Iterator::collect (210 samples, 1.70%)<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (210 samples, 1.70%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (210 samples, 1.70%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (207 samples, 1.68%)core::ptr::write (8 samples, 0.06%)core::iter::traits::iterator::Iterator::map (12 samples, 0.10%)core::iter::adapters::map::Map<I,F>::new (12 samples, 0.10%)core::mem::drop (7 samples, 0.06%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::sync::batch_semaphore::Waitlist>> (7 samples, 0.06%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::sync::batch_semaphore::Waitlist>> (7 samples, 0.06%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (7 samples, 0.06%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (7 samples, 0.06%)tokio::sync::batch_semaphore::Semaphore::add_permits_locked (11 samples, 0.09%)tokio::util::wake_list::WakeList::wake_all (2 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::rwlock::read_guard::RwLockReadGuard<alloc::collections::btree::map::BTreeMap<u64,openraft::entry::Entry<dcache::DcacheTypeConfig>>>> (19 samples, 0.15%)<tokio::sync::rwlock::read_guard::RwLockReadGuard<T> as core::ops::drop::Drop>::drop (19 samples, 0.15%)tokio::sync::batch_semaphore::Semaphore::release (8 samples, 0.06%)tokio::loom::std::parking_lot::Mutex<T>::lock (5 samples, 0.04%)lock_api::mutex::Mutex<R,T>::lock (5 samples, 0.04%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (5 samples, 0.04%)<F as core::future::into_future::IntoFuture>::into_future (13 samples, 0.11%)tokio::runtime::coop::poll_proceed (2 samples, 0.02%)tokio::runtime::context::budget (2 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (2 samples, 0.02%)tokio::runtime::context::budget::_{{closure}} (2 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (2 samples, 0.02%)tokio::runtime::coop::Budget::decrement (2 samples, 0.02%)<tokio::sync::batch_semaphore::Acquire as core::future::future::Future>::poll (17 samples, 0.14%)tokio::sync::batch_semaphore::Semaphore::poll_acquire (9 samples, 0.07%)core::sync::atomic::AtomicUsize::compare_exchange (8 samples, 0.06%)core::sync::atomic::atomic_compare_exchange (8 samples, 0.06%)core::ptr::drop_in_place<tokio::sync::batch_semaphore::Acquire> (4 samples, 0.03%)<tokio::sync::batch_semaphore::Acquire as core::ops::drop::Drop>::drop (3 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (474 samples, 3.85%)<cor..dcache::store::_<impl openraft::storage::RaftLogReader<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::try_get_log_entries::_{{closure}} (474 samples, 3.85%)dcac..tokio::sync::rwlock::RwLock<T>::read::_{{closure}} (82 samples, 0.67%)tokio::sync::rwlock::RwLock<T>::read::_{{closure}}::_{{closure}} (65 samples, 0.53%)tokio::sync::batch_semaphore::Semaphore::acquire (29 samples, 0.24%)tokio::sync::batch_semaphore::Acquire::new (29 samples, 0.24%)tokio::sync::batch_semaphore::Waiter::new (3 samples, 0.02%)[libc.so.6] (26 samples, 0.21%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (5 samples, 0.04%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (5 samples, 0.04%)alloc::alloc::dealloc (5 samples, 0.04%)cfree (4 samples, 0.03%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (7 samples, 0.06%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>> (7 samples, 0.06%)core::ptr::drop_in_place<dcache::store::<impl openraft::storage::RaftLogReader<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::try_get_log_entries<core::ops::range::Range<u64>>::{{closure}}> (2 samples, 0.02%)core::mem::drop (10 samples, 0.08%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::sync::batch_semaphore::Waitlist>> (10 samples, 0.08%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::sync::batch_semaphore::Waitlist>> (10 samples, 0.08%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (10 samples, 0.08%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (10 samples, 0.08%)tokio::sync::batch_semaphore::Semaphore::add_permits_locked (16 samples, 0.13%)core::ptr::drop_in_place<tokio::sync::rwlock::write_guard::RwLockWriteGuard<alloc::sync::Arc<dcache::store::DcacheStore>>> (21 samples, 0.17%)<tokio::sync::rwlock::write_guard::RwLockWriteGuard<T> as core::ops::drop::Drop>::drop (21 samples, 0.17%)tokio::sync::batch_semaphore::Semaphore::release (5 samples, 0.04%)tokio::loom::std::parking_lot::Mutex<T>::lock (5 samples, 0.04%)lock_api::mutex::Mutex<R,T>::lock (5 samples, 0.04%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (5 samples, 0.04%)[libc.so.6] (14 samples, 0.11%)dcache::store::<impl openraft::storage::RaftLogReader<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::try_get_log_entries (23 samples, 0.19%)alloc::boxed::Box<T>::pin (23 samples, 0.19%)alloc::boxed::Box<T>::new (23 samples, 0.19%)alloc::alloc::exchange_malloc (9 samples, 0.07%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (9 samples, 0.07%)alloc::alloc::Global::alloc_impl (9 samples, 0.07%)alloc::alloc::alloc (9 samples, 0.07%)malloc (5 samples, 0.04%)<F as core::future::into_future::IntoFuture>::into_future (18 samples, 0.15%)core::sync::atomic::AtomicUsize::compare_exchange (6 samples, 0.05%)core::sync::atomic::atomic_compare_exchange (6 samples, 0.05%)<tokio::sync::batch_semaphore::Acquire as core::future::future::Future>::poll (13 samples, 0.11%)tokio::sync::batch_semaphore::Semaphore::poll_acquire (8 samples, 0.06%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::batch_semaphore::Acquire> (4 samples, 0.03%)<tokio::sync::batch_semaphore::Acquire as core::ops::drop::Drop>::drop (4 samples, 0.03%)<core::pin::Pin<P> as core::future::future::Future>::poll (648 samples, 5.26%)<core:..<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::RaftLogReader<C>>::try_get_log_entries::_{{closure}} (648 samples, 5.26%)<openr..openraft::storage::adapter::Adaptor<C,S>::storage_mut::_{{closure}} (66 samples, 0.54%)tokio::sync::rwlock::RwLock<T>::write::_{{closure}} (62 samples, 0.50%)tokio::sync::rwlock::RwLock<T>::write::_{{closure}}::_{{closure}} (59 samples, 0.48%)tokio::sync::batch_semaphore::Semaphore::acquire (17 samples, 0.14%)tokio::sync::batch_semaphore::Acquire::new (17 samples, 0.14%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::apply_to_state_machine::_{{closure}} (649 samples, 5.27%)openra..openraft::core::raft_core::RaftCore<C,N,LS,SM>::apply_to_state_machine::_{{closure}}::_{{closure}} (649 samples, 5.27%)openra..<core::pin::Pin<P> as core::future::future::Future>::poll (649 samples, 5.27%)<core:..openraft::storage::log_store_ext::RaftLogReaderExt::get_log_entries::_{{closure}} (649 samples, 5.27%)openra..alloc::vec::Vec<T,A>::len (4 samples, 0.03%)<openraft::quorum::joint::Joint<ID,QS,alloc::vec::Vec<QS>> as openraft::quorum::quorum_set::QuorumSet<ID>>::is_quorum (15 samples, 0.12%)openraft::quorum::quorum_set_impl::<impl openraft::quorum::quorum_set::QuorumSet<ID> for alloc::vec::Vec<ID>>::is_quorum (15 samples, 0.12%)core::slice::<impl [T]>::contains (10 samples, 0.08%)<T as core::slice::cmp::SliceContains>::slice_contains (10 samples, 0.08%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::any (10 samples, 0.08%)<T as core::slice::cmp::SliceContains>::slice_contains::_{{closure}} (10 samples, 0.08%)core::cmp::impls::<impl core::cmp::PartialEq for u64>::eq (10 samples, 0.08%)core::cmp::PartialOrd::le (5 samples, 0.04%)<core::option::Option<T> as core::cmp::PartialOrd>::partial_cmp (5 samples, 0.04%)<openraft::log_id::LogId<NID> as core::cmp::PartialOrd>::partial_cmp (2 samples, 0.02%)core::cmp::impls::<impl core::cmp::PartialOrd<&B> for &A>::gt (3 samples, 0.02%)core::cmp::PartialOrd::gt (3 samples, 0.02%)<core::option::Option<T> as core::cmp::PartialOrd>::partial_cmp (3 samples, 0.02%)<openraft::log_id::LogId<NID> as core::cmp::PartialOrd>::partial_cmp (3 samples, 0.02%)<openraft::vote::leader_id::leader_id_std::CommittedLeaderId<NID> as core::cmp::PartialOrd>::partial_cmp (2 samples, 0.02%)core::cmp::impls::<impl core::cmp::PartialOrd for u64>::partial_cmp (2 samples, 0.02%)core::cmp::impls::<impl core::cmp::Ord for u64>::cmp (2 samples, 0.02%)core::cmp::impls::<impl core::cmp::PartialOrd<&B> for &A>::le (6 samples, 0.05%)core::cmp::PartialOrd::le (6 samples, 0.05%)<core::option::Option<T> as core::cmp::PartialOrd>::partial_cmp (5 samples, 0.04%)<core::option::Option<openraft::log_id::LogId<NID>> as openraft::log_id::log_id_option_ext::LogIdOptionExt>::next_index (8 samples, 0.06%)openraft::progress::inflight::Inflight<NID>::assert_my_id (2 samples, 0.02%)openraft::progress::inflight::Inflight<NID>::ack (14 samples, 0.11%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_matching::_{{closure}} (35 samples, 0.28%)openraft::progress::entry::ProgressEntry<NID>::update_matching (33 samples, 0.27%)<openraft::progress::VecProgress<ID,V,P,QS> as openraft::progress::Progress<ID,V,P,QS>>::update_with (78 samples, 0.63%)openraft::progress::VecProgress<ID,V,P,QS>::move_up (2 samples, 0.02%)<core::iter::adapters::rev::Rev<I> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)core::iter::range::<impl core::iter::traits::double_ended::DoubleEndedIterator for core::ops::range::Range<A>>::next_back (2 samples, 0.02%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next_back (2 samples, 0.02%)core::cmp::impls::<impl core::cmp::PartialOrd for usize>::lt (2 samples, 0.02%)core::option::Option<&T>::copied (3 samples, 0.02%)openraft::config::config::SnapshotPolicy::should_snapshot (2 samples, 0.02%)<core::option::Option<&openraft::log_id::LogId<NID>> as openraft::log_id::log_id_option_ext::LogIdOptionExt>::next_index (2 samples, 0.02%)[libc.so.6] (36 samples, 0.29%)alloc::collections::vec_deque::VecDeque<T,A>::buffer_write (63 samples, 0.51%)core::ptr::write (63 samples, 0.51%)[libc.so.6] (63 samples, 0.51%)openraft::engine::engine_output::EngineOutput<C>::push_command (106 samples, 0.86%)alloc::collections::vec_deque::VecDeque<T,A>::push_back (65 samples, 0.53%)alloc::collections::vec_deque::VecDeque<T,A>::to_physical_idx (2 samples, 0.02%)alloc::collections::vec_deque::VecDeque<T,A>::wrap_add (2 samples, 0.02%)alloc::collections::vec_deque::wrap_index (2 samples, 0.02%)core::cmp::PartialOrd::gt (8 samples, 0.06%)<core::option::Option<T> as core::cmp::PartialOrd>::partial_cmp (8 samples, 0.06%)core::cmp::impls::<impl core::cmp::PartialOrd<&B> for &A>::partial_cmp (6 samples, 0.05%)<openraft::log_id::LogId<NID> as core::cmp::PartialOrd>::partial_cmp (5 samples, 0.04%)<openraft::vote::leader_id::leader_id_std::CommittedLeaderId<NID> as core::cmp::PartialOrd>::partial_cmp (4 samples, 0.03%)core::cmp::impls::<impl core::cmp::PartialOrd for u64>::partial_cmp (4 samples, 0.03%)core::cmp::impls::<impl core::cmp::Ord for u64>::cmp (4 samples, 0.03%)core::option::Option<T>::as_ref (12 samples, 0.10%)core::cmp::impls::<impl core::cmp::PartialOrd<&B> for &A>::ge (18 samples, 0.15%)core::cmp::PartialOrd::ge (18 samples, 0.15%)<core::option::Option<T> as core::cmp::PartialOrd>::partial_cmp (18 samples, 0.15%)openraft::raft_state::membership_state::MembershipState<NID,N>::commit (26 samples, 0.21%)core::ptr::drop_in_place<alloc::sync::Arc<openraft::membership::effective_membership::EffectiveMembership<u64,openraft::node::BasicNode>>> (7 samples, 0.06%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (7 samples, 0.06%)openraft::raft_state::RaftState<NID,N>::update_committed (51 samples, 0.41%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::try_commit_granted (164 samples, 1.33%)tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::process_raft_msg::_{{closure}} (1,530 samples, 12.42%)openraft::core::raf..openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}} (1,530 samples, 12.42%)openraft::core::raf..openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}}::_{{closure}} (1,530 samples, 12.42%)openraft::core::raf..<core::pin::Pin<P> as core::future::future::Future>::poll (1,530 samples, 12.42%)<core::pin::Pin<P> ..<openraft::core::raft_core::RaftCore<C,N,LS,SM> as openraft::runtime::RaftRuntime<C>>::run_command::_{{closure}} (1,530 samples, 12.42%)<openraft::core::ra..openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_local_progress (255 samples, 2.07%)o..openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_matching (255 samples, 2.07%)o..alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (2 samples, 0.02%)alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_kv (2 samples, 0.02%)alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (2 samples, 0.02%)alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (2 samples, 0.02%)alloc::collections::btree::map::BTreeMap<K,V,A>::remove (3 samples, 0.02%)alloc::collections::btree::map::BTreeMap<K,V,A>::remove_entry (3 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (6 samples, 0.05%)<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::v2::RaftLogStorage<C>>::purge::_{{closure}} (6 samples, 0.05%)<core::pin::Pin<P> as core::future::future::Future>::poll (6 samples, 0.05%)dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::purge_logs_upto::_{{closure}} (6 samples, 0.05%)dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::purge_logs_upto::_{{closure}}::_{{closure}} (6 samples, 0.05%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::do_main::_{{closure}}::_{{closure}} (1,792 samples, 14.54%)openraft::core::raft_c..openraft::core::raft_core::RaftCore<C,N,LS,SM>::runtime_loop::_{{closure}} (1,792 samples, 14.54%)openraft::core::raft_c..openraft::core::raft_core::RaftCore<C,N,LS,SM>::runtime_loop::_{{closure}}::_{{closure}} (1,792 samples, 14.54%)openraft::core::raft_c..openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}} (7 samples, 0.06%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}}::_{{closure}} (7 samples, 0.06%)<core::pin::Pin<P> as core::future::future::Future>::poll (7 samples, 0.06%)<openraft::core::raft_core::RaftCore<C,N,LS,SM> as openraft::runtime::RaftRuntime<C>>::run_command::_{{closure}} (7 samples, 0.06%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (5 samples, 0.04%)alloc::sync::Arc<T,A>::inner (5 samples, 0.04%)core::ptr::non_null::NonNull<T>::as_ref (5 samples, 0.04%)core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next (4 samples, 0.03%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next (4 samples, 0.03%)core::cmp::impls::<impl core::cmp::PartialOrd for u32>::lt (4 samples, 0.03%)_ZN5tokio7runtime2io6driver6Driver4turn17heea409bb80330ab0E.llvm.1906340510827987069 (4 samples, 0.03%)mio::sys::unix::selector::epoll::Selector::select (2 samples, 0.02%)_ZN5tokio7runtime4time6Driver13park_internal17h70d3ae958184deb1E.llvm.1906340510827987069 (5 samples, 0.04%)tokio::runtime::scheduler::current_thread::Context::park (6 samples, 0.05%)_ZN5tokio7runtime2io6driver6Driver4turn17heea409bb80330ab0E.llvm.1906340510827987069 (12 samples, 0.10%)mio::sys::unix::selector::epoll::Selector::select (12 samples, 0.10%)epoll_wait (12 samples, 0.10%)[unknown] (12 samples, 0.10%)[unknown] (12 samples, 0.10%)[unknown] (11 samples, 0.09%)[unknown] (11 samples, 0.09%)[unknown] (6 samples, 0.05%)tokio::runtime::task::raw::RawTask::schedule (3 samples, 0.02%)tokio::runtime::context::with_scheduler (3 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (2 samples, 0.02%)tokio::runtime::context::with_scheduler::_{{closure}} (2 samples, 0.02%)tokio::runtime::context::scoped::Scoped<T>::with (2 samples, 0.02%)tokio::runtime::scheduler::current_thread::_<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>::schedule::_{{closure}} (2 samples, 0.02%)tokio::runtime::task::state::State::load (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)_ZN5tokio7runtime4time6Driver13park_internal17h70d3ae958184deb1E.llvm.1906340510827987069 (20 samples, 0.16%)tokio::runtime::io::driver::Driver::turn (8 samples, 0.06%)tokio::runtime::io::scheduled_io::ScheduledIo::wake (7 samples, 0.06%)tokio::util::wake_list::WakeList::wake_all (6 samples, 0.05%)core::task::wake::Waker::wake (6 samples, 0.05%)tokio::runtime::task::waker::wake_by_val (6 samples, 0.05%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (6 samples, 0.05%)tokio::runtime::task::state::State::transition_to_notified_by_val (3 samples, 0.02%)tokio::runtime::task::state::State::fetch_update_action (3 samples, 0.02%)std::sys::unix::time::inner::<impl std::sys::unix::time::Timespec>::now (17 samples, 0.14%)clock_gettime (17 samples, 0.14%)__vdso_clock_gettime (16 samples, 0.13%)[unknown] (16 samples, 0.13%)[unknown] (16 samples, 0.13%)[unknown] (16 samples, 0.13%)[unknown] (14 samples, 0.11%)[unknown] (13 samples, 0.11%)[unknown] (13 samples, 0.11%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::process (19 samples, 0.15%)tokio::runtime::time::source::TimeSource::now (19 samples, 0.15%)tokio::time::clock::Clock::now (19 samples, 0.15%)tokio::time::clock::now (19 samples, 0.15%)tokio::runtime::time::source::TimeSource::now (21 samples, 0.17%)tokio::time::clock::Clock::now (21 samples, 0.17%)tokio::time::clock::now (21 samples, 0.17%)std::sys::unix::time::inner::<impl std::sys::unix::time::Timespec>::now (21 samples, 0.17%)clock_gettime (21 samples, 0.17%)__vdso_clock_gettime (19 samples, 0.15%)[unknown] (17 samples, 0.14%)[unknown] (15 samples, 0.12%)[unknown] (13 samples, 0.11%)[unknown] (10 samples, 0.08%)[unknown] (10 samples, 0.08%)[unknown] (6 samples, 0.05%)<alloc::vec::Vec<T,A> as core::ops::index::Index<I>>::index (2 samples, 0.02%)core::slice::index::<impl core::ops::index::Index<I> for [T]>::index (2 samples, 0.02%)<usize as core::slice::index::SliceIndex<[T]>>::index (2 samples, 0.02%)tokio::runtime::driver::Driver::park_timeout (70 samples, 0.57%)tokio::runtime::driver::TimeDriver::park_timeout (70 samples, 0.57%)tokio::runtime::time::Driver::park_timeout (70 samples, 0.57%)tokio::runtime::time::Driver::park_internal (50 samples, 0.41%)tokio::runtime::time::wheel::Wheel::next_expiration_time (7 samples, 0.06%)tokio::runtime::time::wheel::Wheel::next_expiration (7 samples, 0.06%)tokio::runtime::time::wheel::level::Level::next_expiration (4 samples, 0.03%)tokio::runtime::time::wheel::level::Level::next_occupied_slot (3 samples, 0.02%)tokio::runtime::scheduler::current_thread::Context::park_yield (76 samples, 0.62%)tokio::runtime::scheduler::current_thread::Context::enter (71 samples, 0.58%)tokio::runtime::scheduler::current_thread::Context::park_yield::_{{closure}} (71 samples, 0.58%)tokio::runtime::metrics::mock::MetricsBatch::start_poll (19 samples, 0.15%)core::cell::RefCell<T>::borrow_mut (3 samples, 0.02%)core::cell::RefCell<T>::try_borrow_mut (3 samples, 0.02%)core::cell::BorrowRefMut::new (3 samples, 0.02%)core::option::Option<T>::expect (4 samples, 0.03%)tokio::runtime::coop::Budget::initial (7 samples, 0.06%)tokio::runtime::context::CONTEXT::__getit (4 samples, 0.03%)core::cell::Cell<T>::get (3 samples, 0.02%)core::ptr::drop_in_place<core::result::Result<tokio::runtime::coop::with_budget::ResetGuard,std::thread::local::AccessError>> (24 samples, 0.19%)core::ptr::drop_in_place<tokio::runtime::coop::with_budget::ResetGuard> (17 samples, 0.14%)<tokio::runtime::coop::with_budget::ResetGuard as core::ops::drop::Drop>::drop (16 samples, 0.13%)tokio::runtime::context::budget (14 samples, 0.11%)std::thread::local::LocalKey<T>::try_with (5 samples, 0.04%)cfree (7 samples, 0.06%)[libc.so.6] (5 samples, 0.04%)[libc.so.6] (2 samples, 0.02%)std::panic::catch_unwind (2 samples, 0.02%)std::panicking::try (2 samples, 0.02%)std::panicking::try::do_call (2 samples, 0.02%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (2 samples, 0.02%)tokio::runtime::scheduler::current_thread::<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>::release (6 samples, 0.05%)tokio::runtime::task::list::OwnedTasks<S>::remove (6 samples, 0.05%)tokio::runtime::task::Task<S>::header (3 samples, 0.02%)tokio::runtime::task::raw::RawTask::header (3 samples, 0.02%)core::ptr::non_null::NonNull<T>::as_ref (3 samples, 0.02%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::remove (2 samples, 0.02%)tokio::runtime::task::harness::Harness<T,S>::release (14 samples, 0.11%)tokio::util::sharded_list::ShardedList<L,<L as tokio::util::linked_list::Link>::Target>::remove (7 samples, 0.06%)tokio::util::sharded_list::ShardedList<L,<L as tokio::util::linked_list::Link>::Target>::shard_inner (5 samples, 0.04%)tokio::loom::std::parking_lot::Mutex<T>::lock (4 samples, 0.03%)lock_api::mutex::Mutex<R,T>::lock (4 samples, 0.03%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (4 samples, 0.03%)tokio::runtime::task::harness::Harness<T,S>::complete (30 samples, 0.24%)tokio::runtime::task::state::State::transition_to_complete (6 samples, 0.05%)core::sync::atomic::AtomicUsize::fetch_xor (4 samples, 0.03%)core::sync::atomic::atomic_xor (4 samples, 0.03%)tokio::runtime::task::harness::Harness<T,S>::poll_inner::transition_result_to_poll_future (14 samples, 0.11%)core::mem::manually_drop::ManuallyDrop<T>::new (2 samples, 0.02%)[libc.so.6] (6 samples, 0.05%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (3 samples, 0.02%)alloc::sync::Arc<T,A>::inner (3 samples, 0.02%)core::ptr::non_null::NonNull<T>::as_ref (3 samples, 0.02%)<futures_channel::oneshot::Receiver<T> as core::future::future::Future>::poll (9 samples, 0.07%)futures_channel::oneshot::Inner<T>::recv (6 samples, 0.05%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::is_end_stream (3 samples, 0.02%)<core::pin::Pin<P> as http_body::Body>::is_end_stream (3 samples, 0.02%)<tonic::codec::encode::EncodeBody<S> as http_body::Body>::is_end_stream (3 samples, 0.02%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::size_hint (4 samples, 0.03%)<core::pin::Pin<P> as http_body::Body>::size_hint (4 samples, 0.03%)http_body::Body::size_hint (3 samples, 0.02%)h2::proto::streams::send::Send::ensure_next_stream_id (3 samples, 0.02%)h2::client::SendRequest<B>::poll_ready (11 samples, 0.09%)h2::proto::streams::streams::Streams<B,h2::client::Peer>::poll_pending_open (8 samples, 0.06%)h2::proto::streams::streams::Actions::ensure_no_conn_error (3 samples, 0.02%)core::result::Result<T,E>::map (4 samples, 0.03%)h2::client::SendRequest<B>::send_request::_{{closure}} (4 samples, 0.03%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<crossbeam_channel::waker::Waker>> (2 samples, 0.02%)core::ptr::drop_in_place<http::extensions::Extensions> (5 samples, 0.04%)core::ptr::drop_in_place<core::option::Option<alloc::boxed::Box<std::collections::hash::map::HashMap<core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>,core::hash::BuildHasherDefault<http::extensions::IdHasher>>>>> (5 samples, 0.04%)core::ptr::drop_in_place<alloc::boxed::Box<std::collections::hash::map::HashMap<core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>,core::hash::BuildHasherDefault<http::extensions::IdHasher>>>> (4 samples, 0.03%)core::ptr::drop_in_place<std::collections::hash::map::HashMap<core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>,core::hash::BuildHasherDefault<http::extensions::IdHasher>>> (4 samples, 0.03%)core::ptr::drop_in_place<hashbrown::map::HashMap<core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>,core::hash::BuildHasherDefault<http::extensions::IdHasher>>> (4 samples, 0.03%)core::ptr::drop_in_place<hashbrown::raw::RawTable<(core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>)>> (4 samples, 0.03%)cfree (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)h2::frame::headers::Headers::new (2 samples, 0.02%)h2::hpack::header::BytesStr::from (2 samples, 0.02%)bytes::bytes::Bytes::copy_from_slice (2 samples, 0.02%)alloc::slice::<impl [T]>::to_vec (2 samples, 0.02%)alloc::slice::<impl [T]>::to_vec_in (2 samples, 0.02%)alloc::slice::hack::to_vec (2 samples, 0.02%)<T as alloc::slice::hack::ConvertVec>::to_vec (2 samples, 0.02%)core::option::Option<T>::map (3 samples, 0.02%)h2::frame::headers::Pseudo::request::_{{closure}} (3 samples, 0.02%)h2::frame::headers::Pseudo::set_scheme (2 samples, 0.02%)h2::client::Peer::convert_send_message (16 samples, 0.13%)h2::frame::headers::Pseudo::request (9 samples, 0.07%)h2::proto::peer::Dyn::is_server (2 samples, 0.02%)h2::proto::streams::counts::Counts::peer (3 samples, 0.02%)h2::proto::streams::recv::Recv::init_window_sz (2 samples, 0.02%)h2::proto::streams::send::Send::init_window_sz (3 samples, 0.02%)<T as core::convert::Into<U>>::into (3 samples, 0.02%)h2::frame::headers::<impl core::convert::From<h2::frame::headers::Headers> for h2::frame::Frame<T>>::from (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::DerefMut>::deref_mut (3 samples, 0.02%)_ZN5tokio7runtime4task5waker11wake_by_val17hd2d24891b6694d2eE.llvm.18378198931860043191 (3 samples, 0.02%)core::task::wake::Waker::wake (5 samples, 0.04%)tokio::runtime::task::waker::wake_by_val (2 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (2 samples, 0.02%)tokio::runtime::task::state::State::transition_to_notified_by_val (2 samples, 0.02%)tokio::runtime::task::state::State::fetch_update_action (2 samples, 0.02%)tokio::runtime::task::state::State::load (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)h2::frame::headers::PushPromise::fields (4 samples, 0.03%)core::ptr::drop_in_place<tracing::span::Span> (2 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::schedule_send (4 samples, 0.03%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (3 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::queue_frame (9 samples, 0.07%)h2::proto::streams::prioritize::Prioritize::queue_open (4 samples, 0.03%)<&str as http::header::map::as_header_name::Sealed>::find::_{{closure}} (3 samples, 0.02%)http::header::map::HeaderMap<T>::find (3 samples, 0.02%)http::header::map::hash_elem_using (2 samples, 0.02%)core::iter::traits::iterator::Iterator::for_each (3 samples, 0.02%)core::iter::traits::iterator::Iterator::fold (3 samples, 0.02%)core::iter::traits::iterator::Iterator::for_each::call::_{{closure}} (3 samples, 0.02%)http::header::name::parse_hdr::_{{closure}} (3 samples, 0.02%)http::header::name::parse_hdr (5 samples, 0.04%)http::header::name::StandardHeader::from_bytes (2 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find (9 samples, 0.07%)http::header::name::HdrName::from_bytes (9 samples, 0.07%)http::header::map::HeaderMap<T>::contains_key (15 samples, 0.12%)h2::proto::streams::send::Send::check_headers (19 samples, 0.15%)h2::proto::streams::send::Send::send_headers (57 samples, 0.46%)h2::proto::streams::store::Queue<N>::push (2 samples, 0.02%)indexmap::map::IndexMap<K,V,S>::hash (2 samples, 0.02%)<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::finish (2 samples, 0.02%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::finish (2 samples, 0.02%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::finish (2 samples, 0.02%)indexmap::map::IndexMap<K,V,S>::insert (3 samples, 0.02%)indexmap::map::IndexMap<K,V,S>::insert_full (3 samples, 0.02%)h2::proto::streams::store::Store::insert (10 samples, 0.08%)slab::Slab<T>::insert (5 samples, 0.04%)slab::Slab<T>::insert_at (4 samples, 0.03%)[libc.so.6] (2 samples, 0.02%)h2::proto::streams::stream::Stream::new (4 samples, 0.03%)h2::proto::streams::flow_control::FlowControl::inc_window (4 samples, 0.03%)core::option::Option<T>::expect (3 samples, 0.02%)h2::proto::streams::streams::OpaqueStreamRef::new (2 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (4 samples, 0.03%)core::alloc::layout::Layout::for_value_raw (2 samples, 0.02%)core::mem::size_of_val_raw (2 samples, 0.02%)http::extensions::Extensions::clear (9 samples, 0.07%)std::collections::hash::map::HashMap<K,V,S>::clear (9 samples, 0.07%)hashbrown::map::HashMap<K,V,S,A>::clear (9 samples, 0.07%)hashbrown::raw::RawTable<T,A>::clear (9 samples, 0.07%)hashbrown::raw::RawTable<T,A>::drop_elements (8 samples, 0.06%)hashbrown::raw::Bucket<T>::drop (8 samples, 0.06%)core::ptr::mut_ptr::<impl *mut T>::drop_in_place (8 samples, 0.06%)core::ptr::drop_in_place<(core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>)> (8 samples, 0.06%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>> (7 samples, 0.06%)core::ptr::drop_in_place<prost::error::EncodeError> (3 samples, 0.02%)h2::client::SendRequest<B>::send_request (130 samples, 1.06%)h2::proto::streams::streams::Streams<B,P>::send_request (123 samples, 1.00%)core::option::Option<T>::map (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::coop::RestoreOnPending> (2 samples, 0.02%)<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::read (3 samples, 0.02%)tokio::sync::mpsc::list::Rx<T>::pop (11 samples, 0.09%)tokio::sync::mpsc::list::Rx<T>::try_advancing_head (8 samples, 0.06%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (17 samples, 0.14%)tokio::sync::mpsc::chan::Rx<T,S>::recv::_{{closure}} (17 samples, 0.14%)tokio::sync::task::atomic_waker::AtomicWaker::register_by_ref (3 samples, 0.02%)tokio::sync::task::atomic_waker::AtomicWaker::do_register (3 samples, 0.02%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::poll_recv (24 samples, 0.19%)tokio::sync::mpsc::chan::Rx<T,S>::recv (24 samples, 0.19%)tokio::runtime::coop::poll_proceed (3 samples, 0.02%)tokio::runtime::context::budget (3 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (3 samples, 0.02%)tokio::runtime::context::budget::_{{closure}} (3 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (3 samples, 0.02%)core::cell::Cell<T>::set (2 samples, 0.02%)core::cell::Cell<T>::replace (2 samples, 0.02%)core::mem::replace (2 samples, 0.02%)core::ptr::write (2 samples, 0.02%)hyper::client::dispatch::Receiver<T,U>::poll_recv (34 samples, 0.28%)want::Taker::want (4 samples, 0.03%)want::Taker::signal (4 samples, 0.03%)<T as core::convert::Into<U>>::into (4 samples, 0.03%)want::<impl core::convert::From<want::State> for usize>::from (3 samples, 0.02%)<T as futures_util::fns::FnOnce1<A>>::call_once (2 samples, 0.02%)h2::frame::data::Data<T>::is_end_stream (2 samples, 0.02%)h2::frame::data::DataFlags::is_end_stream (2 samples, 0.02%)<h2::share::SendStream<hyper::proto::h2::SendBuf<B>> as hyper::proto::h2::SendStreamExt>::send_eos_frame (6 samples, 0.05%)h2::share::SendStream<B>::send_data (6 samples, 0.05%)h2::proto::streams::streams::StreamRef<B>::send_data (6 samples, 0.05%)h2::proto::streams::counts::Counts::transition (5 samples, 0.04%)h2::proto::streams::streams::StreamRef<B>::send_data::_{{closure}} (5 samples, 0.04%)h2::proto::streams::send::Send::send_data (4 samples, 0.03%)h2::proto::streams::prioritize::Prioritize::send_data (4 samples, 0.03%)bytes::bytes_mut::BytesMut::split_to (5 samples, 0.04%)bytes::bytes_mut::BytesMut::set_start (4 samples, 0.03%)core::ptr::drop_in_place<dcache::protobuf::dcache::RaftRequest> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::string::String> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (2 samples, 0.02%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (2 samples, 0.02%)alloc::alloc::dealloc (2 samples, 0.02%)cfree (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)alloc::raw_vec::finish_grow (16 samples, 0.13%)<alloc::alloc::Global as core::alloc::Allocator>::grow (16 samples, 0.13%)alloc::alloc::Global::grow_impl (16 samples, 0.13%)alloc::alloc::realloc (16 samples, 0.13%)realloc (15 samples, 0.12%)[libc.so.6] (12 samples, 0.10%)[libc.so.6] (11 samples, 0.09%)<tonic::codec::buffer::EncodeBuf as bytes::buf::buf_mut::BufMut>::chunk_mut (17 samples, 0.14%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::chunk_mut (17 samples, 0.14%)bytes::bytes_mut::BytesMut::reserve (17 samples, 0.14%)bytes::bytes_mut::BytesMut::reserve_inner (17 samples, 0.14%)alloc::vec::Vec<T,A>::reserve (17 samples, 0.14%)alloc::raw_vec::RawVec<T,A>::reserve (17 samples, 0.14%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (17 samples, 0.14%)alloc::raw_vec::RawVec<T,A>::grow_amortized (17 samples, 0.14%)[libc.so.6] (15 samples, 0.12%)bytes::buf::buf_mut::BufMut::put_slice (35 samples, 0.28%)core::intrinsics::copy_nonoverlapping (16 samples, 0.13%)prost::encoding::encode_key (4 samples, 0.03%)prost::encoding::encode_varint (4 samples, 0.03%)bytes::buf::buf_mut::BufMut::put_u8 (4 samples, 0.03%)bytes::buf::buf_mut::BufMut::put_slice (3 samples, 0.02%)<tonic::codec::prost::ProstEncoder<T> as tonic::codec::Encoder>::encode (44 samples, 0.36%)prost::message::Message::encode (42 samples, 0.34%)<dcache::protobuf::dcache::RaftRequest as prost::message::Message>::encode_raw (40 samples, 0.32%)prost::encoding::string::encode (40 samples, 0.32%)tonic::codec::buffer::EncodeBuf::new (2 samples, 0.02%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_data (53 samples, 0.43%)<tonic::codec::encode::EncodeBody<S> as http_body::Body>::poll_data (53 samples, 0.43%)<tonic::codec::encode::EncodedBytes<T,U> as futures_core::stream::Stream>::poll_next (52 samples, 0.42%)tonic::codec::encode::encode_item (47 samples, 0.38%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<h2::proto::streams::streams::Inner>> (3 samples, 0.02%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (3 samples, 0.02%)std::sys::unix::locks::futex_mutex::Mutex::unlock (3 samples, 0.02%)h2::proto::streams::send::Send::capacity (2 samples, 0.02%)h2::share::SendStream<B>::capacity (9 samples, 0.07%)h2::proto::streams::streams::StreamRef<B>::capacity (9 samples, 0.07%)std::sync::mutex::Mutex<T>::lock (2 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::DerefMut>::deref_mut (2 samples, 0.02%)h2::share::SendStream<B>::poll_reset (7 samples, 0.06%)h2::proto::streams::streams::StreamRef<B>::poll_reset (7 samples, 0.06%)h2::proto::streams::send::Send::poll_reset (4 samples, 0.03%)<h2::proto::streams::store::Store as h2::proto::streams::store::Resolve>::resolve (2 samples, 0.02%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<h2::proto::streams::streams::Inner>> (2 samples, 0.02%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (2 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (2 samples, 0.02%)<h2::proto::streams::store::Store as core::ops::index::Index<h2::proto::streams::store::Key>>::index (2 samples, 0.02%)slab::Slab<T>::get (2 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::assign_connection_capacity (4 samples, 0.03%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (2 samples, 0.02%)<h2::proto::streams::store::Store as core::ops::index::Index<h2::proto::streams::store::Key>>::index (2 samples, 0.02%)h2::proto::streams::stream::Stream::assign_capacity (2 samples, 0.02%)h2::proto::streams::stream::Stream::notify_capacity (2 samples, 0.02%)h2::proto::streams::stream::Stream::notify_send (2 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::try_assign_capacity (11 samples, 0.09%)h2::proto::streams::prioritize::Prioritize::reserve_capacity (22 samples, 0.18%)h2::share::SendStream<B>::reserve_capacity (28 samples, 0.23%)h2::proto::streams::streams::StreamRef<B>::reserve_capacity (28 samples, 0.23%)h2::proto::streams::send::Send::reserve_capacity (2 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (2 samples, 0.02%)h2::proto::streams::counts::Counts::transition_after (2 samples, 0.02%)h2::frame::data::Data<T>::set_end_stream (2 samples, 0.02%)h2::frame::data::DataFlags::unset_end_stream (2 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (5 samples, 0.04%)<h2::proto::streams::store::Ptr as core::ops::deref::DerefMut>::deref_mut (2 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::queue_frame (5 samples, 0.04%)h2::proto::streams::prioritize::Prioritize::try_assign_capacity (2 samples, 0.02%)h2::proto::streams::counts::Counts::transition (32 samples, 0.26%)h2::proto::streams::streams::StreamRef<B>::send_data::_{{closure}} (27 samples, 0.22%)h2::proto::streams::send::Send::send_data (24 samples, 0.19%)h2::proto::streams::prioritize::Prioritize::send_data (24 samples, 0.19%)std::sync::mutex::MutexGuard<T>::new (2 samples, 0.02%)std::sync::poison::Flag::guard (2 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (146 samples, 1.18%)<hyper::proto::h2::PipeToSendStream<S> as core::future::future::Future>::poll (146 samples, 1.18%)h2::share::SendStream<B>::send_data (39 samples, 0.32%)h2::proto::streams::streams::StreamRef<B>::send_data (39 samples, 0.32%)std::sync::mutex::Mutex<T>::lock (3 samples, 0.02%)core::ptr::drop_in_place<h2::share::SendStream<hyper::proto::h2::SendBuf<bytes::bytes::Bytes>>> (9 samples, 0.07%)core::ptr::drop_in_place<h2::proto::streams::streams::StreamRef<hyper::proto::h2::SendBuf<bytes::bytes::Bytes>>> (5 samples, 0.04%)core::ptr::drop_in_place<h2::proto::streams::streams::OpaqueStreamRef> (5 samples, 0.04%)<h2::proto::streams::streams::OpaqueStreamRef as core::ops::drop::Drop>::drop (5 samples, 0.04%)h2::proto::streams::streams::drop_stream_ref (5 samples, 0.04%)h2::proto::streams::counts::Counts::transition (2 samples, 0.02%)<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (165 samples, 1.34%)<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (165 samples, 1.34%)futures_util::future::future::map::_::<impl futures_util::future::future::map::Map<Fut,F>>::project_replace (17 samples, 0.14%)core::ptr::drop_in_place<(pin_project_lite::__private::UnsafeDropInPlaceGuard<core::pin::Pin<alloc::boxed::Box<hyper::proto::h2::PipeToSendStream<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>>,())> (17 samples, 0.14%)core::ptr::drop_in_place<pin_project_lite::__private::UnsafeDropInPlaceGuard<core::pin::Pin<alloc::boxed::Box<hyper::proto::h2::PipeToSendStream<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>>> (17 samples, 0.14%)<pin_project_lite::__private::UnsafeDropInPlaceGuard<T> as core::ops::drop::Drop>::drop (17 samples, 0.14%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<hyper::proto::h2::PipeToSendStream<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>> (17 samples, 0.14%)core::ptr::drop_in_place<alloc::boxed::Box<hyper::proto::h2::PipeToSendStream<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>> (17 samples, 0.14%)core::ptr::drop_in_place<hyper::proto::h2::PipeToSendStream<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>> (17 samples, 0.14%)core::ptr::drop_in_place<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>> (8 samples, 0.06%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn http_body::Body+Error = tonic::status::Status+Data = bytes::bytes::Bytes+core::marker::Send>>> (8 samples, 0.06%)core::ptr::drop_in_place<alloc::boxed::Box<dyn http_body::Body+Error = tonic::status::Status+Data = bytes::bytes::Bytes+core::marker::Send>> (8 samples, 0.06%)core::ptr::drop_in_place<tonic::codec::encode::EncodeBody<tonic::codec::encode::EncodedBytes<tonic::codec::prost::ProstEncoder<dcache::protobuf::dcache::RaftRequest>,tokio_stream::stream_ext::map::Map<tokio_stream::once::Once<dcache::protobuf::dcache::RaftRequest>,core::result::Result<dcache::protobuf::dcache::RaftRequest,tonic::status::Status>::Ok>>>> (8 samples, 0.06%)core::ptr::drop_in_place<tonic::codec::encode::EncodedBytes<tonic::codec::prost::ProstEncoder<dcache::protobuf::dcache::RaftRequest>,tokio_stream::stream_ext::map::Map<tokio_stream::once::Once<dcache::protobuf::dcache::RaftRequest>,core::result::Result<dcache::protobuf::dcache::RaftRequest,tonic::status::Status>::Ok>>> (3 samples, 0.02%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (3 samples, 0.02%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (3 samples, 0.02%)<tonic::transport::service::executor::SharedExec as hyper::rt::Executor<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = ()+core::marker::Send>>>>::execute (4 samples, 0.03%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (3 samples, 0.02%)alloc::sync::Arc<T,A>::inner (3 samples, 0.02%)core::ptr::non_null::NonNull<T>::as_ref (3 samples, 0.02%)tokio::runtime::context::with_scheduler (2 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (2 samples, 0.02%)tokio::runtime::context::with_scheduler::_{{closure}} (2 samples, 0.02%)tokio::runtime::context::scoped::Scoped<T>::with (2 samples, 0.02%)tokio::runtime::scheduler::current_thread::_<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>::schedule::_{{closure}} (2 samples, 0.02%)tokio::runtime::scheduler::current_thread::Core::push_task (2 samples, 0.02%)alloc::collections::vec_deque::VecDeque<T,A>::push_back (2 samples, 0.02%)tokio::util::sharded_list::ShardGuard<L,<L as tokio::util::linked_list::Link>::Target>::push (4 samples, 0.03%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::push_front (3 samples, 0.02%)<tokio::runtime::task::Task<S> as tokio::util::linked_list::Link>::pointers (2 samples, 0.02%)tokio::runtime::task::core::Header::get_trailer (2 samples, 0.02%)tokio::runtime::task::list::OwnedTasks<S>::bind_inner (7 samples, 0.06%)tokio::util::sharded_list::ShardedList<L,<L as tokio::util::linked_list::Link>::Target>::lock_shard (3 samples, 0.02%)alloc::boxed::Box<T>::new (16 samples, 0.13%)alloc::alloc::exchange_malloc (16 samples, 0.13%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (16 samples, 0.13%)alloc::alloc::Global::alloc_impl (16 samples, 0.13%)alloc::alloc::alloc (16 samples, 0.13%)__rdl_alloc (16 samples, 0.13%)std::sys::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (14 samples, 0.11%)std::sys::unix::alloc::aligned_malloc (14 samples, 0.11%)posix_memalign (13 samples, 0.11%)[libc.so.6] (12 samples, 0.10%)[libc.so.6] (5 samples, 0.04%)[libc.so.6] (4 samples, 0.03%)tokio::runtime::task::core::Cell<T,S>::new (17 samples, 0.14%)<tonic::transport::service::executor::TokioExec as hyper::rt::Executor<F>>::execute (35 samples, 0.28%)tokio::task::spawn::spawn (32 samples, 0.26%)tokio::task::spawn::spawn_inner (32 samples, 0.26%)tokio::runtime::context::current::with_current (32 samples, 0.26%)std::thread::local::LocalKey<T>::try_with (32 samples, 0.26%)tokio::runtime::context::current::with_current::_{{closure}} (31 samples, 0.25%)core::option::Option<T>::map (30 samples, 0.24%)tokio::task::spawn::spawn_inner::_{{closure}} (30 samples, 0.24%)tokio::runtime::scheduler::Handle::spawn (30 samples, 0.24%)tokio::runtime::scheduler::current_thread::Handle::spawn (29 samples, 0.24%)tokio::runtime::task::list::OwnedTasks<S>::bind (26 samples, 0.21%)tokio::runtime::task::new_task (19 samples, 0.15%)tokio::runtime::task::raw::RawTask::new (19 samples, 0.15%)tokio::runtime::task::state::State::new (2 samples, 0.02%)__rdl_alloc (2 samples, 0.02%)alloc::boxed::Box<T>::pin (3 samples, 0.02%)alloc::boxed::Box<T>::new (3 samples, 0.02%)alloc::alloc::exchange_malloc (3 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (3 samples, 0.02%)alloc::alloc::Global::alloc_impl (3 samples, 0.02%)alloc::alloc::alloc (3 samples, 0.02%)core::ptr::drop_in_place<futures_util::future::future::Map<core::pin::Pin<alloc::boxed::Box<hyper::proto::h2::PipeToSendStream<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>,hyper::proto::h2::client::ClientTask<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>::poll_pipe::{{closure}}>> (2 samples, 0.02%)core::ptr::drop_in_place<futures_util::future::future::map::Map<core::pin::Pin<alloc::boxed::Box<hyper::proto::h2::PipeToSendStream<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>,hyper::proto::h2::client::ClientTask<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>::poll_pipe::{{closure}}>> (2 samples, 0.02%)hyper::proto::h2::client::ClientTask<B>::poll_pipe (221 samples, 1.79%)h..hyper::common::exec::Exec::execute (4 samples, 0.03%)core::option::Option<T>::map (7 samples, 0.06%)hyper::proto::h2::strip_connection_headers::_{{closure}} (7 samples, 0.06%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::ne (7 samples, 0.06%)core::cmp::PartialEq::ne (7 samples, 0.06%)<http::header::value::HeaderValue as core::cmp::PartialEq<str>>::eq (7 samples, 0.06%)<bytes::bytes::Bytes as core::cmp::PartialEq<&T>>::eq (7 samples, 0.06%)<bytes::bytes::Bytes as core::cmp::PartialEq<[u8]>>::eq (7 samples, 0.06%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (7 samples, 0.06%)core::slice::cmp::<impl core::cmp::PartialEq<[B]> for [A]>::eq (7 samples, 0.06%)<[A] as core::slice::cmp::SlicePartialEq<B>>::equal (7 samples, 0.06%)[libc.so.6] (4 samples, 0.03%)core::ptr::drop_in_place<[http::header::name::HeaderName: 5]> (4 samples, 0.03%)core::ptr::drop_in_place<http::header::name::HeaderName> (4 samples, 0.03%)core::ptr::drop_in_place<http::header::name::Repr<http::header::name::Custom>> (4 samples, 0.03%)core::ptr::drop_in_place<http::header::name::Custom> (4 samples, 0.03%)core::ptr::drop_in_place<http::byte_str::ByteStr> (4 samples, 0.03%)core::ptr::drop_in_place<bytes::bytes::Bytes> (4 samples, 0.03%)<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (4 samples, 0.03%)bytes::bytes::promotable_even_drop (4 samples, 0.03%)<core::sync::atomic::AtomicPtr<T> as bytes::loom::sync::atomic::AtomicMut<T>>::with_mut (2 samples, 0.02%)core::result::Result<T,E>::unwrap (2 samples, 0.02%)http::header::map::HeaderMap<T>::get (2 samples, 0.02%)http::header::map::HeaderMap<T>::get2 (2 samples, 0.02%)<http::header::name::HeaderName as http::header::map::as_header_name::Sealed>::find (2 samples, 0.02%)http::header::map::HeaderMap<T>::find (2 samples, 0.02%)http::header::map::HeaderMap<T>::remove (4 samples, 0.03%)<&http::header::name::HeaderName as http::header::map::as_header_name::Sealed>::find (4 samples, 0.03%)http::header::map::HeaderMap<T>::find (4 samples, 0.03%)http::header::map::hash_elem_using (3 samples, 0.02%)<http::header::name::HeaderName as core::hash::Hash>::hash (3 samples, 0.02%)<http::header::name::Repr<T> as core::hash::Hash>::hash (3 samples, 0.02%)<http::header::name::Custom as core::hash::Hash>::hash (3 samples, 0.02%)<fnv::FnvHasher as core::hash::Hasher>::write (3 samples, 0.02%)core::num::<impl u64>::wrapping_mul (2 samples, 0.02%)<T as core::convert::Into<U>>::into (2 samples, 0.02%)<bytes::bytes::Bytes as core::convert::From<alloc::vec::Vec<u8>>>::from (2 samples, 0.02%)bytes::bytes::Bytes::copy_from_slice (4 samples, 0.03%)alloc::slice::<impl [T]>::to_vec (2 samples, 0.02%)alloc::slice::<impl [T]>::to_vec_in (2 samples, 0.02%)alloc::slice::hack::to_vec (2 samples, 0.02%)<T as alloc::slice::hack::ConvertVec>::to_vec (2 samples, 0.02%)alloc::vec::Vec<T,A>::with_capacity_in (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::allocate_in (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (2 samples, 0.02%)alloc::alloc::Global::alloc_impl (2 samples, 0.02%)alloc::alloc::alloc (2 samples, 0.02%)malloc (2 samples, 0.02%)<hyper::client::service::Connect<C,B,T> as tower_service::Service<T>>::call::_{{closure}}::_{{closure}} (457 samples, 3.71%)<hyp..<hyper::client::conn::Connection<T,B> as core::future::future::Future>::poll (449 samples, 3.64%)<hyp..<hyper::client::conn::ProtoClient<T,B> as core::future::future::Future>::poll (448 samples, 3.64%)<hyp..<hyper::proto::h2::client::ClientTask<B> as core::future::future::Future>::poll (448 samples, 3.64%)<hyp..hyper::proto::h2::strip_connection_headers (28 samples, 0.23%)http::header::name::HeaderName::from_lowercase (8 samples, 0.06%)http::header::name::parse_hdr (3 samples, 0.02%)core::slice::<impl [T]>::contains (2 samples, 0.02%)<u8 as core::slice::cmp::SliceContains>::slice_contains (2 samples, 0.02%)core::slice::memchr::memchr (2 samples, 0.02%)<tonic::transport::service::connection::Connection as tower_service::Service<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>::call (2 samples, 0.02%)<tower::util::boxed::sync::BoxService<T,U,E> as tower_service::Service<T>>::call (2 samples, 0.02%)<alloc::boxed::Box<S> as tower_service::Service<Request>>::call (2 samples, 0.02%)<T as core::convert::Into<U>>::into (3 samples, 0.02%)<http::uri::Parts as core::convert::From<http::uri::Uri>>::from (3 samples, 0.02%)<core::option::Option<T> as core::clone::Clone>::clone (2 samples, 0.02%)<http::uri::authority::Authority as core::clone::Clone>::clone (2 samples, 0.02%)<http::byte_str::ByteStr as core::clone::Clone>::clone (2 samples, 0.02%)<http::header::value::HeaderValue as core::clone::Clone>::clone (3 samples, 0.02%)hyper::client::dispatch::Sender<T,U>::can_send (3 samples, 0.02%)want::Giver::give (3 samples, 0.02%)<T as core::convert::Into<U>>::into (2 samples, 0.02%)want::<impl core::convert::From<want::State> for usize>::from (2 samples, 0.02%)tokio::sync::mpsc::list::Tx<T>::push (6 samples, 0.05%)tokio::sync::mpsc::list::Tx<T>::find_block (4 samples, 0.03%)tokio::sync::mpsc::block::start_index (3 samples, 0.02%)tokio::sync::mpsc::chan::Tx<T,S>::send (12 samples, 0.10%)tokio::sync::mpsc::chan::Chan<T,S>::send (12 samples, 0.10%)tokio::sync::task::atomic_waker::AtomicWaker::wake (5 samples, 0.04%)tokio::sync::task::atomic_waker::AtomicWaker::take_waker (4 samples, 0.03%)core::sync::atomic::AtomicUsize::fetch_or (4 samples, 0.03%)core::sync::atomic::atomic_or (4 samples, 0.03%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::send (13 samples, 0.11%)alloc::sync::Arc<T>::new (2 samples, 0.02%)alloc::boxed::Box<T>::new (2 samples, 0.02%)alloc::alloc::exchange_malloc (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (2 samples, 0.02%)alloc::alloc::Global::alloc_impl (2 samples, 0.02%)alloc::alloc::alloc (2 samples, 0.02%)<tower::util::either::Either<A,B> as tower_service::Service<Request>>::call (30 samples, 0.24%)<tower::util::either::Either<A,B> as tower_service::Service<Request>>::call (29 samples, 0.24%)<tonic::transport::service::reconnect::Reconnect<M,Target> as tower_service::Service<Request>>::call (29 samples, 0.24%)<hyper::client::conn::SendRequest<B> as tower_service::Service<http::request::Request<B>>>::call (28 samples, 0.23%)hyper::client::conn::SendRequest<B>::send_request (28 samples, 0.23%)hyper::client::dispatch::Sender<T,U>::send (28 samples, 0.23%)tokio::sync::oneshot::channel (8 samples, 0.06%)tokio::sync::oneshot::State::new (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find::_{{closure}} (2 samples, 0.02%)http::header::map::HeaderMap<T>::find (2 samples, 0.02%)<tonic::transport::service::grpc_timeout::GrpcTimeout<S> as tower_service::Service<http::request::Request<ReqBody>>>::call (38 samples, 0.31%)tonic::transport::service::grpc_timeout::try_parse_grpc_timeout (6 samples, 0.05%)http::header::map::HeaderMap<T>::get (3 samples, 0.02%)http::header::map::HeaderMap<T>::get2 (3 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find (3 samples, 0.02%)http::header::name::HdrName::from_bytes (3 samples, 0.02%)http::header::map::HeaderMap<T>::insert_entry (2 samples, 0.02%)alloc::vec::Vec<T,A>::push (2 samples, 0.02%)core::ptr::write (2 samples, 0.02%)http::header::map::HeaderMap<T>::reserve_one (2 samples, 0.02%)<tonic::transport::service::user_agent::UserAgent<T> as tower_service::Service<http::request::Request<ReqBody>>>::call (50 samples, 0.41%)http::header::map::HeaderMap<T>::insert (7 samples, 0.06%)<http::header::name::HeaderName as http::header::map::into_header_name::Sealed>::insert (7 samples, 0.06%)http::header::map::HeaderMap<T>::insert2 (7 samples, 0.06%)alloc::boxed::Box<T>::pin (2 samples, 0.02%)alloc::boxed::Box<T>::new (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<tonic::transport::service::add_origin::AddOrigin<T> as tower_service::Service<http::request::Request<ReqBody>>>::call (63 samples, 0.51%)<tower::util::either::Either<A,B> as tower_service::Service<Request>>::call (67 samples, 0.54%)<tower::util::map_future::MapFuture<S,F> as tower_service::Service<R>>::call (64 samples, 0.52%)<hyper::client::conn::SendRequest<B> as tower_service::Service<http::request::Request<B>>>::poll_ready (2 samples, 0.02%)hyper::client::conn::SendRequest<B>::poll_ready (2 samples, 0.02%)hyper::client::dispatch::Sender<T,U>::poll_ready (2 samples, 0.02%)want::Giver::poll_want (2 samples, 0.02%)<tower::util::boxed::sync::BoxService<T,U,E> as tower_service::Service<T>>::poll_ready (13 samples, 0.11%)<alloc::boxed::Box<S> as tower_service::Service<Request>>::poll_ready (13 samples, 0.11%)<tower::util::map_future::MapFuture<S,F> as tower_service::Service<R>>::poll_ready (13 samples, 0.11%)<tonic::transport::service::add_origin::AddOrigin<T> as tower_service::Service<http::request::Request<ReqBody>>>::poll_ready (12 samples, 0.10%)<tonic::transport::service::user_agent::UserAgent<T> as tower_service::Service<http::request::Request<ReqBody>>>::poll_ready (12 samples, 0.10%)<tonic::transport::service::grpc_timeout::GrpcTimeout<S> as tower_service::Service<http::request::Request<ReqBody>>>::poll_ready (12 samples, 0.10%)<tower::util::either::Either<A,B> as tower_service::Service<Request>>::poll_ready (12 samples, 0.10%)<tower::util::either::Either<A,B> as tower_service::Service<Request>>::poll_ready (12 samples, 0.10%)<tonic::transport::service::reconnect::Reconnect<M,Target> as tower_service::Service<Request>>::poll_ready (12 samples, 0.10%)core::option::Option<T>::is_some (2 samples, 0.02%)<tower::util::either::Either<A,B> as tower_service::Service<Request>>::poll_ready (16 samples, 0.13%)<tonic::transport::service::connection::Connection as tower_service::Service<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>::poll_ready (16 samples, 0.13%)<tokio::sync::semaphore::OwnedSemaphorePermit as core::ops::drop::Drop>::drop (4 samples, 0.03%)core::ptr::drop_in_place<tokio::sync::semaphore::OwnedSemaphorePermit> (5 samples, 0.04%)tokio::sync::oneshot::Sender<T>::send (6 samples, 0.05%)tokio::sync::oneshot::Inner<T>::complete (6 samples, 0.05%)tokio::sync::oneshot::Task::with_task (2 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (2 samples, 0.02%)tokio::sync::oneshot::Task::with_task::_{{closure}} (2 samples, 0.02%)core::ops::function::FnOnce::call_once (2 samples, 0.02%)core::task::wake::Waker::wake_by_ref (2 samples, 0.02%)tokio::runtime::task::waker::wake_by_ref (2 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_ref (2 samples, 0.02%)tokio::runtime::task::state::State::transition_to_notified_by_ref (2 samples, 0.02%)tokio::runtime::task::state::State::fetch_update_action (2 samples, 0.02%)tokio::runtime::task::state::State::load (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)core::option::Option<T>::take (2 samples, 0.02%)core::mem::replace (2 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (8 samples, 0.06%)tokio::sync::mpsc::chan::Rx<T,S>::recv::_{{closure}} (8 samples, 0.06%)tokio::sync::mpsc::list::Rx<T>::pop (6 samples, 0.05%)tokio::sync::mpsc::list::Rx<T>::try_advancing_head (2 samples, 0.02%)tokio::runtime::context::budget (3 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (3 samples, 0.02%)tokio::runtime::context::budget::_{{closure}} (3 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (3 samples, 0.02%)core::cell::Cell<T>::get (3 samples, 0.02%)tower::buffer::worker::Worker<T,Request>::poll_next_msg (22 samples, 0.18%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::poll_recv (16 samples, 0.13%)tokio::sync::mpsc::chan::Rx<T,S>::recv (16 samples, 0.13%)tokio::runtime::coop::poll_proceed (7 samples, 0.06%)<tower::buffer::worker::Worker<T,Request> as core::future::future::Future>::poll (124 samples, 1.01%)__vdso_clock_gettime (2 samples, 0.02%)[unknown] (2 samples, 0.02%)hyper::body::body::Body::h2 (2 samples, 0.02%)h2::proto::streams::streams::OpaqueStreamRef::is_end_stream (3 samples, 0.02%)http::response::Response<T>::map (10 samples, 0.08%)hyper::proto::h2::client::ClientTask<B>::poll_pipe::_{{closure}}::_{{closure}} (10 samples, 0.08%)hyper::proto::h2::ping::Recorder::for_stream (5 samples, 0.04%)http::header::map::HeaderMap<T>::get_all (6 samples, 0.05%)<http::header::name::HeaderName as http::header::map::as_header_name::Sealed>::find (6 samples, 0.05%)http::header::map::HeaderMap<T>::find (6 samples, 0.05%)http::header::map::hash_elem_using (3 samples, 0.02%)hyper::headers::content_length_parse_all (11 samples, 0.09%)hyper::headers::content_length_parse_all_values (3 samples, 0.02%)<http::header::map::ValueIter<T> as core::iter::traits::iterator::Iterator>::next (3 samples, 0.02%)<T as futures_util::fns::FnOnce1<A>>::call_once (28 samples, 0.23%)hyper::proto::h2::client::ClientTask<B>::poll_pipe::_{{closure}} (25 samples, 0.20%)hyper::proto::h2::ping::Recorder::record_non_data (3 samples, 0.02%)<h2::proto::streams::streams::OpaqueStreamRef as core::clone::Clone>::clone (5 samples, 0.04%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<h2::proto::streams::streams::Inner>> (2 samples, 0.02%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (2 samples, 0.02%)std::sys::unix::locks::futex_mutex::Mutex::unlock (2 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::DerefMut>::deref_mut (2 samples, 0.02%)<h2::proto::streams::store::Store as core::ops::index::IndexMut<h2::proto::streams::store::Key>>::index_mut (2 samples, 0.02%)slab::Slab<T>::get_mut (2 samples, 0.02%)h2::proto::streams::buffer::Deque::pop_front (3 samples, 0.02%)slab::Slab<T>::remove (2 samples, 0.02%)slab::Slab<T>::try_remove (2 samples, 0.02%)core::mem::replace (2 samples, 0.02%)core::ptr::read (2 samples, 0.02%)<h2::client::ResponseFuture as core::future::future::Future>::poll (20 samples, 0.16%)h2::proto::streams::streams::OpaqueStreamRef::poll_response (11 samples, 0.09%)h2::proto::streams::recv::Recv::poll_response (10 samples, 0.08%)h2::proto::streams::state::State::ensure_recv_open (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::DerefMut>::deref_mut (2 samples, 0.02%)h2::proto::streams::counts::Counts::transition_after (2 samples, 0.02%)h2::proto::streams::counts::Counts::transition (4 samples, 0.03%)h2::proto::streams::streams::drop_stream_ref::_{{closure}} (2 samples, 0.02%)<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (59 samples, 0.48%)<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (59 samples, 0.48%)futures_util::future::future::map::_::<impl futures_util::future::future::map::Map<Fut,F>>::project_replace (8 samples, 0.06%)core::ptr::drop_in_place<(pin_project_lite::__private::UnsafeDropInPlaceGuard<h2::client::ResponseFuture>,())> (8 samples, 0.06%)core::ptr::drop_in_place<pin_project_lite::__private::UnsafeDropInPlaceGuard<h2::client::ResponseFuture>> (8 samples, 0.06%)<pin_project_lite::__private::UnsafeDropInPlaceGuard<T> as core::ops::drop::Drop>::drop (8 samples, 0.06%)core::ptr::drop_in_place<h2::client::ResponseFuture> (8 samples, 0.06%)core::ptr::drop_in_place<h2::proto::streams::streams::OpaqueStreamRef> (8 samples, 0.06%)<h2::proto::streams::streams::OpaqueStreamRef as core::ops::drop::Drop>::drop (8 samples, 0.06%)h2::proto::streams::streams::drop_stream_ref (8 samples, 0.06%)tokio::runtime::coop::poll_proceed (3 samples, 0.02%)tokio::runtime::context::budget (3 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (3 samples, 0.02%)tokio::runtime::context::budget::_{{closure}} (3 samples, 0.02%)tokio::runtime::coop::poll_proceed::_{{closure}} (3 samples, 0.02%)tokio::runtime::coop::Budget::decrement (3 samples, 0.02%)tokio::sync::oneshot::State::load (4 samples, 0.03%)core::sync::atomic::AtomicUsize::load (4 samples, 0.03%)core::sync::atomic::atomic_load (4 samples, 0.03%)hyper::client::dispatch::Callback<T,U>::poll_canceled (15 samples, 0.12%)tokio::sync::oneshot::Sender<T>::poll_closed (15 samples, 0.12%)tokio::sync::oneshot::Task::set_task (5 samples, 0.04%)<hyper::client::dispatch::Callback<T,U> as core::ops::drop::Drop>::drop (2 samples, 0.02%)hyper::error::Error::new_user_dispatch_gone (2 samples, 0.02%)hyper::error::Error::new (2 samples, 0.02%)cfree (2 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>> (4 samples, 0.03%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>> (4 samples, 0.03%)core::ptr::drop_in_place<hyper::client::dispatch::Callback<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>,http::response::Response<hyper::body::body::Body>>> (11 samples, 0.09%)core::ptr::drop_in_place<hyper::error::Error> (6 samples, 0.05%)core::ptr::drop_in_place<alloc::boxed::Box<hyper::error::ErrorImpl>> (5 samples, 0.04%)core::ptr::drop_in_place<hyper::error::ErrorImpl> (5 samples, 0.04%)tokio::sync::oneshot::State::set_complete (2 samples, 0.02%)<futures_util::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (97 samples, 0.79%)hyper::client::dispatch::Callback<T,U>::send_when::_{{closure}}::_{{closure}} (96 samples, 0.78%)hyper::client::dispatch::Callback<T,U>::send (21 samples, 0.17%)tokio::sync::oneshot::Sender<T>::send (9 samples, 0.07%)tokio::sync::oneshot::Inner<T>::complete (7 samples, 0.06%)tokio::sync::oneshot::Task::with_task (4 samples, 0.03%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (4 samples, 0.03%)tokio::sync::oneshot::Task::with_task::_{{closure}} (4 samples, 0.03%)core::ops::function::FnOnce::call_once (4 samples, 0.03%)core::task::wake::Waker::wake_by_ref (4 samples, 0.03%)tokio::runtime::task::waker::wake_by_ref (3 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_ref (2 samples, 0.02%)tokio::runtime::task::state::State::transition_to_notified_by_ref (2 samples, 0.02%)tokio::runtime::task::state::State::fetch_update_action (2 samples, 0.02%)tokio::runtime::task::state::State::load (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)hyper::client::dispatch::Callback<T,U>::send_when::_{{closure}} (106 samples, 0.86%)futures_channel::mpsc::State::is_closed (2 samples, 0.02%)futures_channel::mpsc::decode_state (2 samples, 0.02%)core::ptr::mut_ptr::<impl *mut T>::is_null (2 samples, 0.02%)core::ptr::mut_ptr::<impl *mut T>::is_null::runtime_impl (2 samples, 0.02%)futures_channel::mpsc::Receiver<T>::next_message (12 samples, 0.10%)futures_channel::mpsc::queue::Queue<T>::pop_spin (7 samples, 0.06%)futures_channel::mpsc::queue::Queue<T>::pop (7 samples, 0.06%)core::sync::atomic::AtomicPtr<T>::load (5 samples, 0.04%)core::sync::atomic::atomic_load (5 samples, 0.04%)<futures_util::stream::stream::into_future::StreamFuture<St> as core::future::future::Future>::poll (22 samples, 0.18%)futures_util::stream::stream::StreamExt::poll_next_unpin (21 samples, 0.17%)<futures_channel::mpsc::Receiver<T> as futures_core::stream::Stream>::poll_next (21 samples, 0.17%)futures_core::task::__internal::atomic_waker::AtomicWaker::register (5 samples, 0.04%)<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (27 samples, 0.22%)<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (27 samples, 0.22%)futures_util::future::future::map::_::<impl futures_util::future::future::map::Map<Fut,F>>::project (4 samples, 0.03%)h2::proto::connection::Connection<T,P,B>::maybe_close_connection_if_no_streams (8 samples, 0.06%)h2::proto::streams::streams::Streams<B,P>::has_streams_or_other_references (7 samples, 0.06%)std::sync::mutex::Mutex<T>::lock (3 samples, 0.02%)std::sys::unix::locks::futex_mutex::Mutex::lock (3 samples, 0.02%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (4 samples, 0.03%)tokio_util::codec::length_delimited::LengthDelimitedCodec::decode_data (3 samples, 0.02%)bytes::bytes_mut::BytesMut::split_to (3 samples, 0.02%)bytes::bytes_mut::BytesMut::shallow_clone (2 samples, 0.02%)bytes::bytes_mut::increment_shared (2 samples, 0.02%)<tokio_util::codec::length_delimited::LengthDelimitedCodec as tokio_util::codec::decoder::Decoder>::decode (5 samples, 0.04%)tokio_util::codec::length_delimited::LengthDelimitedCodec::decode_head (2 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::chunk_mut (2 samples, 0.02%)<T as core::convert::Into<U>>::into (2 samples, 0.02%)<&mut bytes::buf::uninit_slice::UninitSlice as core::convert::From<&mut [u8]>>::from (2 samples, 0.02%)<tonic::transport::service::io::BoxedIo as tokio::io::async_read::AsyncRead>::poll_read (9 samples, 0.07%)<core::pin::Pin<P> as tokio::io::async_read::AsyncRead>::poll_read (9 samples, 0.07%)core::pin::Pin<P>::as_mut (4 samples, 0.03%)<alloc::boxed::Box<T,A> as core::ops::deref::DerefMut>::deref_mut (4 samples, 0.03%)[libc.so.6] (3 samples, 0.02%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read (19 samples, 0.15%)mio::io_source::IoSource<T>::do_io (17 samples, 0.14%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (17 samples, 0.14%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read::_{{closure}} (17 samples, 0.14%)<&std::net::tcp::TcpStream as std::io::Read>::read (17 samples, 0.14%)std::sys_common::net::TcpStream::read (17 samples, 0.14%)std::sys::unix::net::Socket::read (17 samples, 0.14%)std::sys::unix::net::Socket::recv_with_flags (17 samples, 0.14%)recv (17 samples, 0.14%)[unknown] (14 samples, 0.11%)[unknown] (14 samples, 0.11%)[unknown] (13 samples, 0.11%)[unknown] (12 samples, 0.10%)[unknown] (6 samples, 0.05%)[unknown] (5 samples, 0.04%)<h2::codec::framed_write::FramedWrite<T,B> as tokio::io::async_read::AsyncRead>::poll_read (47 samples, 0.38%)tokio::net::tcp::stream::TcpStream::poll_read_priv (37 samples, 0.30%)tokio::io::poll_evented::PollEvented<E>::poll_read (37 samples, 0.30%)tokio::runtime::io::registration::Registration::poll_read_ready (14 samples, 0.11%)tokio::runtime::io::registration::Registration::poll_ready (14 samples, 0.11%)tokio::runtime::io::scheduled_io::ScheduledIo::poll_readiness (12 samples, 0.10%)tokio::runtime::io::driver::Direction::mask (5 samples, 0.04%)tokio_util::util::poll_buf::poll_read_buf (55 samples, 0.45%)tokio::io::read_buf::ReadBuf::filled (3 samples, 0.02%)tokio::io::read_buf::slice_assume_init (3 samples, 0.02%)<tokio_util::codec::framed_read::FramedRead<T,D> as futures_core::stream::Stream>::poll_next (66 samples, 0.54%)<tokio_util::codec::framed_impl::FramedImpl<T,U,R> as futures_core::stream::Stream>::poll_next (64 samples, 0.52%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Span> (2 samples, 0.02%)<bytes::bytes_mut::BytesMut as core::ops::deref::Deref>::deref (2 samples, 0.02%)<bytes::bytes_mut::BytesMut as core::convert::AsRef<[u8]>>::as_ref (2 samples, 0.02%)bytes::bytes_mut::BytesMut::as_slice (2 samples, 0.02%)[libc.so.6] (4 samples, 0.03%)bytes::bytes_mut::BytesMut::split_to (7 samples, 0.06%)bytes::bytes_mut::BytesMut::shallow_clone (3 samples, 0.02%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (2 samples, 0.02%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (2 samples, 0.02%)bytes::bytes_mut::BytesMut::kind (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Span> (2 samples, 0.02%)h2::frame::head::Head::parse (2 samples, 0.02%)h2::frame::headers::Headers::load (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Span> (2 samples, 0.02%)<http::header::name::HeaderName as core::cmp::PartialEq<&str>>::eq (5 samples, 0.04%)<http::header::name::HeaderName as core::cmp::PartialEq<str>>::eq (5 samples, 0.04%)http::header::name::HeaderName::as_str (4 samples, 0.03%)http::header::map::HeaderMap<T>::insert_entry (3 samples, 0.02%)alloc::vec::Vec<T,A>::push (3 samples, 0.02%)core::ptr::write (3 samples, 0.02%)alloc::vec::Vec<T>::with_capacity (3 samples, 0.02%)alloc::vec::Vec<T,A>::with_capacity_in (3 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (3 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::allocate_in (3 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (3 samples, 0.02%)alloc::alloc::Global::alloc_impl (3 samples, 0.02%)alloc::alloc::alloc (3 samples, 0.02%)malloc (3 samples, 0.02%)alloc::vec::from_elem (2 samples, 0.02%)<T as alloc::vec::spec_from_elem::SpecFromElem>::from_elem (2 samples, 0.02%)alloc::vec::Vec<T,A>::with_capacity_in (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::allocate_in (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (2 samples, 0.02%)alloc::alloc::Global::alloc_impl (2 samples, 0.02%)alloc::alloc::alloc (2 samples, 0.02%)malloc (2 samples, 0.02%)http::header::map::Danger::is_yellow (2 samples, 0.02%)http::header::map::HeaderMap<T>::append (13 samples, 0.11%)<http::header::name::HeaderName as http::header::map::into_header_name::Sealed>::append (13 samples, 0.11%)http::header::map::HeaderMap<T>::append2 (13 samples, 0.11%)http::header::map::HeaderMap<T>::reserve_one (10 samples, 0.08%)h2::frame::headers::HeaderBlock::load::_{{closure}} (30 samples, 0.24%)http::header::name::HeaderName::as_str (3 samples, 0.02%)<http::header::name::HeaderName as core::clone::Clone>::clone (5 samples, 0.04%)<http::header::name::Repr<T> as core::clone::Clone>::clone (3 samples, 0.02%)<http::header::name::Custom as core::clone::Clone>::clone (2 samples, 0.02%)<http::byte_str::ByteStr as core::clone::Clone>::clone (2 samples, 0.02%)h2::hpack::decoder::Table::get (11 samples, 0.09%)<h2::hpack::header::Header<T> as core::clone::Clone>::clone (10 samples, 0.08%)<http::header::value::HeaderValue as core::clone::Clone>::clone (2 samples, 0.02%)<bytes::bytes::Bytes as core::clone::Clone>::clone (2 samples, 0.02%)bytes::bytes::shared_clone (2 samples, 0.02%)bytes::bytes::shallow_clone_arc (2 samples, 0.02%)h2::hpack::decoder::Decoder::decode_indexed (15 samples, 0.12%)core::ptr::drop_in_place<bytes::bytes::Bytes> (2 samples, 0.02%)<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (2 samples, 0.02%)h2::hpack::decoder::consume (11 samples, 0.09%)h2::hpack::decoder::take (8 samples, 0.06%)bytes::bytes_mut::BytesMut::split_to (3 samples, 0.02%)h2::hpack::decoder::peek_u8 (3 samples, 0.02%)h2::codec::framed_read::decode_frame (98 samples, 0.80%)h2::frame::headers::Headers::load_hpack (69 samples, 0.56%)h2::frame::headers::HeaderBlock::load (69 samples, 0.56%)h2::hpack::decoder::Decoder::decode (67 samples, 0.54%)<h2::codec::Codec<T,B> as futures_core::stream::Stream>::poll_next (177 samples, 1.44%)<h2::codec::framed_read::FramedRead<T> as futures_core::stream::Stream>::poll_next (177 samples, 1.44%)tracing::__macro_support::__disabled_span (2 samples, 0.02%)tracing::span::Span::new_disabled (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)h2::proto::connection::Connection<T,P,B>::clear_expired_reset_streams (4 samples, 0.03%)h2::proto::streams::streams::Streams<B,P>::clear_expired_reset_streams (3 samples, 0.02%)h2::proto::connection::Connection<T,P,B>::poll_go_away (6 samples, 0.05%)h2::proto::go_away::GoAway::send_pending_go_away (6 samples, 0.05%)h2::proto::go_away::GoAway::should_close_now (4 samples, 0.03%)core::ptr::drop_in_place<tracing::span::Span> (6 samples, 0.05%)h2::proto::ping_pong::PingPong::send_pending_pong (2 samples, 0.02%)h2::proto::settings::Settings::poll_send (7 samples, 0.06%)h2::proto::streams::streams::Streams<B,P>::send_pending_refusal (3 samples, 0.02%)std::sync::mutex::Mutex<T>::lock (2 samples, 0.02%)std::sys::unix::locks::futex_mutex::Mutex::lock (2 samples, 0.02%)h2::proto::connection::Connection<T,P,B>::poll_ready (26 samples, 0.21%)tracing::span::Span::enter (2 samples, 0.02%)tracing::span::Span::do_enter (2 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (3 samples, 0.02%)alloc::sync::Arc<T,A>::inner (3 samples, 0.02%)core::ptr::non_null::NonNull<T>::as_ref (3 samples, 0.02%)h2::proto::connection::ConnectionInner<P,B>::as_dyn (11 samples, 0.09%)h2::proto::streams::streams::Streams<B,P>::as_dyn (11 samples, 0.09%)<h2::client::Peer as h2::proto::peer::Peer>::dyn (6 samples, 0.05%)h2::proto::streams::counts::Counts::transition (13 samples, 0.11%)h2::proto::streams::streams::Inner::recv_data::_{{closure}} (11 samples, 0.09%)h2::proto::streams::recv::Recv::recv_data (11 samples, 0.09%)h2::proto::streams::recv::Recv::consume_connection_window (3 samples, 0.02%)h2::proto::streams::store::Store::find_mut (4 samples, 0.03%)indexmap::map::IndexMap<K,V,S>::get (2 samples, 0.02%)indexmap::map::IndexMap<K,V,S>::get_index_of (2 samples, 0.02%)h2::proto::streams::streams::DynStreams<B>::recv_data (21 samples, 0.17%)h2::proto::streams::streams::Inner::recv_data (20 samples, 0.16%)h2::frame::headers::Headers::stream_id (2 samples, 0.02%)indexmap::map::IndexMap<K,V,S>::hash (3 samples, 0.02%)<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::finish (3 samples, 0.02%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::finish (3 samples, 0.02%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::finish (3 samples, 0.02%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::d_rounds (2 samples, 0.02%)h2::proto::streams::counts::Counts::transition_after (6 samples, 0.05%)h2::proto::streams::store::Ptr::unlink (4 samples, 0.03%)indexmap::map::IndexMap<K,V,S>::swap_remove (4 samples, 0.03%)indexmap::map::IndexMap<K,V,S>::swap_remove_full (4 samples, 0.03%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (2 samples, 0.02%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (4 samples, 0.03%)[libc.so.6] (4 samples, 0.03%)h2::frame::headers::Headers::into_parts (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<http::header::map::HeaderMap> (3 samples, 0.02%)core::ptr::drop_in_place<alloc::vec::Vec<http::header::map::ExtraValue<http::header::value::HeaderValue>>> (2 samples, 0.02%)<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)http::response::Builder::status (2 samples, 0.02%)http::response::Builder::and_then (2 samples, 0.02%)h2::proto::peer::Dyn::convert_poll_message (16 samples, 0.13%)<h2::client::Peer as h2::proto::peer::Peer>::convert_poll_message (15 samples, 0.12%)http::response::Response<()>::builder (4 samples, 0.03%)http::response::Builder::new (4 samples, 0.03%)<http::response::Builder as core::default::Default>::default (4 samples, 0.03%)http::response::Parts::new (4 samples, 0.03%)<http::header::map::HeaderMap<T> as core::default::Default>::default (2 samples, 0.02%)http::header::map::HeaderMap<T>::with_capacity (2 samples, 0.02%)h2::proto::streams::buffer::Deque::push_back (4 samples, 0.03%)slab::Slab<T>::insert (4 samples, 0.03%)slab::Slab<T>::insert_at (4 samples, 0.03%)[libc.so.6] (2 samples, 0.02%)h2::proto::streams::state::State::recv_open (2 samples, 0.02%)tokio::runtime::context::with_scheduler (2 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (2 samples, 0.02%)tokio::runtime::context::with_scheduler::_{{closure}} (2 samples, 0.02%)tokio::runtime::context::scoped::Scoped<T>::with (2 samples, 0.02%)tokio::runtime::scheduler::current_thread::_<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>::schedule::_{{closure}} (2 samples, 0.02%)tokio::runtime::task::raw::RawTask::schedule (3 samples, 0.02%)h2::proto::streams::stream::Stream::notify_recv (8 samples, 0.06%)core::task::wake::Waker::wake (8 samples, 0.06%)tokio::runtime::task::waker::wake_by_val (7 samples, 0.06%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (7 samples, 0.06%)tokio::runtime::task::state::State::transition_to_notified_by_val (3 samples, 0.02%)tokio::runtime::task::state::State::fetch_update_action (3 samples, 0.02%)tokio::runtime::task::state::State::load (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)h2::proto::streams::recv::Recv::recv_headers (41 samples, 0.33%)http::header::map::HeaderMap<T>::get (2 samples, 0.02%)h2::frame::headers::Headers::into_fields (2 samples, 0.02%)core::ptr::drop_in_place<h2::frame::headers::Pseudo> (2 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<h2::ext::Protocol>> (2 samples, 0.02%)h2::proto::streams::buffer::Deque::push_back (2 samples, 0.02%)h2::proto::streams::recv::Recv::recv_trailers (8 samples, 0.06%)h2::proto::streams::state::State::recv_close (3 samples, 0.02%)h2::proto::streams::counts::Counts::transition (69 samples, 0.56%)h2::proto::streams::streams::Inner::recv_headers::_{{closure}} (57 samples, 0.46%)h2::proto::streams::state::State::is_recv_headers (6 samples, 0.05%)h2::proto::streams::recv::Recv::max_stream_id (2 samples, 0.02%)h2::proto::streams::state::State::is_local_error (3 samples, 0.02%)h2::proto::streams::store::OccupiedEntry::key (2 samples, 0.02%)<h2::frame::stream_id::StreamId as core::hash::Hash>::hash (2 samples, 0.02%)core::hash::impls::<impl core::hash::Hash for u32>::hash (2 samples, 0.02%)core::hash::Hasher::write_u32 (2 samples, 0.02%)<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::write (2 samples, 0.02%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::write (2 samples, 0.02%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (2 samples, 0.02%)indexmap::map::IndexMap<K,V,S>::hash (6 samples, 0.05%)<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::finish (2 samples, 0.02%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::finish (2 samples, 0.02%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::finish (2 samples, 0.02%)h2::proto::streams::store::Store::find_entry (10 samples, 0.08%)indexmap::map::IndexMap<K,V,S>::entry (9 samples, 0.07%)indexmap::map::core::raw::<impl indexmap::map::core::IndexMapCore<K,V>>::entry (3 samples, 0.02%)hashbrown::raw::inner::RawTable<T,A>::find (3 samples, 0.02%)h2::proto::streams::streams::DynStreams<B>::recv_headers (95 samples, 0.77%)h2::proto::streams::streams::Inner::recv_headers (94 samples, 0.76%)std::sync::mutex::Mutex<T>::lock (2 samples, 0.02%)std::sys::unix::locks::futex_mutex::Mutex::lock (2 samples, 0.02%)h2::proto::connection::Connection<T,P,B>::poll2 (352 samples, 2.86%)h2..h2::proto::connection::DynConnection<B>::recv_frame (122 samples, 0.99%)<core::task::wake::Waker as core::clone::Clone>::clone (2 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<core::task::wake::Waker>> (2 samples, 0.02%)core::ptr::drop_in_place<core::task::wake::Waker> (2 samples, 0.02%)<core::task::wake::Waker as core::ops::drop::Drop>::drop (2 samples, 0.02%)h2::proto::streams::recv::Recv::send_connection_window_update (4 samples, 0.03%)h2::proto::streams::flow_control::FlowControl::unclaimed_capacity (4 samples, 0.03%)h2::codec::Codec<T,B>::poll_ready (2 samples, 0.02%)h2::codec::framed_write::FramedWrite<T,B>::poll_ready (2 samples, 0.02%)h2::proto::streams::recv::Recv::poll_complete (8 samples, 0.06%)h2::proto::streams::recv::Recv::send_stream_window_updates (4 samples, 0.03%)[libc.so.6] (7 samples, 0.06%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put (2 samples, 0.02%)bytes::bytes_mut::BytesMut::extend_from_slice (2 samples, 0.02%)core::intrinsics::copy_nonoverlapping (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<h2::proto::streams::prioritize::Prioritized<B> as bytes::buf::buf_impl::Buf>::remaining (3 samples, 0.02%)<bytes::buf::take::Take<T> as bytes::buf::buf_impl::Buf>::remaining (3 samples, 0.02%)core::cmp::min (2 samples, 0.02%)core::cmp::Ord::min (2 samples, 0.02%)core::cmp::min_by (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Entered> (2 samples, 0.02%)<tracing::span::Entered as core::ops::drop::Drop>::drop (2 samples, 0.02%)tracing::span::Span::do_exit (2 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put (3 samples, 0.02%)h2::frame::data::Data<T>::encode_chunk (10 samples, 0.08%)h2::frame::head::Head::encode (6 samples, 0.05%)bytes::buf::buf_mut::BufMut::put_uint (4 samples, 0.03%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_slice (4 samples, 0.03%)bytes::bytes_mut::BytesMut::extend_from_slice (2 samples, 0.02%)h2::frame::head::Head::encode (2 samples, 0.02%)<T as core::convert::Into<U>>::into (2 samples, 0.02%)h2::frame::reason::<impl core::convert::From<h2::frame::reason::Reason> for u32>::from (2 samples, 0.02%)core::ptr::drop_in_place<h2::frame::headers::EncodingHeaderBlock> (2 samples, 0.02%)core::ptr::drop_in_place<bytes::bytes::Bytes> (2 samples, 0.02%)<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (2 samples, 0.02%)bytes::buf::buf_mut::BufMut::put_u32 (2 samples, 0.02%)bytes::buf::buf_mut::BufMut::put_slice (2 samples, 0.02%)bytes::buf::buf_mut::BufMut::put_u8 (4 samples, 0.03%)bytes::buf::buf_mut::BufMut::put_slice (4 samples, 0.03%)core::intrinsics::copy_nonoverlapping (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)h2::frame::headers::EncodingHeaderBlock::encode (9 samples, 0.07%)h2::frame::head::Head::encode (7 samples, 0.06%)<http::header::map::HeaderMap<T> as core::iter::traits::collect::IntoIterator>::into_iter (3 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<[http::header::map::Pos]>> (3 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (3 samples, 0.02%)alloc::alloc::dealloc (3 samples, 0.02%)cfree (3 samples, 0.02%)bytes::bytes_mut::BytesMut::freeze (3 samples, 0.02%)<T as core::convert::Into<U>>::into (3 samples, 0.02%)<bytes::bytes::Bytes as core::convert::From<alloc::vec::Vec<u8>>>::from (3 samples, 0.02%)<http::header::map::IntoIter<T> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)<h2::frame::headers::Iter as core::iter::traits::iterator::Iterator>::next (10 samples, 0.08%)core::ptr::drop_in_place<core::option::Option<h2::frame::headers::Pseudo>> (2 samples, 0.02%)core::ptr::drop_in_place<h2::frame::headers::Pseudo> (2 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<h2::hpack::header::BytesStr>> (2 samples, 0.02%)bytes::bytes::promotable_even_drop (4 samples, 0.03%)cfree (4 samples, 0.03%)[libc.so.6] (3 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<h2::hpack::table::Index>> (12 samples, 0.10%)core::ptr::drop_in_place<h2::hpack::table::Index> (10 samples, 0.08%)core::ptr::drop_in_place<h2::hpack::header::Header> (6 samples, 0.05%)core::ptr::drop_in_place<http::header::value::HeaderValue> (2 samples, 0.02%)core::ptr::drop_in_place<bytes::bytes::Bytes> (2 samples, 0.02%)<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (2 samples, 0.02%)<http::header::map::IntoIter<T> as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::ptr::drop_in_place<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<http::header::map::Bucket<http::header::value::HeaderValue>,alloc::alloc::Global>> (2 samples, 0.02%)<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<http::header::map::Bucket<http::header::value::HeaderValue>>> (2 samples, 0.02%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (2 samples, 0.02%)alloc::alloc::dealloc (2 samples, 0.02%)core::ptr::drop_in_place<http::header::map::IntoIter<http::header::value::HeaderValue>> (6 samples, 0.05%)core::ptr::drop_in_place<alloc::vec::into_iter::IntoIter<http::header::map::Bucket<http::header::value::HeaderValue>>> (4 samples, 0.03%)<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop (4 samples, 0.03%)core::ptr::drop_in_place<[http::header::map::Bucket<http::header::value::HeaderValue>]> (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Span> (4 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::grow (4 samples, 0.03%)alloc::alloc::Global::grow_impl (4 samples, 0.03%)alloc::alloc::realloc (4 samples, 0.03%)realloc (4 samples, 0.03%)[libc.so.6] (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (9 samples, 0.07%)alloc::raw_vec::RawVec<T,A>::reserve (9 samples, 0.07%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (9 samples, 0.07%)alloc::raw_vec::RawVec<T,A>::grow_amortized (9 samples, 0.07%)alloc::raw_vec::finish_grow (7 samples, 0.06%)h2::hpack::encoder::encode_int (14 samples, 0.11%)bytes::buf::buf_mut::BufMut::put_u8 (14 samples, 0.11%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_slice (14 samples, 0.11%)bytes::bytes_mut::BytesMut::extend_from_slice (12 samples, 0.10%)bytes::bytes_mut::BytesMut::reserve (12 samples, 0.10%)bytes::bytes_mut::BytesMut::reserve_inner (12 samples, 0.10%)h2::hpack::encoder::encode_not_indexed (3 samples, 0.02%)h2::hpack::encoder::encode_int (3 samples, 0.02%)bytes::buf::buf_mut::BufMut::put_u8 (3 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_slice (3 samples, 0.02%)bytes::bytes_mut::BytesMut::reserve (12 samples, 0.10%)bytes::bytes_mut::BytesMut::reserve_inner (12 samples, 0.10%)alloc::vec::Vec<T,A>::reserve (11 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::reserve (11 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (11 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::grow_amortized (10 samples, 0.08%)alloc::raw_vec::finish_grow (10 samples, 0.08%)<alloc::alloc::Global as core::alloc::Allocator>::grow (10 samples, 0.08%)alloc::alloc::Global::grow_impl (10 samples, 0.08%)alloc::alloc::realloc (10 samples, 0.08%)realloc (10 samples, 0.08%)[libc.so.6] (8 samples, 0.06%)[libc.so.6] (8 samples, 0.06%)h2::hpack::encoder::Encoder::encode_header (42 samples, 0.34%)h2::hpack::encoder::encode_str (22 samples, 0.18%)h2::hpack::huffman::encode (21 samples, 0.17%)bytes::buf::buf_mut::BufMut::put_u8 (16 samples, 0.13%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put_slice (16 samples, 0.13%)bytes::bytes_mut::BytesMut::extend_from_slice (14 samples, 0.11%)core::intrinsics::copy_nonoverlapping (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)h2::hpack::header::Header<core::option::Option<http::header::name::HeaderName>>::reify (6 samples, 0.05%)h2::hpack::header::Header::len (3 samples, 0.02%)<h2::hpack::header::Name as core::cmp::PartialEq>::eq (3 samples, 0.02%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (2 samples, 0.02%)<http::header::name::HeaderName as core::cmp::PartialEq>::eq (2 samples, 0.02%)<http::header::name::Repr<T> as core::cmp::PartialEq>::eq (2 samples, 0.02%)alloc::vec::Vec<T,A>::is_empty (2 samples, 0.02%)alloc::vec::Vec<T,A>::len (2 samples, 0.02%)<bytes::bytes::Bytes as core::cmp::PartialEq>::eq (7 samples, 0.06%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (7 samples, 0.06%)core::slice::cmp::<impl core::cmp::PartialEq<[B]> for [A]>::eq (7 samples, 0.06%)<[A] as core::slice::cmp::SlicePartialEq<B>>::equal (7 samples, 0.06%)[libc.so.6] (6 samples, 0.05%)h2::hpack::table::Table::index_occupied (9 samples, 0.07%)h2::hpack::header::Header::value_eq (2 samples, 0.02%)h2::hpack::table::Table::index_dynamic (18 samples, 0.15%)h2::frame::headers::Headers::encode (138 samples, 1.12%)h2::frame::headers::HeaderBlock::into_encoding (128 samples, 1.04%)h2::hpack::encoder::Encoder::encode (121 samples, 0.98%)h2::hpack::table::Table::index (30 samples, 0.24%)h2::hpack::table::index_static (8 samples, 0.06%)h2::codec::Codec<T,B>::buffer (170 samples, 1.38%)h2::codec::framed_write::FramedWrite<T,B>::buffer (170 samples, 1.38%)h2::codec::framed_write::Encoder<B>::buffer (170 samples, 1.38%)<tonic::transport::service::io::BoxedIo as tokio::io::async_write::AsyncWrite>::poll_flush (2 samples, 0.02%)<core::pin::Pin<P> as tokio::io::async_write::AsyncWrite>::poll_flush (2 samples, 0.02%)core::pin::Pin<P>::as_mut (2 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::deref::DerefMut>::deref_mut (2 samples, 0.02%)h2::codec::framed_write::Encoder<B>::unset_frame (3 samples, 0.02%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write (19 samples, 0.15%)mio::io_source::IoSource<T>::do_io (19 samples, 0.15%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (19 samples, 0.15%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write::_{{closure}} (19 samples, 0.15%)<&std::net::tcp::TcpStream as std::io::Write>::write (19 samples, 0.15%)std::sys_common::net::TcpStream::write (18 samples, 0.15%)__send (18 samples, 0.15%)[unknown] (18 samples, 0.15%)[unknown] (16 samples, 0.13%)[unknown] (14 samples, 0.11%)[unknown] (14 samples, 0.11%)[unknown] (11 samples, 0.09%)[unknown] (7 samples, 0.06%)tokio_util::util::poll_buf::poll_write_buf (23 samples, 0.19%)<tonic::transport::service::io::BoxedIo as tokio::io::async_write::AsyncWrite>::poll_write (23 samples, 0.19%)<core::pin::Pin<P> as tokio::io::async_write::AsyncWrite>::poll_write (21 samples, 0.17%)<tokio::net::tcp::stream::TcpStream as tokio::io::async_write::AsyncWrite>::poll_write (21 samples, 0.17%)tokio::net::tcp::stream::TcpStream::poll_write_priv (21 samples, 0.17%)tokio::io::poll_evented::PollEvented<E>::poll_write (20 samples, 0.16%)h2::codec::Codec<T,B>::flush (33 samples, 0.27%)h2::codec::framed_write::FramedWrite<T,B>::flush (33 samples, 0.27%)h2::codec::framed_write::Encoder<B>::has_capacity (3 samples, 0.02%)bytes::bytes_mut::BytesMut::capacity (2 samples, 0.02%)h2::codec::Codec<T,B>::poll_ready (29 samples, 0.24%)h2::codec::framed_write::FramedWrite<T,B>::poll_ready (29 samples, 0.24%)h2::codec::framed_write::FramedWrite<T,B>::flush (26 samples, 0.21%)tokio_util::util::poll_buf::poll_write_buf (24 samples, 0.19%)<tonic::transport::service::io::BoxedIo as tokio::io::async_write::AsyncWrite>::poll_write (23 samples, 0.19%)<core::pin::Pin<P> as tokio::io::async_write::AsyncWrite>::poll_write (23 samples, 0.19%)<tokio::net::tcp::stream::TcpStream as tokio::io::async_write::AsyncWrite>::poll_write (23 samples, 0.19%)tokio::net::tcp::stream::TcpStream::poll_write_priv (23 samples, 0.19%)tokio::io::poll_evented::PollEvented<E>::poll_write (23 samples, 0.19%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write (23 samples, 0.19%)mio::io_source::IoSource<T>::do_io (20 samples, 0.16%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (20 samples, 0.16%)<&mio::net::tcp::stream::TcpStream as std::io::Write>::write::_{{closure}} (20 samples, 0.16%)<&std::net::tcp::TcpStream as std::io::Write>::write (20 samples, 0.16%)std::sys_common::net::TcpStream::write (19 samples, 0.15%)__send (19 samples, 0.15%)[unknown] (19 samples, 0.15%)[unknown] (19 samples, 0.15%)[unknown] (17 samples, 0.14%)[unknown] (17 samples, 0.14%)[unknown] (14 samples, 0.11%)[unknown] (10 samples, 0.08%)[unknown] (3 samples, 0.02%)[unknown] (3 samples, 0.02%)[unknown] (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)h2::frame::Frame<T>::map (3 samples, 0.02%)h2::frame::data::Data<T>::map (2 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::pop_frame::_{{closure}} (2 samples, 0.02%)h2::proto::streams::store::Ptr::key (2 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)h2::proto::streams::buffer::Deque::pop_front (13 samples, 0.11%)slab::Slab<T>::remove (9 samples, 0.07%)slab::Slab<T>::try_remove (9 samples, 0.07%)core::mem::replace (7 samples, 0.06%)core::ptr::read (7 samples, 0.06%)[libc.so.6] (6 samples, 0.05%)h2::proto::streams::counts::Counts::transition_after (3 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (2 samples, 0.02%)h2::proto::streams::flow_control::Window::as_size (2 samples, 0.02%)h2::proto::streams::state::State::is_scheduled_reset (3 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (2 samples, 0.02%)h2::proto::streams::store::Queue<N>::pop (6 samples, 0.05%)h2::proto::streams::store::Queue<N>::push (6 samples, 0.05%)tracing::__macro_support::__disabled_span (5 samples, 0.04%)tracing::span::Span::new_disabled (5 samples, 0.04%)tracing::span::Span::enter (4 samples, 0.03%)tracing::span::Span::do_enter (4 samples, 0.03%)h2::proto::streams::flow_control::FlowControl::assign_capacity (3 samples, 0.02%)h2::proto::streams::flow_control::Window::increase_by (3 samples, 0.02%)h2::proto::streams::flow_control::Window::add (3 samples, 0.02%)core::num::<impl i32>::checked_add (3 samples, 0.02%)core::num::<impl i32>::overflowing_add (3 samples, 0.02%)h2::proto::streams::flow_control::FlowControl::send_data (4 samples, 0.03%)h2::proto::streams::prioritize::Prioritize::pop_frame (77 samples, 0.62%)tracing::span::Span::in_scope (11 samples, 0.09%)h2::proto::streams::prioritize::Prioritize::pop_frame::_{{closure}} (11 samples, 0.09%)h2::proto::streams::stream::Stream::send_data (7 samples, 0.06%)h2::proto::streams::store::Queue<N>::pop (4 samples, 0.03%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (2 samples, 0.02%)<h2::proto::streams::store::Store as core::ops::index::Index<h2::proto::streams::store::Key>>::index (2 samples, 0.02%)slab::Slab<T>::get (2 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::pop_pending_open (13 samples, 0.11%)core::ptr::drop_in_place<tracing::span::Span> (3 samples, 0.02%)bytes::bytes_mut::shared_v_drop (9 samples, 0.07%)<core::sync::atomic::AtomicPtr<T> as bytes::loom::sync::atomic::AtomicMut<T>>::with_mut (9 samples, 0.07%)bytes::bytes_mut::shared_v_drop::_{{closure}} (8 samples, 0.06%)bytes::bytes_mut::release_shared (8 samples, 0.06%)core::mem::drop (7 samples, 0.06%)core::ptr::drop_in_place<alloc::boxed::Box<bytes::bytes_mut::Shared>> (7 samples, 0.06%)core::ptr::drop_in_place<bytes::bytes_mut::Shared> (7 samples, 0.06%)core::ptr::drop_in_place<alloc::vec::Vec<u8>> (7 samples, 0.06%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<u8>> (7 samples, 0.06%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (7 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (7 samples, 0.06%)alloc::alloc::dealloc (7 samples, 0.06%)cfree (7 samples, 0.06%)[libc.so.6] (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::reclaim_frame_inner (13 samples, 0.11%)core::ptr::drop_in_place<h2::frame::data::Data<hyper::proto::h2::SendBuf<bytes::bytes::Bytes>>> (10 samples, 0.08%)core::ptr::drop_in_place<hyper::proto::h2::SendBuf<bytes::bytes::Bytes>> (10 samples, 0.08%)core::ptr::drop_in_place<bytes::bytes::Bytes> (10 samples, 0.08%)<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (10 samples, 0.08%)tracing::__macro_support::__disabled_span (3 samples, 0.02%)tracing::span::Span::new_disabled (3 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::reclaim_frame (27 samples, 0.22%)<h2::proto::streams::store::Ptr as core::ops::deref::Deref>::deref (2 samples, 0.02%)<h2::proto::streams::store::Ptr as core::ops::deref::DerefMut>::deref_mut (2 samples, 0.02%)h2::proto::streams::send::Send::poll_complete (370 samples, 3.00%)h2:..h2::proto::streams::prioritize::Prioritize::poll_complete (370 samples, 3.00%)h2:..h2::proto::streams::store::Queue<N>::push_front (8 samples, 0.06%)h2::proto::streams::streams::Streams<B,P>::poll_complete (387 samples, 3.14%)h2:..h2::proto::streams::streams::Inner::poll_complete (386 samples, 3.13%)h2:..std::sync::mutex::Mutex<T>::lock (2 samples, 0.02%)std::sys::unix::locks::futex_mutex::Mutex::lock (2 samples, 0.02%)core::sync::atomic::AtomicU32::compare_exchange (2 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (2 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (1,492 samples, 12.11%)<core::pin::Pin<P>..hyper::proto::h2::client::conn_task::_{{closure}} (803 samples, 6.52%)hyper::pr..<futures_util::future::select::Select<A,B> as core::future::future::Future>::poll (789 samples, 6.40%)<futures..futures_util::future::future::FutureExt::poll_unpin (786 samples, 6.38%)futures_..<futures_util::future::try_future::MapErr<Fut,F> as core::future::future::Future>::poll (759 samples, 6.16%)<futures..<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (759 samples, 6.16%)<futures..<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (759 samples, 6.16%)<futures..<futures_util::future::try_future::into_future::IntoFuture<Fut> as core::future::future::Future>::poll (757 samples, 6.14%)<futures..<F as futures_core::future::TryFuture>::try_poll (757 samples, 6.14%)<F as fu..<futures_util::future::either::Either<A,B> as core::future::future::Future>::poll (757 samples, 6.14%)<futures..<h2::client::Connection<T,B> as core::future::future::Future>::poll (757 samples, 6.14%)<h2::cli..h2::proto::connection::Connection<T,P,B>::poll (748 samples, 6.07%)h2::prot..<alloc::vec::drain::Drain<T,A> as core::iter::traits::iterator::Iterator>::next (133 samples, 1.08%)core::option::Option<T>::map (132 samples, 1.07%)<alloc::vec::drain::Drain<T,A> as core::iter::traits::iterator::Iterator>::next::_{{closure}} (132 samples, 1.07%)core::ptr::read (132 samples, 1.07%)[libc.so.6] (22 samples, 0.18%)core::ptr::mut_ptr::<impl *mut T>::add (2 samples, 0.02%)alloc::vec::Vec<T,A>::push (33 samples, 0.27%)core::ptr::write (24 samples, 0.19%)core::option::Option<T>::unwrap (64 samples, 0.52%)core::ptr::drop_in_place<core::option::Option<openraft::membership::membership::Membership<u64,openraft::node::BasicNode>>> (2 samples, 0.02%)[libc.so.6] (67 samples, 0.54%)core::ptr::drop_in_place<tracing::span::Span> (8 samples, 0.06%)<tracing::span::Span as core::ops::drop::Drop>::drop (6 samples, 0.05%)[libc.so.6] (31 samples, 0.25%)openraft::raft::Raft<C,N,LS,SM>::call_core::_{{closure}} (3 samples, 0.02%)[libc.so.6] (11 samples, 0.09%)__rdl_alloc (4 samples, 0.03%)alloc::sync::Arc<T>::new (25 samples, 0.20%)alloc::boxed::Box<T>::new (25 samples, 0.20%)alloc::alloc::exchange_malloc (14 samples, 0.11%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (13 samples, 0.11%)alloc::alloc::Global::alloc_impl (13 samples, 0.11%)alloc::alloc::alloc (13 samples, 0.11%)malloc (7 samples, 0.06%)openraft::raft::Raft<C,N,LS,SM>::client_write::_{{closure}} (226 samples, 1.83%)o..openraft::raft::Raft<C,N,LS,SM>::client_write::_{{closure}}::_{{closure}} (105 samples, 0.85%)tokio::sync::oneshot::channel (32 samples, 0.26%)tokio::sync::oneshot::State::new (3 samples, 0.02%)core::ptr::drop_in_place<tonic::extensions::Extensions> (2 samples, 0.02%)core::ptr::drop_in_place<http::extensions::Extensions> (2 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<alloc::boxed::Box<std::collections::hash::map::HashMap<core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>,core::hash::BuildHasherDefault<http::extensions::IdHasher>>>>> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<std::collections::hash::map::HashMap<core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>,core::hash::BuildHasherDefault<http::extensions::IdHasher>>>> (2 samples, 0.02%)core::ptr::drop_in_place<std::collections::hash::map::HashMap<core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>,core::hash::BuildHasherDefault<http::extensions::IdHasher>>> (2 samples, 0.02%)core::ptr::drop_in_place<hashbrown::map::HashMap<core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>,core::hash::BuildHasherDefault<http::extensions::IdHasher>>> (2 samples, 0.02%)core::ptr::drop_in_place<hashbrown::raw::RawTable<(core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>)>> (2 samples, 0.02%)<hashbrown::raw::RawTable<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)hashbrown::raw::RawTable<T,A>::drop_elements (2 samples, 0.02%)hashbrown::raw::Bucket<T>::drop (2 samples, 0.02%)core::ptr::mut_ptr::<impl *mut T>::drop_in_place (2 samples, 0.02%)core::ptr::drop_in_place<(core::any::TypeId,alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>)> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::any::Any+core::marker::Sync+core::marker::Send>> (2 samples, 0.02%)<dcache::protobuf::MyDcacheImpl as dcache::protobuf::dcache::dcache_service_server::DcacheService>::pipeline_dcache_ops::_{{closure}} (569 samples, 4.62%)<dcac..tonic::request::Request<T>::into_inner (3 samples, 0.02%)<<dcache::protobuf::dcache::dcache_service_server::DcacheServiceServer<T> as tower_service::Service<http::request::Request<B>>>::call::PipelineDcacheOpsSvc<T> as tonic::server::service::UnaryService<dcache::protobuf::dcache::DcacheBatchRequest>>::call::_{{closure}} (613 samples, 4.98%)<<dcac..<core::pin::Pin<P> as core::future::future::Future>::poll (571 samples, 4.63%)<core..core::pin::Pin<&mut core::pin::Pin<P>>::as_deref_mut (2 samples, 0.02%)core::pin::Pin<P>::as_mut (2 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::deref::DerefMut>::deref_mut (2 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (614 samples, 4.98%)<core:..alloc::raw_vec::RawVec<T,A>::reserve_for_push (12 samples, 0.10%)alloc::raw_vec::RawVec<T,A>::grow_amortized (12 samples, 0.10%)alloc::raw_vec::finish_grow (12 samples, 0.10%)<alloc::alloc::Global as core::alloc::Allocator>::grow (12 samples, 0.10%)alloc::alloc::Global::grow_impl (12 samples, 0.10%)alloc::alloc::realloc (10 samples, 0.08%)realloc (10 samples, 0.08%)[libc.so.6] (9 samples, 0.07%)[libc.so.6] (9 samples, 0.07%)alloc::vec::Vec<T,A>::push (20 samples, 0.16%)core::ptr::write (8 samples, 0.06%)<&mut T as bytes::buf::buf_impl::Buf>::remaining (3 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::remaining (3 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::remaining (2 samples, 0.02%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (2 samples, 0.02%)prost::encoding::decode_varint (11 samples, 0.09%)<&mut T as bytes::buf::buf_impl::Buf>::advance (5 samples, 0.04%)<&mut T as bytes::buf::buf_impl::Buf>::advance (5 samples, 0.04%)<tonic::codec::buffer::DecodeBuf as bytes::buf::buf_impl::Buf>::advance (5 samples, 0.04%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (5 samples, 0.04%)bytes::bytes_mut::BytesMut::set_start (5 samples, 0.04%)<dcache::protobuf::dcache::PoId as core::default::Default>::default (2 samples, 0.02%)core::result::Result<T,E>::map (2 samples, 0.02%)dcache::protobuf::dcache::dcache_request::DcacheRequest::merge::_{{closure}} (2 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<dcache::protobuf::dcache::dcache_request::DcacheRequest>> (2 samples, 0.02%)prost::encoding::decode_varint (12 samples, 0.10%)<&mut T as bytes::buf::buf_impl::Buf>::advance (6 samples, 0.05%)<&mut T as bytes::buf::buf_impl::Buf>::advance (6 samples, 0.05%)<tonic::codec::buffer::DecodeBuf as bytes::buf::buf_impl::Buf>::advance (6 samples, 0.05%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (6 samples, 0.05%)bytes::bytes_mut::BytesMut::set_start (6 samples, 0.05%)core::str::converts::from_utf8 (8 samples, 0.06%)core::str::validations::run_utf8_validation (7 samples, 0.06%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (2 samples, 0.02%)<bytes::buf::take::Take<T> as bytes::buf::buf_impl::Buf>::advance (2 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::advance (2 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::advance (2 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::advance (2 samples, 0.02%)<tonic::codec::buffer::DecodeBuf as bytes::buf::buf_impl::Buf>::advance (2 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (2 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (2 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (2 samples, 0.02%)<bytes::buf::take::Take<T> as bytes::buf::buf_impl::Buf>::chunk (4 samples, 0.03%)core::cmp::min (2 samples, 0.02%)core::cmp::Ord::min (2 samples, 0.02%)core::cmp::min_by (2 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)<alloc::vec::Vec<u8> as bytes::buf::buf_mut::BufMut>::put (15 samples, 0.12%)alloc::vec::Vec<T,A>::extend_from_slice (9 samples, 0.07%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (9 samples, 0.07%)alloc::vec::Vec<T,A>::append_elements (9 samples, 0.07%)core::intrinsics::copy_nonoverlapping (5 samples, 0.04%)[libc.so.6] (5 samples, 0.04%)prost::encoding::<impl prost::encoding::sealed::BytesAdapter for alloc::vec::Vec<u8>>::replace_with (63 samples, 0.51%)alloc::vec::Vec<T,A>::reserve (45 samples, 0.37%)alloc::raw_vec::RawVec<T,A>::reserve (45 samples, 0.37%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (45 samples, 0.37%)alloc::raw_vec::RawVec<T,A>::grow_amortized (45 samples, 0.37%)alloc::raw_vec::finish_grow (44 samples, 0.36%)malloc (42 samples, 0.34%)[libc.so.6] (28 samples, 0.23%)[libc.so.6] (8 samples, 0.06%)<&mut T as bytes::buf::buf_impl::Buf>::advance (5 samples, 0.04%)<&mut T as bytes::buf::buf_impl::Buf>::advance (5 samples, 0.04%)<tonic::codec::buffer::DecodeBuf as bytes::buf::buf_impl::Buf>::advance (5 samples, 0.04%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (5 samples, 0.04%)bytes::bytes_mut::BytesMut::set_start (5 samples, 0.04%)<dcache::protobuf::dcache::CaptchaId as prost::message::Message>::merge_field (93 samples, 0.75%)prost::encoding::string::merge (93 samples, 0.75%)prost::encoding::bytes::merge_one_copy (83 samples, 0.67%)prost::encoding::decode_varint (15 samples, 0.12%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (3 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (3 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (3 samples, 0.02%)<tonic::codec::buffer::DecodeBuf as bytes::buf::buf_impl::Buf>::chunk (3 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::advance (4 samples, 0.03%)<&mut T as bytes::buf::buf_impl::Buf>::advance (4 samples, 0.03%)<tonic::codec::buffer::DecodeBuf as bytes::buf::buf_impl::Buf>::advance (4 samples, 0.03%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (4 samples, 0.03%)bytes::bytes_mut::BytesMut::set_start (4 samples, 0.03%)<dcache::protobuf::dcache::DcacheRequest as prost::message::Message>::merge_field (136 samples, 1.10%)dcache::protobuf::dcache::dcache_request::DcacheRequest::merge (134 samples, 1.09%)prost::encoding::message::merge (125 samples, 1.01%)prost::encoding::merge_loop (125 samples, 1.01%)prost::encoding::message::merge::_{{closure}} (103 samples, 0.84%)prost::encoding::decode_key (10 samples, 0.08%)prost::encoding::decode_varint (8 samples, 0.06%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (2 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (2 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::chunk (2 samples, 0.02%)<tonic::codec::buffer::DecodeBuf as bytes::buf::buf_impl::Buf>::chunk (2 samples, 0.02%)<dcache::protobuf::dcache::DcacheBatchRequest as prost::message::Message>::merge_field (208 samples, 1.69%)prost::encoding::message::merge_repeated (207 samples, 1.68%)prost::encoding::message::merge (176 samples, 1.43%)prost::encoding::merge_loop (174 samples, 1.41%)prost::encoding::message::merge::_{{closure}} (155 samples, 1.26%)prost::encoding::decode_key (19 samples, 0.15%)prost::encoding::decode_varint (16 samples, 0.13%)<&mut T as bytes::buf::buf_impl::Buf>::advance (12 samples, 0.10%)<&mut T as bytes::buf::buf_impl::Buf>::advance (12 samples, 0.10%)<tonic::codec::buffer::DecodeBuf as bytes::buf::buf_impl::Buf>::advance (12 samples, 0.10%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (11 samples, 0.09%)bytes::bytes_mut::BytesMut::set_start (11 samples, 0.09%)<&mut T as bytes::buf::buf_impl::Buf>::advance (3 samples, 0.02%)<&mut T as bytes::buf::buf_impl::Buf>::advance (3 samples, 0.02%)<tonic::codec::buffer::DecodeBuf as bytes::buf::buf_impl::Buf>::advance (3 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_impl::Buf>::advance (3 samples, 0.02%)bytes::bytes_mut::BytesMut::set_start (3 samples, 0.02%)<tonic::codec::prost::ProstDecoder<U> as tonic::codec::Decoder>::decode (214 samples, 1.74%)prost::message::Message::decode (214 samples, 1.74%)prost::message::Message::merge (214 samples, 1.74%)prost::encoding::decode_key (6 samples, 0.05%)prost::encoding::decode_varint (6 samples, 0.05%)tonic::codec::decode::Streaming<T>::decode_chunk (215 samples, 1.74%)bytes::bytes_mut::BytesMut::reserve (3 samples, 0.02%)bytes::bytes_mut::BytesMut::reserve_inner (2 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::grow_amortized (2 samples, 0.02%)alloc::raw_vec::finish_grow (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::grow (2 samples, 0.02%)alloc::alloc::Global::grow_impl (2 samples, 0.02%)alloc::alloc::realloc (2 samples, 0.02%)realloc (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::put (4 samples, 0.03%)bytes::bytes_mut::BytesMut::extend_from_slice (4 samples, 0.03%)h2::share::FlowControl::release_capacity (2 samples, 0.02%)h2::proto::streams::streams::OpaqueStreamRef::release_capacity (2 samples, 0.02%)h2::proto::streams::recv::Recv::release_capacity (2 samples, 0.02%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_data (3 samples, 0.02%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_data (3 samples, 0.02%)<http_body::combinators::map_data::MapData<B,F> as http_body::Body>::poll_data (3 samples, 0.02%)<hyper::body::body::Body as http_body::Body>::poll_data (3 samples, 0.02%)hyper::body::body::Body::poll_inner (3 samples, 0.02%)<tokio_stream::stream_ext::try_next::TryNext<St> as core::future::future::Future>::poll (226 samples, 1.83%)<..<tokio_stream::stream_ext::next::Next<St> as core::future::future::Future>::poll (226 samples, 1.83%)<..<&mut S as futures_core::stream::Stream>::poll_next (226 samples, 1.83%)<..<core::pin::Pin<P> as futures_core::stream::Stream>::poll_next (226 samples, 1.83%)<..<tonic::codec::decode::Streaming<T> as futures_core::stream::Stream>::poll_next (226 samples, 1.83%)<..tonic::codec::decode::StreamingInner::poll_data (10 samples, 0.08%)core::ptr::drop_in_place<tonic::codec::decode::Streaming<dcache::protobuf::dcache::DcacheBatchRequest>> (2 samples, 0.02%)core::ptr::drop_in_place<tonic::codec::decode::StreamingInner> (2 samples, 0.02%)core::ptr::drop_in_place<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>> (2 samples, 0.02%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn http_body::Body+Error = tonic::status::Status+Data = bytes::bytes::Bytes+core::marker::Send>>> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<dyn http_body::Body+Error = tonic::status::Status+Data = bytes::bytes::Bytes+core::marker::Send>> (2 samples, 0.02%)core::ptr::drop_in_place<hyper::body::body::Body> (2 samples, 0.02%)core::ptr::drop_in_place<hyper::body::body::Kind> (2 samples, 0.02%)core::ptr::drop_in_place<h2::share::RecvStream> (2 samples, 0.02%)tonic::server::grpc::Grpc<T>::map_request_unary::_{{closure}} (230 samples, 1.87%)t..tonic::server::grpc::Grpc<T>::map_response (6 samples, 0.05%)tonic::response::Response<T>::into_http (4 samples, 0.03%)tonic::metadata::map::MetadataMap::into_sanitized_headers (2 samples, 0.02%)http::header::map::HeaderMap<T>::remove (2 samples, 0.02%)<dcache::protobuf::dcache::dcache_service_server::DcacheServiceServer<T> as tower_service::Service<http::request::Request<B>>>::call::_{{closure}} (902 samples, 7.32%)<dcache::p..tonic::server::grpc::Grpc<T>::unary::_{{closure}} (863 samples, 7.00%)tonic::se..<futures_util::future::try_future::into_future::IntoFuture<Fut> as core::future::future::Future>::poll (903 samples, 7.33%)<futures_u..<F as futures_core::future::TryFuture>::try_poll (903 samples, 7.33%)<F as futu..<core::pin::Pin<P> as core::future::future::Future>::poll (903 samples, 7.33%)<core::pin..<tower::util::map_response::MapResponseFuture<F,N> as core::future::future::Future>::poll (938 samples, 7.61%)<tower::ut..<futures_util::future::try_future::MapOk<Fut,F> as core::future::future::Future>::poll (928 samples, 7.53%)<futures_u..<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (928 samples, 7.53%)<futures_u..<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (928 samples, 7.53%)<futures_u..<futures_util::future::try_future::into_future::IntoFuture<Fut> as core::future::future::Future>::poll (912 samples, 7.40%)<futures_u..<F as futures_core::future::TryFuture>::try_poll (912 samples, 7.40%)<F as futu..<tower::util::map_response::MapResponseFuture<F,N> as core::future::future::Future>::poll (912 samples, 7.40%)<tower::ut..<futures_util::future::try_future::MapOk<Fut,F> as core::future::future::Future>::poll (912 samples, 7.40%)<futures_u..<futures_util::future::future::Map<Fut,F> as core::future::future::Future>::poll (912 samples, 7.40%)<futures_u..<futures_util::future::future::map::Map<Fut,F> as core::future::future::Future>::poll (912 samples, 7.40%)<futures_u..<core::pin::Pin<P> as core::future::future::Future>::poll (940 samples, 7.63%)<core::pin..core::pin::Pin<&mut core::pin::Pin<P>>::as_deref_mut (2 samples, 0.02%)core::pin::Pin<P>::as_mut (2 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::deref::DerefMut>::deref_mut (2 samples, 0.02%)<tower::util::oneshot::Oneshot<S,Req> as core::future::future::Future>::poll (951 samples, 7.72%)<tower::uti..<tonic::transport::server::recover_error::ResponseFuture<F> as core::future::future::Future>::poll (972 samples, 7.89%)<tonic::tra..<tower::util::either::Either<A,B> as core::future::future::Future>::poll (967 samples, 7.85%)<tower::uti..<tonic::transport::service::grpc_timeout::ResponseFuture<F> as core::future::future::Future>::poll (966 samples, 7.84%)<tonic::tra..<tonic::transport::service::router::RoutesFuture as core::future::future::Future>::poll (963 samples, 7.82%)<tonic::tra..<axum::routing::route::RouteFuture<B,E> as core::future::future::Future>::poll (958 samples, 7.78%)<axum::rout..<tonic::transport::server::SvcFuture<F> as core::future::future::Future>::poll (997 samples, 8.09%)<tonic::tra..tracing::span::Span::enter (14 samples, 0.11%)tracing::span::Span::do_enter (14 samples, 0.11%)<core::pin::Pin<P> as core::future::future::Future>::poll (999 samples, 8.11%)<core::pin:..<dcache::protobuf::dcache::DcacheResponse as prost::message::Message>::encoded_len (2 samples, 0.02%)core::option::Option<T>::map_or (2 samples, 0.02%)core::ops::function::FnOnce::call_once (2 samples, 0.02%)dcache::protobuf::dcache::dcache_response::DcacheResponse::encoded_len (2 samples, 0.02%)<&mut T as bytes::buf::buf_mut::BufMut>::remaining_mut (8 samples, 0.06%)<tonic::codec::buffer::EncodeBuf as bytes::buf::buf_mut::BufMut>::remaining_mut (8 samples, 0.06%)<&mut T as bytes::buf::buf_mut::BufMut>::remaining_mut (8 samples, 0.06%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::remaining_mut (8 samples, 0.06%)<tonic::codec::buffer::EncodeBuf as bytes::buf::buf_mut::BufMut>::chunk_mut (4 samples, 0.03%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::chunk_mut (4 samples, 0.03%)prost::encoding::encode_key (33 samples, 0.27%)prost::encoding::encode_varint (33 samples, 0.27%)bytes::buf::buf_mut::BufMut::put_u8 (32 samples, 0.26%)bytes::buf::buf_mut::BufMut::put_slice (32 samples, 0.26%)core::intrinsics::copy_nonoverlapping (4 samples, 0.03%)[libc.so.6] (3 samples, 0.02%)<&mut T as bytes::buf::buf_mut::BufMut>::remaining_mut (6 samples, 0.05%)<tonic::codec::buffer::EncodeBuf as bytes::buf::buf_mut::BufMut>::remaining_mut (6 samples, 0.05%)<&mut T as bytes::buf::buf_mut::BufMut>::remaining_mut (6 samples, 0.05%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::remaining_mut (6 samples, 0.05%)<tonic::codec::buffer::EncodeBuf as bytes::buf::buf_mut::BufMut>::advance_mut (4 samples, 0.03%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::advance_mut (4 samples, 0.03%)<tonic::codec::buffer::EncodeBuf as bytes::buf::buf_mut::BufMut>::chunk_mut (4 samples, 0.03%)<bytes::bytes_mut::BytesMut as bytes::buf::buf_mut::BufMut>::chunk_mut (4 samples, 0.03%)<T as core::convert::Into<U>>::into (4 samples, 0.03%)<&mut bytes::buf::uninit_slice::UninitSlice as core::convert::From<&mut [u8]>>::from (4 samples, 0.03%)<dcache::protobuf::dcache::DcacheBatchResponse as prost::message::Message>::encode_raw (80 samples, 0.65%)prost::encoding::message::encode (80 samples, 0.65%)prost::encoding::encode_varint (41 samples, 0.33%)bytes::buf::buf_mut::BufMut::put_u8 (39 samples, 0.32%)bytes::buf::buf_mut::BufMut::put_slice (39 samples, 0.32%)core::intrinsics::copy_nonoverlapping (6 samples, 0.05%)[libc.so.6] (4 samples, 0.03%)core::iter::adapters::map::map_fold::_{{closure}} (6 samples, 0.05%)prost::encoding::message::encoded_len_repeated::_{{closure}} (6 samples, 0.05%)prost::encoding::encoded_len_varint (6 samples, 0.05%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_data (93 samples, 0.75%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_data (93 samples, 0.75%)<tonic::transport::server::recover_error::MaybeEmptyBody<B> as http_body::Body>::poll_data (93 samples, 0.75%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_data (93 samples, 0.75%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_data (93 samples, 0.75%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_data (93 samples, 0.75%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_data (93 samples, 0.75%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_data (93 samples, 0.75%)<tonic::codec::encode::EncodeBody<S> as http_body::Body>::poll_data (93 samples, 0.75%)<tonic::codec::encode::EncodedBytes<T,U> as futures_core::stream::Stream>::poll_next (92 samples, 0.75%)tonic::codec::encode::encode_item (92 samples, 0.75%)<tonic::codec::prost::ProstEncoder<T> as tonic::codec::Encoder>::encode (92 samples, 0.75%)prost::message::Message::encode (91 samples, 0.74%)<dcache::protobuf::dcache::DcacheBatchResponse as prost::message::Message>::encoded_len (11 samples, 0.09%)prost::encoding::message::encoded_len_repeated (11 samples, 0.09%)core::iter::traits::iterator::Iterator::sum (11 samples, 0.09%)<usize as core::iter::traits::accum::Sum>::sum (11 samples, 0.09%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (11 samples, 0.09%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (11 samples, 0.09%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::fold (11 samples, 0.09%)core::iter::adapters::map::map_fold::_{{closure}} (11 samples, 0.09%)core::ops::function::FnMut::call_mut (5 samples, 0.04%)<dcache::protobuf::dcache::DcacheResponse as prost::message::Message>::encoded_len (5 samples, 0.04%)core::option::Option<T>::map_or (4 samples, 0.03%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_trailers (2 samples, 0.02%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_trailers (2 samples, 0.02%)<tonic::transport::server::recover_error::MaybeEmptyBody<B> as http_body::Body>::poll_trailers (2 samples, 0.02%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_trailers (2 samples, 0.02%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_trailers (2 samples, 0.02%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_trailers (2 samples, 0.02%)<http_body::combinators::map_err::MapErr<B,F> as http_body::Body>::poll_trailers (2 samples, 0.02%)<http_body::combinators::box_body::UnsyncBoxBody<D,E> as http_body::Body>::poll_trailers (2 samples, 0.02%)<tonic::codec::encode::EncodeBody<S> as http_body::Body>::poll_trailers (2 samples, 0.02%)tonic::codec::encode::EncodeState::trailers (2 samples, 0.02%)<hyper::proto::h2::PipeToSendStream<S> as core::future::future::Future>::poll (98 samples, 0.80%)h2::share::SendStream<B>::reserve_capacity (3 samples, 0.02%)h2::proto::streams::streams::StreamRef<B>::reserve_capacity (3 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::reserve_capacity (2 samples, 0.02%)core::option::Option<T>::filter (6 samples, 0.05%)<h2::proto::streams::store::Ptr as core::ops::deref::DerefMut>::deref_mut (32 samples, 0.26%)<h2::proto::streams::store::Store as core::ops::index::IndexMut<h2::proto::streams::store::Key>>::index_mut (28 samples, 0.23%)slab::Slab<T>::get_mut (22 samples, 0.18%)<h2::proto::streams::store::Store as h2::proto::streams::store::Resolve>::resolve (4 samples, 0.03%)std::sync::poison::Flag::done (2 samples, 0.02%)std::thread::panicking (2 samples, 0.02%)std::panicking::panicking (2 samples, 0.02%)std::panicking::panic_count::count_is_zero (2 samples, 0.02%)core::ptr::drop_in_place<std::sync::mutex::MutexGuard<h2::proto::streams::streams::Inner>> (11 samples, 0.09%)<std::sync::mutex::MutexGuard<T> as core::ops::drop::Drop>::drop (11 samples, 0.09%)std::sys::unix::locks::futex_mutex::Mutex::unlock (9 samples, 0.07%)core::task::poll::Poll<core::result::Result<T,E>>::map_err (3 samples, 0.02%)h2::proto::streams::state::State::ensure_reason (5 samples, 0.04%)<core::task::wake::Waker as core::clone::Clone>::clone (8 samples, 0.06%)tokio::runtime::task::waker::clone_waker (7 samples, 0.06%)tokio::runtime::task::state::State::ref_inc (6 samples, 0.05%)h2::proto::streams::send::Send::poll_reset (25 samples, 0.20%)h2::proto::streams::stream::Stream::wait_send (19 samples, 0.15%)core::ptr::drop_in_place<core::option::Option<core::task::wake::Waker>> (10 samples, 0.08%)core::ptr::drop_in_place<core::task::wake::Waker> (9 samples, 0.07%)<core::task::wake::Waker as core::ops::drop::Drop>::drop (9 samples, 0.07%)tokio::runtime::task::waker::drop_waker (9 samples, 0.07%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::drop_reference (8 samples, 0.06%)tokio::runtime::task::state::State::ref_dec (8 samples, 0.06%)core::sync::atomic::AtomicUsize::fetch_sub (2 samples, 0.02%)core::sync::atomic::atomic_sub (2 samples, 0.02%)h2::server::SendResponse<B>::poll_reset (93 samples, 0.75%)h2::proto::streams::streams::StreamRef<B>::poll_reset (93 samples, 0.75%)std::sync::mutex::Mutex<T>::lock (9 samples, 0.07%)std::sys::unix::locks::futex_mutex::Mutex::lock (9 samples, 0.07%)<hyper::proto::h2::server::H2Stream<F,B> as core::future::future::Future>::poll (1,211 samples, 9.83%)<hyper::proto:..hyper::proto::h2::server::H2Stream<F,B>::poll2 (1,204 samples, 9.77%)hyper::proto::..<tracing_futures::Instrumented<T> as core::future::future::Future>::poll (4 samples, 0.03%)openraft::replication::ReplicationCore<C,N,LS>::main::_{{closure}} (2 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::task::core::TaskIdGuard> (11 samples, 0.09%)<tokio::runtime::task::core::TaskIdGuard as core::ops::drop::Drop>::drop (11 samples, 0.09%)std::collections::hash::map::HashMap<K,V,S>::insert (4 samples, 0.03%)hashbrown::map::HashMap<K,V,S,A>::insert (4 samples, 0.03%)<tokio::sync::mpsc::bounded::Semaphore as tokio::sync::mpsc::chan::Semaphore>::add_permit (5 samples, 0.04%)tokio::sync::mpsc::block::Block<T>::read (2 samples, 0.02%)tokio::sync::mpsc::list::Rx<T>::pop (4 samples, 0.03%)tokio::sync::mpsc::list::Rx<T>::try_advancing_head (2 samples, 0.02%)dcache::network::management::HealthMetrics::spawn::_{{closure}}::_{{closure}} (22 samples, 0.18%)tokio::sync::mpsc::bounded::Receiver<T>::recv::_{{closure}} (18 samples, 0.15%)<tokio::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (15 samples, 0.12%)tokio::sync::mpsc::bounded::Receiver<T>::recv::_{{closure}}::_{{closure}} (14 samples, 0.11%)tokio::sync::mpsc::chan::Rx<T,S>::recv (14 samples, 0.11%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (14 samples, 0.11%)tokio::sync::mpsc::chan::Rx<T,S>::recv::_{{closure}} (14 samples, 0.11%)tokio::sync::task::atomic_waker::AtomicWaker::register_by_ref (2 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::mpsc::bounded::Sender<dcache::network::management::HealthStatus>> (2 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::mpsc::chan::Tx<dcache::network::management::HealthStatus,tokio::sync::mpsc::bounded::Semaphore>> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::sync::Arc<tokio::sync::mpsc::chan::Chan<dcache::network::management::HealthStatus,tokio::sync::mpsc::bounded::Semaphore>>> (2 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_sub (2 samples, 0.02%)core::sync::atomic::atomic_sub (2 samples, 0.02%)tokio::runtime::task::waker::wake_by_val (2 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (2 samples, 0.02%)tokio::sync::mpsc::list::Tx<T>::push (3 samples, 0.02%)tokio::sync::mpsc::bounded::Permit<T>::send (6 samples, 0.05%)tokio::sync::mpsc::chan::Tx<T,S>::send (6 samples, 0.05%)tokio::sync::mpsc::chan::Chan<T,S>::send (6 samples, 0.05%)core::ptr::drop_in_place<tokio::sync::batch_semaphore::Acquire> (3 samples, 0.02%)<tokio::sync::batch_semaphore::Acquire as core::ops::drop::Drop>::drop (3 samples, 0.02%)dcache::network::raft_network_impl::DcacheNetwork::send_rpc::_{{closure}}::_{{closure}} (17 samples, 0.14%)tokio::sync::mpsc::bounded::Sender<T>::send::_{{closure}} (14 samples, 0.11%)tokio::sync::mpsc::bounded::Sender<T>::reserve::_{{closure}} (7 samples, 0.06%)tokio::sync::mpsc::bounded::Sender<T>::reserve_inner::_{{closure}} (7 samples, 0.06%)dcache::store::PersistableStateMachine::from_statemachine::_{{closure}} (2 samples, 0.02%)openraft::core::sm::Worker<C,SM>::build_snapshot::_{{closure}}::_{{closure}}::_{{closure}} (7 samples, 0.06%)<core::pin::Pin<P> as core::future::future::Future>::poll (6 samples, 0.05%)dcache::store::_<impl openraft::storage::RaftSnapshotBuilder<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::build_snapshot::_{{closure}} (6 samples, 0.05%)dcache::store::_<impl openraft::storage::RaftSnapshotBuilder<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::build_snapshot::_{{closure}}::_{{closure}} (6 samples, 0.05%)serde_json::ser::to_vec (2 samples, 0.02%)serde_json::ser::to_writer (2 samples, 0.02%)dcache::store::_::<impl serde::ser::Serialize for dcache::store::PersistableStateMachine>::serialize (2 samples, 0.02%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeStruct>::serialize_field (2 samples, 0.02%)serde::ser::SerializeMap::serialize_entry (2 samples, 0.02%)openraft::core::sm::Worker<C,SM>::do_spawn::_{{closure}} (18 samples, 0.15%)openraft::core::sm::Worker<C,SM>::worker_loop::_{{closure}} (3 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (2,804 samples, 22.76%)tokio::loom::std::unsafe_cell::Unsaf..tokio::runtime::task::core::Core<T,S>::poll::_{{closure}} (2,804 samples, 22.76%)tokio::runtime::task::core::Core<T,S..tokio::runtime::task::core::TaskIdGuard::enter (10 samples, 0.08%)tokio::runtime::context::set_current_task_id (3 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (3 samples, 0.02%)tokio::runtime::context::CONTEXT::__getit (3 samples, 0.02%)core::cell::Cell<T>::get (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)cfree (2 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::task::core::Stage<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = ()+core::marker::Send>>>> (2 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (9 samples, 0.07%)tokio::runtime::task::core::Core<T,S>::set_stage::_{{closure}} (9 samples, 0.07%)core::ptr::drop_in_place<tokio::runtime::task::core::Stage<hyper::proto::h2::server::H2Stream<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>,http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>>>> (2 samples, 0.02%)core::ptr::drop_in_place<hyper::proto::h2::server::H2Stream<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>,http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>>> (2 samples, 0.02%)core::ptr::drop_in_place<h2::server::SendResponse<hyper::proto::h2::SendBuf<bytes::bytes::Bytes>>> (2 samples, 0.02%)core::ptr::drop_in_place<h2::proto::streams::streams::StreamRef<hyper::proto::h2::SendBuf<bytes::bytes::Bytes>>> (2 samples, 0.02%)core::ptr::drop_in_place<h2::proto::streams::streams::OpaqueStreamRef> (2 samples, 0.02%)<h2::proto::streams::streams::OpaqueStreamRef as core::ops::drop::Drop>::drop (2 samples, 0.02%)tokio::runtime::task::core::Core<T,S>::poll (2,826 samples, 22.94%)tokio::runtime::task::core::Core<T,S..tokio::runtime::task::core::Core<T,S>::drop_future_or_output (14 samples, 0.11%)tokio::runtime::task::core::Core<T,S>::set_stage (14 samples, 0.11%)tokio::runtime::task::core::TaskIdGuard::enter (3 samples, 0.02%)tokio::runtime::task::harness::poll_future (2,844 samples, 23.08%)tokio::runtime::task::harness::poll_f..std::panic::catch_unwind (2,840 samples, 23.05%)std::panic::catch_unwindstd::panicking::try (2,840 samples, 23.05%)std::panicking::trystd::panicking::try::do_call (2,837 samples, 23.03%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (2,837 samples, 23.03%)<core::panic::unwind_safe::AssertUnwi..tokio::runtime::task::harness::poll_future::_{{closure}} (2,837 samples, 23.03%)tokio::runtime::task::harness::poll_f..tokio::runtime::task::core::Core<T,S>::store_output (3 samples, 0.02%)tokio::runtime::task::core::Core<T,S>::set_stage (3 samples, 0.02%)tokio::runtime::task::state::State::load (4 samples, 0.03%)core::sync::atomic::AtomicUsize::load (4 samples, 0.03%)core::sync::atomic::atomic_load (4 samples, 0.03%)tokio::runtime::task::state::State::transition_to_idle (18 samples, 0.15%)tokio::runtime::task::state::State::fetch_update_action (11 samples, 0.09%)tokio::runtime::task::state::State::transition_to_idle::_{{closure}} (4 samples, 0.03%)tokio::runtime::task::state::Snapshot::ref_dec (2 samples, 0.02%)tokio::runtime::task::state::State::load (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)tokio::runtime::task::state::State::transition_to_running (16 samples, 0.13%)tokio::runtime::task::state::State::fetch_update_action (15 samples, 0.12%)tokio::runtime::task::harness::Harness<T,S>::poll (2,980 samples, 24.19%)tokio::runtime::task::harness::Harness..tokio::runtime::task::harness::Harness<T,S>::poll_inner (2,912 samples, 23.63%)tokio::runtime::task::harness::Harness..tokio::runtime::task::waker::waker_ref (8 samples, 0.06%)tokio::runtime::task::waker::raw_waker (4 samples, 0.03%)tokio::runtime::task::raw::RawTask::poll (28 samples, 0.23%)tokio::runtime::scheduler::current_thread::Context::run_task (3,105 samples, 25.20%)tokio::runtime::scheduler::current_threa..tokio::runtime::scheduler::current_thread::Context::enter (3,071 samples, 24.92%)tokio::runtime::scheduler::current_threa..tokio::runtime::scheduler::current_thread::Context::run_task::_{{closure}} (3,062 samples, 24.85%)tokio::runtime::scheduler::current_threa..tokio::runtime::coop::budget (3,062 samples, 24.85%)tokio::runtime::coop::budgettokio::runtime::coop::with_budget (3,052 samples, 24.77%)tokio::runtime::coop::with_budgettokio::runtime::scheduler::current_thread::CoreGuard::block_on::_{{closure}}::_{{closure}} (3,027 samples, 24.57%)tokio::runtime::scheduler::current_thre..tokio::runtime::task::LocalNotified<S>::run (3,027 samples, 24.57%)tokio::runtime::task::LocalNotified<S>:..tokio::runtime::task::raw::poll (19 samples, 0.15%)tokio::runtime::scheduler::current_thread::Core::next_task (34 samples, 0.28%)tokio::runtime::scheduler::current_thread::Handle::next_remote_task (3 samples, 0.02%)tokio::runtime::scheduler::inject::Inject<T>::pop (3 samples, 0.02%)tokio::runtime::scheduler::current_thread::Core::tick (2 samples, 0.02%)tokio::runtime::runtime::Runtime::block_on (3,251 samples, 26.39%)tokio::runtime::runtime::Runtime::block_ontokio::runtime::scheduler::current_thread::CurrentThread::block_on (3,251 samples, 26.39%)tokio::runtime::scheduler::current_thread:..tokio::runtime::context::runtime::enter_runtime (3,251 samples, 26.39%)tokio::runtime::context::runtime::enter_ru..tokio::runtime::scheduler::current_thread::CurrentThread::block_on::_{{closure}} (3,251 samples, 26.39%)tokio::runtime::scheduler::current_thread:..tokio::runtime::scheduler::current_thread::CoreGuard::block_on (3,251 samples, 26.39%)tokio::runtime::scheduler::current_thread:..tokio::runtime::scheduler::current_thread::CoreGuard::enter (3,251 samples, 26.39%)tokio::runtime::scheduler::current_thread:..tokio::runtime::context::set_scheduler (3,251 samples, 26.39%)tokio::runtime::context::set_schedulerstd::thread::local::LocalKey<T>::with (3,251 samples, 26.39%)std::thread::local::LocalKey<T>::withstd::thread::local::LocalKey<T>::try_with (3,251 samples, 26.39%)std::thread::local::LocalKey<T>::try_withtokio::runtime::context::set_scheduler::_{{closure}} (3,251 samples, 26.39%)tokio::runtime::context::set_scheduler::_{..tokio::runtime::context::scoped::Scoped<T>::set (3,251 samples, 26.39%)tokio::runtime::context::scoped::Scoped<T>..tokio::runtime::scheduler::current_thread::CoreGuard::enter::_{{closure}} (3,251 samples, 26.39%)tokio::runtime::scheduler::current_thread:..tokio::runtime::scheduler::current_thread::CoreGuard::block_on::_{{closure}} (3,251 samples, 26.39%)tokio::runtime::scheduler::current_thread:..tokio::runtime::scheduler::current_thread::Handle::reset_woken (2 samples, 0.02%)<T as hyper::service::http::HttpService<B1>>::call (2 samples, 0.02%)<tower::util::boxed::sync::BoxService<T,U,E> as tower_service::Service<T>>::call (2 samples, 0.02%)<alloc::boxed::Box<S> as tower_service::Service<Request>>::call (2 samples, 0.02%)<tower::util::map_future::MapFuture<S,F> as tower_service::Service<R>>::call (2 samples, 0.02%)<tower::util::map_request::MapRequest<S,F> as tower_service::Service<R1>>::call (2 samples, 0.02%)<tonic::transport::server::Svc<S> as tower_service::Service<http::request::Request<hyper::body::body::Body>>>::call (2 samples, 0.02%)<tonic::transport::server::recover_error::RecoverError<S> as tower_service::Service<R>>::call (2 samples, 0.02%)<tower::util::either::Either<A,B> as tower_service::Service<Request>>::call (2 samples, 0.02%)<tonic::transport::service::grpc_timeout::GrpcTimeout<S> as tower_service::Service<http::request::Request<ReqBody>>>::call (2 samples, 0.02%)tonic::transport::service::grpc_timeout::try_parse_grpc_timeout (2 samples, 0.02%)http::header::map::HeaderMap<T>::get (2 samples, 0.02%)http::header::map::HeaderMap<T>::get2 (2 samples, 0.02%)<&str as http::header::map::as_header_name::Sealed>::find (2 samples, 0.02%)http::header::name::HdrName::from_bytes (2 samples, 0.02%)<tokio_util::codec::length_delimited::LengthDelimitedCodec as tokio_util::codec::decoder::Decoder>::decode (2 samples, 0.02%)tokio_util::codec::length_delimited::LengthDelimitedCodec::decode_head (2 samples, 0.02%)<h2::codec::Codec<T,B> as futures_core::stream::Stream>::poll_next (5 samples, 0.04%)<h2::codec::framed_read::FramedRead<T> as futures_core::stream::Stream>::poll_next (5 samples, 0.04%)<tokio_util::codec::framed_read::FramedRead<T,D> as futures_core::stream::Stream>::poll_next (5 samples, 0.04%)<tokio_util::codec::framed_impl::FramedImpl<T,U,R> as futures_core::stream::Stream>::poll_next (5 samples, 0.04%)tokio_util::util::poll_buf::poll_read_buf (2 samples, 0.02%)<h2::codec::framed_write::FramedWrite<T,B> as tokio::io::async_read::AsyncRead>::poll_read (2 samples, 0.02%)<hyper::common::io::rewind::Rewind<T> as tokio::io::async_read::AsyncRead>::poll_read (2 samples, 0.02%)<tonic::transport::service::io::ServerIo<IO> as tokio::io::async_read::AsyncRead>::poll_read (2 samples, 0.02%)<hyper::server::tcp::addr_stream::AddrStream as tokio::io::async_read::AsyncRead>::poll_read (2 samples, 0.02%)tokio::net::tcp::stream::TcpStream::poll_read_priv (2 samples, 0.02%)tokio::io::poll_evented::PollEvented<E>::poll_read (2 samples, 0.02%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read (2 samples, 0.02%)mio::io_source::IoSource<T>::do_io (2 samples, 0.02%)mio::sys::unix::stateless_io_source::IoSourceState::do_io (2 samples, 0.02%)<&mio::net::tcp::stream::TcpStream as std::io::Read>::read::_{{closure}} (2 samples, 0.02%)<&std::net::tcp::TcpStream as std::io::Read>::read (2 samples, 0.02%)std::sys_common::net::TcpStream::read (2 samples, 0.02%)std::sys::unix::net::Socket::read (2 samples, 0.02%)std::sys::unix::net::Socket::recv_with_flags (2 samples, 0.02%)recv (2 samples, 0.02%)[unknown] (2 samples, 0.02%)[unknown] (2 samples, 0.02%)h2::proto::connection::Connection<T,P,B>::poll2 (9 samples, 0.07%)h2::proto::connection::DynConnection<B>::recv_frame (2 samples, 0.02%)h2::codec::Codec<T,B>::buffer (2 samples, 0.02%)h2::codec::framed_write::FramedWrite<T,B>::buffer (2 samples, 0.02%)h2::codec::framed_write::Encoder<B>::buffer (2 samples, 0.02%)<hyper::server::server::new_svc::NewSvcTask<I,N,S,E,W> as core::future::future::Future>::poll (16 samples, 0.13%)<hyper::server::conn::upgrades::UpgradeableConnection<I,S,E> as core::future::future::Future>::poll (16 samples, 0.13%)<hyper::server::conn::ProtoServer<T,B,S,E> as core::future::future::Future>::poll (16 samples, 0.13%)<hyper::proto::h2::server::Server<T,S,B,E> as core::future::future::Future>::poll (16 samples, 0.13%)hyper::proto::h2::server::Serving<T,B>::poll_server (16 samples, 0.13%)h2::server::Connection<T,B>::poll_accept (14 samples, 0.11%)h2::server::Connection<T,B>::poll_closed (14 samples, 0.11%)h2::proto::connection::Connection<T,P,B>::poll (14 samples, 0.11%)h2::proto::streams::streams::Streams<B,P>::poll_complete (5 samples, 0.04%)h2::proto::streams::streams::Inner::poll_complete (5 samples, 0.04%)h2::proto::streams::send::Send::poll_complete (3 samples, 0.02%)h2::proto::streams::prioritize::Prioritize::poll_complete (3 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::coop::RestoreOnPending> (2 samples, 0.02%)<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop (2 samples, 0.02%)tokio::io::interest::Interest::is_readable (3 samples, 0.02%)core::cell::Cell<T>::set (9 samples, 0.07%)core::cell::Cell<T>::replace (9 samples, 0.07%)core::mem::replace (9 samples, 0.07%)core::ptr::write (9 samples, 0.07%)tokio::runtime::coop::poll_proceed (15 samples, 0.12%)tokio::runtime::context::budget (14 samples, 0.11%)std::thread::local::LocalKey<T>::try_with (14 samples, 0.11%)tokio::runtime::context::budget::_{{closure}} (13 samples, 0.11%)tokio::runtime::coop::poll_proceed::_{{closure}} (13 samples, 0.11%)tokio::runtime::coop::Budget::decrement (2 samples, 0.02%)tokio::sync::oneshot::State::load (4 samples, 0.03%)core::sync::atomic::AtomicUsize::load (3 samples, 0.02%)core::sync::atomic::atomic_load (3 samples, 0.02%)<&mut F as core::future::future::Future>::poll (37 samples, 0.30%)<tokio::sync::oneshot::Receiver<T> as core::future::future::Future>::poll (37 samples, 0.30%)tokio::sync::oneshot::Inner<T>::poll_recv (36 samples, 0.29%)tokio::sync::oneshot::Task::will_wake (9 samples, 0.07%)tokio::sync::oneshot::Task::with_task (9 samples, 0.07%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (6 samples, 0.05%)tokio::sync::oneshot::Task::with_task::_{{closure}} (6 samples, 0.05%)tokio::sync::oneshot::Task::will_wake::_{{closure}} (6 samples, 0.05%)core::task::wake::Waker::will_wake (6 samples, 0.05%)<core::task::wake::RawWaker as core::cmp::PartialEq>::eq (6 samples, 0.05%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (2 samples, 0.02%)<core::task::wake::RawWakerVTable as core::cmp::PartialEq>::eq (2 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::coop::RestoreOnPending> (4 samples, 0.03%)<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop (4 samples, 0.03%)tokio::runtime::context::budget (3 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (3 samples, 0.02%)tokio::runtime::context::CONTEXT::__getit (3 samples, 0.02%)core::cell::Cell<T>::get (2 samples, 0.02%)[libc.so.6] (14 samples, 0.11%)[libc.so.6] (10 samples, 0.08%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (3 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::read::_{{closure}} (3 samples, 0.02%)core::ptr::read (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::read (11 samples, 0.09%)tokio::sync::mpsc::block::is_tx_closed (3 samples, 0.02%)tokio::sync::mpsc::list::Rx<T>::pop (22 samples, 0.18%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (50 samples, 0.41%)tokio::sync::mpsc::chan::Rx<T,S>::recv::_{{closure}} (50 samples, 0.41%)tokio::sync::task::atomic_waker::AtomicWaker::register_by_ref (12 samples, 0.10%)tokio::sync::task::atomic_waker::AtomicWaker::do_register (12 samples, 0.10%)tokio::sync::task::atomic_waker::AtomicWaker::do_register::catch_unwind (5 samples, 0.04%)std::panic::catch_unwind (5 samples, 0.04%)std::panicking::try (5 samples, 0.04%)std::panicking::try::do_call (5 samples, 0.04%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (5 samples, 0.04%)tokio::sync::task::atomic_waker::AtomicWaker::do_register::_{{closure}} (5 samples, 0.04%)<&core::task::wake::Waker as tokio::sync::task::atomic_waker::WakerRef>::into_waker (5 samples, 0.04%)<core::task::wake::Waker as core::clone::Clone>::clone (5 samples, 0.04%)tokio::runtime::task::waker::clone_waker (5 samples, 0.04%)tokio::runtime::task::state::State::ref_inc (4 samples, 0.03%)core::cell::Cell<T>::get (2 samples, 0.02%)core::cell::Cell<T>::set (11 samples, 0.09%)core::cell::Cell<T>::replace (11 samples, 0.09%)core::mem::replace (11 samples, 0.09%)core::ptr::write (11 samples, 0.09%)<tokio::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (72 samples, 0.58%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::recv::_{{closure}}::_{{closure}} (72 samples, 0.58%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::poll_recv (72 samples, 0.58%)tokio::sync::mpsc::chan::Rx<T,S>::recv (72 samples, 0.58%)tokio::runtime::coop::poll_proceed (17 samples, 0.14%)tokio::runtime::context::budget (14 samples, 0.11%)std::thread::local::LocalKey<T>::try_with (14 samples, 0.11%)tokio::runtime::context::budget::_{{closure}} (14 samples, 0.11%)tokio::runtime::coop::poll_proceed::_{{closure}} (14 samples, 0.11%)<tokio::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (131 samples, 1.06%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::runtime_loop::_{{closure}}::_{{closure}}::_{{closure}} (129 samples, 1.05%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::recv::_{{closure}} (90 samples, 0.73%)[libc.so.6] (2 samples, 0.02%)[libc.so.6] (19 samples, 0.15%)openraft::core::balancer::Balancer::notify (7 samples, 0.06%)openraft::core::balancer::Balancer::raft_msg (4 samples, 0.03%)alloc::collections::btree::append::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Owned,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::bulk_push (7 samples, 0.06%)core::ptr::drop_in_place<alloc::collections::btree::dedup_sorted_iter::DedupSortedIter<u64,core::option::Option<openraft::log_id::LogId<u64>>,alloc::vec::into_iter::IntoIter<(u64,core::option::Option<openraft::log_id::LogId<u64>>)>>> (3 samples, 0.02%)core::ptr::drop_in_place<core::iter::adapters::peekable::Peekable<alloc::vec::into_iter::IntoIter<(u64,core::option::Option<openraft::log_id::LogId<u64>>)>>> (3 samples, 0.02%)core::ptr::drop_in_place<alloc::vec::into_iter::IntoIter<(u64,core::option::Option<openraft::log_id::LogId<u64>>)>> (3 samples, 0.02%)<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.02%)core::ptr::drop_in_place<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<(u64,core::option::Option<openraft::log_id::LogId<u64>>),alloc::alloc::Global>> (3 samples, 0.02%)<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.02%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<(u64,core::option::Option<openraft::log_id::LogId<u64>>)>> (3 samples, 0.02%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (3 samples, 0.02%)alloc::alloc::dealloc (3 samples, 0.02%)cfree (3 samples, 0.02%)core::ptr::read_volatile (2 samples, 0.02%)alloc::collections::btree::map::BTreeMap<K,V,A>::bulk_build_from_sorted_iter (25 samples, 0.20%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Owned,K,V,alloc::collections::btree::node::marker::LeafOrInternal>::new (16 samples, 0.13%)alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Owned,K,V,alloc::collections::btree::node::marker::Leaf>::new_leaf (16 samples, 0.13%)alloc::collections::btree::node::LeafNode<K,V>::new (16 samples, 0.13%)alloc::boxed::Box<T,A>::new_uninit_in (16 samples, 0.13%)alloc::boxed::Box<T,A>::try_new_uninit_in (10 samples, 0.08%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (10 samples, 0.08%)alloc::alloc::Global::alloc_impl (10 samples, 0.08%)alloc::alloc::alloc (10 samples, 0.08%)malloc (8 samples, 0.06%)core::slice::sort::insertion_sort_shift_left (2 samples, 0.02%)alloc::slice::<impl [T]>::sort_by (7 samples, 0.06%)alloc::slice::stable_sort (7 samples, 0.06%)core::slice::sort::merge_sort (4 samples, 0.03%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (7 samples, 0.06%)alloc::vec::Vec<T,A>::extend_trusted (7 samples, 0.06%)core::iter::traits::iterator::Iterator::for_each (7 samples, 0.06%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (7 samples, 0.06%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::fold (7 samples, 0.06%)core::iter::adapters::map::map_fold::_{{closure}} (5 samples, 0.04%)core::iter::traits::iterator::Iterator::for_each::call::_{{closure}} (5 samples, 0.04%)alloc::vec::Vec<T,A>::extend_trusted::_{{closure}} (5 samples, 0.04%)core::ptr::write (3 samples, 0.02%)core::ptr::read_volatile (2 samples, 0.02%)core::iter::traits::iterator::Iterator::collect (48 samples, 0.39%)<alloc::collections::btree::map::BTreeMap<K,V> as core::iter::traits::collect::FromIterator<(K,V)>>::from_iter (48 samples, 0.39%)core::iter::traits::iterator::Iterator::collect (13 samples, 0.11%)<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (13 samples, 0.11%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (13 samples, 0.11%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (13 samples, 0.11%)alloc::vec::Vec<T>::with_capacity (6 samples, 0.05%)alloc::vec::Vec<T,A>::with_capacity_in (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::allocate_in (6 samples, 0.05%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (6 samples, 0.05%)alloc::alloc::Global::alloc_impl (6 samples, 0.05%)alloc::alloc::alloc (6 samples, 0.05%)malloc (2 samples, 0.02%)<core::option::Option<&openraft::log_id::LogId<NID>> as openraft::log_id::log_id_option_ext::LogIdOptionExt>::index (3 samples, 0.02%)core::option::Option<T>::map (3 samples, 0.02%)<core::option::Option<&openraft::log_id::LogId<NID>> as openraft::log_id::log_id_option_ext::LogIdOptionExt>::index::_{{closure}} (3 samples, 0.02%)[libc.so.6] (8 samples, 0.06%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::search_tree (6 samples, 0.05%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::search_node (6 samples, 0.05%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (6 samples, 0.05%)openraft::membership::effective_membership::EffectiveMembership<NID,N>::is_voter (9 samples, 0.07%)openraft::membership::membership::Membership<NID,N>::is_voter (9 samples, 0.07%)alloc::collections::btree::set::BTreeSet<T,A>::contains (9 samples, 0.07%)alloc::collections::btree::map::BTreeMap<K,V,A>::contains_key (9 samples, 0.07%)alloc::collections::btree::map::BTreeMap<K,V,A>::get (9 samples, 0.07%)core::option::Option<T>::as_ref (3 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::flush_metrics (92 samples, 0.75%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::report_metrics (39 samples, 0.32%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::current_leader (17 samples, 0.14%)tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::does_replication_session_match (5 samples, 0.04%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::does_vote_match (4 samples, 0.03%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::ne (3 samples, 0.02%)core::cmp::PartialEq::ne (3 samples, 0.02%)<openraft::vote::vote::Vote<NID> as core::cmp::PartialEq>::eq (3 samples, 0.02%)<openraft::vote::leader_id::leader_id_std::LeaderId<NID> as core::cmp::PartialEq>::eq (2 samples, 0.02%)alloc::collections::btree::map::BTreeMap<K,V,A>::remove (11 samples, 0.09%)alloc::collections::btree::map::BTreeMap<K,V,A>::remove_entry (11 samples, 0.09%)alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (11 samples, 0.09%)alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_kv (11 samples, 0.09%)alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (7 samples, 0.06%)alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (2 samples, 0.02%)core::option::Option<T>::unwrap (5 samples, 0.04%)core::ptr::drop_in_place<alloc::vec::into_iter::IntoIter<dcache::store::DcacheResponse>> (3 samples, 0.02%)<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.02%)core::ptr::drop_in_place<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<dcache::store::DcacheResponse,alloc::alloc::Global>> (3 samples, 0.02%)<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.02%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<dcache::store::DcacheResponse>> (3 samples, 0.02%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (3 samples, 0.02%)alloc::alloc::dealloc (3 samples, 0.02%)cfree (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.02%)core::ptr::drop_in_place<alloc::vec::into_iter::IntoIter<openraft::core::raft_core::ApplyingEntry<u64,openraft::node::BasicNode>>> (11 samples, 0.09%)cfree (8 samples, 0.06%)[libc.so.6] (3 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (3 samples, 0.02%)tokio::sync::oneshot::Sender<T>::send::_{{closure}} (3 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<core::result::Result<openraft::raft::ClientWriteResponse<dcache::DcacheTypeConfig>,openraft::error::ClientWriteError<u64,openraft::node::BasicNode>>>> (3 samples, 0.02%)tokio::sync::oneshot::State::set_complete (2 samples, 0.02%)tokio::runtime::scheduler::current_thread::<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>::schedule (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::send_response (19 samples, 0.15%)tokio::sync::oneshot::Sender<T>::send (17 samples, 0.14%)tokio::sync::oneshot::Inner<T>::complete (12 samples, 0.10%)tokio::sync::oneshot::Task::with_task (9 samples, 0.07%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (9 samples, 0.07%)tokio::sync::oneshot::Task::with_task::_{{closure}} (9 samples, 0.07%)core::ops::function::FnOnce::call_once (9 samples, 0.07%)core::task::wake::Waker::wake_by_ref (9 samples, 0.07%)tokio::runtime::task::waker::wake_by_ref (5 samples, 0.04%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_ref (5 samples, 0.04%)tokio::runtime::task::state::State::transition_to_notified_by_ref (5 samples, 0.04%)tokio::runtime::task::state::State::fetch_update_action (5 samples, 0.04%)tokio::runtime::task::state::State::load (4 samples, 0.03%)core::sync::atomic::AtomicUsize::load (4 samples, 0.03%)core::sync::atomic::atomic_load (4 samples, 0.03%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_apply_result (53 samples, 0.43%)openraft::progress::Progress::update (4 samples, 0.03%)<openraft::progress::VecProgress<ID,V,P,QS> as openraft::progress::Progress<ID,V,P,QS>>::update_with (4 samples, 0.03%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_success_progress (9 samples, 0.07%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_leader_vote_clock (9 samples, 0.07%)tracing_core::metadata::LevelFilter::current (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_progress (12 samples, 0.10%)tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_replication_progress (15 samples, 0.12%)openraft::raft_state::io_state::IOState<NID>::update_applied (4 samples, 0.03%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_notify (94 samples, 0.76%)[libc.so.6] (16 samples, 0.13%)core::ptr::drop_in_place<openraft::core::raft_core::RaftCore<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::network::raft_network_impl::DcacheNetwork>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>::run_engine_commands::{{closure}}> (2 samples, 0.02%)[libc.so.6] (13 samples, 0.11%)core::intrinsics::copy (13 samples, 0.11%)[libc.so.6] (11 samples, 0.09%)alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>::remove (19 samples, 0.15%)alloc::collections::btree::node::slice_remove (18 samples, 0.15%)core::ptr::mut_ptr::<impl *mut T>::add (5 samples, 0.04%)alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_entry (40 samples, 0.32%)alloc::collections::btree::map::entry::OccupiedEntry<K,V,A>::remove_kv (40 samples, 0.32%)alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>,alloc::collections::btree::node::marker::KV>>::remove_kv_tracking (27 samples, 0.22%)alloc::collections::btree::remove::<impl alloc::collections::btree::node::Handle<alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Mut,K,V,alloc::collections::btree::node::marker::Leaf>,alloc::collections::btree::node::marker::KV>>::remove_leaf_kv (25 samples, 0.20%)alloc::collections::btree::map::BTreeMap<K,V,A>::remove (44 samples, 0.36%)alloc::collections::btree::map::BTreeMap<K,V,A>::remove_entry (44 samples, 0.36%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::search_tree (4 samples, 0.03%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::search_node (4 samples, 0.03%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (4 samples, 0.03%)core::option::Option<T>::unwrap (21 samples, 0.17%)core::ptr::drop_in_place<alloc::vec::into_iter::IntoIter<dcache::store::DcacheResponse>> (15 samples, 0.12%)<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop (15 samples, 0.12%)core::ptr::drop_in_place<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<dcache::store::DcacheResponse,alloc::alloc::Global>> (15 samples, 0.12%)<<alloc::vec::into_iter::IntoIter<T,A> as core::ops::drop::Drop>::drop::DropGuard<T,A> as core::ops::drop::Drop>::drop (15 samples, 0.12%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<dcache::store::DcacheResponse>> (15 samples, 0.12%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (15 samples, 0.12%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (15 samples, 0.12%)alloc::alloc::dealloc (15 samples, 0.12%)cfree (14 samples, 0.11%)[libc.so.6] (5 samples, 0.04%)core::ptr::drop_in_place<alloc::vec::into_iter::IntoIter<openraft::core::raft_core::ApplyingEntry<u64,openraft::node::BasicNode>>> (12 samples, 0.10%)cfree (12 samples, 0.10%)[libc.so.6] (6 samples, 0.05%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (22 samples, 0.18%)tokio::sync::oneshot::Sender<T>::send::_{{closure}} (22 samples, 0.18%)core::ptr::drop_in_place<core::option::Option<core::result::Result<openraft::raft::ClientWriteResponse<dcache::DcacheTypeConfig>,openraft::error::ClientWriteError<u64,openraft::node::BasicNode>>>> (18 samples, 0.15%)tokio::sync::oneshot::State::is_closed (2 samples, 0.02%)tokio::sync::oneshot::State::set_complete (7 samples, 0.06%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)tokio::runtime::context::with_scheduler (11 samples, 0.09%)std::thread::local::LocalKey<T>::try_with (11 samples, 0.09%)tokio::runtime::context::with_scheduler::_{{closure}} (11 samples, 0.09%)tokio::runtime::context::scoped::Scoped<T>::with (10 samples, 0.08%)tokio::runtime::scheduler::current_thread::_<impl tokio::runtime::task::Schedule for alloc::sync::Arc<tokio::runtime::scheduler::current_thread::Handle>>::schedule::_{{closure}} (8 samples, 0.06%)tokio::runtime::scheduler::current_thread::Core::push_task (4 samples, 0.03%)alloc::collections::vec_deque::VecDeque<T,A>::push_back (4 samples, 0.03%)alloc::collections::vec_deque::VecDeque<T,A>::to_physical_idx (2 samples, 0.02%)alloc::collections::vec_deque::VecDeque<T,A>::wrap_add (2 samples, 0.02%)alloc::collections::vec_deque::wrap_index (2 samples, 0.02%)tokio::runtime::task::Task<S>::from_raw (2 samples, 0.02%)tokio::runtime::task::raw::RawTask::from_raw (2 samples, 0.02%)tokio::runtime::task::raw::schedule (6 samples, 0.05%)tokio::runtime::task::core::Header::get_scheduler (4 samples, 0.03%)tokio::runtime::task::raw::RawTask::schedule (3 samples, 0.02%)tokio::runtime::task::state::State::load (6 samples, 0.05%)core::sync::atomic::AtomicUsize::load (6 samples, 0.05%)core::sync::atomic::atomic_load (6 samples, 0.05%)tokio::sync::oneshot::Sender<T>::send (71 samples, 0.58%)tokio::sync::oneshot::Inner<T>::complete (47 samples, 0.38%)tokio::sync::oneshot::Task::with_task (37 samples, 0.30%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (37 samples, 0.30%)tokio::sync::oneshot::Task::with_task::_{{closure}} (37 samples, 0.30%)core::ops::function::FnOnce::call_once (37 samples, 0.30%)core::task::wake::Waker::wake_by_ref (37 samples, 0.30%)tokio::runtime::task::waker::wake_by_ref (20 samples, 0.16%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_ref (19 samples, 0.15%)tokio::runtime::task::state::State::transition_to_notified_by_ref (16 samples, 0.13%)tokio::runtime::task::state::State::fetch_update_action (16 samples, 0.13%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::send_response (79 samples, 0.64%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_apply_result (176 samples, 1.43%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_progress (3 samples, 0.02%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_success_progress (2 samples, 0.02%)openraft::engine::handler::replication_handler::ReplicationHandler<C>::update_leader_vote_clock (2 samples, 0.02%)openraft::progress::Progress::update (2 samples, 0.02%)<openraft::progress::VecProgress<ID,V,P,QS> as openraft::progress::Progress<ID,V,P,QS>>::update_with (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_replication_progress (5 samples, 0.04%)tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)openraft::raft_state::io_state::IOState<NID>::update_applied (13 samples, 0.11%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_notify (243 samples, 1.97%)o..[libc.so.6] (55 samples, 0.45%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}} (70 samples, 0.57%)<tokio::sync::mpsc::unbounded::Semaphore as tokio::sync::mpsc::chan::Semaphore>::add_permit (2 samples, 0.02%)[libc.so.6] (23 samples, 0.19%)[libc.so.6] (37 samples, 0.30%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)[libc.so.6] (18 samples, 0.15%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (2 samples, 0.02%)core::sync::atomic::AtomicUsize::load (3 samples, 0.02%)core::sync::atomic::atomic_load (3 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (8 samples, 0.06%)tokio::sync::mpsc::block::Block<T>::read::_{{closure}} (8 samples, 0.06%)core::ptr::read (8 samples, 0.06%)[libc.so.6] (6 samples, 0.05%)tokio::sync::mpsc::block::Block<T>::read (15 samples, 0.12%)tokio::sync::mpsc::list::Rx<T>::reclaim_blocks (4 samples, 0.03%)tokio::sync::mpsc::list::Tx<T>::reclaim_block (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::try_push (2 samples, 0.02%)core::sync::atomic::AtomicPtr<T>::compare_exchange (2 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::process_notify::_{{closure}} (454 samples, 3.68%)open..tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::try_recv (115 samples, 0.93%)tokio::sync::mpsc::chan::Rx<T,S>::try_recv (114 samples, 0.93%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (113 samples, 0.92%)tokio::sync::mpsc::chan::Rx<T,S>::try_recv::_{{closure}} (113 samples, 0.92%)tokio::sync::mpsc::list::Rx<T>::try_pop (87 samples, 0.71%)tokio::sync::mpsc::list::Rx<T>::pop (44 samples, 0.36%)tokio::sync::mpsc::list::Rx<T>::try_advancing_head (4 samples, 0.03%)[libc.so.6] (47 samples, 0.38%)core::iter::range::<impl core::iter::traits::iterator::Iterator for core::ops::range::Range<A>>::next (2 samples, 0.02%)<core::ops::range::Range<T> as core::iter::range::RangeIteratorImpl>::spec_next (2 samples, 0.02%)core::ptr::drop_in_place<openraft::core::raft_core::RaftCore<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::network::raft_network_impl::DcacheNetwork>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>::handle_api_msg::{{closure}}> (3 samples, 0.02%)[libc.so.6] (63 samples, 0.51%)core::ptr::drop_in_place<openraft::core::raft_core::RaftCore<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::network::raft_network_impl::DcacheNetwork>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>::handle_api_msg::{{closure}}::{{closure}}> (3 samples, 0.02%)<tracing::span::Span as core::ops::drop::Drop>::drop (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Span> (3 samples, 0.02%)tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::handle_api_msg::_{{closure}} (90 samples, 0.73%)tracing_core::metadata::LevelFilter::current (3 samples, 0.02%)core::sync::atomic::AtomicUsize::load (3 samples, 0.02%)core::sync::atomic::atomic_load (3 samples, 0.02%)[libc.so.6] (60 samples, 0.49%)core::ptr::drop_in_place<openraft::core::raft_core::RaftCore<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::network::raft_network_impl::DcacheNetwork>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>::run_engine_commands::{{closure}}::{{closure}}> (3 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}} (75 samples, 0.61%)<tokio::sync::mpsc::unbounded::Semaphore as tokio::sync::mpsc::chan::Semaphore>::add_permit (7 samples, 0.06%)core::sync::atomic::AtomicUsize::fetch_sub (2 samples, 0.02%)core::sync::atomic::atomic_sub (2 samples, 0.02%)[libc.so.6] (29 samples, 0.24%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (2 samples, 0.02%)[libc.so.6] (27 samples, 0.22%)core::sync::atomic::AtomicUsize::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)[libc.so.6] (10 samples, 0.08%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (2 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (12 samples, 0.10%)tokio::sync::mpsc::block::Block<T>::read::_{{closure}} (12 samples, 0.10%)core::ptr::read (12 samples, 0.10%)[libc.so.6] (10 samples, 0.08%)tokio::sync::mpsc::block::is_ready (2 samples, 0.02%)tokio::sync::mpsc::block::is_tx_closed (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::read (21 samples, 0.17%)core::cmp::PartialEq::ne (2 samples, 0.02%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (2 samples, 0.02%)tokio::sync::mpsc::list::Rx<T>::reclaim_blocks (3 samples, 0.02%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::try_recv (120 samples, 0.97%)tokio::sync::mpsc::chan::Rx<T,S>::try_recv (120 samples, 0.97%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (116 samples, 0.94%)tokio::sync::mpsc::chan::Rx<T,S>::try_recv::_{{closure}} (116 samples, 0.94%)tokio::sync::mpsc::list::Rx<T>::try_pop (77 samples, 0.62%)tokio::sync::mpsc::list::Rx<T>::pop (45 samples, 0.37%)tokio::sync::mpsc::list::Rx<T>::try_advancing_head (7 samples, 0.06%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::process_raft_msg::_{{closure}} (345 samples, 2.80%)op..[libc.so.6] (11 samples, 0.09%)core::ptr::drop_in_place<tracing::span::Span> (2 samples, 0.02%)<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll (1,220 samples, 9.90%)<tracing::inst..openraft::core::raft_core::RaftCore<C,N,LS,SM>::main::_{{closure}} (1,220 samples, 9.90%)openraft::core..<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll (1,220 samples, 9.90%)<tracing::inst..openraft::core::raft_core::RaftCore<C,N,LS,SM>::do_main::_{{closure}} (1,220 samples, 9.90%)openraft::core..openraft::core::raft_core::RaftCore<C,N,LS,SM>::do_main::_{{closure}}::_{{closure}} (1,220 samples, 9.90%)openraft::core..openraft::core::raft_core::RaftCore<C,N,LS,SM>::runtime_loop::_{{closure}} (1,211 samples, 9.83%)openraft::core..openraft::core::raft_core::RaftCore<C,N,LS,SM>::runtime_loop::_{{closure}}::_{{closure}} (1,203 samples, 9.76%)openraft::core..openraft::core::raft_core::RaftCore<C,N,LS,SM>::run_engine_commands::_{{closure}} (22 samples, 0.18%)tracing::__macro_support::__disabled_span (2 samples, 0.02%)tracing::span::Span::new_disabled (2 samples, 0.02%)alloc::string::String::with_capacity (3 samples, 0.02%)alloc::vec::Vec<T>::with_capacity (3 samples, 0.02%)alloc::vec::Vec<T,A>::with_capacity_in (3 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (3 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::allocate_in (3 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (3 samples, 0.02%)alloc::alloc::Global::alloc_impl (3 samples, 0.02%)alloc::alloc::alloc (3 samples, 0.02%)malloc (2 samples, 0.02%)core::fmt::Arguments::estimated_capacity (3 samples, 0.02%)core::iter::traits::iterator::Iterator::sum (3 samples, 0.02%)<usize as core::iter::traits::accum::Sum>::sum (3 samples, 0.02%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (3 samples, 0.02%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::fold (3 samples, 0.02%)<&mut W as core::fmt::Write>::write_str (4 samples, 0.03%)<alloc::string::String as core::fmt::Write>::write_str (3 samples, 0.02%)alloc::string::String::push_str (3 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (3 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (3 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (3 samples, 0.02%)core::intrinsics::copy_nonoverlapping (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)core::fmt::Formatter::new (4 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::grow (6 samples, 0.05%)alloc::alloc::Global::grow_impl (6 samples, 0.05%)alloc::alloc::realloc (6 samples, 0.05%)realloc (4 samples, 0.03%)[libc.so.6] (4 samples, 0.03%)[libc.so.6] (4 samples, 0.03%)alloc::raw_vec::finish_grow (10 samples, 0.08%)<&mut W as core::fmt::Write>::write_str (15 samples, 0.12%)<alloc::string::String as core::fmt::Write>::write_str (14 samples, 0.11%)alloc::string::String::push_str (14 samples, 0.11%)alloc::vec::Vec<T,A>::extend_from_slice (14 samples, 0.11%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (14 samples, 0.11%)alloc::vec::Vec<T,A>::append_elements (14 samples, 0.11%)alloc::vec::Vec<T,A>::reserve (14 samples, 0.11%)alloc::raw_vec::RawVec<T,A>::reserve (14 samples, 0.11%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (14 samples, 0.11%)alloc::raw_vec::RawVec<T,A>::grow_amortized (14 samples, 0.11%)core::num::<impl usize>::checked_add (2 samples, 0.02%)core::num::<impl usize>::overflowing_add (2 samples, 0.02%)alloc::fmt::format (32 samples, 0.26%)core::option::Option<T>::map_or_else (32 samples, 0.26%)alloc::fmt::format::_{{closure}} (32 samples, 0.26%)alloc::fmt::format::format_inner (32 samples, 0.26%)core::fmt::Write::write_fmt (25 samples, 0.20%)core::fmt::write (25 samples, 0.20%)core::fmt::rt::Argument::fmt (17 samples, 0.14%)<tokio::sync::mpsc::unbounded::UnboundedSender<T> as core::clone::Clone>::clone (2 samples, 0.02%)<tokio::sync::mpsc::chan::Tx<T,S> as core::clone::Clone>::clone (2 samples, 0.02%)<alloc::sync::Arc<T,A> as core::clone::Clone>::clone (2 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_add (2 samples, 0.02%)core::sync::atomic::atomic_add (2 samples, 0.02%)<tokio_util::sync::poll_semaphore::PollSemaphore as core::clone::Clone>::clone (2 samples, 0.02%)tokio_util::sync::poll_semaphore::PollSemaphore::clone_inner (2 samples, 0.02%)<alloc::sync::Arc<T,A> as core::clone::Clone>::clone (2 samples, 0.02%)<core::option::Option<T> as core::clone::Clone>::clone (8 samples, 0.06%)<tonic::transport::channel::Channel as core::clone::Clone>::clone (7 samples, 0.06%)<tower::buffer::service::Buffer<T,Request> as core::clone::Clone>::clone (7 samples, 0.06%)<tower::buffer::worker::Handle as core::clone::Clone>::clone (3 samples, 0.02%)<alloc::sync::Arc<T,A> as core::clone::Clone>::clone (3 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (14 samples, 0.11%)<dcache::network::raft_network_impl::ChannelManager as dcache::pool::ItemManager>::check::_{{closure}} (14 samples, 0.11%)<futures_util::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (11 samples, 0.09%)<dcache::network::raft_network_impl::ChannelManager as dcache::pool::ItemManager>::check::_{{closure}}::_{{closure}} (11 samples, 0.09%)<tonic::transport::channel::Channel as tower_service::Service<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>::poll_ready (11 samples, 0.09%)<tower::buffer::service::Buffer<T,Request> as tower_service::Service<Request>>::poll_ready (10 samples, 0.08%)tokio_util::sync::poll_semaphore::PollSemaphore::poll_acquire (7 samples, 0.06%)tokio_util::sync::poll_semaphore::PollSemaphore::poll_acquire_many (6 samples, 0.05%)tokio::sync::semaphore::Semaphore::try_acquire_many_owned (4 samples, 0.03%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<tonic::transport::channel::Channel,tonic::transport::error::Error>+core::marker::Send>>> (3 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<tonic::transport::channel::Channel,tonic::transport::error::Error>+core::marker::Send>> (3 samples, 0.02%)core::ptr::drop_in_place<<dcache::network::raft_network_impl::ChannelManager as dcache::pool::ItemManager>::check::{{closure}}> (3 samples, 0.02%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (2 samples, 0.02%)hashbrown::map::make_hash (5 samples, 0.04%)core::hash::BuildHasher::hash_one (5 samples, 0.04%)core::hash::impls::<impl core::hash::Hash for &T>::hash (4 samples, 0.03%)<alloc::string::String as core::hash::Hash>::hash (4 samples, 0.03%)core::hash::impls::<impl core::hash::Hash for str>::hash (4 samples, 0.03%)<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::write_str (4 samples, 0.03%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::write_str (4 samples, 0.03%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write_str (4 samples, 0.03%)core::hash::Hasher::write_u8 (2 samples, 0.02%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (2 samples, 0.02%)hashbrown::raw::RawTable<T,A>::find::_{{closure}} (4 samples, 0.03%)hashbrown::map::equivalent_key::_{{closure}} (4 samples, 0.03%)<Q as hashbrown::Equivalent<K>>::equivalent (4 samples, 0.03%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (4 samples, 0.03%)<alloc::string::String as core::cmp::PartialEq>::eq (4 samples, 0.03%)alloc::vec::partial_eq::<impl core::cmp::PartialEq<alloc::vec::Vec<U,A2>> for alloc::vec::Vec<T,A1>>::eq (4 samples, 0.03%)core::slice::cmp::<impl core::cmp::PartialEq<[B]> for [A]>::eq (4 samples, 0.03%)<[A] as core::slice::cmp::SlicePartialEq<B>>::equal (4 samples, 0.03%)[libc.so.6] (2 samples, 0.02%)std::collections::hash::map::HashMap<K,V,S>::get (11 samples, 0.09%)hashbrown::map::HashMap<K,V,S,A>::get (11 samples, 0.09%)hashbrown::map::HashMap<K,V,S,A>::get_inner (11 samples, 0.09%)hashbrown::raw::RawTable<T,A>::get (6 samples, 0.05%)hashbrown::raw::RawTable<T,A>::find (6 samples, 0.05%)hashbrown::raw::RawTableInner<A>::find_inner (6 samples, 0.05%)dcache::pool::Pool<Mgr>::get_pool_item (14 samples, 0.11%)dcache::pool::Pool<Mgr>::get::_{{closure}} (47 samples, 0.38%)tokio::sync::mutex::Mutex<T>::lock::_{{closure}} (5 samples, 0.04%)tokio::sync::mutex::Mutex<T>::lock::_{{closure}}::_{{closure}} (5 samples, 0.04%)tokio::sync::mutex::Mutex<T>::acquire::_{{closure}} (5 samples, 0.04%)[libc.so.6] (3 samples, 0.02%)http::uri::path::PathAndQuery::slash (2 samples, 0.02%)dcache::network::raft_network_impl::DcacheNetwork::make_client::_{{closure}} (92 samples, 0.75%)dcache::protobuf::dcache::dcache_service_client::DcacheServiceClient<T>::new (9 samples, 0.07%)tonic::client::grpc::Grpc<T>::new (6 samples, 0.05%)<http::uri::Uri as core::default::Default>::default (4 samples, 0.03%)http::uri::scheme::Scheme::empty (2 samples, 0.02%)core::ptr::drop_in_place<tonic::client::grpc::Grpc<tonic::transport::channel::Channel>::client_streaming<tokio_stream::once::Once<dcache::protobuf::dcache::RaftRequest>,dcache::protobuf::dcache::RaftRequest,dcache::protobuf::dcache::RaftReply,tonic::codec::prost::ProstCodec<dcache::protobuf::dcache::RaftRequest,dcache::protobuf::dcache::RaftReply>>::{{closure}}> (2 samples, 0.02%)<core::result::Result<T,E> as core::ops::try_trait::Try>::branch (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<bytes::bytes_mut::BytesMut> (2 samples, 0.02%)<bytes::bytes_mut::BytesMut as core::ops::drop::Drop>::drop (2 samples, 0.02%)bytes::bytes_mut::BytesMut::kind (2 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<alloc::boxed::Box<hyper::body::body::Extra>>> (2 samples, 0.02%)core::ptr::drop_in_place<tonic::codec::decode::Streaming<dcache::protobuf::dcache::RaftReply>> (6 samples, 0.05%)core::ptr::drop_in_place<tonic::codec::decode::StreamingInner> (6 samples, 0.05%)core::ptr::drop_in_place<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>> (4 samples, 0.03%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn http_body::Body+Error = tonic::status::Status+Data = bytes::bytes::Bytes+core::marker::Send>>> (4 samples, 0.03%)core::ptr::drop_in_place<alloc::boxed::Box<dyn http_body::Body+Error = tonic::status::Status+Data = bytes::bytes::Bytes+core::marker::Send>> (4 samples, 0.03%)core::ptr::drop_in_place<hyper::body::body::Body> (2 samples, 0.02%)<T as tonic::client::service::GrpcService<ReqBody>>::call (3 samples, 0.02%)<tonic::transport::channel::Channel as tower_service::Service<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>>::call (3 samples, 0.02%)<tonic::transport::channel::ResponseFuture as core::future::future::Future>::poll (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<tonic::transport::channel::ResponseFuture> (3 samples, 0.02%)tonic::client::grpc::Grpc<T>::streaming::_{{closure}} (19 samples, 0.15%)tonic::request::Request<T>::map (3 samples, 0.02%)tonic::client::grpc::Grpc<T>::client_streaming::_{{closure}} (40 samples, 0.32%)tonic::codec::decode::Streaming<T>::trailers::_{{closure}} (3 samples, 0.02%)dcache::protobuf::dcache::dcache_service_client::DcacheServiceClient<T>::append_entries::_{{closure}} (45 samples, 0.37%)tonic::client::grpc::Grpc<T>::unary::_{{closure}} (45 samples, 0.37%)<tokio::runtime::task::Task<S> as tokio::util::linked_list::Link>::as_raw (3 samples, 0.02%)tokio::runtime::task::raw::RawTask::header_ptr (3 samples, 0.02%)tokio::runtime::task::list::OwnedTasks<S>::bind_inner (8 samples, 0.06%)tokio::util::sharded_list::ShardedList<L,<L as tokio::util::linked_list::Link>::Target>::lock_shard (5 samples, 0.04%)<tokio::runtime::task::Task<S> as tokio::util::sharded_list::ShardedListItem>::get_shard_id (2 samples, 0.02%)tokio::runtime::task::core::Header::get_id (2 samples, 0.02%)alloc::boxed::Box<T>::new (9 samples, 0.07%)alloc::alloc::exchange_malloc (8 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (8 samples, 0.06%)alloc::alloc::Global::alloc_impl (8 samples, 0.06%)alloc::alloc::alloc (8 samples, 0.06%)__rdl_alloc (8 samples, 0.06%)std::sys::unix::alloc::<impl core::alloc::global::GlobalAlloc for std::alloc::System>::alloc (8 samples, 0.06%)std::sys::unix::alloc::aligned_malloc (8 samples, 0.06%)posix_memalign (8 samples, 0.06%)[libc.so.6] (4 samples, 0.03%)[libc.so.6] (2 samples, 0.02%)tokio::runtime::task::core::Cell<T,S>::new (11 samples, 0.09%)<tracing_futures::Instrumented<T> as core::future::future::Future>::poll (161 samples, 1.31%)openraft::replication::ReplicationCore<C,N,LS>::main::_{{closure}} (161 samples, 1.31%)openraft::replication::ReplicationCore<C,N,LS>::main::_{{closure}}::_{{closure}} (161 samples, 1.31%)openraft::replication::ReplicationCore<C,N,LS>::send_log_entries::_{{closure}} (161 samples, 1.31%)openraft::replication::ReplicationCore<C,N,LS>::send_log_entries::_{{closure}}::_{{closure}} (161 samples, 1.31%)<tokio::time::timeout::Timeout<T> as core::future::future::Future>::poll (161 samples, 1.31%)<core::pin::Pin<P> as core::future::future::Future>::poll (161 samples, 1.31%)openraft::network::network::RaftNetwork::append_entries::_{{closure}} (161 samples, 1.31%)<core::pin::Pin<P> as core::future::future::Future>::poll (161 samples, 1.31%)<dcache::network::raft_network_impl::DcacheNetworkConnection as openraft::network::network::RaftNetwork<dcache::DcacheTypeConfig>>::send_append_entries::_{{closure}} (161 samples, 1.31%)dcache::network::raft_network_impl::DcacheNetwork::send_rpc::_{{closure}} (161 samples, 1.31%)tokio::task::spawn::spawn (24 samples, 0.19%)tokio::task::spawn::spawn_inner (24 samples, 0.19%)tokio::runtime::context::current::with_current (24 samples, 0.19%)std::thread::local::LocalKey<T>::try_with (24 samples, 0.19%)tokio::runtime::context::current::with_current::_{{closure}} (24 samples, 0.19%)core::option::Option<T>::map (24 samples, 0.19%)tokio::task::spawn::spawn_inner::_{{closure}} (24 samples, 0.19%)tokio::runtime::scheduler::Handle::spawn (24 samples, 0.19%)tokio::runtime::scheduler::current_thread::Handle::spawn (24 samples, 0.19%)tokio::runtime::task::list::OwnedTasks<S>::bind (24 samples, 0.19%)tokio::runtime::task::new_task (16 samples, 0.13%)tokio::runtime::task::raw::RawTask::new (16 samples, 0.13%)tokio::runtime::task::state::State::new (2 samples, 0.02%)[libc.so.6] (51 samples, 0.41%)core::ptr::drop_in_place<dcache::store::<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::apply_to_state_machine::{{closure}}::{{closure}}> (3 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Span> (14 samples, 0.11%)<tracing::span::Span as core::ops::drop::Drop>::drop (2 samples, 0.02%)[libc.so.6] (15 samples, 0.12%)alloc::vec::Vec<T,A>::push (17 samples, 0.14%)core::ptr::write (15 samples, 0.12%)alloc::vec::Vec<T>::with_capacity (14 samples, 0.11%)alloc::vec::Vec<T,A>::with_capacity_in (14 samples, 0.11%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (14 samples, 0.11%)alloc::raw_vec::RawVec<T,A>::allocate_in (14 samples, 0.11%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (14 samples, 0.11%)alloc::alloc::Global::alloc_impl (14 samples, 0.11%)alloc::alloc::alloc (14 samples, 0.11%)malloc (14 samples, 0.11%)[libc.so.6] (5 samples, 0.04%)core::mem::drop (7 samples, 0.06%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::sync::batch_semaphore::Waitlist>> (7 samples, 0.06%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::sync::batch_semaphore::Waitlist>> (7 samples, 0.06%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (7 samples, 0.06%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (7 samples, 0.06%)tokio::sync::batch_semaphore::Semaphore::add_permits_locked (26 samples, 0.21%)core::ptr::drop_in_place<tokio::sync::rwlock::write_guard::RwLockWriteGuard<dcache::store::DcacheStateMachine>> (36 samples, 0.29%)<tokio::sync::rwlock::write_guard::RwLockWriteGuard<T> as core::ops::drop::Drop>::drop (36 samples, 0.29%)tokio::sync::batch_semaphore::Semaphore::release (10 samples, 0.08%)tokio::loom::std::parking_lot::Mutex<T>::lock (5 samples, 0.04%)lock_api::mutex::Mutex<R,T>::lock (5 samples, 0.04%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (5 samples, 0.04%)core::num::<impl usize>::checked_add (5 samples, 0.04%)core::num::<impl usize>::overflowing_add (5 samples, 0.04%)<dashmap::DashMap<K,V,S> as dashmap::t::Map<K,V,S>>::_yield_read_shard (15 samples, 0.12%)lock_api::rwlock::RwLock<R,T>::read (14 samples, 0.11%)<dashmap::lock::RawRwLock as lock_api::rwlock::RawRwLock>::lock_shared (14 samples, 0.11%)dashmap::lock::RawRwLock::try_lock_shared_fast (12 samples, 0.10%)core::sync::atomic::AtomicUsize::load (5 samples, 0.04%)core::sync::atomic::atomic_load (5 samples, 0.04%)core::ptr::drop_in_place<lock_api::rwlock::RwLockReadGuard<dashmap::lock::RawRwLock,hashbrown::map::HashMap<alloc::string::String,dashmap::util::SharedValue<dcache::mcaptcha::mcaptcha::MCaptcha>,std::collections::hash::map::RandomState>>> (5 samples, 0.04%)<lock_api::rwlock::RwLockReadGuard<R,T> as core::ops::drop::Drop>::drop (5 samples, 0.04%)<dashmap::lock::RawRwLock as lock_api::rwlock::RawRwLock>::unlock_shared (5 samples, 0.04%)<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::finish (14 samples, 0.11%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::finish (14 samples, 0.11%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::finish (14 samples, 0.11%)<core::hash::sip::Sip13Rounds as core::hash::sip::Sip>::d_rounds (9 samples, 0.07%)core::num::<impl u64>::rotate_left (5 samples, 0.04%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (9 samples, 0.07%)core::hash::sip::u8to64_le (9 samples, 0.07%)core::intrinsics::copy_nonoverlapping (5 samples, 0.04%)dcache::mcaptcha::mcaptcha::Manager::add_visitor (55 samples, 0.45%)dashmap::DashMap<K,V,S>::get (50 samples, 0.41%)<dashmap::DashMap<K,V,S> as dashmap::t::Map<K,V,S>>::_get (50 samples, 0.41%)dashmap::DashMap<K,V,S>::hash_usize (27 samples, 0.22%)core::hash::impls::<impl core::hash::Hash for &T>::hash (12 samples, 0.10%)<alloc::string::String as core::hash::Hash>::hash (12 samples, 0.10%)core::hash::impls::<impl core::hash::Hash for str>::hash (12 samples, 0.10%)<std::collections::hash::map::DefaultHasher as core::hash::Hasher>::write_str (12 samples, 0.10%)<core::hash::sip::SipHasher13 as core::hash::Hasher>::write_str (12 samples, 0.10%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write_str (12 samples, 0.10%)core::hash::Hasher::write_u8 (3 samples, 0.02%)<core::hash::sip::Hasher<S> as core::hash::Hasher>::write (2 samples, 0.02%)<F as core::future::into_future::IntoFuture>::into_future (15 samples, 0.12%)<tokio::sync::batch_semaphore::Acquire as core::future::future::Future>::poll (13 samples, 0.11%)tokio::sync::batch_semaphore::Semaphore::poll_acquire (8 samples, 0.06%)core::sync::atomic::AtomicUsize::compare_exchange (5 samples, 0.04%)core::sync::atomic::atomic_compare_exchange (5 samples, 0.04%)core::ptr::drop_in_place<tokio::sync::batch_semaphore::Acquire> (3 samples, 0.02%)<tokio::sync::batch_semaphore::Acquire as core::ops::drop::Drop>::drop (3 samples, 0.02%)tokio::sync::rwlock::RwLock<T>::write::_{{closure}} (77 samples, 0.62%)tokio::sync::rwlock::RwLock<T>::write::_{{closure}}::_{{closure}} (58 samples, 0.47%)tokio::sync::batch_semaphore::Semaphore::acquire (21 samples, 0.17%)tokio::sync::batch_semaphore::Acquire::new (19 samples, 0.15%)dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::apply_to_state_machine::_{{closure}}::_{{closure}} (257 samples, 2.09%)d..tokio::runtime::task::core::Core<T,S>::poll (1,750 samples, 14.20%)tokio::runtime::task::..tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (1,750 samples, 14.20%)tokio::loom::std::unsa..tokio::runtime::task::core::Core<T,S>::poll::_{{closure}} (1,750 samples, 14.20%)tokio::runtime::task::..openraft::core::sm::Worker<C,SM>::do_spawn::_{{closure}} (352 samples, 2.86%)op..openraft::core::sm::Worker<C,SM>::worker_loop::_{{closure}} (352 samples, 2.86%)op..openraft::core::sm::Worker<C,SM>::worker_loop::_{{closure}}::_{{closure}} (352 samples, 2.86%)op..openraft::core::sm::Worker<C,SM>::apply::_{{closure}} (352 samples, 2.86%)op..openraft::core::sm::Worker<C,SM>::apply::_{{closure}}::_{{closure}} (352 samples, 2.86%)op..<core::pin::Pin<P> as core::future::future::Future>::poll (352 samples, 2.86%)<c..<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::v2::RaftStateMachine<C>>::apply::_{{closure}} (352 samples, 2.86%)<o..<core::pin::Pin<P> as core::future::future::Future>::poll (352 samples, 2.86%)<c..dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::apply_to_state_machine::_{{closure}} (352 samples, 2.86%)dc..[libc.so.6] (3 samples, 0.02%)tokio::runtime::task::list::OwnedTasks<S>::bind_inner (2 samples, 0.02%)<hyper::common::exec::Exec as hyper::common::exec::ConnStreamExec<F,B>>::execute_h2stream (4 samples, 0.03%)hyper::common::exec::Exec::execute (4 samples, 0.03%)tokio::task::spawn::spawn (4 samples, 0.03%)tokio::task::spawn::spawn_inner (4 samples, 0.03%)tokio::runtime::context::current::with_current (4 samples, 0.03%)std::thread::local::LocalKey<T>::try_with (4 samples, 0.03%)tokio::runtime::context::current::with_current::_{{closure}} (4 samples, 0.03%)core::option::Option<T>::map (4 samples, 0.03%)tokio::task::spawn::spawn_inner::_{{closure}} (4 samples, 0.03%)tokio::runtime::scheduler::Handle::spawn (4 samples, 0.03%)tokio::runtime::scheduler::current_thread::Handle::spawn (4 samples, 0.03%)tokio::runtime::task::list::OwnedTasks<S>::bind (4 samples, 0.03%)<hyper::server::server::new_svc::NewSvcTask<I,N,S,E,W> as core::future::future::Future>::poll (6 samples, 0.05%)<hyper::server::conn::upgrades::UpgradeableConnection<I,S,E> as core::future::future::Future>::poll (6 samples, 0.05%)<hyper::server::conn::ProtoServer<T,B,S,E> as core::future::future::Future>::poll (6 samples, 0.05%)<hyper::proto::h2::server::Server<T,S,B,E> as core::future::future::Future>::poll (6 samples, 0.05%)hyper::proto::h2::server::Serving<T,B>::poll_server (6 samples, 0.05%)h2::server::Connection<T,B>::poll_accept (2 samples, 0.02%)h2::proto::connection::Connection<T,h2::server::Peer,B>::next_incoming (2 samples, 0.02%)h2::proto::streams::streams::Streams<B,P>::next_incoming (2 samples, 0.02%)h2::proto::streams::recv::Recv::next_incoming (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Entered> (2 samples, 0.02%)<tracing::span::Entered as core::ops::drop::Drop>::drop (2 samples, 0.02%)tracing::span::Span::do_exit (2 samples, 0.02%)core::option::Option<T>::as_ref (2 samples, 0.02%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::main::_{{closure}} (19 samples, 0.15%)<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll (12 samples, 0.10%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::do_main::_{{closure}} (12 samples, 0.10%)openraft::core::raft_core::RaftCore<C,N,LS,SM>::do_main::_{{closure}}::_{{closure}} (6 samples, 0.05%)<tracing::instrument::Instrumented<T> as core::future::future::Future>::poll (27 samples, 0.22%)tracing::instrument::_::<impl tracing::instrument::Instrumented<T>>::project (2 samples, 0.02%)openraft::replication::ReplicationCore<C,N,LS>::process_event (2 samples, 0.02%)core::option::Option<T>::ok_or (34 samples, 0.28%)futures_task::noop_waker::noop_waker (6 samples, 0.05%)futures_task::noop_waker::noop_raw_waker (5 samples, 0.04%)<alloc::sync::Arc<T,A> as core::ops::deref::Deref>::deref (3 samples, 0.02%)alloc::sync::Arc<T,A>::inner (3 samples, 0.02%)core::ptr::non_null::NonNull<T>::as_ref (3 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::coop::RestoreOnPending> (7 samples, 0.06%)<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop (5 samples, 0.04%)<tokio::sync::mpsc::unbounded::Semaphore as tokio::sync::mpsc::chan::Semaphore>::add_permit (13 samples, 0.11%)core::sync::atomic::AtomicUsize::fetch_sub (4 samples, 0.03%)core::sync::atomic::atomic_sub (4 samples, 0.03%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (4 samples, 0.03%)core::sync::atomic::AtomicUsize::load (3 samples, 0.02%)core::sync::atomic::atomic_load (3 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (5 samples, 0.04%)tokio::sync::mpsc::block::Block<T>::read::_{{closure}} (5 samples, 0.04%)core::ptr::read (5 samples, 0.04%)tokio::sync::mpsc::block::Block<T>::read (17 samples, 0.14%)tokio::sync::mpsc::block::is_ready (4 samples, 0.03%)tokio::sync::mpsc::list::Rx<T>::reclaim_blocks (5 samples, 0.04%)tokio::sync::mpsc::list::Tx<T>::reclaim_block (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::try_push (2 samples, 0.02%)core::sync::atomic::AtomicPtr<T>::compare_exchange (2 samples, 0.02%)core::sync::atomic::atomic_compare_exchange (2 samples, 0.02%)tokio::sync::mpsc::list::Rx<T>::pop (31 samples, 0.25%)tokio::sync::mpsc::list::Rx<T>::try_advancing_head (4 samples, 0.03%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (97 samples, 0.79%)tokio::sync::mpsc::chan::Rx<T,S>::recv::_{{closure}} (97 samples, 0.79%)tokio::sync::task::atomic_waker::AtomicWaker::register_by_ref (2 samples, 0.02%)core::cell::Cell<T>::set (17 samples, 0.14%)core::cell::Cell<T>::replace (17 samples, 0.14%)core::mem::replace (17 samples, 0.14%)core::ptr::write (17 samples, 0.14%)tokio::runtime::context::budget (25 samples, 0.20%)std::thread::local::LocalKey<T>::try_with (25 samples, 0.20%)tokio::runtime::context::budget::_{{closure}} (25 samples, 0.20%)tokio::runtime::coop::poll_proceed::_{{closure}} (25 samples, 0.20%)tokio::runtime::coop::Budget::decrement (5 samples, 0.04%)futures_util::future::future::FutureExt::now_or_never (206 samples, 1.67%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::recv::_{{closure}} (162 samples, 1.31%)<tokio::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (147 samples, 1.19%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::recv::_{{closure}}::_{{closure}} (141 samples, 1.14%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::poll_recv (141 samples, 1.14%)tokio::sync::mpsc::chan::Rx<T,S>::recv (141 samples, 1.14%)tokio::runtime::coop::poll_proceed (34 samples, 0.28%)tokio::runtime::coop::Budget::unconstrained (3 samples, 0.02%)<tracing_core::metadata::Level as core::cmp::PartialOrd<tracing_core::metadata::LevelFilter>>::le (2 samples, 0.02%)openraft::replication::ReplicationCore<C,N,LS>::try_drain_events::_{{closure}} (266 samples, 2.16%)o..openraft::replication::ReplicationCore<C,N,LS>::try_drain_events::_{{closure}}::_{{closure}} (263 samples, 2.13%)o..openraft::replication::ReplicationCore<C,N,LS>::process_event (14 samples, 0.11%)openraft::replication::ReplicationCore<C,N,LS>::drain_events::_{{closure}} (280 samples, 2.27%)o..openraft::replication::ReplicationCore<C,N,LS>::drain_events::_{{closure}}::_{{closure}} (279 samples, 2.26%)o..tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::recv::_{{closure}} (9 samples, 0.07%)<tokio::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (8 samples, 0.06%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::recv::_{{closure}}::_{{closure}} (7 samples, 0.06%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::poll_recv (7 samples, 0.06%)tokio::sync::mpsc::chan::Rx<T,S>::recv (7 samples, 0.06%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (7 samples, 0.06%)tokio::sync::mpsc::chan::Rx<T,S>::recv::_{{closure}} (7 samples, 0.06%)tokio::sync::mpsc::list::Rx<T>::pop (6 samples, 0.05%)tokio::sync::mpsc::list::Rx<T>::try_advancing_head (3 samples, 0.02%)[libc.so.6] (5 samples, 0.04%)<tracing::span::Span as core::ops::drop::Drop>::drop (2 samples, 0.02%)tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Span> (3 samples, 0.02%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::find_lower_bound_edge (4 samples, 0.03%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_lower_bound_index (4 samples, 0.03%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (4 samples, 0.03%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::find_upper_bound_edge (3 samples, 0.02%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_upper_bound_index (3 samples, 0.02%)alloc::collections::btree::search::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,Type>>::find_key_index (3 samples, 0.02%)core::cmp::impls::<impl core::cmp::Ord for u64>::cmp (2 samples, 0.02%)alloc::collections::btree::map::BTreeMap<K,V,A>::range (9 samples, 0.07%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<alloc::collections::btree::node::marker::Immut,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::range_search (9 samples, 0.07%)alloc::collections::btree::navigate::<impl alloc::collections::btree::node::NodeRef<BorrowType,K,V,alloc::collections::btree::node::marker::LeafOrInternal>>::find_leaf_edges_spanning_range (9 samples, 0.07%)<alloc::collections::btree::map::Range<K,V> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.03%)alloc::collections::btree::navigate::LeafRange<alloc::collections::btree::node::marker::Immut,K,V>::next_checked (4 samples, 0.03%)alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked (4 samples, 0.03%)alloc::collections::btree::mem::replace (3 samples, 0.02%)alloc::collections::btree::navigate::LeafRange<BorrowType,K,V>::perform_next_checked::_{{closure}} (3 samples, 0.02%)__rdl_alloc (2 samples, 0.02%)__rust_alloc (4 samples, 0.03%)alloc::vec::Vec<T,A>::with_capacity_in (104 samples, 0.84%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (104 samples, 0.84%)alloc::raw_vec::RawVec<T,A>::allocate_in (104 samples, 0.84%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (101 samples, 0.82%)alloc::alloc::Global::alloc_impl (101 samples, 0.82%)alloc::alloc::alloc (101 samples, 0.82%)malloc (95 samples, 0.77%)[libc.so.6] (70 samples, 0.57%)[libc.so.6] (22 samples, 0.18%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (201 samples, 1.63%)core::option::Option<T>::map (197 samples, 1.60%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (160 samples, 1.30%)dcache::store::_<impl openraft::storage::RaftLogReader<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::try_get_log_entries::_{{closure}}::_{{closure}} (160 samples, 1.30%)<openraft::entry::Entry<C> as core::clone::Clone>::clone (160 samples, 1.30%)<openraft::entry::payload::EntryPayload<C> as core::clone::Clone>::clone (152 samples, 1.23%)<dcache::store::DcacheRequest as core::clone::Clone>::clone (122 samples, 0.99%)<alloc::string::String as core::clone::Clone>::clone (122 samples, 0.99%)<alloc::vec::Vec<T,A> as core::clone::Clone>::clone (118 samples, 0.96%)alloc::slice::<impl [T]>::to_vec_in (118 samples, 0.96%)alloc::slice::hack::to_vec (118 samples, 0.96%)<T as alloc::slice::hack::ConvertVec>::to_vec (118 samples, 0.96%)core::ptr::const_ptr::<impl *const T>::copy_to_nonoverlapping (14 samples, 0.11%)core::intrinsics::copy_nonoverlapping (14 samples, 0.11%)[libc.so.6] (13 samples, 0.11%)alloc::raw_vec::finish_grow (41 samples, 0.33%)<alloc::alloc::Global as core::alloc::Allocator>::grow (40 samples, 0.32%)alloc::alloc::Global::grow_impl (40 samples, 0.32%)alloc::alloc::realloc (40 samples, 0.32%)realloc (39 samples, 0.32%)[libc.so.6] (38 samples, 0.31%)[libc.so.6] (37 samples, 0.30%)[libc.so.6] (3 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (42 samples, 0.34%)alloc::raw_vec::RawVec<T,A>::reserve (42 samples, 0.34%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (42 samples, 0.34%)alloc::raw_vec::RawVec<T,A>::grow_amortized (42 samples, 0.34%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (299 samples, 2.43%)<a..alloc::vec::Vec<T,A>::extend_desugared (299 samples, 2.43%)al..core::ptr::write (39 samples, 0.32%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.03%)core::option::Option<T>::map (3 samples, 0.02%)core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once (3 samples, 0.02%)dcache::store::_<impl openraft::storage::RaftLogReader<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::try_get_log_entries::_{{closure}}::_{{closure}} (3 samples, 0.02%)<openraft::entry::Entry<C> as core::clone::Clone>::clone (3 samples, 0.02%)<openraft::entry::payload::EntryPayload<C> as core::clone::Clone>::clone (3 samples, 0.02%)core::iter::traits::iterator::Iterator::collect (304 samples, 2.47%)co..<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (304 samples, 2.47%)<a..<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (304 samples, 2.47%)<a..<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (304 samples, 2.47%)<a..<core::pin::Pin<P> as core::future::future::Future>::poll (314 samples, 2.55%)<c..dcache::store::_<impl openraft::storage::RaftLogReader<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::try_get_log_entries::_{{closure}} (314 samples, 2.55%)dc..core::pin::Pin<&mut core::pin::Pin<P>>::as_deref_mut (3 samples, 0.02%)core::pin::Pin<P>::as_mut (3 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::deref::DerefMut>::deref_mut (3 samples, 0.02%)<tokio::sync::mpsc::bounded::Sender<T> as core::clone::Clone>::clone (2 samples, 0.02%)<tokio::sync::mpsc::chan::Tx<T,S> as core::clone::Clone>::clone (2 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::mpsc::unbounded::UnboundedSender<tower::buffer::message::Message<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>,tower::util::either::Either<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>,core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>>>>> (6 samples, 0.05%)core::ptr::drop_in_place<tokio::sync::mpsc::chan::Tx<tower::buffer::message::Message<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>,tower::util::either::Either<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>,core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>>>,tokio::sync::mpsc::unbounded::Semaphore>> (6 samples, 0.05%)core::ptr::drop_in_place<alloc::sync::Arc<tokio::sync::mpsc::chan::Chan<tower::buffer::message::Message<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>,tower::util::either::Either<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>,core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>+core::marker::Send>>>>,tokio::sync::mpsc::unbounded::Semaphore>>> (5 samples, 0.04%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (5 samples, 0.04%)core::ptr::drop_in_place<dcache::protobuf::dcache::dcache_service_client::DcacheServiceClient<tonic::transport::channel::Channel>> (9 samples, 0.07%)core::ptr::drop_in_place<tonic::client::grpc::Grpc<tonic::transport::channel::Channel>> (9 samples, 0.07%)core::ptr::drop_in_place<tonic::transport::channel::Channel> (9 samples, 0.07%)core::ptr::drop_in_place<tower::buffer::service::Buffer<tower::util::either::Either<tonic::transport::service::connection::Connection,tower::util::boxed::sync::BoxService<http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>,http::response::Response<hyper::body::body::Body>,alloc::boxed::Box<dyn core::error::Error+core::marker::Sync+core::marker::Send>>>,http::request::Request<http_body::combinators::box_body::UnsyncBoxBody<bytes::bytes::Bytes,tonic::status::Status>>>> (9 samples, 0.07%)core::ptr::drop_in_place<tower::buffer::worker::Handle> (3 samples, 0.02%)core::ptr::drop_in_place<alloc::sync::Arc<std::sync::mutex::Mutex<core::option::Option<tower::buffer::error::ServiceError>>>> (3 samples, 0.02%)<alloc::sync::Arc<T,A> as core::ops::drop::Drop>::drop (3 samples, 0.02%)cfree (43 samples, 0.35%)[libc.so.6] (29 samples, 0.24%)<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (49 samples, 0.40%)core::ptr::drop_in_place<[openraft::entry::Entry<dcache::DcacheTypeConfig>]> (49 samples, 0.40%)core::ptr::drop_in_place<openraft::entry::Entry<dcache::DcacheTypeConfig>> (48 samples, 0.39%)core::ptr::drop_in_place<openraft::entry::payload::EntryPayload<dcache::DcacheTypeConfig>> (48 samples, 0.39%)core::ptr::drop_in_place<dcache::store::DcacheRequest> (4 samples, 0.03%)core::ptr::drop_in_place<openraft::raft::AppendEntriesRequest<dcache::DcacheTypeConfig>> (54 samples, 0.44%)core::ptr::drop_in_place<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>> (54 samples, 0.44%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<openraft::entry::Entry<dcache::DcacheTypeConfig>>> (5 samples, 0.04%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (5 samples, 0.04%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (5 samples, 0.04%)alloc::alloc::dealloc (5 samples, 0.04%)cfree (4 samples, 0.03%)[libc.so.6] (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)tonic::extensions::Extensions::new (2 samples, 0.02%)<T as tonic::request::IntoRequest<T>>::into_request (5 samples, 0.04%)tonic::request::Request<T>::new (5 samples, 0.04%)tonic::metadata::map::MetadataMap::new (2 samples, 0.02%)http::uri::path::PathAndQuery::from_static (7 samples, 0.06%)http::uri::path::PathAndQuery::from_shared (7 samples, 0.06%)tonic::extensions::Extensions::insert (4 samples, 0.03%)http::extensions::Extensions::insert (4 samples, 0.03%)std::collections::hash::map::HashMap<K,V,S>::insert (4 samples, 0.03%)hashbrown::map::HashMap<K,V,S,A>::insert (4 samples, 0.03%)hashbrown::raw::RawTable<T,A>::find_or_find_insert_slot (4 samples, 0.03%)hashbrown::raw::RawTable<T,A>::reserve (4 samples, 0.03%)hashbrown::raw::RawTable<T,A>::reserve_rehash (4 samples, 0.03%)hashbrown::raw::RawTableInner<A>::reserve_rehash_inner (3 samples, 0.02%)hashbrown::raw::RawTableInner<A>::resize_inner (3 samples, 0.02%)hashbrown::raw::RawTableInner<A>::prepare_resize (3 samples, 0.02%)hashbrown::raw::RawTableInner<A>::fallible_with_capacity (3 samples, 0.02%)hashbrown::raw::RawTableInner<A>::new_uninitialized (2 samples, 0.02%)hashbrown::raw::alloc::inner::do_alloc (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (2 samples, 0.02%)alloc::alloc::Global::alloc_impl (2 samples, 0.02%)alloc::alloc::alloc (2 samples, 0.02%)dcache::protobuf::dcache::dcache_service_client::DcacheServiceClient<T>::append_entries::_{{closure}} (23 samples, 0.19%)tonic::extensions::GrpcMethod::new (2 samples, 0.02%)<openraft::raft::_::<impl serde::de::Deserialize for openraft::raft::AppendEntriesResponse<NID>>::deserialize::__FieldVisitor as serde::de::Visitor>::visit_str (2 samples, 0.02%)core::str::traits::<impl core::cmp::PartialEq for str>::eq (2 samples, 0.02%)core::cmp::impls::<impl core::cmp::PartialEq<&B> for &A>::eq (2 samples, 0.02%)core::slice::cmp::<impl core::cmp::PartialEq<[B]> for [A]>::eq (2 samples, 0.02%)<[A] as core::slice::cmp::SlicePartialEq<B>>::equal (2 samples, 0.02%)serde_json::de::from_trait (9 samples, 0.07%)openraft::raft::_::<impl serde::de::Deserialize for openraft::raft::AppendEntriesResponse<NID>>::deserialize (8 samples, 0.06%)<&mut serde_json::de::Deserializer<R> as serde::de::Deserializer>::deserialize_enum (7 samples, 0.06%)<openraft::raft::_::<impl serde::de::Deserialize for openraft::raft::AppendEntriesResponse<NID>>::deserialize::__Visitor<NID> as serde::de::Visitor>::visit_enum (7 samples, 0.06%)serde::de::EnumAccess::variant (7 samples, 0.06%)<serde_json::de::UnitVariantAccess<R> as serde::de::EnumAccess>::variant_seed (7 samples, 0.06%)<core::marker::PhantomData<T> as serde::de::DeserializeSeed>::deserialize (6 samples, 0.05%)<openraft::raft::_::<impl serde::de::Deserialize for openraft::raft::AppendEntriesResponse<NID>>::deserialize::__Field as serde::de::Deserialize>::deserialize (5 samples, 0.04%)<&mut serde_json::de::Deserializer<R> as serde::de::Deserializer>::deserialize_identifier (5 samples, 0.04%)<&mut serde_json::de::Deserializer<R> as serde::de::Deserializer>::deserialize_str (5 samples, 0.04%)<serde_json::read::StrRead as serde_json::read::Read>::parse_str (2 samples, 0.02%)serde_json::de::from_str (11 samples, 0.09%)serde_json::read::StrRead::new (2 samples, 0.02%)alloc::vec::Vec<T>::with_capacity (2 samples, 0.02%)alloc::vec::Vec<T,A>::with_capacity_in (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::allocate_in (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (2 samples, 0.02%)alloc::alloc::Global::alloc_impl (2 samples, 0.02%)alloc::alloc::alloc (2 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::reserve (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::grow_amortized (4 samples, 0.03%)alloc::raw_vec::finish_grow (4 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::grow (4 samples, 0.03%)alloc::alloc::Global::grow_impl (4 samples, 0.03%)alloc::alloc::realloc (4 samples, 0.03%)realloc (4 samples, 0.03%)[libc.so.6] (3 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)serde::ser::impls::<impl serde::ser::Serialize for str>::serialize (12 samples, 0.10%)<serde_json::ser::MapKeySerializer<W,F> as serde::ser::Serializer>::serialize_str (12 samples, 0.10%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_str (12 samples, 0.10%)serde_json::ser::format_escaped_str (12 samples, 0.10%)serde_json::ser::format_escaped_str_contents (9 samples, 0.07%)serde_json::ser::Formatter::write_string_fragment (5 samples, 0.04%)std::io::impls::<impl std::io::Write for &mut W>::write_all (5 samples, 0.04%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (5 samples, 0.04%)alloc::vec::Vec<T,A>::extend_from_slice (5 samples, 0.04%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (5 samples, 0.04%)alloc::vec::Vec<T,A>::append_elements (5 samples, 0.04%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_key (13 samples, 0.11%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_key (3 samples, 0.02%)serde::ser::impls::<impl serde::ser::Serialize for str>::serialize (3 samples, 0.02%)<serde_json::ser::MapKeySerializer<W,F> as serde::ser::Serializer>::serialize_str (3 samples, 0.02%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_str (3 samples, 0.02%)serde_json::ser::format_escaped_str (3 samples, 0.02%)serde_json::ser::format_escaped_str_contents (2 samples, 0.02%)openraft::vote::vote::_::<impl serde::ser::Serialize for openraft::vote::vote::Vote<NID>>::serialize (13 samples, 0.11%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeStruct>::serialize_field (13 samples, 0.11%)serde::ser::SerializeMap::serialize_entry (13 samples, 0.11%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_value (10 samples, 0.08%)openraft::vote::leader_id::leader_id_std::_::<impl serde::ser::Serialize for openraft::vote::leader_id::leader_id_std::LeaderId<NID>>::serialize (10 samples, 0.08%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeStruct>::serialize_field (9 samples, 0.07%)serde::ser::SerializeMap::serialize_entry (9 samples, 0.07%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (2 samples, 0.02%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_struct (12 samples, 0.10%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_map (12 samples, 0.10%)serde_json::ser::Formatter::begin_object (12 samples, 0.10%)std::io::impls::<impl std::io::Write for &mut W>::write_all (12 samples, 0.10%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (12 samples, 0.10%)alloc::vec::Vec<T,A>::extend_from_slice (12 samples, 0.10%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (12 samples, 0.10%)alloc::vec::Vec<T,A>::append_elements (12 samples, 0.10%)alloc::vec::Vec<T,A>::reserve (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::reserve (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (4 samples, 0.03%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeStruct>::end (8 samples, 0.06%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::end (8 samples, 0.06%)serde_json::ser::Formatter::end_object (8 samples, 0.06%)std::io::impls::<impl std::io::Write for &mut W>::write_all (8 samples, 0.06%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (8 samples, 0.06%)alloc::vec::Vec<T,A>::extend_from_slice (8 samples, 0.06%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (8 samples, 0.06%)alloc::vec::Vec<T,A>::append_elements (8 samples, 0.06%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (2 samples, 0.02%)alloc::vec::Vec<T,A>::as_mut_ptr (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::ptr (4 samples, 0.03%)serde_json::ser::Formatter::begin_string (13 samples, 0.11%)std::io::impls::<impl std::io::Write for &mut W>::write_all (13 samples, 0.11%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (13 samples, 0.11%)alloc::vec::Vec<T,A>::extend_from_slice (13 samples, 0.11%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (13 samples, 0.11%)alloc::vec::Vec<T,A>::append_elements (13 samples, 0.11%)alloc::vec::Vec<T,A>::reserve (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::reserve (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (2 samples, 0.02%)serde_json::ser::Formatter::end_string (8 samples, 0.06%)std::io::impls::<impl std::io::Write for &mut W>::write_all (8 samples, 0.06%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (8 samples, 0.06%)alloc::vec::Vec<T,A>::extend_from_slice (8 samples, 0.06%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (8 samples, 0.06%)alloc::vec::Vec<T,A>::append_elements (8 samples, 0.06%)alloc::vec::Vec<T,A>::reserve (8 samples, 0.06%)alloc::raw_vec::RawVec<T,A>::reserve (8 samples, 0.06%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (5 samples, 0.04%)alloc::raw_vec::RawVec<T,A>::grow_amortized (5 samples, 0.04%)alloc::raw_vec::finish_grow (5 samples, 0.04%)<alloc::alloc::Global as core::alloc::Allocator>::grow (5 samples, 0.04%)alloc::alloc::Global::grow_impl (5 samples, 0.04%)alloc::alloc::realloc (5 samples, 0.04%)realloc (5 samples, 0.04%)[libc.so.6] (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (4 samples, 0.03%)alloc::vec::Vec<T,A>::reserve (11 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::reserve (11 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (5 samples, 0.04%)alloc::raw_vec::RawVec<T,A>::grow_amortized (5 samples, 0.04%)alloc::raw_vec::finish_grow (4 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::grow (3 samples, 0.02%)alloc::alloc::Global::grow_impl (3 samples, 0.02%)alloc::alloc::realloc (3 samples, 0.02%)realloc (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)core::intrinsics::copy_nonoverlapping (7 samples, 0.06%)[libc.so.6] (6 samples, 0.05%)serde::ser::impls::<impl serde::ser::Serialize for str>::serialize (65 samples, 0.53%)<serde_json::ser::MapKeySerializer<W,F> as serde::ser::Serializer>::serialize_str (65 samples, 0.53%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_str (65 samples, 0.53%)serde_json::ser::format_escaped_str (65 samples, 0.53%)serde_json::ser::format_escaped_str_contents (35 samples, 0.28%)serde_json::ser::Formatter::write_string_fragment (19 samples, 0.15%)std::io::impls::<impl std::io::Write for &mut W>::write_all (19 samples, 0.15%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (19 samples, 0.15%)alloc::vec::Vec<T,A>::extend_from_slice (19 samples, 0.15%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (19 samples, 0.15%)alloc::vec::Vec<T,A>::append_elements (19 samples, 0.15%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_key (67 samples, 0.54%)serde_json::ser::Formatter::begin_object_key (2 samples, 0.02%)std::io::impls::<impl std::io::Write for &mut W>::write_all (2 samples, 0.02%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (2 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (2 samples, 0.02%)serde_json::ser::Formatter::begin_string (9 samples, 0.07%)std::io::impls::<impl std::io::Write for &mut W>::write_all (9 samples, 0.07%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (9 samples, 0.07%)alloc::vec::Vec<T,A>::extend_from_slice (9 samples, 0.07%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (9 samples, 0.07%)alloc::vec::Vec<T,A>::append_elements (9 samples, 0.07%)serde_json::ser::Formatter::end_string (2 samples, 0.02%)std::io::impls::<impl std::io::Write for &mut W>::write_all (2 samples, 0.02%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (2 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (2 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (2 samples, 0.02%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_str (33 samples, 0.27%)serde_json::ser::format_escaped_str (33 samples, 0.27%)serde_json::ser::format_escaped_str_contents (17 samples, 0.14%)serde_json::ser::Formatter::write_string_fragment (5 samples, 0.04%)std::io::impls::<impl std::io::Write for &mut W>::write_all (5 samples, 0.04%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (5 samples, 0.04%)alloc::vec::Vec<T,A>::extend_from_slice (5 samples, 0.04%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (5 samples, 0.04%)alloc::vec::Vec<T,A>::append_elements (5 samples, 0.04%)core::intrinsics::copy_nonoverlapping (5 samples, 0.04%)[libc.so.6] (5 samples, 0.04%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_newtype_variant (2 samples, 0.02%)serde_json::ser::Formatter::begin_object (2 samples, 0.02%)std::io::impls::<impl std::io::Write for &mut W>::write_all (2 samples, 0.02%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (2 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (2 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::grow_amortized (2 samples, 0.02%)alloc::raw_vec::finish_grow (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::grow (2 samples, 0.02%)alloc::alloc::Global::grow_impl (2 samples, 0.02%)alloc::alloc::realloc (2 samples, 0.02%)realloc (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (3 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (3 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (3 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (3 samples, 0.02%)serde_json::ser::Formatter::begin_string (16 samples, 0.13%)std::io::impls::<impl std::io::Write for &mut W>::write_all (16 samples, 0.13%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (16 samples, 0.13%)alloc::vec::Vec<T,A>::extend_from_slice (16 samples, 0.13%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (16 samples, 0.13%)alloc::vec::Vec<T,A>::append_elements (16 samples, 0.13%)alloc::vec::Vec<T,A>::reserve (13 samples, 0.11%)alloc::raw_vec::RawVec<T,A>::reserve (10 samples, 0.08%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (7 samples, 0.06%)alloc::raw_vec::RawVec<T,A>::grow_amortized (7 samples, 0.06%)alloc::raw_vec::finish_grow (7 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::grow (7 samples, 0.06%)alloc::alloc::Global::grow_impl (7 samples, 0.06%)alloc::alloc::realloc (7 samples, 0.06%)realloc (7 samples, 0.06%)[libc.so.6] (7 samples, 0.06%)[libc.so.6] (7 samples, 0.06%)serde_json::ser::Formatter::end_string (2 samples, 0.02%)std::io::impls::<impl std::io::Write for &mut W>::write_all (2 samples, 0.02%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (2 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (2 samples, 0.02%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.03%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (4 samples, 0.03%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (3 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::grow (9 samples, 0.07%)alloc::alloc::Global::grow_impl (9 samples, 0.07%)alloc::alloc::realloc (9 samples, 0.07%)realloc (9 samples, 0.07%)[libc.so.6] (9 samples, 0.07%)[libc.so.6] (9 samples, 0.07%)alloc::vec::Vec<T,A>::reserve (11 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::reserve (11 samples, 0.09%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (10 samples, 0.08%)alloc::raw_vec::RawVec<T,A>::grow_amortized (10 samples, 0.08%)alloc::raw_vec::finish_grow (10 samples, 0.08%)dcache::store::_::<impl serde::ser::Serialize for dcache::store::DcacheRequest>::serialize (93 samples, 0.75%)serde_json::ser::format_escaped_str (78 samples, 0.63%)serde_json::ser::format_escaped_str_contents (53 samples, 0.43%)serde_json::ser::Formatter::write_string_fragment (20 samples, 0.16%)std::io::impls::<impl std::io::Write for &mut W>::write_all (20 samples, 0.16%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (20 samples, 0.16%)alloc::vec::Vec<T,A>::extend_from_slice (20 samples, 0.16%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (20 samples, 0.16%)alloc::vec::Vec<T,A>::append_elements (20 samples, 0.16%)core::intrinsics::copy_nonoverlapping (9 samples, 0.07%)[libc.so.6] (9 samples, 0.07%)serde_json::ser::Formatter::begin_object (8 samples, 0.06%)std::io::impls::<impl std::io::Write for &mut W>::write_all (8 samples, 0.06%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (8 samples, 0.06%)alloc::vec::Vec<T,A>::extend_from_slice (8 samples, 0.06%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (8 samples, 0.06%)alloc::vec::Vec<T,A>::append_elements (8 samples, 0.06%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (2 samples, 0.02%)openraft::entry::payload::_::<impl serde::ser::Serialize for openraft::entry::payload::EntryPayload<C>>::serialize (144 samples, 1.17%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_newtype_variant (136 samples, 1.10%)serde_json::ser::Formatter::begin_object_value (2 samples, 0.02%)std::io::impls::<impl std::io::Write for &mut W>::write_all (2 samples, 0.02%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (2 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (2 samples, 0.02%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_struct (11 samples, 0.09%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_map (11 samples, 0.09%)serde_json::ser::Formatter::begin_object (11 samples, 0.09%)std::io::impls::<impl std::io::Write for &mut W>::write_all (11 samples, 0.09%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (11 samples, 0.09%)alloc::vec::Vec<T,A>::extend_from_slice (11 samples, 0.09%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (11 samples, 0.09%)alloc::vec::Vec<T,A>::append_elements (11 samples, 0.09%)alloc::vec::Vec<T,A>::reserve (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::reserve (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (3 samples, 0.02%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeStruct>::end (3 samples, 0.02%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::end (3 samples, 0.02%)serde_json::ser::Formatter::end_object (2 samples, 0.02%)std::io::impls::<impl std::io::Write for &mut W>::write_all (2 samples, 0.02%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (2 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (2 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)alloc::vec::Vec<T,A>::as_mut_ptr (3 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::ptr (3 samples, 0.02%)serde_json::ser::Formatter::begin_string (18 samples, 0.15%)std::io::impls::<impl std::io::Write for &mut W>::write_all (18 samples, 0.15%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (18 samples, 0.15%)alloc::vec::Vec<T,A>::extend_from_slice (18 samples, 0.15%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (18 samples, 0.15%)alloc::vec::Vec<T,A>::append_elements (18 samples, 0.15%)alloc::vec::Vec<T,A>::reserve (5 samples, 0.04%)alloc::raw_vec::RawVec<T,A>::reserve (5 samples, 0.04%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (5 samples, 0.04%)serde_json::ser::Formatter::end_string (2 samples, 0.02%)std::io::impls::<impl std::io::Write for &mut W>::write_all (2 samples, 0.02%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (2 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (2 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (2 samples, 0.02%)<core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::next (7 samples, 0.06%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::next (7 samples, 0.06%)<core::ptr::non_null::NonNull<T> as core::cmp::PartialEq>::eq (4 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::grow (3 samples, 0.02%)alloc::alloc::Global::grow_impl (3 samples, 0.02%)alloc::alloc::realloc (3 samples, 0.02%)realloc (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)[libc.so.6] (3 samples, 0.02%)alloc::raw_vec::finish_grow (4 samples, 0.03%)alloc::vec::Vec<T,A>::reserve (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::reserve (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (5 samples, 0.04%)alloc::raw_vec::RawVec<T,A>::grow_amortized (5 samples, 0.04%)serde::ser::impls::<impl serde::ser::Serialize for str>::serialize (66 samples, 0.54%)<serde_json::ser::MapKeySerializer<W,F> as serde::ser::Serializer>::serialize_str (66 samples, 0.54%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_str (66 samples, 0.54%)serde_json::ser::format_escaped_str (64 samples, 0.52%)serde_json::ser::format_escaped_str_contents (36 samples, 0.29%)serde_json::ser::Formatter::write_string_fragment (12 samples, 0.10%)std::io::impls::<impl std::io::Write for &mut W>::write_all (12 samples, 0.10%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (12 samples, 0.10%)alloc::vec::Vec<T,A>::extend_from_slice (12 samples, 0.10%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (12 samples, 0.10%)alloc::vec::Vec<T,A>::append_elements (12 samples, 0.10%)core::intrinsics::copy_nonoverlapping (6 samples, 0.05%)[libc.so.6] (5 samples, 0.04%)alloc::vec::Vec<T,A>::reserve (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::reserve (6 samples, 0.05%)alloc::raw_vec::RawVec<T,A>::needs_to_grow (4 samples, 0.03%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_key (74 samples, 0.60%)serde_json::ser::Formatter::begin_object_key (8 samples, 0.06%)std::io::impls::<impl std::io::Write for &mut W>::write_all (8 samples, 0.06%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (8 samples, 0.06%)alloc::vec::Vec<T,A>::extend_from_slice (8 samples, 0.06%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (8 samples, 0.06%)alloc::vec::Vec<T,A>::append_elements (8 samples, 0.06%)core::intrinsics::copy_nonoverlapping (2 samples, 0.02%)itoa::Buffer::format (5 samples, 0.04%)itoa::<impl itoa::private::Sealed for u64>::write (5 samples, 0.04%)core::ptr::mut_ptr::<impl *mut T>::offset (2 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::reserve (3 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::grow_amortized (2 samples, 0.02%)alloc::raw_vec::finish_grow (2 samples, 0.02%)openraft::vote::leader_id::leader_id_std::_::<impl serde::ser::Serialize for openraft::vote::leader_id::leader_id_std::CommittedLeaderId<NID>>::serialize (23 samples, 0.19%)serde::ser::impls::<impl serde::ser::Serialize for u64>::serialize (21 samples, 0.17%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_u64 (20 samples, 0.16%)serde_json::ser::Formatter::write_u64 (20 samples, 0.16%)std::io::impls::<impl std::io::Write for &mut W>::write_all (15 samples, 0.12%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (15 samples, 0.12%)alloc::vec::Vec<T,A>::extend_from_slice (15 samples, 0.12%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (15 samples, 0.12%)alloc::vec::Vec<T,A>::append_elements (15 samples, 0.12%)core::intrinsics::copy_nonoverlapping (10 samples, 0.08%)[libc.so.6] (10 samples, 0.08%)itoa::Buffer::format (13 samples, 0.11%)itoa::<impl itoa::private::Sealed for u64>::write (13 samples, 0.11%)core::intrinsics::copy_nonoverlapping (7 samples, 0.06%)alloc::vec::Vec<T,A>::reserve (5 samples, 0.04%)alloc::raw_vec::RawVec<T,A>::reserve (5 samples, 0.04%)alloc::raw_vec::RawVec<T,A>::reserve::do_reserve_and_handle (4 samples, 0.03%)alloc::raw_vec::RawVec<T,A>::grow_amortized (4 samples, 0.03%)alloc::raw_vec::finish_grow (4 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::grow (4 samples, 0.03%)alloc::alloc::Global::grow_impl (4 samples, 0.03%)alloc::alloc::realloc (4 samples, 0.03%)realloc (4 samples, 0.03%)[libc.so.6] (4 samples, 0.03%)[libc.so.6] (4 samples, 0.03%)[libc.so.6] (2 samples, 0.02%)core::intrinsics::copy_nonoverlapping (26 samples, 0.21%)[libc.so.6] (26 samples, 0.21%)serde::ser::impls::<impl serde::ser::Serialize for usize>::serialize (45 samples, 0.37%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_u64 (45 samples, 0.37%)serde_json::ser::Formatter::write_u64 (45 samples, 0.37%)std::io::impls::<impl std::io::Write for &mut W>::write_all (32 samples, 0.26%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (32 samples, 0.26%)alloc::vec::Vec<T,A>::extend_from_slice (32 samples, 0.26%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (32 samples, 0.26%)alloc::vec::Vec<T,A>::append_elements (32 samples, 0.26%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)alloc::raw_vec::RawVec<T,A>::reserve (2 samples, 0.02%)openraft::log_id::_::<impl serde::ser::Serialize for openraft::log_id::LogId<NID>>::serialize (179 samples, 1.45%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeStruct>::serialize_field (155 samples, 1.26%)serde::ser::SerializeMap::serialize_entry (155 samples, 1.26%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_value (78 samples, 0.63%)serde_json::ser::Formatter::begin_object_value (10 samples, 0.08%)std::io::impls::<impl std::io::Write for &mut W>::write_all (10 samples, 0.08%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (10 samples, 0.08%)alloc::vec::Vec<T,A>::extend_from_slice (10 samples, 0.08%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (10 samples, 0.08%)alloc::vec::Vec<T,A>::append_elements (10 samples, 0.08%)core::intrinsics::copy_nonoverlapping (2 samples, 0.02%)serde::ser::impls::<impl serde::ser::Serialize for &T>::serialize (432 samples, 3.51%)ser..openraft::entry::_::<impl serde::ser::Serialize for openraft::entry::Entry<C>>::serialize (432 samples, 3.51%)ope..<serde_json::ser::Compound<W,F> as serde::ser::SerializeStruct>::serialize_field (403 samples, 3.27%)<se..serde::ser::SerializeMap::serialize_entry (402 samples, 3.26%)ser..<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_value (332 samples, 2.69%)<s..serde_json::ser::Formatter::begin_object_value (6 samples, 0.05%)std::io::impls::<impl std::io::Write for &mut W>::write_all (6 samples, 0.05%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (6 samples, 0.05%)alloc::vec::Vec<T,A>::extend_from_slice (6 samples, 0.05%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (6 samples, 0.05%)alloc::vec::Vec<T,A>::append_elements (6 samples, 0.05%)core::intrinsics::copy_nonoverlapping (2 samples, 0.02%)serde::ser::impls::<impl serde::ser::Serialize for alloc::vec::Vec<T>>::serialize (443 samples, 3.60%)serd..serde::ser::Serializer::collect_seq (443 samples, 3.60%)serd..core::iter::traits::iterator::Iterator::try_for_each (439 samples, 3.56%)core..core::iter::traits::iterator::Iterator::try_fold (439 samples, 3.56%)core..core::iter::traits::iterator::Iterator::try_for_each::call::_{{closure}} (437 samples, 3.55%)core..serde::ser::Serializer::collect_seq::_{{closure}} (437 samples, 3.55%)serd..<serde_json::ser::Compound<W,F> as serde::ser::SerializeSeq>::serialize_element (437 samples, 3.55%)<ser..serde_json::ser::Formatter::begin_array_value (5 samples, 0.04%)std::io::impls::<impl std::io::Write for &mut W>::write_all (5 samples, 0.04%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (5 samples, 0.04%)alloc::vec::Vec<T,A>::extend_from_slice (5 samples, 0.04%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (5 samples, 0.04%)alloc::vec::Vec<T,A>::append_elements (5 samples, 0.04%)serde_json::ser::Formatter::begin_string (2 samples, 0.02%)std::io::impls::<impl std::io::Write for &mut W>::write_all (2 samples, 0.02%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (2 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (2 samples, 0.02%)serde::ser::impls::<impl serde::ser::Serialize for str>::serialize (5 samples, 0.04%)<serde_json::ser::MapKeySerializer<W,F> as serde::ser::Serializer>::serialize_str (5 samples, 0.04%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_str (5 samples, 0.04%)serde_json::ser::format_escaped_str (5 samples, 0.04%)serde_json::ser::format_escaped_str_contents (3 samples, 0.02%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_key (7 samples, 0.06%)serde_json::ser::Formatter::begin_object_key (2 samples, 0.02%)std::io::impls::<impl std::io::Write for &mut W>::write_all (2 samples, 0.02%)std::io::impls::<impl std::io::Write for alloc::vec::Vec<u8,A>>::write_all (2 samples, 0.02%)alloc::vec::Vec<T,A>::extend_from_slice (2 samples, 0.02%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<&T,core::slice::iter::Iter<T>>>::spec_extend (2 samples, 0.02%)alloc::vec::Vec<T,A>::append_elements (2 samples, 0.02%)alloc::vec::Vec<T,A>::reserve (2 samples, 0.02%)openraft::vote::leader_id::leader_id_std::_::<impl serde::ser::Serialize for openraft::vote::leader_id::leader_id_std::CommittedLeaderId<NID>>::serialize (2 samples, 0.02%)serde::ser::impls::<impl serde::ser::Serialize for u64>::serialize (2 samples, 0.02%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_u64 (2 samples, 0.02%)serde_json::ser::Formatter::write_u64 (2 samples, 0.02%)serde_json::ser::to_string (490 samples, 3.98%)serd..serde_json::ser::to_vec (490 samples, 3.98%)serd..serde_json::ser::to_writer (488 samples, 3.96%)serd..openraft::raft::_::<impl serde::ser::Serialize for openraft::raft::AppendEntriesRequest<C>>::serialize (488 samples, 3.96%)open..<serde_json::ser::Compound<W,F> as serde::ser::SerializeStruct>::serialize_field (486 samples, 3.94%)<ser..serde::ser::SerializeMap::serialize_entry (486 samples, 3.94%)serd..<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_value (468 samples, 3.80%)<ser..serde::ser::impls::<impl serde::ser::Serialize for core::option::Option<T>>::serialize (12 samples, 0.10%)<&mut serde_json::ser::Serializer<W,F> as serde::ser::Serializer>::serialize_some (12 samples, 0.10%)openraft::log_id::_::<impl serde::ser::Serialize for openraft::log_id::LogId<NID>>::serialize (12 samples, 0.10%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeStruct>::serialize_field (11 samples, 0.09%)serde::ser::SerializeMap::serialize_entry (11 samples, 0.09%)<serde_json::ser::Compound<W,F> as serde::ser::SerializeMap>::serialize_value (3 samples, 0.02%)tokio::runtime::context::current::with_current (2 samples, 0.02%)std::thread::local::LocalKey<T>::try_with (2 samples, 0.02%)tokio::task::spawn::spawn (7 samples, 0.06%)tokio::task::spawn::spawn_inner (6 samples, 0.05%)<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (4 samples, 0.03%)core::ptr::drop_in_place<[http::header::map::Bucket<http::header::value::HeaderValue>]> (4 samples, 0.03%)core::ptr::drop_in_place<http::header::map::Bucket<http::header::value::HeaderValue>> (4 samples, 0.03%)core::ptr::drop_in_place<http::header::value::HeaderValue> (3 samples, 0.02%)core::ptr::drop_in_place<bytes::bytes::Bytes> (3 samples, 0.02%)<bytes::bytes::Bytes as core::ops::drop::Drop>::drop (3 samples, 0.02%)bytes::bytes::shared_drop (3 samples, 0.02%)<core::sync::atomic::AtomicPtr<T> as bytes::loom::sync::atomic::AtomicMut<T>>::with_mut (3 samples, 0.02%)bytes::bytes::shared_drop::_{{closure}} (2 samples, 0.02%)bytes::bytes::release_shared (2 samples, 0.02%)<dcache::network::raft_network_impl::DcacheNetworkConnection as openraft::network::network::RaftNetwork<dcache::DcacheTypeConfig>>::send_append_entries::_{{closure}} (618 samples, 5.02%)<dcach..dcache::network::raft_network_impl::DcacheNetwork::send_rpc::_{{closure}} (609 samples, 4.94%)dcache..tonic::response::Response<T>::into_inner (5 samples, 0.04%)core::ptr::drop_in_place<tonic::metadata::map::MetadataMap> (5 samples, 0.04%)core::ptr::drop_in_place<http::header::map::HeaderMap> (5 samples, 0.04%)core::ptr::drop_in_place<alloc::vec::Vec<http::header::map::Bucket<http::header::value::HeaderValue>>> (5 samples, 0.04%)<core::pin::Pin<P> as core::future::future::Future>::poll (619 samples, 5.02%)<core:..[libc.so.6] (6 samples, 0.05%)<dcache::network::raft_network_impl::DcacheNetworkConnection as openraft::network::network::RaftNetwork<dcache::DcacheTypeConfig>>::send_append_entries (51 samples, 0.41%)alloc::boxed::Box<T>::pin (51 samples, 0.41%)alloc::boxed::Box<T>::new (51 samples, 0.41%)alloc::alloc::exchange_malloc (45 samples, 0.37%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (45 samples, 0.37%)alloc::alloc::Global::alloc_impl (45 samples, 0.37%)alloc::alloc::alloc (45 samples, 0.37%)malloc (45 samples, 0.37%)[libc.so.6] (45 samples, 0.37%)[libc.so.6] (44 samples, 0.36%)[libc.so.6] (10 samples, 0.08%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (2 samples, 0.02%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (2 samples, 0.02%)alloc::alloc::dealloc (2 samples, 0.02%)cfree (2 samples, 0.02%)<core::pin::Pin<P> as core::future::future::Future>::poll (688 samples, 5.58%)<core::..openraft::network::network::RaftNetwork::append_entries::_{{closure}} (685 samples, 5.56%)openraf..core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<openraft::raft::AppendEntriesResponse<u64>,openraft::error::RPCError<u64,openraft::node::BasicNode,openraft::error::RaftError<u64>>>+core::marker::Send>>> (6 samples, 0.05%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<openraft::raft::AppendEntriesResponse<u64>,openraft::error::RPCError<u64,openraft::node::BasicNode,openraft::error::RaftError<u64>>>+core::marker::Send>> (6 samples, 0.05%)core::ptr::drop_in_place<<dcache::network::raft_network_impl::DcacheNetworkConnection as openraft::network::network::RaftNetwork<dcache::DcacheTypeConfig>>::send_append_entries::{{closure}}> (4 samples, 0.03%)tokio::runtime::time::entry::TimerEntry::driver (2 samples, 0.02%)tokio::runtime::scheduler::Handle::driver (2 samples, 0.02%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::reregister (7 samples, 0.06%)tokio::runtime::time::wheel::Wheel::insert (4 samples, 0.03%)tokio::runtime::time::wheel::level::Level::add_entry (2 samples, 0.02%)tokio::util::linked_list::LinkedList<L,<L as tokio::util::linked_list::Link>::Target>::push_front (2 samples, 0.02%)<tokio::time::instant::Instant as core::ops::arith::Add<core::time::Duration>>::add (2 samples, 0.02%)<std::time::Instant as core::ops::arith::Add<core::time::Duration>>::add (2 samples, 0.02%)<tokio::time::timeout::Timeout<T> as core::future::future::Future>::poll::_{{closure}} (23 samples, 0.19%)<tokio::time::sleep::Sleep as core::future::future::Future>::poll (23 samples, 0.19%)tokio::time::sleep::Sleep::poll_elapsed (19 samples, 0.15%)tokio::runtime::time::entry::TimerEntry::poll_elapsed (17 samples, 0.14%)tokio::runtime::time::entry::TimerEntry::reset (14 samples, 0.11%)tokio::runtime::time::source::TimeSource::deadline_to_tick (6 samples, 0.05%)tokio::runtime::time::source::TimeSource::instant_to_tick (4 samples, 0.03%)tokio::time::instant::Instant::checked_duration_since (4 samples, 0.03%)std::time::Instant::checked_duration_since (4 samples, 0.03%)<tokio::time::timeout::Timeout<T> as core::future::future::Future>::poll (718 samples, 5.83%)<tokio:..tokio::runtime::coop::has_budget_remaining (5 samples, 0.04%)tokio::runtime::context::budget (5 samples, 0.04%)std::thread::local::LocalKey<T>::try_with (5 samples, 0.04%)tokio::runtime::context::budget::_{{closure}} (3 samples, 0.02%)tokio::runtime::coop::has_budget_remaining::_{{closure}} (3 samples, 0.02%)tokio::runtime::coop::Budget::has_remaining (2 samples, 0.02%)core::option::Option<T>::map_or (2 samples, 0.02%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (3 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>,openraft::storage_error::StorageError<u64>>+core::marker::Send>> (3 samples, 0.02%)core::ptr::drop_in_place<dcache::store::<impl openraft::storage::RaftLogReader<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::try_get_log_entries<core::ops::range::Range<u64>>::{{closure}}> (2 samples, 0.02%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<openraft::raft::AppendEntriesResponse<u64>,openraft::error::RPCError<u64,openraft::node::BasicNode,openraft::error::RaftError<u64>>>+core::marker::Send>>> (2 samples, 0.02%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<openraft::raft::AppendEntriesResponse<u64>,openraft::error::RPCError<u64,openraft::node::BasicNode,openraft::error::RaftError<u64>>>+core::marker::Send>> (2 samples, 0.02%)tokio::runtime::driver::Handle::time (2 samples, 0.02%)core::option::Option<T>::expect (2 samples, 0.02%)<tokio::runtime::time::entry::TimerEntry as core::ops::drop::Drop>::drop (3 samples, 0.02%)tokio::runtime::time::entry::TimerEntry::cancel (3 samples, 0.02%)tokio::runtime::time::entry::TimerEntry::driver (3 samples, 0.02%)core::ptr::drop_in_place<core::option::Option<core::task::wake::Waker>> (2 samples, 0.02%)core::ptr::drop_in_place<tokio::time::timeout::Timeout<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<openraft::raft::AppendEntriesResponse<u64>,openraft::error::RPCError<u64,openraft::node::BasicNode,openraft::error::RaftError<u64>>>+core::marker::Send>>>> (15 samples, 0.12%)core::ptr::drop_in_place<tokio::time::sleep::Sleep> (12 samples, 0.10%)core::ptr::drop_in_place<tokio::runtime::time::entry::TimerEntry> (12 samples, 0.10%)tokio::runtime::time::<impl tokio::runtime::time::handle::Handle>::clear_entry (8 samples, 0.06%)tokio::runtime::time::wheel::Wheel::remove (3 samples, 0.02%)tokio::runtime::time::wheel::level::Level::remove_entry (3 samples, 0.02%)tokio::runtime::time::wheel::level::slot_for (3 samples, 0.02%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::send (2 samples, 0.02%)tokio::sync::mpsc::chan::Tx<T,S>::send (2 samples, 0.02%)tokio::sync::mpsc::chan::Chan<T,S>::send (2 samples, 0.02%)tokio::runtime::task::waker::wake_by_val (2 samples, 0.02%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (2 samples, 0.02%)openraft::replication::ReplicationCore<C,N,LS>::update_matching (5 samples, 0.04%)std::sys::unix::time::inner::<impl std::sys::unix::time::Timespec>::now (22 samples, 0.18%)clock_gettime (19 samples, 0.15%)__vdso_clock_gettime (17 samples, 0.14%)[unknown] (15 samples, 0.12%)[unknown] (14 samples, 0.11%)[unknown] (10 samples, 0.08%)[unknown] (7 samples, 0.06%)[unknown] (4 samples, 0.03%)[unknown] (4 samples, 0.03%)openraft::replication::ReplicationCore<C,N,LS>::send_log_entries::_{{closure}} (1,108 samples, 8.99%)openraft::rep..openraft::replication::ReplicationCore<C,N,LS>::send_log_entries::_{{closure}}::_{{closure}} (1,096 samples, 8.90%)openraft::rep..tokio::time::timeout::timeout (7 samples, 0.06%)std::sys::unix::time::inner::<impl std::sys::unix::time::Timespec>::now (7 samples, 0.06%)clock_gettime (7 samples, 0.06%)__vdso_clock_gettime (7 samples, 0.06%)[unknown] (7 samples, 0.06%)[unknown] (7 samples, 0.06%)[unknown] (7 samples, 0.06%)[unknown] (7 samples, 0.06%)[unknown] (7 samples, 0.06%)[unknown] (7 samples, 0.06%)<tracing_futures::Instrumented<T> as core::future::future::Future>::poll (1,405 samples, 11.40%)<tracing_futures:..openraft::replication::ReplicationCore<C,N,LS>::main::_{{closure}} (1,405 samples, 11.40%)openraft::replica..openraft::replication::ReplicationCore<C,N,LS>::main::_{{closure}}::_{{closure}} (1,405 samples, 11.40%)openraft::replica..tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::task::core::TaskIdGuard> (5 samples, 0.04%)<tokio::runtime::task::core::TaskIdGuard as core::ops::drop::Drop>::drop (5 samples, 0.04%)<F as core::future::into_future::IntoFuture>::into_future (24 samples, 0.19%)[libc.so.6] (84 samples, 0.68%)core::ptr::drop_in_place<core::result::Result<(),tokio::sync::mpsc::error::SendError<openraft::core::notify::Notify<dcache::DcacheTypeConfig>>>> (4 samples, 0.03%)core::ptr::drop_in_place<openraft::core::sm::Worker<dcache::DcacheTypeConfig,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>::apply::{{closure}}> (4 samples, 0.03%)core::ptr::drop_in_place<openraft::core::sm::Worker<dcache::DcacheTypeConfig,openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>>>::apply::{{closure}}::{{closure}}> (2 samples, 0.02%)core::ptr::drop_in_place<tracing::span::Span> (5 samples, 0.04%)<core::pin::Pin<P> as core::future::future::Future>::poll (12 samples, 0.10%)dcache::store::_<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::apply_to_state_machine::_{{closure}} (12 samples, 0.10%)[libc.so.6] (18 samples, 0.15%)core::iter::traits::iterator::Iterator::collect (4 samples, 0.03%)<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (4 samples, 0.03%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,alloc::vec::into_iter::IntoIter<T>>>::from_iter (4 samples, 0.03%)cfree (11 samples, 0.09%)[libc.so.6] (7 samples, 0.06%)<alloc::vec::Vec<T,A> as core::ops::drop::Drop>::drop (13 samples, 0.11%)core::ptr::drop_in_place<[openraft::entry::Entry<dcache::DcacheTypeConfig>]> (13 samples, 0.11%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (18 samples, 0.15%)alloc::alloc::dealloc (18 samples, 0.15%)cfree (16 samples, 0.13%)[libc.so.6] (13 samples, 0.11%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>> (32 samples, 0.26%)core::ptr::drop_in_place<alloc::raw_vec::RawVec<openraft::entry::Entry<dcache::DcacheTypeConfig>>> (19 samples, 0.15%)<alloc::raw_vec::RawVec<T,A> as core::ops::drop::Drop>::drop (19 samples, 0.15%)__rust_dealloc (2 samples, 0.02%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (12 samples, 0.10%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (12 samples, 0.10%)alloc::alloc::dealloc (12 samples, 0.10%)cfree (9 samples, 0.07%)[libc.so.6] (6 samples, 0.05%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<dcache::store::DcacheResponse>,openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (17 samples, 0.14%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<dcache::store::DcacheResponse>,openraft::storage_error::StorageError<u64>>+core::marker::Send>> (17 samples, 0.14%)core::ptr::drop_in_place<dcache::store::<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::apply_to_state_machine::{{closure}}> (5 samples, 0.04%)core::mem::drop (4 samples, 0.03%)core::ptr::drop_in_place<tokio::loom::std::parking_lot::MutexGuard<tokio::sync::batch_semaphore::Waitlist>> (4 samples, 0.03%)core::ptr::drop_in_place<lock_api::mutex::MutexGuard<parking_lot::raw_mutex::RawMutex,tokio::sync::batch_semaphore::Waitlist>> (4 samples, 0.03%)<lock_api::mutex::MutexGuard<R,T> as core::ops::drop::Drop>::drop (4 samples, 0.03%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::unlock (4 samples, 0.03%)tokio::sync::batch_semaphore::Semaphore::add_permits_locked (14 samples, 0.11%)core::ptr::drop_in_place<tokio::sync::rwlock::write_guard::RwLockWriteGuard<alloc::sync::Arc<dcache::store::DcacheStore>>> (24 samples, 0.19%)<tokio::sync::rwlock::write_guard::RwLockWriteGuard<T> as core::ops::drop::Drop>::drop (24 samples, 0.19%)tokio::sync::batch_semaphore::Semaphore::release (10 samples, 0.08%)tokio::loom::std::parking_lot::Mutex<T>::lock (6 samples, 0.05%)lock_api::mutex::Mutex<R,T>::lock (6 samples, 0.05%)<parking_lot::raw_mutex::RawMutex as lock_api::mutex::RawMutex>::lock (6 samples, 0.05%)[libc.so.6] (10 samples, 0.08%)dcache::store::<impl openraft::storage::RaftStorage<dcache::DcacheTypeConfig> for alloc::sync::Arc<dcache::store::DcacheStore>>::apply_to_state_machine (19 samples, 0.15%)alloc::boxed::Box<T>::pin (18 samples, 0.15%)alloc::boxed::Box<T>::new (18 samples, 0.15%)alloc::alloc::exchange_malloc (8 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (8 samples, 0.06%)alloc::alloc::Global::alloc_impl (8 samples, 0.06%)alloc::alloc::alloc (8 samples, 0.06%)malloc (5 samples, 0.04%)<F as core::future::into_future::IntoFuture>::into_future (10 samples, 0.08%)core::sync::atomic::AtomicUsize::compare_exchange (4 samples, 0.03%)core::sync::atomic::atomic_compare_exchange (4 samples, 0.03%)<tokio::sync::batch_semaphore::Acquire as core::future::future::Future>::poll (18 samples, 0.15%)tokio::sync::batch_semaphore::Semaphore::poll_acquire (12 samples, 0.10%)core::sync::atomic::AtomicUsize::load (3 samples, 0.02%)core::sync::atomic::atomic_load (3 samples, 0.02%)core::ptr::drop_in_place<tokio::sync::batch_semaphore::Acquire> (4 samples, 0.03%)<tokio::sync::batch_semaphore::Acquire as core::ops::drop::Drop>::drop (4 samples, 0.03%)<core::pin::Pin<P> as core::future::future::Future>::poll (221 samples, 1.79%)<..<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::v2::RaftStateMachine<C>>::apply::_{{closure}} (221 samples, 1.79%)<..openraft::storage::adapter::Adaptor<C,S>::storage_mut::_{{closure}} (67 samples, 0.54%)tokio::sync::rwlock::RwLock<T>::write::_{{closure}} (61 samples, 0.50%)tokio::sync::rwlock::RwLock<T>::write::_{{closure}}::_{{closure}} (59 samples, 0.48%)tokio::sync::batch_semaphore::Semaphore::acquire (18 samples, 0.15%)tokio::sync::batch_semaphore::Acquire::new (17 samples, 0.14%)[libc.so.6] (7 samples, 0.06%)<openraft::storage::adapter::Adaptor<C,S> as openraft::storage::v2::RaftStateMachine<C>>::apply (14 samples, 0.11%)alloc::boxed::Box<T>::pin (14 samples, 0.11%)alloc::boxed::Box<T>::new (14 samples, 0.11%)alloc::alloc::exchange_malloc (7 samples, 0.06%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (7 samples, 0.06%)alloc::alloc::Global::alloc_impl (7 samples, 0.06%)alloc::alloc::alloc (7 samples, 0.06%)malloc (5 samples, 0.04%)core::iter::traits::iterator::Iterator::for_each::call::_{{closure}} (9 samples, 0.07%)alloc::vec::Vec<T,A>::extend_trusted::_{{closure}} (9 samples, 0.07%)core::ptr::write (9 samples, 0.07%)<alloc::vec::Vec<T,A> as alloc::vec::spec_extend::SpecExtend<T,I>>::spec_extend (11 samples, 0.09%)alloc::vec::Vec<T,A>::extend_trusted (11 samples, 0.09%)core::iter::traits::iterator::Iterator::for_each (11 samples, 0.09%)<core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold (11 samples, 0.09%)<core::slice::iter::Iter<T> as core::iter::traits::iterator::Iterator>::fold (11 samples, 0.09%)core::iter::adapters::map::map_fold::_{{closure}} (11 samples, 0.09%)core::iter::traits::iterator::Iterator::collect (42 samples, 0.34%)<alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter (42 samples, 0.34%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter::SpecFromIter<T,I>>::from_iter (42 samples, 0.34%)<alloc::vec::Vec<T> as alloc::vec::spec_from_iter_nested::SpecFromIterNested<T,I>>::from_iter (42 samples, 0.34%)alloc::vec::Vec<T>::with_capacity (30 samples, 0.24%)alloc::vec::Vec<T,A>::with_capacity_in (30 samples, 0.24%)alloc::raw_vec::RawVec<T,A>::with_capacity_in (30 samples, 0.24%)alloc::raw_vec::RawVec<T,A>::allocate_in (30 samples, 0.24%)<alloc::alloc::Global as core::alloc::Allocator>::allocate (26 samples, 0.21%)alloc::alloc::Global::alloc_impl (26 samples, 0.21%)alloc::alloc::alloc (26 samples, 0.21%)malloc (24 samples, 0.19%)[libc.so.6] (6 samples, 0.05%)<alloc::boxed::Box<T,A> as core::ops::drop::Drop>::drop (4 samples, 0.03%)<alloc::alloc::Global as core::alloc::Allocator>::deallocate (4 samples, 0.03%)alloc::alloc::dealloc (4 samples, 0.03%)cfree (2 samples, 0.02%)[libc.so.6] (2 samples, 0.02%)core::ptr::drop_in_place<core::pin::Pin<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<dcache::store::DcacheResponse>,openraft::storage_error::StorageError<u64>>+core::marker::Send>>> (8 samples, 0.06%)core::ptr::drop_in_place<alloc::boxed::Box<dyn core::future::future::Future+Output = core::result::Result<alloc::vec::Vec<dcache::store::DcacheResponse>,openraft::storage_error::StorageError<u64>>+core::marker::Send>> (8 samples, 0.06%)core::ptr::drop_in_place<<openraft::storage::adapter::Adaptor<dcache::DcacheTypeConfig,alloc::sync::Arc<dcache::store::DcacheStore>> as openraft::storage::v2::RaftStateMachine<dcache::DcacheTypeConfig>>::apply<alloc::vec::Vec<openraft::entry::Entry<dcache::DcacheTypeConfig>>>::{{closure}}> (4 samples, 0.03%)openraft::core::sm::Worker<C,SM>::apply::_{{closure}}::_{{closure}} (347 samples, 2.82%)op..tracing_core::dispatcher::has_been_set (2 samples, 0.02%)core::sync::atomic::AtomicBool::load (2 samples, 0.02%)core::sync::atomic::atomic_load (2 samples, 0.02%)openraft::core::sm::Worker<C,SM>::apply::_{{closure}} (413 samples, 3.35%)ope..tracing_core::metadata::LevelFilter::current (3 samples, 0.02%)core::sync::atomic::AtomicUsize::load (3 samples, 0.02%)core::sync::atomic::atomic_load (3 samples, 0.02%)core::ptr::drop_in_place<tokio::runtime::coop::RestoreOnPending> (6 samples, 0.05%)<tokio::runtime::coop::RestoreOnPending as core::ops::drop::Drop>::drop (6 samples, 0.05%)<tokio::sync::mpsc::unbounded::Semaphore as tokio::sync::mpsc::chan::Semaphore>::add_permit (4 samples, 0.03%)[libc.so.6] (35 samples, 0.28%)[libc.so.6] (11 samples, 0.09%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with (28 samples, 0.23%)tokio::sync::mpsc::block::Block<T>::read::_{{closure}} (28 samples, 0.23%)core::ptr::read (28 samples, 0.23%)[libc.so.6] (24 samples, 0.19%)tokio::sync::mpsc::block::is_ready (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::read (35 samples, 0.28%)tokio::sync::mpsc::list::Rx<T>::pop (60 samples, 0.49%)tokio::sync::mpsc::list::Rx<T>::try_advancing_head (7 samples, 0.06%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (113 samples, 0.92%)tokio::sync::mpsc::chan::Rx<T,S>::recv::_{{closure}} (113 samples, 0.92%)tokio::sync::task::atomic_waker::AtomicWaker::register_by_ref (11 samples, 0.09%)tokio::sync::task::atomic_waker::AtomicWaker::do_register (6 samples, 0.05%)tokio::sync::task::atomic_waker::AtomicWaker::do_register::catch_unwind (3 samples, 0.02%)std::panic::catch_unwind (3 samples, 0.02%)std::panicking::try (3 samples, 0.02%)std::panicking::try::do_call (3 samples, 0.02%)<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (3 samples, 0.02%)tokio::sync::task::atomic_waker::AtomicWaker::do_register::_{{closure}} (3 samples, 0.02%)<&core::task::wake::Waker as tokio::sync::task::atomic_waker::WakerRef>::into_waker (3 samples, 0.02%)<core::task::wake::Waker as core::clone::Clone>::clone (3 samples, 0.02%)tokio::runtime::task::waker::clone_waker (3 samples, 0.02%)tokio::runtime::task::state::State::ref_inc (2 samples, 0.02%)core::cell::Cell<T>::set (9 samples, 0.07%)core::cell::Cell<T>::replace (9 samples, 0.07%)core::mem::replace (9 samples, 0.07%)core::ptr::write (9 samples, 0.07%)<tokio::future::poll_fn::PollFn<F> as core::future::future::Future>::poll (144 samples, 1.17%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::recv::_{{closure}}::_{{closure}} (139 samples, 1.13%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::poll_recv (139 samples, 1.13%)tokio::sync::mpsc::chan::Rx<T,S>::recv (139 samples, 1.13%)tokio::runtime::coop::poll_proceed (19 samples, 0.15%)tokio::runtime::context::budget (16 samples, 0.13%)std::thread::local::LocalKey<T>::try_with (16 samples, 0.13%)tokio::runtime::context::budget::_{{closure}} (16 samples, 0.13%)tokio::runtime::coop::poll_proceed::_{{closure}} (16 samples, 0.13%)tokio::runtime::coop::Budget::decrement (5 samples, 0.04%)tokio::sync::mpsc::unbounded::UnboundedReceiver<T>::recv::_{{closure}} (155 samples, 1.26%)[libc.so.6] (9 samples, 0.07%)tokio::runtime::task::waker::wake_by_val (4 samples, 0.03%)tokio::runtime::task::harness::<impl tokio::runtime::task::raw::RawTask>::wake_by_val (4 samples, 0.03%)tokio::runtime::task::state::State::transition_to_notified_by_val (3 samples, 0.02%)tokio::runtime::task::state::State::fetch_update_action (3 samples, 0.02%)tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (13 samples, 0.11%)tokio::sync::mpsc::block::Block<T>::write::_{{closure}} (13 samples, 0.11%)core::ptr::write (13 samples, 0.11%)[libc.so.6] (13 samples, 0.11%)tokio::sync::mpsc::block::Block<T>::set_ready (3 samples, 0.02%)core::sync::atomic::AtomicUsize::fetch_or (2 samples, 0.02%)core::sync::atomic::atomic_or (2 samples, 0.02%)tokio::sync::mpsc::block::Block<T>::write (17 samples, 0.14%)tokio::sync::mpsc::block::Block<T>::tx_release (2 samples, 0.02%)tokio::sync::mpsc::list::Tx<T>::push (30 samples, 0.24%)tokio::sync::mpsc::list::Tx<T>::find_block (12 samples, 0.10%)tokio::sync::mpsc::block::start_index (5 samples, 0.04%)core::sync::atomic::AtomicUsize::fetch_or (8 samples, 0.06%)core::sync::atomic::atomic_or (8 samples, 0.06%)tokio::sync::mpsc::chan::Tx<T,S>::send (51 samples, 0.41%)tokio::sync::mpsc::chan::Chan<T,S>::send (51 samples, 0.41%)tokio::sync::task::atomic_waker::AtomicWaker::wake (16 samples, 0.13%)tokio::sync::task::atomic_waker::AtomicWaker::take_waker (9 samples, 0.07%)<tokio::loom::std::atomic_usize::AtomicUsize as core::ops::deref::Deref>::deref (8 samples, 0.06%)core::sync::atomic::AtomicUsize::compare_exchange (5 samples, 0.04%)core::sync::atomic::atomic_compare_exchange (5 samples, 0.04%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::send (79 samples, 0.64%)tokio::sync::mpsc::unbounded::UnboundedSender<T>::inc_num_messages (17 samples, 0.14%)all (12,321 samples, 100%)main (12,321 samples, 100.00%)main[unknown] (12,286 samples, 99.72%)[unknown]tokio::runtime::task::harness::Harness<T,S>::poll (2,240 samples, 18.18%)tokio::runtime::task::harnes..tokio::runtime::task::harness::Harness<T,S>::poll_inner (2,240 samples, 18.18%)tokio::runtime::task::harnes..tokio::runtime::task::harness::poll_future (2,240 samples, 18.18%)tokio::runtime::task::harnes..std::panic::catch_unwind (2,240 samples, 18.18%)std::panic::catch_unwindstd::panicking::try (2,240 samples, 18.18%)std::panicking::trystd::panicking::try::do_call (2,240 samples, 18.18%)std::panicking::try::do_call<core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once (2,240 samples, 18.18%)<core::panic::unwind_safe::A..tokio::runtime::task::harness::poll_future::_{{closure}} (2,240 samples, 18.18%)tokio::runtime::task::harnes..tokio::runtime::task::core::Core<T,S>::poll (2,240 samples, 18.18%)tokio::runtime::task::core::..tokio::loom::std::unsafe_cell::UnsafeCell<T>::with_mut (2,237 samples, 18.16%)tokio::loom::std::unsafe_cel..tokio::runtime::task::core::Core<T,S>::poll::_{{closure}} (2,237 samples, 18.16%)tokio::runtime::task::core::..openraft::core::sm::Worker<C,SM>::do_spawn::_{{closure}} (794 samples, 6.44%)openraft..openraft::core::sm::Worker<C,SM>::worker_loop::_{{closure}} (794 samples, 6.44%)openraft..openraft::core::sm::Worker<C,SM>::worker_loop::_{{closure}}::_{{closure}} (794 samples, 6.44%)openraft..
\ No newline at end of file
diff --git a/dcache_py/dcache_pb2.py b/dcache_py/dcache_pb2.py
index b81d9d5..80ac522 100644
--- a/dcache_py/dcache_pb2.py
+++ b/dcache_py/dcache_pb2.py
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x64\x63\x61\x63he.proto\x12\x06\x64\x63\x61\x63he\"?\n\x05Level\x12\x1a\n\x11visitor_threshold\x18\xad\x02 \x01(\r\x12\x1a\n\x11\x64ifficulty_factor\x18\xae\x02 \x01(\r\")\n\x07\x44\x65\x66\x65nse\x12\x1e\n\x06levels\x18\x91\x03 \x03(\x0b\x32\r.dcache.Level\"@\n\x08MCaptcha\x12\x11\n\x08\x64uration\x18\xf6\x03 \x01(\x04\x12!\n\x07\x64\x65\x66\x65nse\x18\xf7\x03 \x01(\x0b\x32\x0f.dcache.Defense\"E\n\x11\x41\x64\x64\x43\x61ptchaRequest\x12\x0b\n\x02id\x18\xd9\x04 \x01(\t\x12#\n\x08mcaptcha\x18\xda\x04 \x01(\x0b\x32\x10.dcache.MCaptcha\"9\n\x14RenameCaptchaRequest\x12\r\n\x04name\x18\xbd\x05 \x01(\t\x12\x12\n\trename_to\x18\xbe\x05 \x01(\t\"_\n\x0f\x43\x61\x63hePowRequest\x12\x0f\n\x06string\x18\xa1\x06 \x01(\t\x12\x1a\n\x11\x64ifficulty_factor\x18\xa2\x06 \x01(\r\x12\x11\n\x08\x64uration\x18\xa3\x06 \x01(\x04\x12\x0c\n\x03key\x18\xa4\x06 \x01(\t\"E\n\x12\x43\x61\x63heResultRequest\x12\x0e\n\x05token\x18\xb1\x06 \x01(\t\x12\x0c\n\x03key\x18\xb2\x06 \x01(\t\x12\x11\n\x08\x64uration\x18\xb3\x06 \x01(\x04\",\n\x1a\x44\x65leteCaptchaResultRequest\x12\x0e\n\x05token\x18\xb5\x06 \x01(\t\"\x17\n\tCaptchaID\x12\n\n\x02id\x18\x01 \x01(\t\"\x12\n\x04PoID\x12\n\n\x02id\x18\x01 \x01(\t\"A\n\x10\x41\x64\x64VisitorResult\x12\x11\n\x08\x64uration\x18\x85\x07 \x01(\x04\x12\x1a\n\x11\x64ifficulty_factor\x18\x86\x07 \x01(\r\"S\n\x16OptionAddVisitorResult\x12.\n\x06result\x18\x8f\x07 \x01(\x0b\x32\x18.dcache.AddVisitorResultH\x00\x88\x01\x01\x42\t\n\x07_result\"\x1b\n\x0bRaftRequest\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\t\"(\n\tRaftReply\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"#\n\x07Learner\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0c\n\x04\x61\x64\x64r\x18\x02 \x01(\t\"\xbd\x02\n\rDcacheRequest\x12/\n\naddCaptcha\x18\x01 \x01(\x0b\x32\x19.dcache.AddCaptchaRequestH\x00\x12\'\n\naddVisitor\x18\x02 \x01(\x0b\x32\x11.dcache.CaptchaIDH\x00\x12\x35\n\rrenameCaptcha\x18\x03 \x01(\x0b\x32\x1c.dcache.RenameCaptchaRequestH\x00\x12*\n\rremoveCaptcha\x18\x04 \x01(\x0b\x32\x11.dcache.CaptchaIDH\x00\x12+\n\x08\x63\x61\x63hePow\x18\x05 \x01(\x0b\x32\x17.dcache.CachePowRequestH\x00\x12\x31\n\x0b\x63\x61\x63heResult\x18\x06 \x01(\x0b\x32\x1a.dcache.CacheResultRequestH\x00\x42\x0f\n\rDcacheRequest\"\x8b\x01\n\x0e\x44\x63\x61\x63heResponse\x12\x43\n\x19option_add_visitor_result\x18\x01 \x01(\x0b\x32\x1e.dcache.OptionAddVisitorResultH\x00\x12\"\n\x05other\x18\x02 \x01(\x0b\x32\x11.dcache.RaftReplyH\x00\x42\x10\n\x0e\x44\x63\x61\x63heResponse\"=\n\x12\x44\x63\x61\x63heBatchRequest\x12\'\n\x08requests\x18\x01 \x03(\x0b\x32\x15.dcache.DcacheRequest\"@\n\x13\x44\x63\x61\x63heBatchResponse\x12)\n\tresponses\x18\x01 \x03(\x0b\x32\x16.dcache.DcacheResponse2\x97\x06\n\rDcacheService\x12<\n\nAddCaptcha\x12\x19.dcache.AddCaptchaRequest\x1a\x11.dcache.RaftReply\"\x00\x12\x41\n\nAddVisitor\x12\x11.dcache.CaptchaID\x1a\x1e.dcache.OptionAddVisitorResult\"\x00\x12\x42\n\rRenameCaptcha\x12\x1c.dcache.RenameCaptchaRequest\x1a\x11.dcache.RaftReply\"\x00\x12\x37\n\rRemoveCaptcha\x12\x11.dcache.CaptchaID\x1a\x11.dcache.RaftReply\"\x00\x12\x38\n\x08\x43\x61\x63hePow\x12\x17.dcache.CachePowRequest\x1a\x11.dcache.RaftReply\"\x00\x12>\n\x0b\x43\x61\x63heResult\x12\x1a.dcache.CacheResultRequest\x1a\x11.dcache.RaftReply\"\x00\x12N\n\x11PipelineDcacheOps\x12\x1a.dcache.DcacheBatchRequest\x1a\x1b.dcache.DcacheBatchResponse\"\x00\x12\x32\n\nAddLearner\x12\x0f.dcache.Learner\x1a\x11.dcache.RaftReply\"\x00\x12\x31\n\x05Write\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReply\"\x00\x12\x33\n\x07\x46orward\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReply\"\x00\x12\x37\n\rAppendEntries\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReply\x12\x39\n\x0fInstallSnapshot\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReply\x12.\n\x04vote\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReplyb\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0c\x64\x63\x61\x63he.proto\x12\x06\x64\x63\x61\x63he\"?\n\x05Level\x12\x1a\n\x11visitor_threshold\x18\xad\x02 \x01(\r\x12\x1a\n\x11\x64ifficulty_factor\x18\xae\x02 \x01(\r\")\n\x07\x44\x65\x66\x65nse\x12\x1e\n\x06levels\x18\x91\x03 \x03(\x0b\x32\r.dcache.Level\"@\n\x08MCaptcha\x12\x11\n\x08\x64uration\x18\xf6\x03 \x01(\x04\x12!\n\x07\x64\x65\x66\x65nse\x18\xf7\x03 \x01(\x0b\x32\x0f.dcache.Defense\"E\n\x11\x41\x64\x64\x43\x61ptchaRequest\x12\x0b\n\x02id\x18\xd9\x04 \x01(\t\x12#\n\x08mcaptcha\x18\xda\x04 \x01(\x0b\x32\x10.dcache.MCaptcha\"9\n\x14RenameCaptchaRequest\x12\r\n\x04name\x18\xbd\x05 \x01(\t\x12\x12\n\trename_to\x18\xbe\x05 \x01(\t\"_\n\x0f\x43\x61\x63hePowRequest\x12\x0f\n\x06string\x18\xa1\x06 \x01(\t\x12\x1a\n\x11\x64ifficulty_factor\x18\xa2\x06 \x01(\r\x12\x11\n\x08\x64uration\x18\xa3\x06 \x01(\x04\x12\x0c\n\x03key\x18\xa4\x06 \x01(\t\"E\n\x12\x43\x61\x63heResultRequest\x12\x0e\n\x05token\x18\xb1\x06 \x01(\t\x12\x0c\n\x03key\x18\xb2\x06 \x01(\t\x12\x11\n\x08\x64uration\x18\xb3\x06 \x01(\x04\",\n\x1a\x44\x65leteCaptchaResultRequest\x12\x0e\n\x05token\x18\xb5\x06 \x01(\t\"\x17\n\tCaptchaID\x12\n\n\x02id\x18\x01 \x01(\t\"\x12\n\x04PoID\x12\n\n\x02id\x18\x01 \x01(\t\"A\n\x10\x41\x64\x64VisitorResult\x12\x11\n\x08\x64uration\x18\x85\x07 \x01(\x04\x12\x1a\n\x11\x64ifficulty_factor\x18\x86\x07 \x01(\r\"S\n\x16OptionAddVisitorResult\x12.\n\x06result\x18\x8f\x07 \x01(\x0b\x32\x18.dcache.AddVisitorResultH\x00\x88\x01\x01\x42\t\n\x07_result\"\x1b\n\x0bRaftRequest\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\t\"(\n\tRaftReply\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\t\x12\r\n\x05\x65rror\x18\x02 \x01(\t\"#\n\x07Learner\x12\n\n\x02id\x18\x01 \x01(\x04\x12\x0c\n\x04\x61\x64\x64r\x18\x02 \x01(\t\"\'\n\x15\x43\x61ptchaExistsResponse\x12\x0e\n\x06\x65xists\x18\x01 \x01(\x08\"+\n\x17GetVisitorCountResponse\x12\x10\n\x08visitors\x18\x01 \x01(\r\"`\n\x1dOptionGetVisitorCountResponse\x12\x34\n\x06result\x18\x01 \x01(\x0b\x32\x1f.dcache.GetVisitorCountResponseH\x00\x88\x01\x01\x42\t\n\x07_result\"\x97\x03\n\rDcacheRequest\x12/\n\naddCaptcha\x18\x01 \x01(\x0b\x32\x19.dcache.AddCaptchaRequestH\x00\x12\'\n\naddVisitor\x18\x02 \x01(\x0b\x32\x11.dcache.CaptchaIDH\x00\x12\x35\n\rrenameCaptcha\x18\x03 \x01(\x0b\x32\x1c.dcache.RenameCaptchaRequestH\x00\x12*\n\rremoveCaptcha\x18\x04 \x01(\x0b\x32\x11.dcache.CaptchaIDH\x00\x12+\n\x08\x63\x61\x63hePow\x18\x05 \x01(\x0b\x32\x17.dcache.CachePowRequestH\x00\x12\x31\n\x0b\x63\x61\x63heResult\x18\x06 \x01(\x0b\x32\x1a.dcache.CacheResultRequestH\x00\x12*\n\rcaptchaExists\x18\x07 \x01(\x0b\x32\x11.dcache.CaptchaIDH\x00\x12,\n\x0fgetVisitorCount\x18\x08 \x01(\x0b\x32\x11.dcache.CaptchaIDH\x00\x42\x0f\n\rDcacheRequest\"\x88\x02\n\x0e\x44\x63\x61\x63heResponse\x12\x43\n\x19option_add_visitor_result\x18\x01 \x01(\x0b\x32\x1e.dcache.OptionAddVisitorResultH\x00\x12\"\n\x05other\x18\x02 \x01(\x0b\x32\x11.dcache.RaftReplyH\x00\x12\x37\n\x0e\x63\x61ptcha_exists\x18\x03 \x01(\x0b\x32\x1d.dcache.CaptchaExistsResponseH\x00\x12\x42\n\x11get_visitor_count\x18\x04 \x01(\x0b\x32%.dcache.OptionGetVisitorCountResponseH\x00\x42\x10\n\x0e\x44\x63\x61\x63heResponse\"=\n\x12\x44\x63\x61\x63heBatchRequest\x12\'\n\x08requests\x18\x01 \x03(\x0b\x32\x15.dcache.DcacheRequest\"@\n\x13\x44\x63\x61\x63heBatchResponse\x12)\n\tresponses\x18\x01 \x03(\x0b\x32\x16.dcache.DcacheResponse\"0\n\x12RetrievePowRequest\x12\r\n\x05token\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\"O\n\x13RetrievePowResponse\x12\x19\n\x11\x64ifficulty_factor\x18\x01 \x01(\r\x12\x10\n\x08\x64uration\x18\x02 \x01(\x04\x12\x0b\n\x03key\x18\x03 \x01(\t\")\n\x15\x43\x61ptchaResultVerified\x12\x10\n\x08verified\x18\x01 \x01(\x08\"\"\n\x10\x44\x65letePowRequest\x12\x0e\n\x06string\x18\x01 \x01(\t\"Z\n\x1bOptionalRetrievePoWResponse\x12\x30\n\x06result\x18\x01 \x01(\x0b\x32\x1b.dcache.RetrievePowResponseH\x00\x88\x01\x01\x42\t\n\x07_result2\xdd\t\n\rDcacheService\x12<\n\nAddCaptcha\x12\x19.dcache.AddCaptchaRequest\x1a\x11.dcache.RaftReply\"\x00\x12\x41\n\nAddVisitor\x12\x11.dcache.CaptchaID\x1a\x1e.dcache.OptionAddVisitorResult\"\x00\x12\x42\n\rRenameCaptcha\x12\x1c.dcache.RenameCaptchaRequest\x1a\x11.dcache.RaftReply\"\x00\x12\x37\n\rRemoveCaptcha\x12\x11.dcache.CaptchaID\x1a\x11.dcache.RaftReply\"\x00\x12\x38\n\x08\x43\x61\x63hePow\x12\x17.dcache.CachePowRequest\x1a\x11.dcache.RaftReply\"\x00\x12P\n\x0bRetrievePow\x12\x1a.dcache.RetrievePowRequest\x1a#.dcache.OptionalRetrievePoWResponse\"\x00\x12:\n\tDeletePow\x12\x18.dcache.DeletePowRequest\x1a\x11.dcache.RaftReply\"\x00\x12>\n\x0b\x43\x61\x63heResult\x12\x1a.dcache.CacheResultRequest\x1a\x11.dcache.RaftReply\"\x00\x12R\n\x13VerifyCaptchaResult\x12\x1a.dcache.RetrievePowRequest\x1a\x1d.dcache.CaptchaResultVerified\"\x00\x12N\n\x13\x44\x65leteCaptchaResult\x12\".dcache.DeleteCaptchaResultRequest\x1a\x11.dcache.RaftReply\"\x00\x12\x43\n\rCaptchaExists\x12\x11.dcache.CaptchaID\x1a\x1d.dcache.CaptchaExistsResponse\"\x00\x12M\n\x0fGetVisitorCount\x12\x11.dcache.CaptchaID\x1a%.dcache.OptionGetVisitorCountResponse\"\x00\x12N\n\x11PipelineDcacheOps\x12\x1a.dcache.DcacheBatchRequest\x1a\x1b.dcache.DcacheBatchResponse\"\x00\x12\x32\n\nAddLearner\x12\x0f.dcache.Learner\x1a\x11.dcache.RaftReply\"\x00\x12\x31\n\x05Write\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReply\"\x00\x12\x33\n\x07\x46orward\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReply\"\x00\x12\x37\n\rAppendEntries\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReply\x12\x39\n\x0fInstallSnapshot\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReply\x12.\n\x04vote\x12\x13.dcache.RaftRequest\x1a\x11.dcache.RaftReplyb\x06proto3')
_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -51,14 +51,30 @@ if _descriptor._USE_C_DESCRIPTORS == False:
_globals['_RAFTREPLY']._serialized_end=808
_globals['_LEARNER']._serialized_start=810
_globals['_LEARNER']._serialized_end=845
- _globals['_DCACHEREQUEST']._serialized_start=848
- _globals['_DCACHEREQUEST']._serialized_end=1165
- _globals['_DCACHERESPONSE']._serialized_start=1168
- _globals['_DCACHERESPONSE']._serialized_end=1307
- _globals['_DCACHEBATCHREQUEST']._serialized_start=1309
- _globals['_DCACHEBATCHREQUEST']._serialized_end=1370
- _globals['_DCACHEBATCHRESPONSE']._serialized_start=1372
- _globals['_DCACHEBATCHRESPONSE']._serialized_end=1436
- _globals['_DCACHESERVICE']._serialized_start=1439
- _globals['_DCACHESERVICE']._serialized_end=2230
+ _globals['_CAPTCHAEXISTSRESPONSE']._serialized_start=847
+ _globals['_CAPTCHAEXISTSRESPONSE']._serialized_end=886
+ _globals['_GETVISITORCOUNTRESPONSE']._serialized_start=888
+ _globals['_GETVISITORCOUNTRESPONSE']._serialized_end=931
+ _globals['_OPTIONGETVISITORCOUNTRESPONSE']._serialized_start=933
+ _globals['_OPTIONGETVISITORCOUNTRESPONSE']._serialized_end=1029
+ _globals['_DCACHEREQUEST']._serialized_start=1032
+ _globals['_DCACHEREQUEST']._serialized_end=1439
+ _globals['_DCACHERESPONSE']._serialized_start=1442
+ _globals['_DCACHERESPONSE']._serialized_end=1706
+ _globals['_DCACHEBATCHREQUEST']._serialized_start=1708
+ _globals['_DCACHEBATCHREQUEST']._serialized_end=1769
+ _globals['_DCACHEBATCHRESPONSE']._serialized_start=1771
+ _globals['_DCACHEBATCHRESPONSE']._serialized_end=1835
+ _globals['_RETRIEVEPOWREQUEST']._serialized_start=1837
+ _globals['_RETRIEVEPOWREQUEST']._serialized_end=1885
+ _globals['_RETRIEVEPOWRESPONSE']._serialized_start=1887
+ _globals['_RETRIEVEPOWRESPONSE']._serialized_end=1966
+ _globals['_CAPTCHARESULTVERIFIED']._serialized_start=1968
+ _globals['_CAPTCHARESULTVERIFIED']._serialized_end=2009
+ _globals['_DELETEPOWREQUEST']._serialized_start=2011
+ _globals['_DELETEPOWREQUEST']._serialized_end=2045
+ _globals['_OPTIONALRETRIEVEPOWRESPONSE']._serialized_start=2047
+ _globals['_OPTIONALRETRIEVEPOWRESPONSE']._serialized_end=2137
+ _globals['_DCACHESERVICE']._serialized_start=2140
+ _globals['_DCACHESERVICE']._serialized_end=3385
# @@protoc_insertion_point(module_scope)
diff --git a/dcache_py/dcache_pb2.pyi b/dcache_py/dcache_pb2.pyi
index 4197ae5..562e3c4 100644
--- a/dcache_py/dcache_pb2.pyi
+++ b/dcache_py/dcache_pb2.pyi
@@ -119,29 +119,55 @@ class Learner(_message.Message):
addr: str
def __init__(self, id: _Optional[int] = ..., addr: _Optional[str] = ...) -> None: ...
+class CaptchaExistsResponse(_message.Message):
+ __slots__ = ("exists",)
+ EXISTS_FIELD_NUMBER: _ClassVar[int]
+ exists: bool
+ def __init__(self, exists: bool = ...) -> None: ...
+
+class GetVisitorCountResponse(_message.Message):
+ __slots__ = ("visitors",)
+ VISITORS_FIELD_NUMBER: _ClassVar[int]
+ visitors: int
+ def __init__(self, visitors: _Optional[int] = ...) -> None: ...
+
+class OptionGetVisitorCountResponse(_message.Message):
+ __slots__ = ("result",)
+ RESULT_FIELD_NUMBER: _ClassVar[int]
+ result: GetVisitorCountResponse
+ def __init__(self, result: _Optional[_Union[GetVisitorCountResponse, _Mapping]] = ...) -> None: ...
+
class DcacheRequest(_message.Message):
- __slots__ = ("addCaptcha", "addVisitor", "renameCaptcha", "removeCaptcha", "cachePow", "cacheResult")
+ __slots__ = ("addCaptcha", "addVisitor", "renameCaptcha", "removeCaptcha", "cachePow", "cacheResult", "captchaExists", "getVisitorCount")
ADDCAPTCHA_FIELD_NUMBER: _ClassVar[int]
ADDVISITOR_FIELD_NUMBER: _ClassVar[int]
RENAMECAPTCHA_FIELD_NUMBER: _ClassVar[int]
REMOVECAPTCHA_FIELD_NUMBER: _ClassVar[int]
CACHEPOW_FIELD_NUMBER: _ClassVar[int]
CACHERESULT_FIELD_NUMBER: _ClassVar[int]
+ CAPTCHAEXISTS_FIELD_NUMBER: _ClassVar[int]
+ GETVISITORCOUNT_FIELD_NUMBER: _ClassVar[int]
addCaptcha: AddCaptchaRequest
addVisitor: CaptchaID
renameCaptcha: RenameCaptchaRequest
removeCaptcha: CaptchaID
cachePow: CachePowRequest
cacheResult: CacheResultRequest
- def __init__(self, addCaptcha: _Optional[_Union[AddCaptchaRequest, _Mapping]] = ..., addVisitor: _Optional[_Union[CaptchaID, _Mapping]] = ..., renameCaptcha: _Optional[_Union[RenameCaptchaRequest, _Mapping]] = ..., removeCaptcha: _Optional[_Union[CaptchaID, _Mapping]] = ..., cachePow: _Optional[_Union[CachePowRequest, _Mapping]] = ..., cacheResult: _Optional[_Union[CacheResultRequest, _Mapping]] = ...) -> None: ...
+ captchaExists: CaptchaID
+ getVisitorCount: CaptchaID
+ def __init__(self, addCaptcha: _Optional[_Union[AddCaptchaRequest, _Mapping]] = ..., addVisitor: _Optional[_Union[CaptchaID, _Mapping]] = ..., renameCaptcha: _Optional[_Union[RenameCaptchaRequest, _Mapping]] = ..., removeCaptcha: _Optional[_Union[CaptchaID, _Mapping]] = ..., cachePow: _Optional[_Union[CachePowRequest, _Mapping]] = ..., cacheResult: _Optional[_Union[CacheResultRequest, _Mapping]] = ..., captchaExists: _Optional[_Union[CaptchaID, _Mapping]] = ..., getVisitorCount: _Optional[_Union[CaptchaID, _Mapping]] = ...) -> None: ...
class DcacheResponse(_message.Message):
- __slots__ = ("option_add_visitor_result", "other")
+ __slots__ = ("option_add_visitor_result", "other", "captcha_exists", "get_visitor_count")
OPTION_ADD_VISITOR_RESULT_FIELD_NUMBER: _ClassVar[int]
OTHER_FIELD_NUMBER: _ClassVar[int]
+ CAPTCHA_EXISTS_FIELD_NUMBER: _ClassVar[int]
+ GET_VISITOR_COUNT_FIELD_NUMBER: _ClassVar[int]
option_add_visitor_result: OptionAddVisitorResult
other: RaftReply
- def __init__(self, option_add_visitor_result: _Optional[_Union[OptionAddVisitorResult, _Mapping]] = ..., other: _Optional[_Union[RaftReply, _Mapping]] = ...) -> None: ...
+ captcha_exists: CaptchaExistsResponse
+ get_visitor_count: OptionGetVisitorCountResponse
+ def __init__(self, option_add_visitor_result: _Optional[_Union[OptionAddVisitorResult, _Mapping]] = ..., other: _Optional[_Union[RaftReply, _Mapping]] = ..., captcha_exists: _Optional[_Union[CaptchaExistsResponse, _Mapping]] = ..., get_visitor_count: _Optional[_Union[OptionGetVisitorCountResponse, _Mapping]] = ...) -> None: ...
class DcacheBatchRequest(_message.Message):
__slots__ = ("requests",)
@@ -154,3 +180,39 @@ class DcacheBatchResponse(_message.Message):
RESPONSES_FIELD_NUMBER: _ClassVar[int]
responses: _containers.RepeatedCompositeFieldContainer[DcacheResponse]
def __init__(self, responses: _Optional[_Iterable[_Union[DcacheResponse, _Mapping]]] = ...) -> None: ...
+
+class RetrievePowRequest(_message.Message):
+ __slots__ = ("token", "key")
+ TOKEN_FIELD_NUMBER: _ClassVar[int]
+ KEY_FIELD_NUMBER: _ClassVar[int]
+ token: str
+ key: str
+ def __init__(self, token: _Optional[str] = ..., key: _Optional[str] = ...) -> None: ...
+
+class RetrievePowResponse(_message.Message):
+ __slots__ = ("difficulty_factor", "duration", "key")
+ DIFFICULTY_FACTOR_FIELD_NUMBER: _ClassVar[int]
+ DURATION_FIELD_NUMBER: _ClassVar[int]
+ KEY_FIELD_NUMBER: _ClassVar[int]
+ difficulty_factor: int
+ duration: int
+ key: str
+ def __init__(self, difficulty_factor: _Optional[int] = ..., duration: _Optional[int] = ..., key: _Optional[str] = ...) -> None: ...
+
+class CaptchaResultVerified(_message.Message):
+ __slots__ = ("verified",)
+ VERIFIED_FIELD_NUMBER: _ClassVar[int]
+ verified: bool
+ def __init__(self, verified: bool = ...) -> None: ...
+
+class DeletePowRequest(_message.Message):
+ __slots__ = ("string",)
+ STRING_FIELD_NUMBER: _ClassVar[int]
+ string: str
+ def __init__(self, string: _Optional[str] = ...) -> None: ...
+
+class OptionalRetrievePoWResponse(_message.Message):
+ __slots__ = ("result",)
+ RESULT_FIELD_NUMBER: _ClassVar[int]
+ result: RetrievePowResponse
+ def __init__(self, result: _Optional[_Union[RetrievePowResponse, _Mapping]] = ...) -> None: ...
diff --git a/dcache_py/dcache_pb2_grpc.py b/dcache_py/dcache_pb2_grpc.py
index 3ad2977..c6f2df4 100644
--- a/dcache_py/dcache_pb2_grpc.py
+++ b/dcache_py/dcache_pb2_grpc.py
@@ -39,11 +39,41 @@ class DcacheServiceStub(object):
request_serializer=dcache__pb2.CachePowRequest.SerializeToString,
response_deserializer=dcache__pb2.RaftReply.FromString,
)
+ self.RetrievePow = channel.unary_unary(
+ '/dcache.DcacheService/RetrievePow',
+ request_serializer=dcache__pb2.RetrievePowRequest.SerializeToString,
+ response_deserializer=dcache__pb2.OptionalRetrievePoWResponse.FromString,
+ )
+ self.DeletePow = channel.unary_unary(
+ '/dcache.DcacheService/DeletePow',
+ request_serializer=dcache__pb2.DeletePowRequest.SerializeToString,
+ response_deserializer=dcache__pb2.RaftReply.FromString,
+ )
self.CacheResult = channel.unary_unary(
'/dcache.DcacheService/CacheResult',
request_serializer=dcache__pb2.CacheResultRequest.SerializeToString,
response_deserializer=dcache__pb2.RaftReply.FromString,
)
+ self.VerifyCaptchaResult = channel.unary_unary(
+ '/dcache.DcacheService/VerifyCaptchaResult',
+ request_serializer=dcache__pb2.RetrievePowRequest.SerializeToString,
+ response_deserializer=dcache__pb2.CaptchaResultVerified.FromString,
+ )
+ self.DeleteCaptchaResult = channel.unary_unary(
+ '/dcache.DcacheService/DeleteCaptchaResult',
+ request_serializer=dcache__pb2.DeleteCaptchaResultRequest.SerializeToString,
+ response_deserializer=dcache__pb2.RaftReply.FromString,
+ )
+ self.CaptchaExists = channel.unary_unary(
+ '/dcache.DcacheService/CaptchaExists',
+ request_serializer=dcache__pb2.CaptchaID.SerializeToString,
+ response_deserializer=dcache__pb2.CaptchaExistsResponse.FromString,
+ )
+ self.GetVisitorCount = channel.unary_unary(
+ '/dcache.DcacheService/GetVisitorCount',
+ request_serializer=dcache__pb2.CaptchaID.SerializeToString,
+ response_deserializer=dcache__pb2.OptionGetVisitorCountResponse.FromString,
+ )
self.PipelineDcacheOps = channel.unary_unary(
'/dcache.DcacheService/PipelineDcacheOps',
request_serializer=dcache__pb2.DcacheBatchRequest.SerializeToString,
@@ -114,12 +144,48 @@ class DcacheServiceServicer(object):
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
+ def RetrievePow(self, request, context):
+ """Missing associated documentation comment in .proto file."""
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def DeletePow(self, request, context):
+ """Missing associated documentation comment in .proto file."""
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
def CacheResult(self, request, context):
"""Missing associated documentation comment in .proto file."""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
context.set_details('Method not implemented!')
raise NotImplementedError('Method not implemented!')
+ def VerifyCaptchaResult(self, request, context):
+ """Missing associated documentation comment in .proto file."""
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def DeleteCaptchaResult(self, request, context):
+ """Missing associated documentation comment in .proto file."""
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def CaptchaExists(self, request, context):
+ """Missing associated documentation comment in .proto file."""
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
+ def GetVisitorCount(self, request, context):
+ """Missing associated documentation comment in .proto file."""
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+ context.set_details('Method not implemented!')
+ raise NotImplementedError('Method not implemented!')
+
def PipelineDcacheOps(self, request, context):
"""Missing associated documentation comment in .proto file."""
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -193,11 +259,41 @@ def add_DcacheServiceServicer_to_server(servicer, server):
request_deserializer=dcache__pb2.CachePowRequest.FromString,
response_serializer=dcache__pb2.RaftReply.SerializeToString,
),
+ 'RetrievePow': grpc.unary_unary_rpc_method_handler(
+ servicer.RetrievePow,
+ request_deserializer=dcache__pb2.RetrievePowRequest.FromString,
+ response_serializer=dcache__pb2.OptionalRetrievePoWResponse.SerializeToString,
+ ),
+ 'DeletePow': grpc.unary_unary_rpc_method_handler(
+ servicer.DeletePow,
+ request_deserializer=dcache__pb2.DeletePowRequest.FromString,
+ response_serializer=dcache__pb2.RaftReply.SerializeToString,
+ ),
'CacheResult': grpc.unary_unary_rpc_method_handler(
servicer.CacheResult,
request_deserializer=dcache__pb2.CacheResultRequest.FromString,
response_serializer=dcache__pb2.RaftReply.SerializeToString,
),
+ 'VerifyCaptchaResult': grpc.unary_unary_rpc_method_handler(
+ servicer.VerifyCaptchaResult,
+ request_deserializer=dcache__pb2.RetrievePowRequest.FromString,
+ response_serializer=dcache__pb2.CaptchaResultVerified.SerializeToString,
+ ),
+ 'DeleteCaptchaResult': grpc.unary_unary_rpc_method_handler(
+ servicer.DeleteCaptchaResult,
+ request_deserializer=dcache__pb2.DeleteCaptchaResultRequest.FromString,
+ response_serializer=dcache__pb2.RaftReply.SerializeToString,
+ ),
+ 'CaptchaExists': grpc.unary_unary_rpc_method_handler(
+ servicer.CaptchaExists,
+ request_deserializer=dcache__pb2.CaptchaID.FromString,
+ response_serializer=dcache__pb2.CaptchaExistsResponse.SerializeToString,
+ ),
+ 'GetVisitorCount': grpc.unary_unary_rpc_method_handler(
+ servicer.GetVisitorCount,
+ request_deserializer=dcache__pb2.CaptchaID.FromString,
+ response_serializer=dcache__pb2.OptionGetVisitorCountResponse.SerializeToString,
+ ),
'PipelineDcacheOps': grpc.unary_unary_rpc_method_handler(
servicer.PipelineDcacheOps,
request_deserializer=dcache__pb2.DcacheBatchRequest.FromString,
@@ -328,6 +424,40 @@ class DcacheService(object):
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+ @staticmethod
+ def RetrievePow(request,
+ target,
+ options=(),
+ channel_credentials=None,
+ call_credentials=None,
+ insecure=False,
+ compression=None,
+ wait_for_ready=None,
+ timeout=None,
+ metadata=None):
+ return grpc.experimental.unary_unary(request, target, '/dcache.DcacheService/RetrievePow',
+ dcache__pb2.RetrievePowRequest.SerializeToString,
+ dcache__pb2.OptionalRetrievePoWResponse.FromString,
+ options, channel_credentials,
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+ @staticmethod
+ def DeletePow(request,
+ target,
+ options=(),
+ channel_credentials=None,
+ call_credentials=None,
+ insecure=False,
+ compression=None,
+ wait_for_ready=None,
+ timeout=None,
+ metadata=None):
+ return grpc.experimental.unary_unary(request, target, '/dcache.DcacheService/DeletePow',
+ dcache__pb2.DeletePowRequest.SerializeToString,
+ dcache__pb2.RaftReply.FromString,
+ options, channel_credentials,
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
@staticmethod
def CacheResult(request,
target,
@@ -345,6 +475,74 @@ class DcacheService(object):
options, channel_credentials,
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+ @staticmethod
+ def VerifyCaptchaResult(request,
+ target,
+ options=(),
+ channel_credentials=None,
+ call_credentials=None,
+ insecure=False,
+ compression=None,
+ wait_for_ready=None,
+ timeout=None,
+ metadata=None):
+ return grpc.experimental.unary_unary(request, target, '/dcache.DcacheService/VerifyCaptchaResult',
+ dcache__pb2.RetrievePowRequest.SerializeToString,
+ dcache__pb2.CaptchaResultVerified.FromString,
+ options, channel_credentials,
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+ @staticmethod
+ def DeleteCaptchaResult(request,
+ target,
+ options=(),
+ channel_credentials=None,
+ call_credentials=None,
+ insecure=False,
+ compression=None,
+ wait_for_ready=None,
+ timeout=None,
+ metadata=None):
+ return grpc.experimental.unary_unary(request, target, '/dcache.DcacheService/DeleteCaptchaResult',
+ dcache__pb2.DeleteCaptchaResultRequest.SerializeToString,
+ dcache__pb2.RaftReply.FromString,
+ options, channel_credentials,
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+ @staticmethod
+ def CaptchaExists(request,
+ target,
+ options=(),
+ channel_credentials=None,
+ call_credentials=None,
+ insecure=False,
+ compression=None,
+ wait_for_ready=None,
+ timeout=None,
+ metadata=None):
+ return grpc.experimental.unary_unary(request, target, '/dcache.DcacheService/CaptchaExists',
+ dcache__pb2.CaptchaID.SerializeToString,
+ dcache__pb2.CaptchaExistsResponse.FromString,
+ options, channel_credentials,
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+ @staticmethod
+ def GetVisitorCount(request,
+ target,
+ options=(),
+ channel_credentials=None,
+ call_credentials=None,
+ insecure=False,
+ compression=None,
+ wait_for_ready=None,
+ timeout=None,
+ metadata=None):
+ return grpc.experimental.unary_unary(request, target, '/dcache.DcacheService/GetVisitorCount',
+ dcache__pb2.CaptchaID.SerializeToString,
+ dcache__pb2.OptionGetVisitorCountResponse.FromString,
+ options, channel_credentials,
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
@staticmethod
def PipelineDcacheOps(request,
target,
diff --git a/proto/dcache/dcache.proto b/proto/dcache/dcache.proto
index 0aa1856..1830a1b 100644
--- a/proto/dcache/dcache.proto
+++ b/proto/dcache/dcache.proto
@@ -77,6 +77,20 @@ message Learner {
}
+message CaptchaExistsResponse {
+ bool exists = 1;
+}
+
+
+message GetVisitorCountResponse {
+ uint32 visitors = 1;
+}
+
+
+message OptionGetVisitorCountResponse {
+ optional GetVisitorCountResponse result = 1;
+}
+
message DcacheRequest {
oneof DcacheRequest {
AddCaptchaRequest addCaptcha = 1;
@@ -85,6 +99,8 @@ message DcacheRequest {
CaptchaID removeCaptcha = 4;
CachePowRequest cachePow = 5;
CacheResultRequest cacheResult = 6;
+ CaptchaID captchaExists = 7;
+ CaptchaID getVisitorCount = 8;
}
}
@@ -93,6 +109,8 @@ message DcacheResponse {
oneof DcacheResponse {
OptionAddVisitorResult option_add_visitor_result = 1;
RaftReply other = 2;
+ CaptchaExistsResponse captcha_exists = 3;
+ OptionGetVisitorCountResponse get_visitor_count = 4;
}
}
@@ -104,13 +122,43 @@ message DcacheBatchResponse {
repeated DcacheResponse responses = 1;
}
+message RetrievePowRequest {
+ string token = 1;
+ string key = 2;
+}
+
+message RetrievePowResponse {
+ uint32 difficulty_factor = 1;
+ uint64 duration = 2;
+ string key = 3;
+}
+
+
+message CaptchaResultVerified {
+ bool verified = 1;
+}
+
+message DeletePowRequest {
+ string string = 1;
+}
+
+message OptionalRetrievePoWResponse {
+ optional RetrievePowResponse result = 1;
+}
+
service DcacheService {
rpc AddCaptcha(AddCaptchaRequest) returns (RaftReply) {}
rpc AddVisitor(CaptchaID) returns (OptionAddVisitorResult) {}
rpc RenameCaptcha(RenameCaptchaRequest) returns (RaftReply) {}
rpc RemoveCaptcha(CaptchaID) returns (RaftReply) {}
rpc CachePow(CachePowRequest) returns (RaftReply) {}
+ rpc RetrievePow(RetrievePowRequest) returns (OptionalRetrievePoWResponse) {}
+ rpc DeletePow(DeletePowRequest) returns (RaftReply) {}
rpc CacheResult(CacheResultRequest) returns (RaftReply) {}
+ rpc VerifyCaptchaResult(RetrievePowRequest) returns (CaptchaResultVerified) {}
+ rpc DeleteCaptchaResult(DeleteCaptchaResultRequest) returns (RaftReply) {}
+ rpc CaptchaExists(CaptchaID) returns (CaptchaExistsResponse) {}
+ rpc GetVisitorCount(CaptchaID) returns (OptionGetVisitorCountResponse) {}
rpc PipelineDcacheOps(DcacheBatchRequest) returns (DcacheBatchResponse) {}
diff --git a/src/lib.rs b/src/lib.rs
index fbb574d..f80ef1d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -36,7 +36,9 @@ use crate::store::DcacheResponse;
use crate::store::DcacheStore;
pub mod app;
+mod mcaptcha;
pub mod network;
+mod pool;
mod protobuf;
pub mod store;
@@ -117,29 +119,6 @@ pub async fn start_example_raft_node(
raft.enable_heartbeat(true);
raft.enable_elect(true);
- let captcha = serde_json::json!({
- "AddCaptcha": {
- "id": "test_1",
- "mcaptcha": {
- "visitor_threshold": 0,
- "defense": {
- "levels": [
- {"visitor_threshold": 50, "difficulty_factor": 500},
- {"visitor_threshold": 5000, "difficulty_factor": 50000},
- ],
- "current_visitor_threshold": 0,
- },
- "duration": 30,
- }}});
- #[derive(serde::Serialize)]
- struct X {
- data: String,
- }
- let x = X {
- data: serde_json::to_string(&captcha).unwrap(),
- };
- println!("{}", serde_json::to_string(&x).unwrap());
-
// raft.enable_tick(true);
// Create an application that will store all the instances created above, this will
diff --git a/src/mcaptcha/cache.rs b/src/mcaptcha/cache.rs
new file mode 100644
index 0000000..3f42e0a
--- /dev/null
+++ b/src/mcaptcha/cache.rs
@@ -0,0 +1,330 @@
+/*
+ * mCaptcha - A proof of work based DoS protection system
+ * Copyright © 2021 Aravinth Manivannan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+//! In-memory cache implementation that uses [HashMap]
+use std::sync::Arc;
+use std::time::Duration;
+
+use dashmap::DashMap;
+use serde::{Deserialize, Serialize};
+
+use libmcaptcha::cache::messages::*;
+use libmcaptcha::errors::*;
+
+#[derive(Clone, Default, Serialize, Deserialize)]
+/// cache datastructure implementing [Save]
+pub struct HashCache {
+ difficulty_map: Arc>,
+ result_map: Arc>,
+}
+
+impl HashCache {
+ // save [PoWConfig] to cache
+ fn save_pow_config(&self, config: CachePoW) -> CaptchaResult<()> {
+ let challenge = config.string;
+ let config: CachedPoWConfig = CachedPoWConfig {
+ key: config.key,
+ difficulty_factor: config.difficulty_factor,
+ duration: config.duration,
+ };
+
+ if self.difficulty_map.get(&challenge).is_none() {
+ self.difficulty_map.insert(challenge, config);
+ Ok(())
+ } else {
+ Err(CaptchaError::InvalidPoW)
+ }
+ }
+
+ pub async fn clean_all_after_cold_start(&self, updated: HashCache) {
+ updated.difficulty_map.iter().for_each(|x| {
+ self.difficulty_map
+ .insert(x.key().to_owned(), x.value().to_owned());
+ });
+ updated.result_map.iter().for_each(|x| {
+ self.result_map
+ .insert(x.key().to_owned(), x.value().to_owned());
+ });
+ let cache = self.clone();
+ let fut = async move {
+ for values in cache.result_map.iter() {
+ let inner_cache = cache.clone();
+ let duration = values.value().1;
+ let key = values.key().to_owned();
+ let inner_fut = async move {
+ tokio::time::sleep(Duration::new(duration, 0)).await;
+ inner_cache.remove_cache_result(&key);
+ };
+ tokio::spawn(inner_fut);
+ }
+
+ for values in cache.difficulty_map.iter() {
+ let inner_cache = cache.clone();
+ let duration = values.value().duration;
+ let key = values.key().to_owned();
+ let inner_fut = async move {
+ tokio::time::sleep(Duration::new(duration, 0)).await;
+ inner_cache.remove_pow_config(&key);
+ };
+ tokio::spawn(inner_fut);
+ }
+ };
+
+ tokio::spawn(fut);
+ }
+
+ // retrieve [PoWConfig] from cache. Deletes config post retrival
+ pub fn retrieve_pow_config(&self, msg: VerifyCaptchaResult) -> Option {
+ if let Some(difficulty_factor) = self.remove_pow_config(&msg.token) {
+ Some(difficulty_factor)
+ } else {
+ None
+ }
+ }
+
+ // delete [PoWConfig] from cache
+ pub fn remove_pow_config(&self, string: &str) -> Option {
+ self.difficulty_map.remove(string).map(|x| x.1)
+ }
+
+ // save captcha result
+ fn save_captcha_result(&self, res: CacheResult) {
+ self.result_map.insert(res.token, (res.key, res.duration));
+ }
+
+ // verify captcha result
+ pub fn verify_captcha_result(&self, challenge: VerifyCaptchaResult) -> bool {
+ if let Some(captcha_id) = self.remove_cache_result(&challenge.token) {
+ if captcha_id == challenge.key {
+ true
+ } else {
+ false
+ }
+ } else {
+ false
+ }
+ }
+
+ // delete cache result
+ pub fn remove_cache_result(&self, string: &str) -> Option {
+ self.result_map.remove(string).map(|x| x.1 .0)
+ }
+
+ pub fn cache_pow(&self, msg: CachePoW) {
+ use std::time::Duration;
+ use tokio::time::sleep;
+
+ let duration: Duration = Duration::new(msg.duration, 0);
+ let string = msg.string.clone();
+ let cache = self.clone();
+ let wait_for = async move {
+ sleep(duration).await;
+ //delay_for(duration).await;
+ cache.remove_pow_config(&string);
+ };
+ let _ = self.save_pow_config(msg);
+ tokio::spawn(wait_for);
+ }
+
+ /// cache PoW result
+ pub fn cache_result(&self, msg: CacheResult) {
+ use std::time::Duration;
+ use tokio::time::sleep;
+
+ let token = msg.token.clone();
+ msg.token.clone();
+ msg.token.clone();
+ msg.token.clone();
+
+ let duration: Duration = Duration::new(msg.duration, 0);
+ let cache = self.clone();
+ let wait_for = async move {
+ sleep(duration).await;
+ //delay_for(duration).await;
+ cache.remove_cache_result(&token);
+ };
+ tokio::spawn(wait_for);
+
+ let _ = self.save_captcha_result(msg);
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use libmcaptcha::master::AddVisitorResult;
+ use libmcaptcha::pow::PoWConfig;
+
+ use std::time::Duration;
+ #[actix_rt::test]
+ async fn merge_works() {
+ const DIFFICULTY_FACTOR: u32 = 54;
+ const RES: &str = "b";
+ const DURATION: u64 = 5;
+ const KEY: &str = "mcaptchakey";
+ let pow: PoWConfig = PoWConfig::new(DIFFICULTY_FACTOR, KEY.into()); //salt is dummy here
+
+ let cache = HashCache::default();
+ let new_cache = HashCache::default();
+ let visitor_result = AddVisitorResult {
+ difficulty_factor: DIFFICULTY_FACTOR,
+ duration: DURATION,
+ };
+ let string = pow.string.clone();
+
+ let msg = CachePoWBuilder::default()
+ .string(pow.string.clone())
+ .difficulty_factor(DIFFICULTY_FACTOR)
+ .duration(visitor_result.duration)
+ .key(KEY.into())
+ .build()
+ .unwrap();
+
+ cache.cache_pow(msg);
+
+ let add_cache = CacheResult {
+ key: KEY.into(),
+ token: RES.into(),
+ duration: DURATION,
+ };
+
+ cache.cache_result(add_cache.clone());
+
+ new_cache.clean_all_after_cold_start(cache.clone()).await;
+
+ let msg = VerifyCaptchaResult {
+ token: string.clone(),
+ key: KEY.into(),
+ };
+ let cache_difficulty_factor = cache.retrieve_pow_config(msg.clone()).unwrap();
+ let new_cache_difficulty_factor = new_cache.retrieve_pow_config(msg.clone()).unwrap();
+
+ assert_eq!(DIFFICULTY_FACTOR, cache_difficulty_factor.difficulty_factor);
+ assert_eq!(
+ DIFFICULTY_FACTOR,
+ new_cache_difficulty_factor.difficulty_factor
+ );
+
+ let verify_msg = VerifyCaptchaResult {
+ key: KEY.into(),
+ token: RES.into(),
+ };
+
+ assert!(new_cache.verify_captcha_result(verify_msg.clone()));
+ assert!(!new_cache.verify_captcha_result(verify_msg.clone()));
+
+ let duration: Duration = Duration::new(5, 0);
+ //sleep(DURATION + DURATION).await;
+ tokio::time::sleep(duration + duration).await;
+
+ let expired_string = cache.retrieve_pow_config(msg.clone());
+ assert_eq!(None, expired_string);
+ let expired_string = new_cache.retrieve_pow_config(msg);
+ assert_eq!(None, expired_string);
+
+ cache.cache_result(add_cache);
+ new_cache.clean_all_after_cold_start(cache.clone()).await;
+ tokio::time::sleep(duration + duration).await;
+ assert!(!new_cache.verify_captcha_result(verify_msg.clone()));
+ assert!(!cache.verify_captcha_result(verify_msg));
+ }
+
+ #[actix_rt::test]
+ async fn hashcache_pow_cache_works() {
+ const DIFFICULTY_FACTOR: u32 = 54;
+ const DURATION: u64 = 5;
+ const KEY: &str = "mcaptchakey";
+ let cache = HashCache::default();
+ let pow: PoWConfig = PoWConfig::new(DIFFICULTY_FACTOR, KEY.into()); //salt is dummy here
+ let visitor_result = AddVisitorResult {
+ difficulty_factor: DIFFICULTY_FACTOR,
+ duration: DURATION,
+ };
+ let string = pow.string.clone();
+
+ let msg = CachePoWBuilder::default()
+ .string(pow.string.clone())
+ .difficulty_factor(DIFFICULTY_FACTOR)
+ .duration(visitor_result.duration)
+ .key(KEY.into())
+ .build()
+ .unwrap();
+
+ cache.cache_pow(msg);
+
+ let msg = VerifyCaptchaResult {
+ token: string.clone(),
+ key: KEY.into(),
+ };
+ let cache_difficulty_factor = cache.retrieve_pow_config(msg.clone()).unwrap();
+
+ assert_eq!(DIFFICULTY_FACTOR, cache_difficulty_factor.difficulty_factor);
+
+ let duration: Duration = Duration::new(5, 0);
+ //sleep(DURATION + DURATION).await;
+ tokio::time::sleep(duration + duration).await;
+
+ let expired_string = cache.retrieve_pow_config(msg);
+ assert_eq!(None, expired_string);
+ }
+
+ #[actix_rt::test]
+ async fn hashcache_result_cache_works() {
+ const DURATION: u64 = 5;
+ const KEY: &str = "a";
+ const RES: &str = "b";
+ let cache = HashCache::default();
+ // send value to cache
+ // send another value to cache for auto delete
+ // verify_captcha_result
+ // delete
+ // wait for timeout and verify_captcha_result against second value
+
+ let add_cache = CacheResult {
+ key: KEY.into(),
+ token: RES.into(),
+ duration: DURATION,
+ };
+
+ cache.cache_result(add_cache);
+
+ let verify_msg = VerifyCaptchaResult {
+ key: KEY.into(),
+ token: RES.into(),
+ };
+
+ assert!(cache.verify_captcha_result(verify_msg.clone()));
+
+ // duplicate
+ assert!(!cache.verify_captcha_result(verify_msg));
+
+ let verify_msg = VerifyCaptchaResult {
+ key: "cz".into(),
+ token: RES.into(),
+ };
+ assert!(!cache.verify_captcha_result(verify_msg));
+
+ let duration: Duration = Duration::new(5, 0);
+ tokio::time::sleep(duration + duration).await;
+
+ let verify_msg = VerifyCaptchaResult {
+ key: KEY.into(),
+ token: RES.into(),
+ };
+ assert!(!cache.verify_captcha_result(verify_msg));
+ }
+}
diff --git a/src/mcaptcha/defense.rs b/src/mcaptcha/defense.rs
new file mode 100644
index 0000000..6e7bb40
--- /dev/null
+++ b/src/mcaptcha/defense.rs
@@ -0,0 +1,398 @@
+/*
+ * mCaptcha - A proof of work based DoS protection system
+ * Copyright © 2021 Aravinth Manivannan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+use serde::{Deserialize, Serialize};
+
+use libmcaptcha::defense::Level;
+use libmcaptcha::errors::*;
+//
+///// Level struct that describes threshold-difficulty factor mapping
+//#[derive(Debug, Deserialize, Serialize, Copy, Clone, PartialEq)]
+//pub struct Level {
+// pub visitor_threshold: u32,
+// pub difficulty_factor: u32,
+//}
+//
+///// Bulder struct for [Level] to describe threshold-difficulty factor mapping
+//#[derive(Debug, Copy, Clone, PartialEq)]
+//pub struct LevelBuilder {
+// visitor_threshold: Option,
+// difficulty_factor: Option,
+//}
+//
+//impl Default for LevelBuilder {
+// fn default() -> Self {
+// LevelBuilder {
+// visitor_threshold: None,
+// difficulty_factor: None,
+// }
+// }
+//}
+//
+//impl LevelBuilder {
+// /// set visitor count for level
+// pub fn visitor_threshold(&mut self, visitor_threshold: u32) -> &mut Self {
+// self.visitor_threshold = Some(visitor_threshold);
+// self
+// }
+//
+// /// set difficulty factor for level. difficulty_factor can't be zero because
+// /// Difficulty is calculated as:
+// /// ```no_run
+// /// let difficulty_factor = 500;
+// /// let difficulty = u128::max_value() - u128::max_value() / difficulty_factor;
+// /// ```
+// /// the higher the `difficulty_factor`, the higher the difficulty.
+// pub fn difficulty_factor(&mut self, difficulty_factor: u32) -> CaptchaResult<&mut Self> {
+// if difficulty_factor > 0 {
+// self.difficulty_factor = Some(difficulty_factor);
+// Ok(self)
+// } else {
+// Err(CaptchaError::DifficultyFactorZero)
+// }
+// }
+//
+// /// build Level struct
+// pub fn build(&mut self) -> CaptchaResult {
+// if self.visitor_threshold.is_none() {
+// Err(CaptchaError::SetVisitorThreshold)
+// } else if self.difficulty_factor.is_none() {
+// Err(CaptchaError::SetDifficultyFactor)
+// } else {
+// Ok(Level {
+// difficulty_factor: self.difficulty_factor.unwrap(),
+// visitor_threshold: self.visitor_threshold.unwrap(),
+// })
+// }
+// }
+//}
+//
+/// Builder struct for [Defense]
+#[derive(Debug, Clone, PartialEq)]
+pub struct DefenseBuilder {
+ levels: Vec,
+}
+
+impl Default for DefenseBuilder {
+ fn default() -> Self {
+ DefenseBuilder { levels: vec![] }
+ }
+}
+
+impl DefenseBuilder {
+ /// add a level to [Defense]
+ pub fn add_level(&mut self, level: Level) -> CaptchaResult<&mut Self> {
+ for i in self.levels.iter() {
+ if i.visitor_threshold == level.visitor_threshold {
+ return Err(CaptchaError::DuplicateVisitorCount);
+ }
+ }
+ self.levels.push(level);
+ Ok(self)
+ }
+
+ /// Build [Defense]
+ pub fn build(&mut self) -> CaptchaResult {
+ if !self.levels.is_empty() {
+ // sort levels to arrange in ascending order
+ self.levels.sort_by_key(|a| a.visitor_threshold);
+
+ for level in self.levels.iter() {
+ if level.difficulty_factor == 0 {
+ return Err(CaptchaError::DifficultyFactorZero);
+ }
+ }
+
+ // as visitor count increases, difficulty_factor too should increse
+ // if it decreses, an error must be thrown
+ for i in 0..self.levels.len() - 1 {
+ if self.levels[i].difficulty_factor > self.levels[i + 1].difficulty_factor {
+ return Err(CaptchaError::DecreaseingDifficultyFactor);
+ }
+ }
+
+ Ok(Defense {
+ levels: self.levels.to_owned(),
+ })
+ } else {
+ Err(CaptchaError::LevelEmpty)
+ }
+ }
+}
+
+/// struct describes all the different [Level]s at which an mCaptcha system operates
+#[derive(Debug, Serialize, Deserialize, Clone, PartialEq)]
+pub struct Defense {
+ levels: Vec,
+ // index of current visitor threshold
+}
+
+impl From for Vec {
+ fn from(d: Defense) -> Self {
+ d.levels
+ }
+}
+
+impl Defense {
+ ///! Difficulty is calculated as:
+ ///! ```rust
+ ///! let difficulty = u128::max_value() - u128::max_value() / difficulty_factor;
+ ///! ```
+ ///! The higher the `difficulty_factor`, the higher the difficulty.
+
+ // /// Get difficulty factor of current level of defense
+ // pub fn get_difficulty(&self, current_visitor_threshold: usize) -> u32 {
+ // self.levels[current_visitor_threshold].difficulty_factor
+ // }
+ //
+ // /// tighten up defense. Increases defense level by a factor of one.
+ // /// When defense is at max level, calling this method will have no effect
+ // pub fn tighten_up(&mut self) {
+ // if self.current_visitor_threshold < self.levels.len() - 1 {
+ // self.current_visitor_threshold += 1;
+ // }
+ // }
+ // /// Loosen up defense. Decreases defense level by a factor of one.
+ // /// When defense is at the lowest level, calling this method will have no effect.
+ // pub fn loosen_up(&mut self) {
+ // if self.current_visitor_threshold > 0 {
+ // self.current_visitor_threshold -= 1;
+ // }
+ // }
+ //
+ // /// Set defense to maximum level
+ // pub fn max_defense(&mut self) {
+ // self.current_visitor_threshold = self.levels.len() - 1;
+ // }
+ //
+ // /// Set defense to minimum level
+ // pub fn min_defense(&mut self) {
+ // self.current_visitor_threshold = 0;
+ // }
+ //
+ pub fn get_levels(&self) -> Vec {
+ self.levels.clone()
+ }
+ /// Get current level's visitor threshold
+ pub fn current_level(&self, current_visitor_level: u32) -> &Level {
+ for level in self.levels.iter() {
+ if current_visitor_level <= level.visitor_threshold {
+ return level;
+ }
+ }
+ self.levels.last().as_ref().unwrap()
+ // &self.levels[self.current_visitor_threshold]
+ }
+ //
+ // /// Get current level's visitor threshold
+ // pub fn visitor_threshold(&self) -> u32 {
+ // self.levels[self.current_visitor_threshold].difficulty_factor
+ // }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ use libmcaptcha::defense::Level;
+ use libmcaptcha::LevelBuilder;
+
+ #[test]
+ fn defense_builder_duplicate_visitor_threshold() {
+ let mut defense_builder = DefenseBuilder::default();
+ let err = defense_builder
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(50)
+ .difficulty_factor(50)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(50)
+ .difficulty_factor(50)
+ .unwrap()
+ .build()
+ .unwrap(),
+ );
+ assert_eq!(err, Err(CaptchaError::DuplicateVisitorCount));
+ }
+
+ #[test]
+ fn defense_builder_decreasing_difficulty_factor() {
+ let mut defense_builder = DefenseBuilder::default();
+ let err = defense_builder
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(50)
+ .difficulty_factor(50)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(500)
+ .difficulty_factor(10)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .build();
+ assert_eq!(err, Err(CaptchaError::DecreaseingDifficultyFactor));
+ }
+
+ #[test]
+ fn checking_for_integer_overflow() {
+ let mut defense = DefenseBuilder::default()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(5)
+ .difficulty_factor(5)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(10)
+ .difficulty_factor(50)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(20)
+ .difficulty_factor(60)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(30)
+ .difficulty_factor(65)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .build()
+ .unwrap();
+
+ // for _ in 0..500 {
+ // defense.tighten_up();
+ // }
+ //
+ // defense.get_difficulty();
+ // for _ in 0..500000 {
+ // defense.tighten_up();
+ // }
+ //
+ defense.current_level(10_000_000);
+ }
+
+ fn get_defense() -> Defense {
+ DefenseBuilder::default()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(50)
+ .difficulty_factor(50)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(500)
+ .difficulty_factor(5000)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(5000)
+ .difficulty_factor(50000)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(50000)
+ .difficulty_factor(500000)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(500000)
+ .difficulty_factor(5000000)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .build()
+ .unwrap()
+ }
+ #[test]
+ fn defense_builder_works() {
+ let defense = get_defense();
+
+ assert_eq!(defense.levels[0].difficulty_factor, 50);
+ assert_eq!(defense.levels[1].difficulty_factor, 5000);
+ assert_eq!(defense.levels[2].difficulty_factor, 50_000);
+ assert_eq!(defense.levels[3].difficulty_factor, 500_000);
+ assert_eq!(defense.levels[4].difficulty_factor, 5_000_000);
+ }
+
+ #[test]
+ fn tighten_up_works() {
+ let defense = get_defense();
+
+ assert_eq!(defense.current_level(0).difficulty_factor, 50);
+
+ assert_eq!(defense.current_level(500).difficulty_factor, 5_000);
+
+ assert_eq!(defense.current_level(501).difficulty_factor, 50_000);
+ assert_eq!(defense.current_level(5_000).difficulty_factor, 50_000);
+
+ assert_eq!(defense.current_level(5_001).difficulty_factor, 500_000);
+ assert_eq!(defense.current_level(50_000).difficulty_factor, 500_000);
+
+ assert_eq!(defense.current_level(50_001).difficulty_factor, 5_000_000);
+ assert_eq!(defense.current_level(500_000).difficulty_factor, 5_000_000);
+
+ assert_eq!(defense.current_level(500_001).difficulty_factor, 5_000_000);
+ }
+}
diff --git a/src/mcaptcha/mcaptcha.rs b/src/mcaptcha/mcaptcha.rs
new file mode 100644
index 0000000..d67a563
--- /dev/null
+++ b/src/mcaptcha/mcaptcha.rs
@@ -0,0 +1,595 @@
+/* mCaptcha - A proof of work based DoS protection system
+ * Copyright © 2021 Aravinth Manivannan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+use std::collections::HashMap;
+use std::sync::atomic::{AtomicU32, Ordering};
+use std::sync::Arc;
+use std::time::Duration;
+
+use dashmap::DashMap;
+use serde::{Deserialize, Serialize};
+
+use super::defense::Defense;
+use libmcaptcha::errors::*;
+use libmcaptcha::master::messages as ManagerMessages;
+
+/// Builder for [MCaptcha]
+#[derive(Clone, Serialize, Deserialize, Debug)]
+pub struct MCaptchaBuilder {
+ visitor_threshold: u32,
+ defense: Option,
+ duration: Option,
+}
+
+impl Default for MCaptchaBuilder {
+ fn default() -> Self {
+ MCaptchaBuilder {
+ visitor_threshold: 0,
+ defense: None,
+ duration: None,
+ }
+ }
+}
+
+impl MCaptchaBuilder {
+ /// set defense
+ pub fn defense(&mut self, d: Defense) -> &mut Self {
+ self.defense = Some(d);
+ self
+ }
+
+ /// set duration
+ pub fn duration(&mut self, d: u64) -> &mut Self {
+ self.duration = Some(d);
+ self
+ }
+
+ /// Builds new [MCaptcha]
+ pub fn build(self: &mut MCaptchaBuilder) -> CaptchaResult {
+ if self.duration.is_none() {
+ Err(CaptchaError::PleaseSetValue("duration".into()))
+ } else if self.defense.is_none() {
+ Err(CaptchaError::PleaseSetValue("defense".into()))
+ } else if self.duration <= Some(0) {
+ Err(CaptchaError::CaptchaDurationZero)
+ } else {
+ let m = MCaptcha {
+ duration: self.duration.unwrap(),
+ defense: self.defense.clone().unwrap(),
+ visitor_threshold: Arc::new(AtomicU32::new(self.visitor_threshold)),
+ };
+ Ok(m)
+ }
+ }
+}
+
+#[derive(Clone, Serialize, Deserialize, Debug)]
+pub struct MCaptcha {
+ visitor_threshold: Arc,
+ defense: Defense,
+ duration: u64,
+}
+
+impl MCaptcha {
+ /// increments the visitor count by one
+ #[inline]
+ pub fn add_visitor(&self) -> u32 {
+ // self.visitor_threshold += 1;
+ let current_visitor_level = self.visitor_threshold.fetch_add(1, Ordering::SeqCst) + 1;
+ let current_level = self.defense.current_level(current_visitor_level);
+ current_level.difficulty_factor
+ }
+
+ /// decrements the visitor count by specified count
+ #[inline]
+ pub fn set_visitor_count(&self, new_current: u32) {
+ self.visitor_threshold
+ .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |mut current| {
+ if current != new_current {
+ Some(new_current)
+ } else {
+ None
+ }
+ });
+ }
+
+ /// decrements the visitor count by specified count
+ #[inline]
+ pub fn decrement_visitor_by(&self, count: u32) {
+ self.visitor_threshold
+ .fetch_update(Ordering::SeqCst, Ordering::SeqCst, |mut current| {
+ if current > 0 {
+ if current >= count {
+ current -= count;
+ } else {
+ current = 0;
+ }
+ Some(current)
+ } else {
+ None
+ }
+ });
+ }
+
+ /// get [Counter]'s current visitor_threshold
+ pub fn get_visitors(&self) -> u32 {
+ self.visitor_threshold.load(Ordering::SeqCst)
+ }
+}
+
+#[derive(Clone, Serialize, Deserialize)]
+pub struct Manager {
+ pub captchas: Arc>>,
+ pub gc: u64,
+}
+
+impl Manager {
+ /// add [Counter] actor to [Manager]
+ pub fn add_captcha(&self, m: Arc, id: String) {
+ self.captchas.insert(id, m);
+ }
+
+ /// create new master
+ /// accepts a `u64` to configure garbage collection period
+ pub fn new(gc: u64) -> Self {
+ Manager {
+ captchas: Arc::new(DashMap::new()),
+ gc,
+ }
+ }
+
+ fn gc(captchas: Arc>>) {
+ for captcha in captchas.iter() {
+ let visitor = { captcha.value().get_visitors() };
+ if visitor == 0 {
+ captchas.remove(captcha.key());
+ }
+ }
+ }
+
+ /// get [Counter] actor from [Manager]
+ pub fn get_captcha(&self, id: &str) -> Option> {
+ if let Some(captcha) = self.captchas.get(id) {
+ Some(captcha.clone())
+ } else {
+ None
+ }
+ }
+
+ /// removes [Counter] actor from [Manager]
+ pub fn rm_captcha(&self, id: &str) -> Option<(String, Arc)> {
+ self.captchas.remove(id)
+ }
+
+ /// renames [Counter] actor
+ pub fn rename(&self, current_id: &str, new_id: String) {
+ // If actor isn't present, it's okay to not throw an error
+ // since actors are lazyily initialized and are cleaned up when inactive
+ if let Some((_, captcha)) = self.captchas.remove(current_id) {
+ self.add_captcha(captcha, new_id);
+ }
+ }
+
+ pub async fn clean_all_after_cold_start(&self, updated: Manager) {
+ updated.captchas.iter().for_each(|x| {
+ self.captchas
+ .insert(x.key().to_owned(), x.value().to_owned());
+ });
+ let captchas = self.clone();
+ let keys: Vec = captchas
+ .captchas
+ .clone()
+ .iter()
+ .map(|x| x.key().to_owned())
+ .collect();
+ let fut = async move {
+ tokio::time::sleep(Duration::new(captchas.gc, 0)).await;
+ for key in keys.iter() {
+ captchas.rm_captcha(key);
+ }
+ };
+
+ tokio::spawn(fut);
+ }
+
+ pub fn add_visitor(
+ &self,
+ msg: &ManagerMessages::AddVisitor,
+ ) -> Option {
+ if let Some(captcha) = self.captchas.get(&msg.0) {
+ let difficulty_factor = captcha.add_visitor();
+ // let id = msg.0.clone();
+
+ let c = captcha.clone();
+ let captchas = self.captchas.clone();
+ let fut = async move {
+ tokio::time::sleep(Duration::new(c.duration, 0)).await;
+ c.decrement_visitor_by(1);
+ // Self::gc(captchas);
+ // if c.get_visitors() == 0 {
+ // println!("Removing captcha addvivi");
+ // captchas.remove(&id);
+ // }
+ };
+
+ tokio::spawn(fut);
+
+ Some(libmcaptcha::master::AddVisitorResult {
+ duration: captcha.duration,
+ difficulty_factor,
+ })
+ } else {
+ None
+ }
+ }
+
+ pub fn get_internal_data(&self) -> HashMap {
+ let mut res = HashMap::with_capacity(self.captchas.len());
+ for value in self.captchas.iter() {
+ res.insert(value.key().to_owned(), value.value().as_ref().into());
+ }
+ res
+ }
+
+ pub fn set_internal_data(&self, mut map: HashMap) {
+ for (id, captcha) in map.drain() {
+ let visitors = captcha.get_visitors();
+ let new_captcha: MCaptcha = (&captcha).into();
+ let new_captcha = Arc::new(new_captcha);
+ self.captchas.insert(id.clone(), new_captcha.clone());
+ let msg = ManagerMessages::AddVisitor(id);
+ for _ in 0..visitors {
+ self.add_visitor(&msg);
+ }
+ }
+ }
+}
+
+impl From<&libmcaptcha::mcaptcha::MCaptcha> for MCaptcha {
+ fn from(value: &libmcaptcha::mcaptcha::MCaptcha) -> Self {
+ let mut defense = super::defense::DefenseBuilder::default();
+ for level in value.get_defense().get_levels() {
+ let _ = defense.add_level(level);
+ }
+ let defense = defense.build().unwrap();
+ let new_captcha = MCaptchaBuilder::default()
+ .defense(defense)
+ .duration(value.get_duration())
+ .build()
+ .unwrap();
+ // for _ in 0..value.get_visitors() {
+ // new_captcha.add_visitor();
+ // }
+
+ new_captcha
+ }
+}
+
+impl From<&MCaptcha> for libmcaptcha::mcaptcha::MCaptcha {
+ fn from(value: &MCaptcha) -> Self {
+ let mut defense = libmcaptcha::defense::DefenseBuilder::default();
+ for level in value.defense.get_levels().drain(0..) {
+ let _ = defense.add_level(level);
+ }
+ let defense = defense.build().unwrap();
+ let mut new_captcha = libmcaptcha::mcaptcha::MCaptchaBuilder::default()
+ .defense(defense)
+ .duration(value.duration)
+ .build()
+ .unwrap();
+ for _ in 0..value.get_visitors() {
+ new_captcha.add_visitor();
+ }
+ new_captcha
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use libmcaptcha::defense::LevelBuilder;
+ use libmcaptcha::master::messages::*;
+
+ pub const LEVEL_1: (u32, u32) = (50, 50);
+ pub const LEVEL_2: (u32, u32) = (500, 500);
+ pub const DURATION: u64 = 5;
+
+ use crate::mcaptcha::defense::*;
+
+ pub fn get_defense() -> Defense {
+ DefenseBuilder::default()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(LEVEL_1.0)
+ .difficulty_factor(LEVEL_1.1)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .add_level(
+ LevelBuilder::default()
+ .visitor_threshold(LEVEL_2.0)
+ .difficulty_factor(LEVEL_2.1)
+ .unwrap()
+ .build()
+ .unwrap(),
+ )
+ .unwrap()
+ .build()
+ .unwrap()
+ }
+
+ async fn race(manager: &Manager, id: String, count: (u32, u32)) {
+ let msg = ManagerMessages::AddVisitor(id);
+ for _ in 0..count.0 as usize - 1 {
+ manager.add_visitor(&msg);
+ }
+ }
+
+ // pub fn get_counter() -> Counter {
+ // get_mcaptcha().into()
+ // }
+
+ pub fn get_mcaptcha() -> MCaptcha {
+ MCaptchaBuilder::default()
+ .defense(get_defense())
+ .duration(DURATION)
+ .build()
+ .unwrap()
+ }
+
+ #[actix_rt::test]
+ async fn manager_works() {
+ let manager = Manager::new(1);
+
+ // let get_add_site_msg = |id: String, mcaptcha: MCaptcha| {
+ // AddSiteBuilder::default()
+ // .id(id)
+ // .mcaptcha(mcaptcha)
+ // .build()
+ // .unwrap()
+ // };
+
+ let id = "yo";
+ manager.add_captcha(Arc::new(get_mcaptcha()), id.into());
+
+ let mcaptcha_addr = manager.get_captcha(id);
+ assert!(mcaptcha_addr.is_some());
+
+ let mut mcaptcha_data = manager.get_internal_data();
+ mcaptcha_data.get_mut(id).unwrap().add_visitor();
+ mcaptcha_data.get_mut(id).unwrap().add_visitor();
+ mcaptcha_data.get_mut(id).unwrap().add_visitor();
+ // let mcaptcha_data: HashMap = {
+ // let serialized = serde_json::to_string(&mcaptcha_data).unwrap();
+ // serde_json::from_str(&serialized).unwrap()
+ // };
+ // println!("{:?}", mcaptcha_data);
+ manager.set_internal_data(mcaptcha_data);
+
+ let mcaptcha_data = manager.get_internal_data();
+ assert_eq!(
+ manager.get_captcha(id).unwrap().get_visitors(),
+ mcaptcha_data.get(id).unwrap().get_visitors()
+ );
+
+ let new_id = "yoyo";
+ manager.rename(id, new_id.into());
+
+ {
+ let mcaptcha_addr = manager.get_captcha(new_id);
+ assert!(mcaptcha_addr.is_some());
+
+ let addr_doesnt_exist = manager.get_captcha(id);
+ assert!(addr_doesnt_exist.is_none());
+
+ let timer_expire = Duration::new(DURATION, 0);
+ tokio::time::sleep(timer_expire).await;
+ tokio::time::sleep(timer_expire).await;
+ }
+
+ // Manager::gc(manager.captchas.clone());
+ // let mcaptcha_addr = manager.get_captcha(new_id);
+ // assert_eq!(mcaptcha_addr.as_ref().unwrap().get_visitors(), 0);
+ // assert!(mcaptcha_addr.is_none());
+ //
+ // assert!(
+ // manager.rm_captcha(new_id.into()).is_some());
+ }
+
+ #[actix_rt::test]
+ async fn counter_defense_works() {
+ let manager = Manager::new(1);
+ let id = "yo";
+ manager.add_captcha(Arc::new(get_mcaptcha()), id.into());
+
+ let mut mcaptcha = manager
+ .add_visitor(&ManagerMessages::AddVisitor(id.to_string()))
+ .unwrap();
+ assert_eq!(mcaptcha.difficulty_factor, LEVEL_1.0);
+
+ race(&manager, id.to_string(), LEVEL_2).await;
+ mcaptcha = manager
+ .add_visitor(&ManagerMessages::AddVisitor(id.to_string()))
+ .unwrap();
+ assert_eq!(mcaptcha.difficulty_factor, LEVEL_2.1);
+ tokio::time::sleep(Duration::new(DURATION * 2, 0)).await;
+ assert_eq!(manager.get_captcha(id).unwrap().get_visitors(), 0);
+ }
+}
+//
+//#[cfg(test)]
+//pub mod tests {
+// use super::*;
+// use crate::defense::*;
+// use crate::errors::*;
+// use crate::mcaptcha;
+// use crate::mcaptcha::MCaptchaBuilder;
+//
+// // constants for testing
+// // (visitor count, level)
+// pub const LEVEL_1: (u32, u32) = (50, 50);
+// pub const LEVEL_2: (u32, u32) = (500, 500);
+// pub const DURATION: u64 = 5;
+//
+// type MyActor = Addr;
+//
+// pub fn get_defense() -> Defense {
+// DefenseBuilder::default()
+// .add_level(
+// LevelBuilder::default()
+// .visitor_threshold(LEVEL_1.0)
+// .difficulty_factor(LEVEL_1.1)
+// .unwrap()
+// .build()
+// .unwrap(),
+// )
+// .unwrap()
+// .add_level(
+// LevelBuilder::default()
+// .visitor_threshold(LEVEL_2.0)
+// .difficulty_factor(LEVEL_2.1)
+// .unwrap()
+// .build()
+// .unwrap(),
+// )
+// .unwrap()
+// .build()
+// .unwrap()
+// }
+//
+// async fn race(addr: Addr, count: (u32, u32)) {
+// for _ in 0..count.0 as usize - 1 {
+// let _ = addr.send(AddVisitor).await.unwrap();
+// }
+// }
+//
+// pub fn get_counter() -> Counter {
+// get_mcaptcha().into()
+// }
+//
+// pub fn get_mcaptcha() -> MCaptcha {
+// MCaptchaBuilder::default()
+// .defense(get_defense())
+// .duration(DURATION)
+// .build()
+// .unwrap()
+// }
+//
+// #[test]
+// fn mcaptcha_decrement_by_works() {
+// let mut m = get_mcaptcha();
+// for _ in 0..100 {
+// m.add_visitor();
+// }
+// m.decrement_visitor_by(50);
+// assert_eq!(m.get_visitors(), 50);
+// m.decrement_visitor_by(500);
+// assert_eq!(m.get_visitors(), 0);
+// }
+//
+
+//
+// #[actix_rt::test]
+// async fn counter_defense_loosenup_works() {
+// //use actix::clock::sleep;
+// //use actix::clock::delay_for;
+// let addr: MyActor = get_counter().start();
+//
+// race(addr.clone(), LEVEL_2).await;
+// race(addr.clone(), LEVEL_2).await;
+// let mut mcaptcha = addr.send(AddVisitor).await.unwrap();
+// assert_eq!(mcaptcha.difficulty_factor, LEVEL_2.1);
+//
+// let duration = Duration::new(DURATION, 0);
+// sleep(duration).await;
+// //delay_for(duration).await;
+//
+// mcaptcha = addr.send(AddVisitor).await.unwrap();
+// assert_eq!(mcaptcha.difficulty_factor, LEVEL_1.1);
+// }
+//
+// #[test]
+// fn test_mcatcptha_builder() {
+// let defense = get_defense();
+// let m = MCaptchaBuilder::default()
+// .duration(0)
+// .defense(defense.clone())
+// .build();
+//
+// assert_eq!(m.err(), Some(CaptchaError::CaptchaDurationZero));
+//
+// let m = MCaptchaBuilder::default().duration(30).build();
+// assert_eq!(
+// m.err(),
+// Some(CaptchaError::PleaseSetValue("defense".into()))
+// );
+//
+// let m = MCaptchaBuilder::default().defense(defense).build();
+// assert_eq!(
+// m.err(),
+// Some(CaptchaError::PleaseSetValue("duration".into()))
+// );
+// }
+//
+// #[actix_rt::test]
+// async fn get_current_visitor_count_works() {
+// let addr: MyActor = get_counter().start();
+//
+// addr.send(AddVisitor).await.unwrap();
+// addr.send(AddVisitor).await.unwrap();
+// addr.send(AddVisitor).await.unwrap();
+// addr.send(AddVisitor).await.unwrap();
+// let count = addr.send(GetCurrentVisitorCount).await.unwrap();
+//
+// assert_eq!(count, 4);
+// }
+//
+// #[actix_rt::test]
+// #[should_panic]
+// async fn stop_works() {
+// let addr: MyActor = get_counter().start();
+// addr.send(Stop).await.unwrap();
+// addr.send(AddVisitor).await.unwrap();
+// }
+//
+// #[actix_rt::test]
+// async fn get_set_internal_data_works() {
+// let addr: MyActor = get_counter().start();
+// let mut mcaptcha = addr.send(GetInternalData).await.unwrap();
+// mcaptcha.add_visitor();
+// addr.send(SetInternalData(mcaptcha.clone())).await.unwrap();
+// assert_eq!(
+// addr.send(GetInternalData).await.unwrap().get_visitors(),
+// mcaptcha.get_visitors()
+// );
+//
+// let duration = Duration::new(mcaptcha.get_duration() + 3, 0);
+// sleep(duration).await;
+// assert_eq!(addr.send(GetCurrentVisitorCount).await.unwrap(), 0);
+// }
+//
+// #[actix_rt::test]
+// async fn bulk_delete_works() {
+// let addr: MyActor = get_counter().start();
+// addr.send(AddVisitor).await.unwrap();
+// addr.send(AddVisitor).await.unwrap();
+// assert_eq!(addr.send(GetCurrentVisitorCount).await.unwrap(), 2);
+// addr.send(BulkDecrement(3)).await.unwrap();
+// assert_eq!(addr.send(GetCurrentVisitorCount).await.unwrap(), 0);
+// }
+//}
diff --git a/src/mcaptcha/mod.rs b/src/mcaptcha/mod.rs
new file mode 100644
index 0000000..8ec1c74
--- /dev/null
+++ b/src/mcaptcha/mod.rs
@@ -0,0 +1,3 @@
+pub mod cache;
+mod defense;
+pub mod mcaptcha;
diff --git a/src/network/raft_network_impl.rs b/src/network/raft_network_impl.rs
index 7e7e093..f1b6bc7 100644
--- a/src/network/raft_network_impl.rs
+++ b/src/network/raft_network_impl.rs
@@ -16,7 +16,11 @@
* along with this program. If not, see .
*/
use std::sync::Arc;
+use std::time::Duration;
+use super::management::HealthStatus;
+use crate::DcacheNodeId;
+use crate::DcacheTypeConfig;
use async_trait::async_trait;
use openraft::error::InstallSnapshotError;
use openraft::error::NetworkError;
@@ -34,17 +38,37 @@ use openraft::RaftNetworkFactory;
use serde::de::DeserializeOwned;
use serde::Serialize;
use tokio::sync::mpsc::Sender;
+use tonic::transport::channel::Channel;
+use tower_service::Service;
-use super::management::HealthStatus;
-use crate::DcacheNodeId;
-use crate::DcacheTypeConfig;
-
+use crate::pool::*;
use crate::protobuf::dcache::dcache_service_client::DcacheServiceClient;
use crate::protobuf::dcache::RaftRequest;
-#[derive(Clone)]
+#[derive(Debug)]
+struct ChannelManager {}
+
+#[async_trait]
+impl ItemManager for ChannelManager {
+ type Key = String;
+ type Item = Channel;
+ type Error = tonic::transport::Error;
+
+ async fn build(&self, addr: &Self::Key) -> Result {
+ tonic::transport::Endpoint::new(addr.clone())?
+ .connect()
+ .await
+ }
+
+ async fn check(&self, mut ch: Channel) -> Result {
+ futures::future::poll_fn(|cx| (&mut ch).poll_ready(cx)).await?;
+ Ok(ch)
+ }
+}
+
pub struct DcacheNetwork {
pub signal: Sender,
+ conn_pool: Pool,
}
pub enum RPCType {
@@ -55,7 +79,13 @@ pub enum RPCType {
impl DcacheNetwork {
pub fn new(signal: Sender) -> Self {
- Self { signal }
+ let mgr = ChannelManager {};
+
+ Self {
+ signal,
+
+ conn_pool: Pool::new(mgr, Duration::from_millis(50)),
+ }
}
pub async fn send_rpc(
&self,
@@ -69,11 +99,7 @@ impl DcacheNetwork {
Err: std::error::Error + DeserializeOwned,
Resp: DeserializeOwned,
{
- let addr = &target_node.addr;
-
- let url = format!("http://{}", addr);
-
- let mut client = DcacheServiceClient::connect(url).await.unwrap();
+ let mut client = self.make_client(&target, target_node).await;
let res = match event {
RPCType::Vote => {
@@ -117,6 +143,23 @@ impl DcacheNetwork {
}
}
}
+
+ pub async fn make_client(
+ &self,
+ target: &DcacheNodeId,
+ target_node: &BasicNode,
+ ) -> DcacheServiceClient {
+ let addr = format!("http://{}", &target_node.addr);
+
+ tracing::debug!("connect: target={}: {}", target, addr);
+
+ let channel = self.conn_pool.get(&addr).await.unwrap();
+ let client = DcacheServiceClient::new(channel);
+
+ tracing::info!("connected: target={}: {}", target, addr);
+
+ client
+ }
}
// NOTE: This could be implemented also on `Arc`, but since it's empty, implemented
diff --git a/src/pool.rs b/src/pool.rs
new file mode 100644
index 0000000..781e5d6
--- /dev/null
+++ b/src/pool.rs
@@ -0,0 +1,154 @@
+use std::collections::HashMap;
+use std::fmt::Debug;
+use std::hash::Hash;
+use std::marker::PhantomData;
+use std::sync::Arc;
+use std::sync::Mutex;
+use std::time::Duration;
+
+use async_trait::async_trait;
+use tokio::time::sleep;
+//use log::debug;
+
+//use crate::base::tokio;
+
+pub type PoolItem = Arc>>;
+
+/// To build or check an item.
+///
+/// When an item is requested, ItemManager `build()` one for the pool.
+/// When an item is reused, ItemManager `check()` if it is still valid.
+#[async_trait]
+pub trait ItemManager {
+ type Key;
+ type Item;
+ type Error;
+
+ /// Make a new item to put into the pool.
+ ///
+ /// An impl should hold that an item returned by `build()` is passed `check()`.
+ async fn build(&self, key: &Self::Key) -> Result;
+
+ /// Check if an existent item still valid.
+ ///
+ /// E.g.: check if a tcp connection still alive.
+ /// If the item is valid, `check` should return it in a Ok().
+ /// Otherwise, the item should be dropped and `check` returns an Err().
+ async fn check(&self, item: Self::Item) -> Result;
+}
+
+/// Pool assumes the items in it is `Clone`, thus it keeps only one item for each key.
+#[allow(clippy::type_complexity)]
+#[derive(Debug, Clone)]
+pub struct Pool
+where
+ Mgr: ItemManager + Debug,
+{
+ /// The first sleep time when `build()` fails.
+ /// The next sleep time is 2 times of the previous one.
+ pub initial_retry_interval: Duration,
+
+ /// Pooled items indexed by key.
+ pub items: Arc>>>,
+
+ manager: Mgr,
+
+ err_type: PhantomData,
+
+ n_retries: u32,
+}
+
+impl Pool
+where
+ Mgr: ItemManager + Debug,
+ Mgr::Key: Clone + Eq + Hash + Send + Debug,
+ Mgr::Item: Clone + Sync + Send + Debug,
+ Mgr::Error: Sync + Debug,
+{
+ pub fn new(manager: Mgr, initial_retry_interval: Duration) -> Self {
+ Pool {
+ initial_retry_interval,
+ items: Default::default(),
+ manager,
+ err_type: Default::default(),
+ n_retries: 3,
+ }
+ }
+
+ pub fn with_retries(mut self, retries: u32) -> Self {
+ self.n_retries = retries;
+ self
+ }
+
+ pub fn item_manager(&self) -> &Mgr {
+ &self.manager
+ }
+
+ /// Return an raw pool item.
+ ///
+ /// The returned one may be an uninitialized one, i.e., it contains a None.
+ /// The lock for `items` should not be held for long, e.g. when `build()` a new connection, it takes dozen ms.
+ fn get_pool_item(&self, key: &Mgr::Key) -> PoolItem {
+ let mut items = self.items.lock().unwrap();
+
+ if let Some(item) = items.get(key) {
+ item.clone()
+ } else {
+ let item = PoolItem::default();
+ items.insert(key.clone(), item.clone());
+ item
+ }
+ }
+
+ /// Return a item, by cloning an existent one or making a new one.
+ ///
+ /// When returning an existent one, `check()` will be called on it to ensure it is still valid.
+ /// E.g., when returning a tcp connection.
+ // #[logcall::logcall(err = "debug")]
+ // #[minitrace::trace]
+ pub async fn get(&self, key: &Mgr::Key) -> Result {
+ let pool_item = self.get_pool_item(key);
+
+ let mut guard = pool_item.lock().await;
+ let item_opt = (*guard).clone();
+
+ if let Some(ref item) = item_opt {
+ let check_res = self.manager.check(item.clone()).await;
+ // debug!("check reused item res: {:?}", check_res);
+
+ if let Ok(itm) = check_res {
+ return Ok(itm);
+ } else {
+ // mark broken conn as deleted
+ *guard = None;
+ }
+ }
+
+ let mut interval = self.initial_retry_interval;
+
+ for i in 0..self.n_retries {
+ // debug!("build new item of key: {:?}", key);
+
+ let new_item = self.manager.build(key).await;
+
+ // debug!("build new item of key res: {:?}", new_item);
+
+ match new_item {
+ Ok(x) => {
+ *guard = Some(x.clone());
+ return Ok(x);
+ }
+ Err(err) => {
+ if i == self.n_retries - 1 {
+ return Err(err);
+ }
+ }
+ }
+
+ sleep(interval).await;
+ interval *= 2;
+ }
+
+ unreachable!("the loop should always return!");
+ }
+}
diff --git a/src/protobuf.rs b/src/protobuf.rs
index f049b6f..dd2f9b0 100644
--- a/src/protobuf.rs
+++ b/src/protobuf.rs
@@ -129,6 +129,36 @@ impl DcacheService for MyDcacheImpl {
Ok(Response::new(res.into()))
}
+ async fn retrieve_pow(
+ &self,
+ request: tonic::Request,
+ ) -> std::result::Result, tonic::Status>
+ {
+ let req = request.into_inner();
+ let sm = self.app.store.state_machine.read().await;
+
+ let res = sm.results.retrieve_pow_config(req.into());
+
+ Ok(Response::new(dcache::OptionalRetrievePoWResponse {
+ result: res.map(|x| x.into()),
+ }))
+ }
+
+ async fn delete_pow(
+ &self,
+ request: tonic::Request,
+ ) -> std::result::Result, tonic::Status> {
+ let req = request.into_inner();
+ let res = self
+ .app
+ .raft
+ .client_write(DcacheRequest::DeletePoW(CacheMessages::DeletePoW(
+ req.string,
+ )))
+ .await;
+ Ok(Response::new(res.into()))
+ }
+
async fn cache_result(
&self,
request: tonic::Request,
@@ -142,6 +172,62 @@ impl DcacheService for MyDcacheImpl {
Ok(Response::new(res.into()))
}
+ async fn verify_captcha_result(
+ &self,
+ request: tonic::Request,
+ ) -> std::result::Result, tonic::Status> {
+ let req = request.into_inner();
+ let sm = self.app.store.state_machine.read().await;
+
+ let verified = sm.results.verify_captcha_result(req.into());
+
+ Ok(Response::new(dcache::CaptchaResultVerified { verified }))
+ }
+
+ async fn delete_captcha_result(
+ &self,
+ request: tonic::Request,
+ ) -> std::result::Result, tonic::Status> {
+ let req = request.into_inner();
+ let res = self
+ .app
+ .raft
+ .client_write(DcacheRequest::DeleteCaptchaResult(
+ CacheMessages::DeleteCaptchaResult { token: req.token },
+ ))
+ .await;
+ Ok(Response::new(res.into()))
+ }
+
+ async fn captcha_exists(
+ &self,
+ request: tonic::Request,
+ ) -> std::result::Result, tonic::Status> {
+ let req = request.into_inner();
+ let sm = self.app.store.state_machine.read().await;
+ let exists = sm.counter.get_captcha(&req.id).is_some();
+ Ok(Response::new(dcache::CaptchaExistsResponse { exists }))
+ }
+
+ async fn get_visitor_count(
+ &self,
+ request: tonic::Request,
+ ) -> std::result::Result, tonic::Status>
+ {
+ let req = request.into_inner();
+ let sm = self.app.store.state_machine.read().await;
+ if let Some(captcha) = sm.counter.get_captcha(&req.id) {
+ let res = captcha.get_visitors();
+ Ok(Response::new(dcache::OptionGetVisitorCountResponse {
+ result: Some(dcache::GetVisitorCountResponse { visitors: res }),
+ }))
+ } else {
+ Ok(Response::new(dcache::OptionGetVisitorCountResponse {
+ result: None,
+ }))
+ }
+ }
+
// type PipelineDcacheOpsStream =
// Pin> + Send + 'static>>;
@@ -195,7 +281,6 @@ impl DcacheService for MyDcacheImpl {
_ => unimplemented!(),
},
}
-
}
PipelineReq::RenameCaptcha(rename_captcha_req) => {
let res = self
@@ -239,6 +324,35 @@ impl DcacheService for MyDcacheImpl {
dcache_response: Some(InnerPipelineRes::Other(res.into())),
}
}
+ PipelineReq::CaptchaExists(captcha_exists_req) => {
+ let sm = self.app.store.state_machine.read().await;
+ let exists = sm.counter.get_captcha(&captcha_exists_req.id).is_some();
+ let res = dcache::CaptchaExistsResponse { exists };
+ drop(sm);
+ OuterPipelineRes {
+ dcache_response: Some(InnerPipelineRes::CaptchaExists(res)),
+ }
+ }
+
+ PipelineReq::GetVisitorCount(get_visitor_count_req) => {
+ let sm = self.app.store.state_machine.read().await;
+ if let Some(captcha) = sm.counter.get_captcha(&get_visitor_count_req.id) {
+ let res = captcha.get_visitors();
+ OuterPipelineRes {
+ dcache_response: Some(InnerPipelineRes::GetVisitorCount(
+ dcache::OptionGetVisitorCountResponse {
+ result: Some(dcache::GetVisitorCountResponse { visitors: res }),
+ },
+ )),
+ }
+ } else {
+ OuterPipelineRes {
+ dcache_response: Some(InnerPipelineRes::GetVisitorCount(
+ dcache::OptionGetVisitorCountResponse { result: None },
+ )),
+ }
+ }
+ }
};
responses.push(res);
}
@@ -391,6 +505,27 @@ impl From for CacheMessages::CachePoW {
}
}
+impl From for dcache::CachePowRequest {
+ fn from(value: CacheMessages::CachePoW) -> Self {
+ Self {
+ string: value.string,
+ difficulty_factor: value.difficulty_factor,
+ duration: value.duration,
+ key: value.key,
+ }
+ }
+}
+
+impl From for dcache::RetrievePowResponse {
+ fn from(value: CacheMessages::CachedPoWConfig) -> Self {
+ Self {
+ difficulty_factor: value.difficulty_factor,
+ duration: value.duration,
+ key: value.key,
+ }
+ }
+}
+
impl From for CacheMessages::CacheResult {
fn from(value: dcache::CacheResultRequest) -> Self {
Self {
@@ -400,3 +535,12 @@ impl From for CacheMessages::CacheResult {
}
}
}
+
+impl From for CacheMessages::VerifyCaptchaResult {
+ fn from(value: dcache::RetrievePowRequest) -> Self {
+ Self {
+ token: value.token,
+ key: value.key,
+ }
+ }
+}
diff --git a/src/store/mod.rs b/src/store/mod.rs
index b7be3c9..f66fbe8 100644
--- a/src/store/mod.rs
+++ b/src/store/mod.rs
@@ -94,7 +94,9 @@ pub struct DcacheStateMachine {
pub last_membership: StoredMembership,
/// Application data.
- pub data: Arc>,
+ // pub data: Arc>,
+ pub counter: crate::mcaptcha::mcaptcha::Manager,
+ pub results: crate::mcaptcha::cache::HashCache,
}
#[derive(Serialize, Deserialize, Clone)]
@@ -103,42 +105,34 @@ struct PersistableStateMachine {
last_membership: StoredMembership,
- /// Application data.
- data: HashMap,
+ counter: crate::mcaptcha::mcaptcha::Manager,
+ results: crate::mcaptcha::cache::HashCache,
}
impl PersistableStateMachine {
async fn from_statemachine(m: &DcacheStateMachine) -> Self {
- let internal_data = m
- .data
- .master
- .send(GetInternalData)
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
+ let counter = m.counter.clone();
+ let results = m.results.clone();
Self {
last_applied_log: m.last_applied_log,
last_membership: m.last_membership.clone(),
- data: internal_data,
+ counter,
+ results,
}
}
async fn to_statemachine(
self,
- data: Arc>,
+ counter: crate::mcaptcha::mcaptcha::Manager,
+ results: crate::mcaptcha::cache::HashCache,
) -> DcacheStateMachine {
- data.master
- .send(SetInternalData {
- mcaptcha: self.data,
- })
- .await
- .unwrap();
+ self.counter.clean_all_after_cold_start(counter).await;
+ self.results.clean_all_after_cold_start(results).await;
DcacheStateMachine {
last_applied_log: self.last_applied_log,
last_membership: self.last_membership,
- data,
+ results: self.results,
+ counter: self.counter,
}
}
}
@@ -165,7 +159,8 @@ impl DcacheStore {
let state_machine = RwLock::new(DcacheStateMachine {
last_applied_log: Default::default(),
last_membership: Default::default(),
- data: system::init_system(salt),
+ counter: crate::mcaptcha::mcaptcha::Manager::new(30),
+ results: crate::mcaptcha::cache::HashCache::default(),
});
Self {
@@ -391,83 +386,42 @@ impl RaftStorage for Arc {
EntryPayload::Blank => res.push(DcacheResponse::Empty),
EntryPayload::Normal(ref req) => match req {
DcacheRequest::AddVisitor(msg) => {
- let r = sm
- .data
- .master
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
+ let r = sm.counter.add_visitor(msg);
res.push(DcacheResponse::AddVisitorResult(r));
}
DcacheRequest::AddCaptcha(msg) => {
- sm.data
- .master
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
+ sm.counter
+ .add_captcha(Arc::new((&msg.mcaptcha).into()), msg.id.clone());
res.push(DcacheResponse::Empty);
}
DcacheRequest::RenameCaptcha(msg) => {
- sm.data
- .master
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
+ sm.counter.rename(&msg.name, msg.rename_to.clone());
res.push(DcacheResponse::Empty);
}
DcacheRequest::RemoveCaptcha(msg) => {
- sm.data
- .master
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
+ sm.counter.rm_captcha(&msg.0);
res.push(DcacheResponse::Empty);
}
// cache
DcacheRequest::CachePoW(msg) => {
- sm.data
- .cache
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
+ sm.results.cache_pow(msg.clone());
res.push(DcacheResponse::Empty);
}
DcacheRequest::DeletePoW(msg) => {
- sm.data.cache.send(msg.clone()).await.unwrap().unwrap();
+ sm.results.remove_pow_config(&msg.0);
+ // sm.data.cache.send(msg.clone()).await.unwrap().unwrap();
res.push(DcacheResponse::Empty);
}
DcacheRequest::CacheResult(msg) => {
- sm.data
- .cache
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
+ sm.results.cache_result(msg.clone());
res.push(DcacheResponse::Empty);
}
DcacheRequest::DeleteCaptchaResult(msg) => {
- sm.data.cache.send(msg.clone()).await.unwrap().unwrap();
+ sm.results.remove_cache_result(&msg.token);
res.push(DcacheResponse::Empty);
}
},
@@ -514,7 +468,7 @@ impl RaftStorage for Arc {
})?;
let mut state_machine = self.state_machine.write().await;
let updated_state_machine = updated_state_machine
- .to_statemachine(state_machine.data.clone())
+ .to_statemachine(state_machine.counter.clone(), state_machine.results.clone())
.await;
*state_machine = updated_state_machine;
}
@@ -549,3 +503,19 @@ impl RaftStorage for Arc {
self.clone()
}
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ async fn provision_dcache_store() -> Arc {
+ Arc::new(DcacheStore::new(
+ "adsfasdfasdfadsfadfadfadfadsfasdfasdfasdfasdf".into(),
+ ))
+ }
+
+ #[test]
+ fn test_dcache_store() {
+ openraft::testing::Suite::test_all(provision_dcache_store).unwrap();
+ }
+}