diff --git a/Cargo.lock b/Cargo.lock
index 34e7f78..0886a84 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -26,214 +26,16 @@ dependencies = [
"tokio-util",
]
-[[package]]
-name = "actix-codec"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "617a8268e3537fe1d8c9ead925fca49ef6400927ee7bc26750e90ecee14ce4b8"
-dependencies = [
- "bitflags 1.3.2",
- "bytes",
- "futures-core",
- "futures-sink",
- "memchr",
- "pin-project-lite",
- "tokio",
- "tokio-util",
- "tracing",
-]
-
-[[package]]
-name = "actix-http"
-version = "3.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2079246596c18b4a33e274ae10c0e50613f4d32a4198e09c7b93771013fed74"
-dependencies = [
- "actix-codec",
- "actix-rt",
- "actix-service",
- "actix-utils",
- "ahash 0.8.3",
- "base64 0.21.1",
- "bitflags 1.3.2",
- "brotli",
- "bytes",
- "bytestring",
- "derive_more",
- "encoding_rs",
- "flate2",
- "futures-core",
- "h2",
- "http",
- "httparse",
- "httpdate",
- "itoa",
- "language-tags",
- "local-channel",
- "mime",
- "percent-encoding",
- "pin-project-lite",
- "rand",
- "sha1",
- "smallvec",
- "tokio",
- "tokio-util",
- "tracing",
- "zstd",
-]
-
-[[package]]
-name = "actix-macros"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6"
-dependencies = [
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "actix-router"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799"
-dependencies = [
- "bytestring",
- "http",
- "regex",
- "serde 1.0.163",
- "tracing",
-]
-
[[package]]
name = "actix-rt"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15265b6b8e2347670eb363c47fc8c75208b4a4994b27192f345fcbe707804f3e"
dependencies = [
- "actix-macros",
"futures-core",
"tokio",
]
-[[package]]
-name = "actix-server"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e8613a75dd50cc45f473cee3c34d59ed677c0f7b44480ce3b8247d7dc519327"
-dependencies = [
- "actix-rt",
- "actix-service",
- "actix-utils",
- "futures-core",
- "futures-util",
- "mio",
- "num_cpus",
- "socket2",
- "tokio",
- "tracing",
-]
-
-[[package]]
-name = "actix-service"
-version = "2.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a"
-dependencies = [
- "futures-core",
- "paste",
- "pin-project-lite",
-]
-
-[[package]]
-name = "actix-utils"
-version = "3.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8"
-dependencies = [
- "local-waker",
- "pin-project-lite",
-]
-
-[[package]]
-name = "actix-web"
-version = "4.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd3cb42f9566ab176e1ef0b8b3a896529062b4efc6be0123046095914c4c1c96"
-dependencies = [
- "actix-codec",
- "actix-http",
- "actix-macros",
- "actix-router",
- "actix-rt",
- "actix-server",
- "actix-service",
- "actix-utils",
- "actix-web-codegen",
- "ahash 0.7.6",
- "bytes",
- "bytestring",
- "cfg-if",
- "cookie",
- "derive_more",
- "encoding_rs",
- "futures-core",
- "futures-util",
- "http",
- "itoa",
- "language-tags",
- "log",
- "mime",
- "once_cell",
- "pin-project-lite",
- "regex",
- "serde 1.0.163",
- "serde_json",
- "serde_urlencoded",
- "smallvec",
- "socket2",
- "time",
- "url",
-]
-
-[[package]]
-name = "actix-web-codegen"
-version = "4.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2262160a7ae29e3415554a3f1fc04c764b1540c116aa524683208078b7a75bc9"
-dependencies = [
- "actix-router",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "actix-web-codegen-const-routes"
-version = "0.1.0"
-source = "git+https://github.com/realaravinth/actix-web-codegen-const-routes?tag=0.1.0#1cc9b8dbaaef4b3634dabbf537f313200dd91bd9"
-dependencies = [
- "actix-router",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "actix-web-httpauth"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6dda62cf04bc3a9ad2ea8f314f721951cfdb4cdacec4e984d20e77c7bb170991"
-dependencies = [
- "actix-utils",
- "actix-web",
- "base64 0.13.1",
- "futures-core",
- "futures-util",
- "log",
- "pin-project-lite",
-]
-
[[package]]
name = "actix_derive"
version = "0.6.0"
@@ -245,35 +47,6 @@ dependencies = [
"syn 1.0.109",
]
-[[package]]
-name = "adler"
-version = "1.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
-
-[[package]]
-name = "ahash"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
-dependencies = [
- "getrandom",
- "once_cell",
- "version_check",
-]
-
-[[package]]
-name = "ahash"
-version = "0.8.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
-dependencies = [
- "cfg-if",
- "getrandom",
- "once_cell",
- "version_check",
-]
-
[[package]]
name = "aho-corasick"
version = "1.0.1"
@@ -283,21 +56,6 @@ dependencies = [
"memchr",
]
-[[package]]
-name = "alloc-no-stdlib"
-version = "2.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
-
-[[package]]
-name = "alloc-stdlib"
-version = "0.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
-dependencies = [
- "alloc-no-stdlib",
-]
-
[[package]]
name = "anstream"
version = "0.3.2"
@@ -511,33 +269,6 @@ dependencies = [
"generic-array",
]
-[[package]]
-name = "brotli"
-version = "3.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
-dependencies = [
- "alloc-no-stdlib",
- "alloc-stdlib",
- "brotli-decompressor",
-]
-
-[[package]]
-name = "brotli-decompressor"
-version = "2.3.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
-dependencies = [
- "alloc-no-stdlib",
- "alloc-stdlib",
-]
-
-[[package]]
-name = "bumpalo"
-version = "3.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
-
[[package]]
name = "byte-unit"
version = "4.0.19"
@@ -560,24 +291,6 @@ version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
-[[package]]
-name = "bytestring"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "238e4886760d98c4f899360c834fa93e62cf7f721ac3c2da375cbdf4b8679aae"
-dependencies = [
- "bytes",
-]
-
-[[package]]
-name = "cc"
-version = "1.0.79"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
-dependencies = [
- "jobserver",
-]
-
[[package]]
name = "cfg-if"
version = "1.0.0"
@@ -668,33 +381,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
-[[package]]
-name = "cookie"
-version = "0.16.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
-dependencies = [
- "percent-encoding",
- "time",
- "version_check",
-]
-
-[[package]]
-name = "core-foundation"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
-dependencies = [
- "core-foundation-sys",
- "libc",
-]
-
-[[package]]
-name = "core-foundation-sys"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
-
[[package]]
name = "cpufeatures"
version = "0.2.7"
@@ -710,15 +396,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "338089f42c427b86394a5ee60ff321da23a5c89c9d89514c829687b26359fcff"
-[[package]]
-name = "crc32fast"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
-dependencies = [
- "cfg-if",
-]
-
[[package]]
name = "crossbeam-channel"
version = "0.5.8"
@@ -788,10 +465,6 @@ name = "dcache"
version = "0.1.0"
dependencies = [
"actix",
- "actix-rt",
- "actix-web",
- "actix-web-codegen-const-routes",
- "actix-web-httpauth",
"anyhow",
"async-stream",
"async-trait",
@@ -808,7 +481,6 @@ dependencies = [
"openraft",
"pretty_env_logger 0.4.0",
"prost",
- "reqwest",
"serde 1.0.163",
"serde_json",
"tokio",
@@ -912,15 +584,6 @@ version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
-[[package]]
-name = "encoding_rs"
-version = "0.8.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
-dependencies = [
- "cfg-if",
-]
-
[[package]]
name = "env_logger"
version = "0.7.1"
@@ -978,37 +641,12 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
-[[package]]
-name = "flate2"
-version = "1.0.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
-dependencies = [
- "crc32fast",
- "miniz_oxide",
-]
-
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
-[[package]]
-name = "foreign-types"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
-dependencies = [
- "foreign-types-shared",
-]
-
-[[package]]
-name = "foreign-types-shared"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
-
[[package]]
name = "form_urlencoded"
version = "1.1.0"
@@ -1283,19 +921,6 @@ dependencies = [
"tokio-io-timeout",
]
-[[package]]
-name = "hyper-tls"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
-dependencies = [
- "bytes",
- "hyper",
- "native-tls",
- "tokio",
- "tokio-native-tls",
-]
-
[[package]]
name = "ident_case"
version = "1.0.1"
@@ -1352,12 +977,6 @@ dependencies = [
"windows-sys 0.48.0",
]
-[[package]]
-name = "ipnet"
-version = "2.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
-
[[package]]
name = "is-terminal"
version = "0.4.7"
@@ -1385,30 +1004,6 @@ version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
-[[package]]
-name = "jobserver"
-version = "0.1.26"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "js-sys"
-version = "0.3.63"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790"
-dependencies = [
- "wasm-bindgen",
-]
-
-[[package]]
-name = "language-tags"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
-
[[package]]
name = "lazy_static"
version = "1.4.0"
@@ -1472,24 +1067,6 @@ version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
-[[package]]
-name = "local-channel"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f303ec0e94c6c54447f84f3b0ef7af769858a9c4ef56ef2a986d3dcd4c3fc9c"
-dependencies = [
- "futures-core",
- "futures-sink",
- "futures-util",
- "local-waker",
-]
-
-[[package]]
-name = "local-waker"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1"
-
[[package]]
name = "lock_api"
version = "0.4.9"
@@ -1555,15 +1132,6 @@ version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
-[[package]]
-name = "miniz_oxide"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
-dependencies = [
- "adler",
-]
-
[[package]]
name = "mio"
version = "0.8.6"
@@ -1582,24 +1150,6 @@ version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
-[[package]]
-name = "native-tls"
-version = "0.2.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
-dependencies = [
- "lazy_static",
- "libc",
- "log",
- "openssl",
- "openssl-probe",
- "openssl-sys",
- "schannel",
- "security-framework",
- "security-framework-sys",
- "tempfile",
-]
-
[[package]]
name = "nom"
version = "5.1.3"
@@ -1746,50 +1296,6 @@ dependencies = [
"tracing-futures",
]
-[[package]]
-name = "openssl"
-version = "0.10.52"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
-dependencies = [
- "bitflags 1.3.2",
- "cfg-if",
- "foreign-types",
- "libc",
- "once_cell",
- "openssl-macros",
- "openssl-sys",
-]
-
-[[package]]
-name = "openssl-macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
-]
-
-[[package]]
-name = "openssl-probe"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
-
-[[package]]
-name = "openssl-sys"
-version = "0.9.87"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
-dependencies = [
- "cc",
- "libc",
- "pkg-config",
- "vcpkg",
-]
-
[[package]]
name = "overload"
version = "0.1.1"
@@ -1819,12 +1325,6 @@ dependencies = [
"windows-sys 0.45.0",
]
-[[package]]
-name = "paste"
-version = "1.0.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
-
[[package]]
name = "percent-encoding"
version = "2.2.0"
@@ -1873,12 +1373,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
-[[package]]
-name = "pkg-config"
-version = "0.3.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
-
[[package]]
name = "ppv-lite86"
version = "0.2.17"
@@ -2111,43 +1605,6 @@ version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
-[[package]]
-name = "reqwest"
-version = "0.11.18"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
-dependencies = [
- "base64 0.21.1",
- "bytes",
- "encoding_rs",
- "futures-core",
- "futures-util",
- "h2",
- "http",
- "http-body",
- "hyper",
- "hyper-tls",
- "ipnet",
- "js-sys",
- "log",
- "mime",
- "native-tls",
- "once_cell",
- "percent-encoding",
- "pin-project-lite",
- "serde 1.0.163",
- "serde_json",
- "serde_urlencoded",
- "tokio",
- "tokio-native-tls",
- "tower-service",
- "url",
- "wasm-bindgen",
- "wasm-bindgen-futures",
- "web-sys",
- "winreg",
-]
-
[[package]]
name = "rust-ini"
version = "0.13.0"
@@ -2202,15 +1659,6 @@ version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
-[[package]]
-name = "schannel"
-version = "0.1.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
-dependencies = [
- "windows-sys 0.42.0",
-]
-
[[package]]
name = "scheduled-thread-pool"
version = "0.2.7"
@@ -2226,29 +1674,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
-[[package]]
-name = "security-framework"
-version = "2.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
-dependencies = [
- "bitflags 1.3.2",
- "core-foundation",
- "core-foundation-sys",
- "libc",
- "security-framework-sys",
-]
-
-[[package]]
-name = "security-framework-sys"
-version = "2.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
-dependencies = [
- "core-foundation-sys",
- "libc",
-]
-
[[package]]
name = "semver"
version = "1.0.17"
@@ -2304,29 +1729,6 @@ dependencies = [
"serde 1.0.163",
]
-[[package]]
-name = "serde_urlencoded"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
-dependencies = [
- "form_urlencoded",
- "itoa",
- "ryu",
- "serde 1.0.163",
-]
-
-[[package]]
-name = "sha1"
-version = "0.10.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
-dependencies = [
- "cfg-if",
- "cpufeatures",
- "digest",
-]
-
[[package]]
name = "sha1_smol"
version = "1.0.0"
@@ -2479,33 +1881,6 @@ dependencies = [
"once_cell",
]
-[[package]]
-name = "time"
-version = "0.3.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc"
-dependencies = [
- "itoa",
- "serde 1.0.163",
- "time-core",
- "time-macros",
-]
-
-[[package]]
-name = "time-core"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
-
-[[package]]
-name = "time-macros"
-version = "0.2.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
-dependencies = [
- "time-core",
-]
-
[[package]]
name = "tinyvec"
version = "1.6.0"
@@ -2561,16 +1936,6 @@ dependencies = [
"syn 2.0.16",
]
-[[package]]
-name = "tokio-native-tls"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
-dependencies = [
- "native-tls",
- "tokio",
-]
-
[[package]]
name = "tokio-retry"
version = "0.3.0"
@@ -2833,12 +2198,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
-[[package]]
-name = "vcpkg"
-version = "0.2.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
-
[[package]]
name = "version_check"
version = "0.9.4"
@@ -2861,82 +2220,6 @@ version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
-[[package]]
-name = "wasm-bindgen"
-version = "0.2.86"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
-dependencies = [
- "cfg-if",
- "wasm-bindgen-macro",
-]
-
-[[package]]
-name = "wasm-bindgen-backend"
-version = "0.2.86"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
-dependencies = [
- "bumpalo",
- "log",
- "once_cell",
- "proc-macro2",
- "quote",
- "syn 2.0.16",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-futures"
-version = "0.4.36"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e"
-dependencies = [
- "cfg-if",
- "js-sys",
- "wasm-bindgen",
- "web-sys",
-]
-
-[[package]]
-name = "wasm-bindgen-macro"
-version = "0.2.86"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
-dependencies = [
- "quote",
- "wasm-bindgen-macro-support",
-]
-
-[[package]]
-name = "wasm-bindgen-macro-support"
-version = "0.2.86"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.16",
- "wasm-bindgen-backend",
- "wasm-bindgen-shared",
-]
-
-[[package]]
-name = "wasm-bindgen-shared"
-version = "0.2.86"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
-
-[[package]]
-name = "web-sys"
-version = "0.3.63"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2"
-dependencies = [
- "js-sys",
- "wasm-bindgen",
-]
-
[[package]]
name = "which"
version = "4.4.2"
@@ -2980,21 +2263,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-[[package]]
-name = "windows-sys"
-version = "0.42.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
-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-sys"
version = "0.45.0"
@@ -3193,15 +2461,6 @@ version = "0.52.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
-[[package]]
-name = "winreg"
-version = "0.10.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
-dependencies = [
- "winapi",
-]
-
[[package]]
name = "yaml-rust"
version = "0.4.5"
@@ -3210,33 +2469,3 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
dependencies = [
"linked-hash-map",
]
-
-[[package]]
-name = "zstd"
-version = "0.12.3+zstd.1.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
-dependencies = [
- "zstd-safe",
-]
-
-[[package]]
-name = "zstd-safe"
-version = "6.0.5+zstd.1.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
-dependencies = [
- "libc",
- "zstd-sys",
-]
-
-[[package]]
-name = "zstd-sys"
-version = "2.0.8+zstd.1.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
-dependencies = [
- "cc",
- "libc",
- "pkg-config",
-]
diff --git a/Cargo.toml b/Cargo.toml
index 033f0b2..86d9ec2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -16,21 +16,17 @@ tracing = { version = "0.1.37", features = ["log"] }
serde_json = "1.0.96"
serde = { version = "1.0.163", features = ["derive"] }
byteorder = "1.4.3"
-actix-web = "4"
-actix-web-httpauth = "0.8.0"
futures-util = { version = "0.3.17", default-features = false, features = ["std"] }
lazy_static = "1.4.0"
pretty_env_logger = "0.4.0"
uuid = { version = "1", features = ["v4"] }
-actix-web-codegen-const-routes = { version = "0.1.0", tag = "0.1.0", git = "https://github.com/realaravinth/actix-web-codegen-const-routes" }
derive_builder = "0.11.2"
config = { version = "0.11", features = ["toml"] }
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"] }
-reqwest = { version = "0.11.9", features = ["json"] }
-tokio = { version = "1.0", default-features = false, features = ["sync"] }
+tokio = { version = "1.0", default-features = false, features = ["sync", "macros", "rt-multi-thread"] }
tracing-subscriber = { version = "0.3.0", features = ["env-filter"] }
actix = "0.13.0"
tonic = { version = "0.10.2", features = ["transport", "channel"] }
@@ -44,7 +40,6 @@ serde_json = "1"
tonic-build = "0.10.2"
[dev-dependencies]
-actix-rt = "2.7.0"
base64 = "0.13.0"
anyhow = "1.0.63"
maplit = "1.0.2"
diff --git a/src/app.rs b/src/app.rs
index e5fec4a..99d704d 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -17,7 +17,6 @@
*/
use std::collections::BTreeMap;
use std::sync::Arc;
-use std::time::Duration;
use openraft::error::RaftError;
use openraft::BasicNode;
diff --git a/src/bin/main.rs b/src/bin/main.rs
index 4059611..11038e7 100644
--- a/src/bin/main.rs
+++ b/src/bin/main.rs
@@ -16,11 +16,7 @@
* along with this program. If not, see .
*/
use clap::Parser;
-use dcache::network::raft_network_impl::DcacheNetwork;
use dcache::start_example_raft_node;
-use dcache::store::DcacheStore;
-use dcache::DcacheTypeConfig;
-use openraft::Raft;
use tracing_subscriber::EnvFilter;
//pub type DcacheRaft = Raft;
@@ -44,7 +40,7 @@ pub struct Opt {
pub cluster_size: usize,
}
-#[actix_web::main]
+#[tokio::main]
async fn main() -> std::io::Result<()> {
// Setup the logger
tracing_subscriber::fmt()
diff --git a/src/lib.rs b/src/lib.rs
index 343cc4a..fbb574d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -20,31 +20,25 @@
use std::io::Cursor;
use std::sync::Arc;
-use actix_web::middleware;
-use actix_web::middleware::Logger;
-use actix_web::web::Data;
-use actix_web::App;
-use actix_web::HttpServer;
use openraft::storage::Adaptor;
use openraft::BasicNode;
use openraft::Config;
use openraft::Raft;
+use tonic::transport::Server;
use crate::app::DcacheApp;
-use crate::network::api;
-use crate::network::management;
-use crate::network::raft;
use crate::network::raft_network_impl::DcacheNetwork;
+use crate::protobuf::dcache::dcache_service_client::DcacheServiceClient;
+use crate::protobuf::dcache::dcache_service_server::DcacheServiceServer;
+use crate::protobuf::dcache::Learner;
use crate::store::DcacheRequest;
use crate::store::DcacheResponse;
use crate::store::DcacheStore;
-use tonic::transport::Server;
pub mod app;
pub mod network;
-mod server;
+mod protobuf;
pub mod store;
-pub mod types;
pub type DcacheNodeId = u64;
@@ -101,7 +95,6 @@ pub async fn start_example_raft_node(
let store = Arc::new(DcacheStore::new(salt));
let (log_store, state_machine) = Adaptor::new(store.clone());
- let client = reqwest::Client::new();
// Create the network layer that will connect and communicate the raft instances and
// will be used in conjunction with the store created above.
@@ -109,7 +102,7 @@ pub async fn start_example_raft_node(
let (manager_tx, manager_rx) = tokio::sync::mpsc::channel(1000);
// let health = Arc::new(crate::network::raft_network_impl::HealthLedger::new(manager_tx));
// let network = Arc::new(DcacheNetwork::new(health));
- let network = Arc::new(DcacheNetwork::new(manager_tx, client.clone()));
+ let network = Arc::new(DcacheNetwork::new(manager_tx));
// Create a local raft instance.
let raft = Raft::new(
@@ -159,43 +152,15 @@ pub async fn start_example_raft_node(
config,
network,
};
- let app = Data::new(app);
- let dcache_service = crate::server::MyDcacheImpl::new(app.clone());
+ let app = Arc::new(app);
+ let dcache_service = protobuf::MyDcacheImpl::new(app.clone());
if introducer_addr == http_addr {
app.init().await.unwrap();
}
let app_copy = app.clone();
- // Start the actix-web server.
- // let server = HttpServer::new(move || {
- // App::new()
- // .wrap(Logger::default())
- // .wrap(Logger::new("%a %{User-Agent}i"))
- // .wrap(middleware::Compress::default())
- // .app_data(app.clone())
- // // raft internal RPC
- // .service(raft::append)
- // .service(raft::snapshot)
- // .service(raft::vote)
- // // admin API
- // .service(management::init)
- // .service(management::add_learner)
- // .service(management::change_membership)
- // .service(management::metrics)
- // // application API
- // .service(api::write)
- // .service(api::state)
- // .service(api::read)
- // .service(api::pipeline_read)
- // .service(api::pipeline_write)
- // // .service(api::consistent_read)
- // });
- //
- // let x = server.bind(&http_addr)?;
- // let server_fut = tokio::spawn(x.run());
- use crate::server::dcache::dcache_service_server::DcacheServiceServer;
let svc = DcacheServiceServer::new(dcache_service);
let x = Server::builder()
@@ -205,19 +170,7 @@ pub async fn start_example_raft_node(
tokio::time::sleep(std::time::Duration::new(3, 0)).await;
- // let req: (DcacheNodeId, String) = (node_id, http_addr);
- // let c = reqwest::Client::new();
- // c.post(format!("http://{}/add-learner", introducer_addr))
- // .json(&req)
- // .send()
- // .await
- // .unwrap();
- // let health_job = tokio::spawn(DcacheApp::health_job(app_copy));
-
let url = format!("http://{}", introducer_addr);
- use crate::server::dcache::dcache_service_client::DcacheServiceClient;
- use crate::server::dcache::Learner;
- use crate::server::dcache::RaftRequest;
let mut client = DcacheServiceClient::connect(url).await.unwrap();
client
.add_learner(Learner {
@@ -231,6 +184,5 @@ pub async fn start_example_raft_node(
crate::network::management::HealthMetrics::spawn(app_copy, 5, manager_rx).await;
server_fut.await?.unwrap();
health_metrics_handle.abort();
- // health_job.abort();
Ok(())
}
diff --git a/src/network/api.rs b/src/network/api.rs
deleted file mode 100644
index 32c7ea3..0000000
--- a/src/network/api.rs
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * mCaptcha - A proof of work based DoS protection system
- * Copyright © 2023 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 actix_web::get;
-use actix_web::post;
-use actix_web::web;
-use actix_web::web::Data;
-use actix_web::Responder;
-use libmcaptcha::cache::messages::{CachedPoWConfig, RetrivePoW, VerifyCaptchaResult};
-use libmcaptcha::master::messages::GetInternalData;
-use serde::Deserialize;
-use serde::Serialize;
-use web::Json;
-
-use crate::app::DcacheApp;
-use crate::store::DcacheRequest;
-
-#[post("/write")]
-pub async fn write(
- app: Data,
- req: Json,
-) -> actix_web::Result {
- let response = app.raft.client_write(req.0).await;
- Ok(Json(response))
-}
-
-#[get("/state")]
-pub async fn state(app: Data) -> actix_web::Result {
- let sm = app.store.state_machine.read().await;
- let resp = sm
- .data
- .master
- .send(GetInternalData)
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
- Ok(Json(resp))
-}
-
-#[derive(Serialize, Deserialize, Clone, Debug)]
-pub enum ReadRequest {
- RetrivePoW(RetrivePoW), //Reader
- VerifyCaptchaResult(VerifyCaptchaResult), //Reader
-}
-
-#[derive(Serialize, Deserialize, Debug, Clone)]
-pub enum ReadResponse {
- VerifyCaptchaResult(bool),
- RetrivePoW(Option),
-}
-
-#[post("/read")]
-pub async fn read(
- app: Data,
- req: Json,
-) -> actix_web::Result {
- let sm = app.store.state_machine.read().await;
-
- let req = req.into_inner();
- let res = match req {
- ReadRequest::RetrivePoW(msg) => {
- let cache_res = sm
- .data
- .cache
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
- ReadResponse::RetrivePoW(cache_res)
- }
- ReadRequest::VerifyCaptchaResult(msg) => {
- let cache_res = sm
- .data
- .cache
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
- ReadResponse::VerifyCaptchaResult(cache_res)
- }
- };
- Ok(Json(res))
-}
-
-#[post("/pipeline/read")]
-pub async fn pipeline_read(
- app: Data,
- requests: Json>,
-) -> actix_web::Result {
- let requests = requests.into_inner();
- let mut responses = Vec::with_capacity(requests.len());
- let sm = app.store.state_machine.read().await;
- for request in requests {
- let res = match request {
- ReadRequest::RetrivePoW(msg) => {
- let cache_res = sm
- .data
- .cache
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
- ReadResponse::RetrivePoW(cache_res)
- }
- ReadRequest::VerifyCaptchaResult(msg) => {
- let cache_res = sm
- .data
- .cache
- .send(msg.clone())
- .await
- .unwrap()
- .await
- .unwrap()
- .unwrap();
- ReadResponse::VerifyCaptchaResult(cache_res)
- }
- };
-
- responses.push(res);
- }
- Ok(Json(responses))
-}
-
-#[post("/pipeline/write")]
-pub async fn pipeline_write(
- app: Data,
- requests: Json>,
-) -> actix_web::Result {
- let mut responses = Vec::with_capacity(requests.len());
- let mut requests = requests.into_inner();
- for req in requests.drain(0..) {
- responses.push(app.raft.client_write(req).await);
- }
- Ok(Json(responses))
-}
diff --git a/src/network/management.rs b/src/network/management.rs
index d3616a7..16b19a9 100644
--- a/src/network/management.rs
+++ b/src/network/management.rs
@@ -15,66 +15,15 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-use std::collections::BTreeMap;
-use std::collections::BTreeSet;
use std::collections::HashMap;
+use std::sync::Arc;
-use actix_web::get;
-use actix_web::post;
-use actix_web::web;
-use actix_web::web::Data;
-use actix_web::Responder;
-use openraft::error::Infallible;
-use openraft::BasicNode;
-use openraft::RaftMetrics;
-use web::Json;
+//use actix_web::web;
+//use actix_web::web::Data;
use crate::app::DcacheApp;
use crate::DcacheNodeId;
-#[post("/add-learner")]
-pub async fn add_learner(
- app: Data,
- req: Json<(DcacheNodeId, String)>,
-) -> actix_web::Result {
- let node_id = req.0 .0;
- let node = BasicNode {
- addr: req.0 .1.clone(),
- };
- let res = app.raft.add_learner(node_id, node, true).await;
-
- Ok(Json(res))
-}
-
-#[post("/change-membership")]
-pub async fn change_membership(
- app: Data,
- req: Json>,
-) -> actix_web::Result {
- let res = app.raft.change_membership(req.0, false).await;
- Ok(Json(res))
-}
-
-#[post("/init")]
-pub async fn init(app: Data) -> actix_web::Result {
- let mut nodes = BTreeMap::new();
- nodes.insert(
- app.id,
- BasicNode {
- addr: app.addr.clone(),
- },
- );
- let res = app.raft.initialize(nodes).await;
- Ok(Json(res))
-}
-
-#[get("/metrics")]
-pub async fn metrics(app: Data) -> actix_web::Result {
- let metrics = app.raft.metrics().borrow().clone();
- let res: Result, Infallible> = Ok(metrics);
- Ok(Json(res))
-}
-
use tokio::sync::mpsc;
#[derive(Debug)]
@@ -87,7 +36,7 @@ pub struct HealthMetrics;
impl HealthMetrics {
pub async fn spawn(
- app: Data,
+ app: Arc,
threshold: usize,
mut rx: mpsc::Receiver,
) -> tokio::task::JoinHandle<()> {
@@ -114,7 +63,7 @@ impl HealthMetrics {
new_nodes.push(*node.0);
}
- let res =
+ let _res =
app.raft.change_membership(new_nodes, false).await.unwrap();
}
} else {
@@ -128,20 +77,3 @@ impl HealthMetrics {
tokio::spawn(fut)
}
}
-
-//#[get("/self/remove/{id}")]
-//pub async fn remove_node(app: Data, id: web::Path) -> actix_web::Result {
-// let cluster_metrics = app.raft.metrics().borrow().clone();
-// let remote_id: u64 = 3;
-// let mut new_nodes: Vec = Vec::new();
-// for node in cluster_metrics.membership_config.nodes() {
-// if *node.0 == remote_id {
-// continue;
-// }
-//
-// new_nodes.push(*node.0);
-// }
-//
-// let res = app.raft.change_membership(new_nodes, false).await;
-// Ok(Json(res))
-//}
diff --git a/src/network/mod.rs b/src/network/mod.rs
index 555eefa..f20ed75 100644
--- a/src/network/mod.rs
+++ b/src/network/mod.rs
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
-pub mod api;
+//pub mod api;
pub mod management;
-pub mod raft;
+//pub mod raft;
pub mod raft_network_impl;
diff --git a/src/network/raft.rs b/src/network/raft.rs
deleted file mode 100644
index 2ac62d6..0000000
--- a/src/network/raft.rs
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * mCaptcha - A proof of work based DoS protection system
- * Copyright © 2023 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 actix_web::post;
-use actix_web::web;
-use actix_web::web::Data;
-use actix_web::Responder;
-use openraft::raft::AppendEntriesRequest;
-use openraft::raft::InstallSnapshotRequest;
-use openraft::raft::VoteRequest;
-use web::Json;
-
-use crate::app::DcacheApp;
-use crate::DcacheNodeId;
-use crate::DcacheTypeConfig;
-
-// --- Raft communication
-
-#[post("/raft-vote")]
-pub async fn vote(
- app: Data,
- req: Json>,
-) -> actix_web::Result {
- let res = app.raft.vote(req.0).await;
- Ok(Json(res))
-}
-
-#[post("/raft-append")]
-pub async fn append(
- app: Data,
- req: Json>,
-) -> actix_web::Result {
- let res = app.raft.append_entries(req.0).await;
- Ok(Json(res))
-}
-
-#[post("/raft-snapshot")]
-pub async fn snapshot(
- app: Data,
- req: Json>,
-) -> actix_web::Result {
- let res = app.raft.install_snapshot(req.0).await;
- Ok(Json(res))
-}
diff --git a/src/network/raft_network_impl.rs b/src/network/raft_network_impl.rs
index fd480b8..7e7e093 100644
--- a/src/network/raft_network_impl.rs
+++ b/src/network/raft_network_impl.rs
@@ -1,6 +1,3 @@
-use std::collections::BTreeMap;
-use std::collections::BTreeSet;
-use std::collections::HashSet;
/*
* mCaptcha - A proof of work based DoS protection system
* Copyright © 2023 Aravinth Manivannan
@@ -18,18 +15,13 @@ use std::collections::HashSet;
* 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::Arc;
-use std::sync::RwLock;
-use std::time::Duration;
-use std::time::Instant;
use async_trait::async_trait;
use openraft::error::InstallSnapshotError;
use openraft::error::NetworkError;
use openraft::error::RPCError;
use openraft::error::RaftError;
-use openraft::error::RemoteError;
use openraft::raft::AppendEntriesRequest;
use openraft::raft::AppendEntriesResponse;
use openraft::raft::InstallSnapshotRequest;
@@ -39,24 +31,20 @@ use openraft::raft::VoteResponse;
use openraft::BasicNode;
use openraft::RaftNetwork;
use openraft::RaftNetworkFactory;
-use reqwest::Client;
use serde::de::DeserializeOwned;
use serde::Serialize;
use tokio::sync::mpsc::Sender;
-use tonic::transport::channel::Channel;
use super::management::HealthStatus;
-use super::raft::snapshot;
use crate::DcacheNodeId;
use crate::DcacheTypeConfig;
-use crate::server::dcache::dcache_service_client::DcacheServiceClient;
-use crate::server::dcache::{RaftReply, RaftRequest};
+use crate::protobuf::dcache::dcache_service_client::DcacheServiceClient;
+use crate::protobuf::dcache::RaftRequest;
#[derive(Clone)]
pub struct DcacheNetwork {
pub signal: Sender,
- pub client: Client,
}
pub enum RPCType {
@@ -66,14 +54,13 @@ pub enum RPCType {
}
impl DcacheNetwork {
- pub fn new(signal: Sender, client: Client) -> Self {
- Self { signal, client }
+ pub fn new(signal: Sender) -> Self {
+ Self { signal }
}
pub async fn send_rpc(
&self,
target: DcacheNodeId,
target_node: &BasicNode,
- uri: &str,
req: Req,
event: RPCType,
) -> Result>
@@ -84,7 +71,6 @@ impl DcacheNetwork {
{
let addr = &target_node.addr;
- //let url = format!("http://{}/{}", addr, uri);
let url = format!("http://{}", addr);
let mut client = DcacheServiceClient::connect(url).await.unwrap();
@@ -130,33 +116,6 @@ impl DcacheNetwork {
Err(RPCError::Network(NetworkError::new(&e)))
}
}
-
- // tracing::debug!("send_rpc to url: {}", url);
- //
- // let resp = match self.client.post(url).json(&req).send().await {
- // Ok(resp) => Ok(resp),
- // Err(e) => {
- // self.signal.send(HealthStatus::Down(target)).await;
- // Err(RPCError::Network(NetworkError::new(&e)))
- // }
- // }?;
- //
- // tracing::debug!("client.post() is sent");
- //
- // let res: Result = resp
- // .json()
- // .await
- // .map_err(|e| RPCError::Network(NetworkError::new(&e)))?;
- //
- // let res = res.map_err(|e| RPCError::RemoteError(RemoteError::new(target, e)));
- // if res.is_ok() {
- // let signal2 = self.signal.clone();
- // let fut = async move {
- // let _ = signal2.send(HealthStatus::Healthy(target)).await;
- // };
- // tokio::spawn(fut);
- // }
- // res
}
}
@@ -191,13 +150,7 @@ impl RaftNetwork for DcacheNetworkConnection {
RPCError>,
> {
self.owner
- .send_rpc(
- self.target,
- &self.target_node,
- "raft-append",
- req,
- RPCType::Append,
- )
+ .send_rpc(self.target, &self.target_node, req, RPCType::Append)
.await
}
@@ -209,13 +162,7 @@ impl RaftNetwork for DcacheNetworkConnection {
RPCError>,
> {
self.owner
- .send_rpc(
- self.target,
- &self.target_node,
- "raft-snapshot",
- req,
- RPCType::Append,
- )
+ .send_rpc(self.target, &self.target_node, req, RPCType::Append)
.await
}
@@ -227,13 +174,7 @@ impl RaftNetwork for DcacheNetworkConnection {
RPCError>,
> {
self.owner
- .send_rpc(
- self.target,
- &self.target_node,
- "raft-vote",
- req,
- RPCType::Vote,
- )
+ .send_rpc(self.target, &self.target_node, req, RPCType::Vote)
.await
}
}
diff --git a/src/server.rs b/src/protobuf.rs
similarity index 65%
rename from src/server.rs
rename to src/protobuf.rs
index f8b2d9d..d0ae3e2 100644
--- a/src/server.rs
+++ b/src/protobuf.rs
@@ -1,7 +1,9 @@
-use actix_web::web::Data;
+use std::sync::Arc;
+
use openraft::BasicNode;
-use tokio_stream::StreamExt;
-use tonic::{transport::Server, Request, Response, Status};
+use serde::de::DeserializeOwned;
+use serde::Serialize;
+use tonic::Response;
use dcache::dcache_service_server::DcacheService;
use dcache::{Learner, RaftReply, RaftRequest};
@@ -14,11 +16,11 @@ pub mod dcache {
#[derive(Clone)]
pub struct MyDcacheImpl {
- app: Data,
+ app: Arc,
}
impl MyDcacheImpl {
- pub fn new(app: Data) -> Self {
+ pub fn new(app: Arc) -> Self {
Self { app }
}
}
@@ -29,10 +31,6 @@ impl DcacheService for MyDcacheImpl {
&self,
request: tonic::Request,
) -> std::result::Result, tonic::Status> {
- //let req = request.into_inner();
- //let req = serde_json::from_str(&req.data).unwrap();
- //let res = self.app.raft.client_write(req).await;
- //Ok(Response::new(res.into()))
let req = request.into_inner();
let node_id = req.id;
let node = BasicNode {
@@ -54,7 +52,7 @@ impl DcacheService for MyDcacheImpl {
/// / Forward a request to other
async fn forward(
&self,
- request: tonic::Request,
+ _request: tonic::Request,
) -> std::result::Result, tonic::Status> {
unimplemented!();
}
@@ -86,3 +84,44 @@ impl DcacheService for MyDcacheImpl {
Ok(Response::new(res.into()))
}
}
+
+impl From for Result
+where
+ T: DeserializeOwned,
+ E: DeserializeOwned,
+{
+ fn from(msg: RaftReply) -> Self {
+ if !msg.data.is_empty() {
+ let resp: T = serde_json::from_str(&msg.data).expect("fail to deserialize");
+ Ok(resp)
+ } else {
+ let err: E = serde_json::from_str(&msg.error).expect("fail to deserialize");
+ Err(err)
+ }
+ }
+}
+
+impl From> for RaftReply
+where
+ T: Serialize,
+ E: Serialize,
+{
+ fn from(r: Result) -> Self {
+ match r {
+ Ok(x) => {
+ let data = serde_json::to_string(&x).expect("fail to serialize");
+ RaftReply {
+ data,
+ error: Default::default(),
+ }
+ }
+ Err(e) => {
+ let error = serde_json::to_string(&e).expect("fail to serialize");
+ RaftReply {
+ data: Default::default(),
+ error,
+ }
+ }
+ }
+ }
+}
diff --git a/src/store/mod.rs b/src/store/mod.rs
index 6737a4e..b7be3c9 100644
--- a/src/store/mod.rs
+++ b/src/store/mod.rs
@@ -23,7 +23,6 @@ use std::ops::RangeBounds;
use std::sync::Arc;
use std::sync::Mutex;
-use libmcaptcha::cache::messages::CachedPoWConfig;
use libmcaptcha::AddVisitorResult;
use libmcaptcha::MCaptcha;
use openraft::async_trait::async_trait;
@@ -48,15 +47,11 @@ use openraft::Vote;
use serde::Deserialize;
use serde::Serialize;
use tokio::sync::RwLock;
-use url::quirks::set_pathname;
use crate::DcacheNodeId;
use crate::DcacheTypeConfig;
-use actix::prelude::*;
-use libmcaptcha::cache::messages::{
- CachePoW, CacheResult, DeleteCaptchaResult, DeletePoW, RetrivePoW, VerifyCaptchaResult,
-};
+use libmcaptcha::cache::messages::{CachePoW, CacheResult, DeleteCaptchaResult, DeletePoW};
use libmcaptcha::master::messages::{
AddSite as AddCaptcha, AddVisitor, GetInternalData, RemoveCaptcha, Rename as RenameCaptcha,
SetInternalData,
@@ -124,7 +119,7 @@ impl PersistableStateMachine {
.unwrap()
.unwrap();
Self {
- last_applied_log: m.last_applied_log.clone(),
+ last_applied_log: m.last_applied_log,
last_membership: m.last_membership.clone(),
data: internal_data,
}
diff --git a/src/types.rs b/src/types.rs
deleted file mode 100644
index 68d6e0a..0000000
--- a/src/types.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-use std::sync::Arc;
-
-use openraft::raft::AppendEntriesRequest;
-use openraft::raft::InstallSnapshotRequest;
-use openraft::raft::VoteRequest;
-use serde::de::DeserializeOwned;
-use serde::Deserialize;
-use serde::Serialize;
-
-use crate::server::dcache::{RaftReply, RaftRequest};
-use crate::DcacheNodeId;
-
-impl From for Result
-where
- T: DeserializeOwned,
- E: DeserializeOwned,
-{
- fn from(msg: RaftReply) -> Self {
- if !msg.data.is_empty() {
- let resp: T = serde_json::from_str(&msg.data).expect("fail to deserialize");
- Ok(resp)
- } else {
- let err: E = serde_json::from_str(&msg.error).expect("fail to deserialize");
- Err(err)
- }
- }
-}
-
-impl From> for RaftReply
-where
- T: Serialize,
- E: Serialize,
-{
- fn from(r: Result) -> Self {
- match r {
- Ok(x) => {
- let data = serde_json::to_string(&x).expect("fail to serialize");
- RaftReply {
- data,
- error: Default::default(),
- }
- }
- Err(e) => {
- let error = serde_json::to_string(&e).expect("fail to serialize");
- RaftReply {
- data: Default::default(),
- error,
- }
- }
- }
- }
-}