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, - } - } - } - } -}