From d209e67b56a4ade5c3385665e080aa143d7f41e3 Mon Sep 17 00:00:00 2001 From: ActivePeter <1020401660@qq.com> Date: Sun, 3 Nov 2024 22:43:56 +0800 Subject: [PATCH 01/26] f --- Cargo.lock | 560 +++++++++++++++++- Cargo.toml | 44 +- scripts/build/1.2build_apps.py | 5 +- src/general/network/proto_src/data.proto | 59 -- src/main/Cargo.toml | 87 +++ build.rs => src/main/build.rs | 0 src/{ => main/src}/apis.rs | 0 src/{ => main/src}/cmd_arg.rs | 0 src/{ => main/src}/config.rs | 0 src/{ => main/src}/general/kv_interface.rs | 0 .../general/m_appmeta_manager/fn_event.rs | 0 .../src}/general/m_appmeta_manager/http.rs | 0 .../src}/general/m_appmeta_manager/mod.rs | 42 +- .../src}/general/m_appmeta_manager/v_os.rs | 0 src/{ => main/src}/general/m_data_general.rs | 337 ++++++++--- .../src}/general/m_kv_store_engine.rs | 179 ++++-- .../src}/general/m_metric_publisher.rs | 0 src/{ => main/src}/general/m_os/mod.rs | 0 src/{ => main/src}/general/m_os/zip.rs | 0 src/{ => main/src}/general/mod.rs | 0 .../src}/general/network/http_handler.rs | 0 src/{ => main/src}/general/network/m_p2p.rs | 0 .../src}/general/network/m_p2p_quic.rs | 0 src/{ => main/src}/general/network/mod.rs | 1 + .../src}/general/network/msg_pack.rs | 8 +- src/main/src/general/network/proto_ext.rs | 14 + .../src/general/network/proto_src/data.proto | 97 +++ .../src}/general/network/proto_src/kv.proto | 0 .../general/network/proto_src/metric.proto | 0 .../src}/general/network/proto_src/raft.proto | 0 .../network/proto_src/remote_sys.proto | 0 .../src}/general/network/proto_src/sche.proto | 0 .../src}/general/network/rpc_model.rs | 0 src/{ => main/src}/main.rs | 0 src/{ => main/src}/master/m_data_master.rs | 30 +- src/{ => main/src}/master/m_http_handler.rs | 24 - src/{ => main/src}/master/m_master.rs | 0 src/{ => main/src}/master/m_master_kv.rs | 0 .../src}/master/m_metric_observor.rs | 0 src/{ => main/src}/master/mod.rs | 0 src/{ => main/src}/module_state_trans.rs | 0 .../src}/modules_global_bridge/mod.rs | 0 .../modules_global_bridge/process_func.rs | 0 src/{ => main/src}/result.rs | 3 + src/{ => main/src}/sys.rs | 0 src/{ => main/src}/util.rs | 0 .../src}/worker/func/fn_event/kv_event.rs | 0 .../src}/worker/func/fn_event/mod.rs | 0 .../src}/worker/func/m_instance_manager.rs | 0 src/{ => main/src}/worker/func/mod.rs | 0 src/{ => main/src}/worker/func/owned/mod.rs | 0 src/{ => main/src}/worker/func/owned/wasm.rs | 0 src/{ => main/src}/worker/func/shared/java.rs | 0 src/{ => main/src}/worker/func/shared/mod.rs | 0 .../src}/worker/func/shared/process.rs | 0 .../shared/process_instance_man_related.rs | 0 .../src}/worker/func/shared/process_rpc.rs | 0 .../func/shared/process_rpc_proto.proto | 0 .../src}/worker/func/wasm_host_funcs/fs.rs | 0 .../src}/worker/func/wasm_host_funcs/kv.rs | 0 .../src}/worker/func/wasm_host_funcs/mod.rs | 0 .../worker/func/wasm_host_funcs/result.rs | 0 src/{ => main/src}/worker/m_data_follower.rs | 20 +- src/{ => main/src}/worker/m_executor.rs | 0 src/{ => main/src}/worker/m_http_handler.rs | 0 src/{ => main/src}/worker/m_kv_user_client.rs | 0 src/{ => main/src}/worker/m_worker.rs | 0 src/{ => main/src}/worker/mod.rs | 0 src/s3_server | 1 + 69 files changed, 1183 insertions(+), 328 deletions(-) delete mode 100644 src/general/network/proto_src/data.proto create mode 100644 src/main/Cargo.toml rename build.rs => src/main/build.rs (100%) rename src/{ => main/src}/apis.rs (100%) rename src/{ => main/src}/cmd_arg.rs (100%) rename src/{ => main/src}/config.rs (100%) rename src/{ => main/src}/general/kv_interface.rs (100%) rename src/{ => main/src}/general/m_appmeta_manager/fn_event.rs (100%) rename src/{ => main/src}/general/m_appmeta_manager/http.rs (100%) rename src/{ => main/src}/general/m_appmeta_manager/mod.rs (96%) rename src/{ => main/src}/general/m_appmeta_manager/v_os.rs (100%) rename src/{ => main/src}/general/m_data_general.rs (54%) rename src/{ => main/src}/general/m_kv_store_engine.rs (52%) rename src/{ => main/src}/general/m_metric_publisher.rs (100%) rename src/{ => main/src}/general/m_os/mod.rs (100%) rename src/{ => main/src}/general/m_os/zip.rs (100%) rename src/{ => main/src}/general/mod.rs (100%) rename src/{ => main/src}/general/network/http_handler.rs (100%) rename src/{ => main/src}/general/network/m_p2p.rs (100%) rename src/{ => main/src}/general/network/m_p2p_quic.rs (100%) rename src/{ => main/src}/general/network/mod.rs (96%) rename src/{ => main/src}/general/network/msg_pack.rs (95%) create mode 100644 src/main/src/general/network/proto_ext.rs create mode 100644 src/main/src/general/network/proto_src/data.proto rename src/{ => main/src}/general/network/proto_src/kv.proto (100%) rename src/{ => main/src}/general/network/proto_src/metric.proto (100%) rename src/{ => main/src}/general/network/proto_src/raft.proto (100%) rename src/{ => main/src}/general/network/proto_src/remote_sys.proto (100%) rename src/{ => main/src}/general/network/proto_src/sche.proto (100%) rename src/{ => main/src}/general/network/rpc_model.rs (100%) rename src/{ => main/src}/main.rs (100%) rename src/{ => main/src}/master/m_data_master.rs (89%) rename src/{ => main/src}/master/m_http_handler.rs (87%) rename src/{ => main/src}/master/m_master.rs (100%) rename src/{ => main/src}/master/m_master_kv.rs (100%) rename src/{ => main/src}/master/m_metric_observor.rs (100%) rename src/{ => main/src}/master/mod.rs (100%) rename src/{ => main/src}/module_state_trans.rs (100%) rename src/{ => main/src}/modules_global_bridge/mod.rs (100%) rename src/{ => main/src}/modules_global_bridge/process_func.rs (100%) rename src/{ => main/src}/result.rs (99%) rename src/{ => main/src}/sys.rs (100%) rename src/{ => main/src}/util.rs (100%) rename src/{ => main/src}/worker/func/fn_event/kv_event.rs (100%) rename src/{ => main/src}/worker/func/fn_event/mod.rs (100%) rename src/{ => main/src}/worker/func/m_instance_manager.rs (100%) rename src/{ => main/src}/worker/func/mod.rs (100%) rename src/{ => main/src}/worker/func/owned/mod.rs (100%) rename src/{ => main/src}/worker/func/owned/wasm.rs (100%) rename src/{ => main/src}/worker/func/shared/java.rs (100%) rename src/{ => main/src}/worker/func/shared/mod.rs (100%) rename src/{ => main/src}/worker/func/shared/process.rs (100%) rename src/{ => main/src}/worker/func/shared/process_instance_man_related.rs (100%) rename src/{ => main/src}/worker/func/shared/process_rpc.rs (100%) rename src/{ => main/src}/worker/func/shared/process_rpc_proto.proto (100%) rename src/{ => main/src}/worker/func/wasm_host_funcs/fs.rs (100%) rename src/{ => main/src}/worker/func/wasm_host_funcs/kv.rs (100%) rename src/{ => main/src}/worker/func/wasm_host_funcs/mod.rs (100%) rename src/{ => main/src}/worker/func/wasm_host_funcs/result.rs (100%) rename src/{ => main/src}/worker/m_data_follower.rs (85%) rename src/{ => main/src}/worker/m_executor.rs (100%) rename src/{ => main/src}/worker/m_http_handler.rs (100%) rename src/{ => main/src}/worker/m_kv_user_client.rs (100%) rename src/{ => main/src}/worker/m_worker.rs (100%) rename src/{ => main/src}/worker/mod.rs (100%) create mode 160000 src/s3_server diff --git a/Cargo.lock b/Cargo.lock index fb1396f..18d5b72 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,6 +37,30 @@ dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + [[package]] name = "anyhow" version = "1.0.75" @@ -204,6 +228,16 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + [[package]] name = "base64ct" version = "1.6.0" @@ -252,6 +286,15 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +[[package]] +name = "block-buffer" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +dependencies = [ + "generic-array", +] + [[package]] name = "block-buffer" version = "0.10.4" @@ -371,6 +414,21 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.5", +] + [[package]] name = "cipher" version = "0.4.4" @@ -392,6 +450,21 @@ dependencies = [ "libloading", ] +[[package]] +name = "clap" +version = "2.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" +dependencies = [ + "ansi_term", + "atty", + "bitflags 1.3.2", + "strsim 0.8.0", + "textwrap 0.11.0", + "unicode-width", + "vec_map", +] + [[package]] name = "clap" version = "3.2.25" @@ -404,9 +477,9 @@ dependencies = [ "clap_lex", "indexmap 1.9.3", "once_cell", - "strsim", + "strsim 0.10.0", "termcolor", - "textwrap", + "textwrap 0.16.0", ] [[package]] @@ -415,7 +488,7 @@ version = "3.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro-error", "proc-macro2", "quote", @@ -449,6 +522,27 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-str" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21077772762a1002bb421c3af42ac1725fa56066bfc53d9a55bb79905df2aaf3" +dependencies = [ + "const-str-proc-macro", +] + +[[package]] +name = "const-str-proc-macro" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e1e0fdd2e5d3041e530e1b21158aeeef8b5d0e306bc5c1e3d6cf0930d10e25a" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", +] + [[package]] name = "constant_time_eq" version = "0.1.5" @@ -560,6 +654,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "crypto-mac" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" +dependencies = [ + "generic-array", + "subtle", +] + [[package]] name = "darling" version = "0.13.4" @@ -580,7 +684,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim", + "strsim 0.10.0", "syn 1.0.109", ] @@ -615,13 +719,22 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "digest" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +dependencies = [ + "generic-array", +] + [[package]] name = "digest" version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -647,6 +760,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "dotenv" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" + [[package]] name = "downcast-rs" version = "1.2.0" @@ -680,7 +799,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" dependencies = [ - "heck", + "heck 0.4.1", "proc-macro2", "quote", "syn 2.0.38", @@ -949,6 +1068,25 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http 0.2.10", + "indexmap 2.0.2", + "slab", + "tokio", + "tokio-util", + "tracing", +] + [[package]] name = "h2" version = "0.4.5" @@ -980,6 +1118,15 @@ version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + [[package]] name = "heck" version = "0.4.1" @@ -1001,13 +1148,39 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hex-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f7685beb53fc20efc2605f32f5d51e9ba18b8ef237961d1760169d2290d3bee" +dependencies = [ + "outref", + "vsimd", +] + +[[package]] +name = "hmac" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" +dependencies = [ + "crypto-mac", + "digest 0.9.0", +] + [[package]] name = "hmac" version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest", + "digest 0.10.7", ] [[package]] @@ -1103,6 +1276,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", + "h2 0.3.26", "http 0.2.10", "http-body 0.4.5", "httparse", @@ -1125,7 +1299,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "httparse", @@ -1136,6 +1310,19 @@ dependencies = [ "want", ] +[[package]] +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.27", + "native-tls", + "tokio", + "tokio-native-tls", +] + [[package]] name = "hyper-tls" version = "0.6.0" @@ -1172,6 +1359,29 @@ dependencies = [ "tracing", ] +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1278,9 +1488,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" dependencies = [ "wasm-bindgen", ] @@ -1388,6 +1598,27 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +[[package]] +name = "md-5" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + [[package]] name = "memchr" version = "2.6.4" @@ -1580,6 +1811,12 @@ version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + [[package]] name = "openssl" version = "0.10.64" @@ -1630,6 +1867,12 @@ version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" +[[package]] +name = "outref" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" + [[package]] name = "overload" version = "0.1.1" @@ -1731,10 +1974,10 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest", - "hmac", + "digest 0.10.7", + "hmac 0.12.1", "password-hash", - "sha2", + "sha2 0.10.8", ] [[package]] @@ -1911,7 +2154,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bdf592881d821b83d471f8af290226c8d51402259e9bb5be7f9f8bdebbb11ac" dependencies = [ "bytes", - "heck", + "heck 0.4.1", "itertools 0.11.0", "log", "multimap", @@ -2008,6 +2251,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "quick-xml" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc053f057dd768a56f62cd7e434c42c831d296968997e9ac1f76ea7c2d14c41" +dependencies = [ + "memchr", + "serde", +] + [[package]] name = "quinn" version = "0.9.4" @@ -2256,12 +2509,12 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2", + "h2 0.4.5", "http 1.1.0", "http-body 1.0.0", "http-body-util", "hyper 1.3.1", - "hyper-tls", + "hyper-tls 0.6.0", "hyper-util", "ipnet", "js-sys", @@ -2316,6 +2569,88 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "rusoto_core" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1db30db44ea73551326269adcf7a2169428a054f14faf9e1768f2163494f2fa2" +dependencies = [ + "async-trait", + "base64 0.13.1", + "bytes", + "crc32fast", + "futures", + "http 0.2.10", + "hyper 0.14.27", + "hyper-tls 0.5.0", + "lazy_static", + "log", + "rusoto_credential", + "rusoto_signature", + "rustc_version", + "serde", + "serde_json", + "tokio", + "xml-rs", +] + +[[package]] +name = "rusoto_credential" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee0a6c13db5aad6047b6a44ef023dbbc21a056b6dab5be3b79ce4283d5c02d05" +dependencies = [ + "async-trait", + "chrono", + "dirs-next", + "futures", + "hyper 0.14.27", + "serde", + "serde_json", + "shlex", + "tokio", + "zeroize", +] + +[[package]] +name = "rusoto_s3" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aae4677183411f6b0b412d66194ef5403293917d66e70ab118f07cc24c5b14d" +dependencies = [ + "async-trait", + "bytes", + "futures", + "rusoto_core", + "xml-rs", +] + +[[package]] +name = "rusoto_signature" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ae95491c8b4847931e291b151127eccd6ff8ca13f33603eb3d0035ecb05272" +dependencies = [ + "base64 0.13.1", + "bytes", + "chrono", + "digest 0.9.0", + "futures", + "hex", + "hmac 0.11.0", + "http 0.2.10", + "hyper 0.14.27", + "log", + "md-5 0.9.1", + "percent-encoding", + "pin-project-lite", + "rusoto_credential", + "rustc_version", + "serde", + "sha2 0.9.9", + "tokio", +] + [[package]] name = "rustc-demangle" version = "0.1.23" @@ -2403,6 +2738,52 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +[[package]] +name = "s3_server" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "backtrace", + "base64-simd", + "chrono", + "const-str", + "dotenv", + "futures", + "hex-simd", + "hmac 0.12.1", + "http 0.2.10", + "httparse", + "hyper 0.14.27", + "md-5 0.10.6", + "memchr", + "mime", + "nom", + "once_cell", + "path-absolutize", + "pin-project-lite", + "quick-xml", + "regex", + "rusoto_core", + "rusoto_s3", + "serde", + "serde_json", + "serde_urlencoded", + "sha2 0.10.8", + "smallvec", + "structopt", + "thiserror", + "tokio", + "tracing", + "tracing-error", + "tracing-futures", + "tracing-subscriber", + "transform-stream", + "urlencoding", + "uuid", + "xml-rs", +] + [[package]] name = "same-file" version = "1.0.6" @@ -2549,7 +2930,20 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", +] + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", ] [[package]] @@ -2560,7 +2954,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest", + "digest 0.10.7", ] [[package]] @@ -2717,17 +3111,47 @@ dependencies = [ "parking_lot 0.11.2", ] +[[package]] +name = "strsim" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" + [[package]] name = "strsim" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +[[package]] +name = "structopt" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" +dependencies = [ + "clap 2.34.0", + "lazy_static", + "structopt-derive", +] + +[[package]] +name = "structopt-derive" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" +dependencies = [ + "heck 0.3.3", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "subtle" -version = "2.6.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" +checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" @@ -2838,6 +3262,15 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "textwrap" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" +dependencies = [ + "unicode-width", +] + [[package]] name = "textwrap" version = "0.16.0" @@ -3063,6 +3496,16 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-error" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" +dependencies = [ + "tracing", + "tracing-subscriber", +] + [[package]] name = "tracing-futures" version = "0.2.5" @@ -3098,6 +3541,15 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "transform-stream" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05034de7a8fcb11796a36478a2a8b16dca6772644dec5f49f709d5c66a38d359" +dependencies = [ + "futures-core", +] + [[package]] name = "triomphe" version = "0.1.11" @@ -3187,6 +3639,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + [[package]] name = "uuid" version = "1.8.0" @@ -3221,12 +3679,24 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + [[package]] name = "version_check" version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + [[package]] name = "walkdir" version = "2.5.0" @@ -3266,19 +3736,20 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" dependencies = [ "bumpalo", "log", @@ -3303,9 +3774,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3313,9 +3784,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", @@ -3326,9 +3797,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" [[package]] name = "wasm-encoder" @@ -3350,14 +3821,17 @@ dependencies = [ "axum", "bincode", "camelpaste", - "clap", + "clap 3.2.25", "crossbeam-skiplist", "downcast-rs", "enum-as-inner", "futures", + "hyper 0.14.27", "lazy_static", + "md-5 0.10.6", "moka", "parking_lot 0.11.2", + "path-absolutize", "prometheus-client", "prost 0.11.9", "prost-build", @@ -3365,6 +3839,7 @@ dependencies = [ "rand 0.8.5", "regex", "reqwest", + "s3_server", "serde", "serde_json", "serde_yaml", @@ -3540,6 +4015,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.5", +] + [[package]] name = "windows-sys" version = "0.42.0" @@ -3757,6 +4241,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "xml-rs" +version = "0.8.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" + [[package]] name = "yasna" version = "0.5.2" @@ -3766,6 +4256,12 @@ dependencies = [ "time 0.3.30", ] +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + [[package]] name = "zip" version = "0.5.13" @@ -3793,7 +4289,7 @@ dependencies = [ "crc32fast", "crossbeam-utils", "flate2", - "hmac", + "hmac 0.12.1", "pbkdf2", "sha1", "zstd", diff --git a/Cargo.toml b/Cargo.toml index 7aa3c7e..d311dd8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,14 +1,19 @@ -[package] -name = "wasm_serverless" -version = "0.1.0" -edition = "2021" +[workspace] +members = ["src/main", "src/s3_server"] +resolver = "2" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html -[dependencies] +[workspace.package] +version = "0.9.5" +edition = "2021" +license = "Apache-2.0" + +[workspace.dependencies] qp2p = "0.36.4" #{ path = "qp2p" } tokio = { version = "1.32.0", features = ["full"] } thiserror = "1.0.50" +# snafu = "0.8.5" async-trait = "0.1.74" prost = "0.11" parking_lot = "0.11.1" @@ -34,7 +39,7 @@ downcast-rs = "1.2.0" bincode = "1.3.3" crossbeam-skiplist = "0.1" lazy_static = "1.4.0" -axum = {version="0.6.20",features=["multipart"]} +axum = { version = "0.6.20", features = ["multipart"] } async-channel = "2.1.0" sysinfo = "0.29.10" ssh2 = "0.9.4" @@ -42,8 +47,8 @@ moka = { version = "0.12.1", features = ["sync"] } rand = "0.8.5" slotmap = { version = "1.0" } prometheus-client = "0.22.1" -tower-http = {version="0.4.0", features=["cors"]} -tower= "0.4.0" +tower-http = { version = "0.4.0", features = ["cors"] } +tower = "0.4.0" sled = "0.34.7" enum-as-inner = "0.6.0" reqwest = "0.12.4" @@ -51,26 +56,9 @@ futures = "0.3.30" zip-extract = "0.1.3" zip = "0.5.13" walkdir = "2.5.0" - -[dependencies.uuid] -version = "1.8.0" -features = [ - "v4", # Lets you generate random UUIDs - "fast-rng", # Use a faster (but still sufficiently random) RNG - "macro-diagnostics", # Enable better diagnostics for compile-time UUIDs -] - -# slog-envlogger = { version = "2.1.0", optional = true } - -[build-dependencies] -prost-build = { version = "0.12" } - - -#[target.'cfg( target_os = "macos" )'.dependencies] -#wasmer = "4.2.5" - -[target.'cfg(target_os = "linux")'.dependencies] -wasmedge-sdk = { version = "0.10.1", features = ["async"] } +hyper = { version = "0.14.18", features = ["server"] } +md-5 = "0.10.1" +path-absolutize = "3.0.13" [profile.test] # 0: no optimizations diff --git a/scripts/build/1.2build_apps.py b/scripts/build/1.2build_apps.py index 360b024..edcb878 100644 --- a/scripts/build/1.2build_apps.py +++ b/scripts/build/1.2build_apps.py @@ -98,7 +98,7 @@ def cp_app_program(prj_dir,app): def pack_app(prj_dir,app,prjyml): - print_title(f"pack {prj_dir} {app}") + print_title(f"packing {prj_dir} {app}") os_system_sure(f"mkdir -p ../../scripts/build/pack/apps/{app}") app_yml={"fns":prjyml[app]} # write to app.yml @@ -106,10 +106,12 @@ def pack_app(prj_dir,app,prjyml): f.write(yaml.dump(app_yml)) # cp program cp_app_program(prj_dir,app) + print_title(f"packed {prj_dir} {app}") def pack_demo(app): + print_title(f"packing demo {app}") prj_dir=os.path.abspath(f"../../demos/{app}") os.chdir(prj_dir) # check Cargo.toml in the current directory @@ -133,6 +135,7 @@ def open_app_conf(app): for app in conf: pack_app(prj_dir,app,conf) + print_title(f"packed demo {app}") # if os.path.exists("pom.xml"): # os_system_sure("mvn clean package") # os_system_sure("cp target/*.jar ../pack/apps") diff --git a/src/general/network/proto_src/data.proto b/src/general/network/proto_src/data.proto deleted file mode 100644 index 396267c..0000000 --- a/src/general/network/proto_src/data.proto +++ /dev/null @@ -1,59 +0,0 @@ -syntax = "proto3"; -package data; - -enum DataModeCache { - AlwaysInMem = 0; - AlwaysInFs = 1; -} - -enum DataModeDistribute { - BroadcastRough = 0; -} - -message DataMeta{ - DataModeCache cache = 1; - DataModeDistribute distribute = 2; -} - -message DataVersionRequest { - string unique_id = 1; - - // 0 means require for version - // >0 means node is compatible with the version's data - uint64 version = 2; - - // with value only when first time to get the version - repeated DataMeta data_metas=3; -} - -message DataVersionResponse { - uint64 version = 1; -} - - -message WriteOneDataRequest { - string unique_id = 1; - uint64 version = 2; - - repeated DataItem data = 3; - - message FileData { - string file_name = 1; - bool is_dir =2; - bytes file_content = 3; - } - - message DataItem { - oneof data { - FileData file = 1; - bytes raw_bytes = 2; - } - } -} - -message WriteOneDataResponse { - uint64 remote_version = 1; - bool success = 2; - string message = 3; // Optional: To provide additional info in case of failure -} - diff --git a/src/main/Cargo.toml b/src/main/Cargo.toml new file mode 100644 index 0000000..cba3019 --- /dev/null +++ b/src/main/Cargo.toml @@ -0,0 +1,87 @@ +[package] +name = "wasm_serverless" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +qp2p.workspace = true #{ path = "qp2p" } +tokio.workspace = true +thiserror.workspace = true +async-trait.workspace = true +prost.workspace = true +parking_lot.workspace = true +# raft = { version = "0.7.0", default-features = false, features = [ +# "prost-codec", +# ] } # tikv raft +async-raft.workspace = true #{ path = "async-raft/async-raft" } # +tracing.workspace = true +# openraft = "0.8" +serde.workspace = true +serde_json.workspace = true +serde_yaml.workspace = true +anyhow.workspace = true +slog.workspace = true +slog-async.workspace = true +slog-term.workspace = true +regex.workspace = true +camelpaste.workspace = true +tracing-subscriber.workspace = true +ws_derive.workspace = true +clap.workspace = true +downcast-rs.workspace = true +bincode.workspace = true +crossbeam-skiplist.workspace = true +lazy_static.workspace = true +axum.workspace = true +async-channel.workspace = true +sysinfo.workspace = true +ssh2.workspace = true +moka.workspace = true +rand.workspace = true +slotmap.workspace = true +prometheus-client.workspace = true +tower-http.workspace = true +tower.workspace = true +sled.workspace = true +enum-as-inner.workspace = true +reqwest.workspace = true +futures.workspace = true +zip-extract.workspace = true +zip.workspace = true +walkdir.workspace = true +s3_server = { path = "../s3_server" } +hyper.workspace = true +md-5.workspace = true +path-absolutize.workspace = true + +[dependencies.uuid] +version = "1.8.0" +features = [ + "v4", # Lets you generate random UUIDs + "fast-rng", # Use a faster (but still sufficiently random) RNG + "macro-diagnostics", # Enable better diagnostics for compile-time UUIDs +] + +# slog-envlogger = { version = "2.1.0", optional = true } + +[build-dependencies] +prost-build = { version = "0.12" } + + +#[target.'cfg( target_os = "macos" )'.dependencies] +#wasmer = "4.2.5" + +[target.'cfg(target_os = "linux")'.dependencies] +wasmedge-sdk = { version = "0.10.1", features = ["async"] } + +[profile.test] +# 0: no optimizations +# 1: basic optimizations +# 2: some optimizations +# 3: all optimizations +# "s": optimize for binary size +# "z": optimize for binary size, but also turn off loop vectorization. +opt-level = 3 # Use slightly better optimizations. +overflow-checks = false # Disable integer overflow checks. diff --git a/build.rs b/src/main/build.rs similarity index 100% rename from build.rs rename to src/main/build.rs diff --git a/src/apis.rs b/src/main/src/apis.rs similarity index 100% rename from src/apis.rs rename to src/main/src/apis.rs diff --git a/src/cmd_arg.rs b/src/main/src/cmd_arg.rs similarity index 100% rename from src/cmd_arg.rs rename to src/main/src/cmd_arg.rs diff --git a/src/config.rs b/src/main/src/config.rs similarity index 100% rename from src/config.rs rename to src/main/src/config.rs diff --git a/src/general/kv_interface.rs b/src/main/src/general/kv_interface.rs similarity index 100% rename from src/general/kv_interface.rs rename to src/main/src/general/kv_interface.rs diff --git a/src/general/m_appmeta_manager/fn_event.rs b/src/main/src/general/m_appmeta_manager/fn_event.rs similarity index 100% rename from src/general/m_appmeta_manager/fn_event.rs rename to src/main/src/general/m_appmeta_manager/fn_event.rs diff --git a/src/general/m_appmeta_manager/http.rs b/src/main/src/general/m_appmeta_manager/http.rs similarity index 100% rename from src/general/m_appmeta_manager/http.rs rename to src/main/src/general/m_appmeta_manager/http.rs diff --git a/src/general/m_appmeta_manager/mod.rs b/src/main/src/general/m_appmeta_manager/mod.rs similarity index 96% rename from src/general/m_appmeta_manager/mod.rs rename to src/main/src/general/m_appmeta_manager/mod.rs index 68eb25a..5adf4f7 100644 --- a/src/general/m_appmeta_manager/mod.rs +++ b/src/main/src/general/m_appmeta_manager/mod.rs @@ -4,7 +4,7 @@ mod v_os; use self::v_os::AppMetaVisitOs; use super::{ - m_data_general::DataGeneral, + m_data_general::{DataGeneral, DATA_UID_PREFIX_APP_META}, m_kv_store_engine::{KeyTypeServiceList, KvStoreEngine}, m_os::OperatingSystem, network::{ @@ -19,7 +19,6 @@ use super::{ }, }, }; -use crate::worker::m_executor::Executor; use crate::{ general::kv_interface::KvOps, logical_module_view_impl, @@ -29,6 +28,7 @@ use crate::{ util::{self, JoinHandleWrapper}, worker::func::m_instance_manager::InstanceManager, }; +use crate::{general::network::proto, worker::m_executor::Executor}; use async_trait::async_trait; use axum::body::Bytes; use enum_as_inner::EnumAsInner; @@ -584,18 +584,18 @@ impl AppMetas { // } // } // pub async fn set_tmp_appmeta(&self, ) - fn get_tmp_app_meta(&self, app: &str) -> Option { + fn get_tmp_app_meta(&self, app: &str) -> Option { self.app_metas.get(app).cloned() } pub async fn get_app_meta(&self, app: &str) -> Option { - if let Some(res)=self.get_tmp_app_meta(app){ + if let Some(res) = self.get_tmp_app_meta(app) { return Some(res); } - + // self.app_metas.get(app) let meta = view() .data_general() - .get_data_item(format!("app{}", app), 0) + .get_data_item(format!("{}{}", DATA_UID_PREFIX_APP_META, app), 0) .await; let Some(DataItem { data: Some(Data::RawBytes(metabytes)), @@ -732,7 +732,7 @@ impl AppMetaManager { Ok(self .view .data_general() - .get_data_item(format!("app{}", app), 0) + .get_data_item(format!("{}{}", DATA_UID_PREFIX_APP_META, app), 0) .await .is_some()) } @@ -815,17 +815,7 @@ impl AppMetaManager { self.view .data_general() .write_data( - format!("app{}", appname), - vec![ - DataMeta { - cache: DataModeCache::AlwaysInMem as i32, - distribute: DataModeDistribute::BroadcastRough as i32, - }, - DataMeta { - cache: DataModeCache::AlwaysInFs as i32, - distribute: DataModeDistribute::BroadcastRough as i32, - }, - ], + format!("{}{}", DATA_UID_PREFIX_APP_META, appname), vec![ DataItem { data: Some(data_item::Data::RawBytes( @@ -840,6 +830,22 @@ impl AppMetaManager { })), }, ], + // vec![ + // DataMeta { + // cache: DataModeCache::AlwaysInMem as i32, + // distribute: DataModeDistribute::BroadcastRough as i32, + // }, + // DataMeta { + // cache: DataModeCache::AlwaysInFs as i32, + // distribute: DataModeDistribute::BroadcastRough as i32, + // }, + // ], + proto::DataScheduleContext { + ope_node: self.view.p2p().nodes_config.this_node(), + ope_type: proto::DataOpeType::Write as i32, + data_sz_bytes: vec![], + ope_role, + }, ) .await; tracing::debug!("app uploaded"); diff --git a/src/general/m_appmeta_manager/v_os.rs b/src/main/src/general/m_appmeta_manager/v_os.rs similarity index 100% rename from src/general/m_appmeta_manager/v_os.rs rename to src/main/src/general/m_appmeta_manager/v_os.rs diff --git a/src/general/m_data_general.rs b/src/main/src/general/m_data_general.rs similarity index 54% rename from src/general/m_data_general.rs rename to src/main/src/general/m_data_general.rs index 1b3c987..e42cabe 100644 --- a/src/general/m_data_general.rs +++ b/src/main/src/general/m_data_general.rs @@ -4,10 +4,12 @@ use super::{ network::{ m_p2p::{P2PModule, RPCCaller, RPCHandler, RPCResponsor}, proto::{ + self, write_one_data_request::{data_item::Data, DataItem}, - DataMeta, DataModeDistribute, DataVersionRequest, WriteOneDataRequest, + DataMeta, DataModeDistribute, DataVersionScheduleRequest, WriteOneDataRequest, WriteOneDataResponse, }, + proto_ext::ProtoExtDataItem, }, }; use crate::{ @@ -17,13 +19,13 @@ use crate::{ sys::{LogicalModule, LogicalModuleNewArgs, NodeID}, util::JoinHandleWrapper, }; -use crate::{ - result::{WsDataError}, - sys::LogicalModulesRef, -}; +use crate::{result::WsDataError, sys::LogicalModulesRef}; use async_trait::async_trait; use serde::{Deserialize, Serialize}; -use std::{collections::HashSet, time::Duration}; +use std::{ + collections::{HashMap, HashSet}, + time::Duration, +}; use ws_derive::LogicalModule; // use super::m_appmeta_manager::AppMeta; @@ -36,10 +38,14 @@ logical_module_view_impl!(DataGeneralView, os, OperatingSystem); pub type DataVersion = u64; +pub const DATA_UID_PREFIX_APP_META: &str = "app"; + +// const DATA_UID_PREFIX_OBJ: &str = "obj"; + #[derive(LogicalModule)] pub struct DataGeneral { view: DataGeneralView, - pub rpc_call_data_version: RPCCaller, + pub rpc_call_data_version: RPCCaller, rpc_call_write_once_data: RPCCaller, rpc_handler_write_once_data: RPCHandler, @@ -87,8 +93,9 @@ impl DataGeneral { responsor: RPCResponsor, req: WriteOneDataRequest, ) { - // ## verify data meta + // ## verify data tracing::debug!("verify data meta bf write data"); + let Some(res) = self .view .kv_store_engine() @@ -208,59 +215,126 @@ impl DataGeneral { }) } - pub async fn set_dataversion(&self, req: DataVersionRequest) -> WSResult<()> { + pub async fn set_dataversion(&self, req: DataVersionScheduleRequest) -> WSResult<()> { // follower just update the version from master let old = self .view .kv_store_engine() .get(KeyTypeDataSetMeta(req.unique_id.as_bytes())); - if let Some(old) = old { - if old.version > req.version { - return Err(WsDataError::SetExpiredDataVersion { - target_version: req.version, - cur_version: old.version, - data_id: req.unique_id.clone(), - } - .into()); - // responsor - // .send_resp(DataVersionResponse { - // version: old.version, - // }) - // .await; - // tracing::warn!("has larger version {}", old.version); - // return Ok(()); + + let Some(mut old) = old else { + return Err(WsDataError::DataSetNotFound { + uniqueid: req.unique_id, + } + .into()); + }; + + // only the latest version has the permission + if old.version > req.version { + return Err(WsDataError::SetExpiredDataVersion { + target_version: req.version, + cur_version: old.version, + data_id: req.unique_id.clone(), } + .into()); } + + // update the version + old.version = req.version; + self.view.kv_store_engine().set( KeyTypeDataSetMeta(req.unique_id.as_bytes()), - &DataSetMeta { - version: req.version, - data_metas: req.data_metas.into_iter().map(|v| v.into()).collect(), - synced_nodes: HashSet::new(), - }, + &old, // &DataSetMetaV1 { + // version: req.version, + // data_metas: req.data_metas.into_iter().map(|v| v.into()).collect(), + // synced_nodes: HashSet::new(), + // }, ); self.view.kv_store_engine().flush(); Ok(()) } + /// check the design here + /// https://fvd360f8oos.feishu.cn/docx/XoFudWhAgox84MxKC3ccP1TcnUh#share-Rtxod8uDqoIcRwxOM1rccuXxnQg pub async fn write_data( &self, unique_id: String, - data_metas: Vec, + // data_metas: Vec, datas: Vec, + context_openode_opetype_operole: Option<( + NodeID, + proto::DataOpeType, + proto::data_schedule_context::OpeRole, + )>, ) { - if data_metas.len() == 0 { - tracing::warn!("write_data must have >0 data metas"); - return; - } - if datas.len() != data_metas.len() { - tracing::warn!("write_data data metas and datas length not match"); - return; - } - if DataModeDistribute::BroadcastRough as i32 == data_metas[0].distribute { - self.write_data_broadcast_rough(unique_id, data_metas, datas) + let p2p = self.view.p2p(); + + // Step 1: need the master to do the decision + // - require for the latest version for write permission + // - require for the distribution and cache mode + let resp = { + let resp = self + .rpc_call_data_version + .call( + self.view.p2p(), + p2p.nodes_config.get_master_node(), + DataVersionScheduleRequest { + unique_id: unique_id.clone(), + version: 0, + context: context_openode_opetype_operole.map( + |(ope_node, ope_type, ope_role)| proto::DataScheduleContext { + ope_node: ope_node as i64, + ope_type: ope_type as i32, + data_sz_bytes: datas.iter().map(|v| v.data_sz_bytes()).collect(), + ope_role: Some(ope_role), + }, + ), + }, + Some(Duration::from_secs(60)), + ) .await; + + let resp = match resp { + Err(e) => { + tracing::warn!("write_data_broadcast_rough require version error: {:?}", e); + return; + } + Ok(ok) => ok, + }; + resp + }; + + // Step2: dispatch the data source and caches + { + let mut write_source_data_tasks = vec![]; + + // write the data split to kv + for one_data_splits in resp.split { + let mut last_node_begin: Option<(NodeID, usize)> = None; + let flush_the_data = |nodeid: NodeID, begin: usize| { + let t = tokio::spawn(async move {}); + write_source_data_tasks.push(t); + }; + for (idx, node) in one_data_splits.node_ids.iter().enumerate() { + if let Some((node, begin)) = last_node_begin { + if node != *node { + // flush the data + } else { + last_node_begin = Some((*node, idx)); + } + } else { + last_node_begin = Some((*node, idx)); + } + } + + // one_data_splits.node_ids. + } } + + // if DataModeDistribute::BroadcastRough as i32 == data_metas[0].distribute { + // self.write_data_broadcast_rough(unique_id, data_metas, datas) + // .await; + // } } async fn write_data_broadcast_rough( &self, @@ -269,26 +343,6 @@ impl DataGeneral { datas: Vec, ) { let p2p = self.view.p2p(); - let resp = self - .rpc_call_data_version - .call( - self.view.p2p(), - p2p.nodes_config.get_master_node(), - DataVersionRequest { - unique_id: unique_id.clone(), - version: 0, - data_metas, - }, - Some(Duration::from_secs(60)), - ) - .await; - let resp = match resp { - Err(e) => { - tracing::warn!("write_data_broadcast_rough require version error: {:?}", e); - return; - } - Ok(ok) => ok, - }; tracing::debug!("start broadcast data with version"); let version = resp.version; @@ -361,45 +415,144 @@ impl Into for DataMetaSys { } } +/// the data's all in one meta +/// https://fvd360f8oos.feishu.cn/docx/XoFudWhAgox84MxKC3ccP1TcnUh#share-Tqqkdxubpokwi5xREincb1sFnLc #[derive(Serialize, Deserialize)] -pub struct DataSetMeta { +pub struct DataSetMetaV1 { // unique_id: Vec, pub version: u64, pub data_metas: Vec, pub synced_nodes: HashSet, } +#[derive(Serialize, Deserialize)] +pub struct DataSetMetaV2 { + // unique_id: Vec, + pub api_version: u8, + pub version: u64, + pub cache_mode: u16, + pub datas_splits: Vec>, +} -// pub struct DataDescriptionPart { -// mode_dist: DataModeDistribute, -// mode_cache: DataModeCache, -// } -// pub struct DataDescription { -// small: DataDescriptionPart, -// big: DataDescriptionPart, -// } +pub struct DataSetMetaBuilder { + building: Option, +} +impl DataSetMetaBuilder { + pub fn new() -> Self { + Self { + building: Some(DataSetMetaV2 { + version: 0, + cache_mode: 0, + api_version: 2, + datas_splits: vec![], + }), + } + } + pub fn cache_mode_time_forever(&mut self) -> &mut Self { + self.building.as_mut().unwrap().cache_mode &= 0x00111111; + self + } -// impl Default for DataDescription { -// fn default() -> Self { -// Self { -// small: DataDescriptionPart { -// mode_dist: DataModeDistribute::GlobalSyncRough, -// mode_cache: DataModeCache::AlwaysInMem, -// }, -// big: DataDescriptionPart { -// mode_dist: DataModeDistribute::GlobalSyncRough, -// mode_cache: DataModeCache::AlwaysInFs, -// }, -// } -// } -// } + pub fn cache_mode_pos_allnode(&mut self) -> &mut Self { + self.building.as_mut().unwrap().cache_mode &= 0x11001111; + self + } -// // data binds -// pub trait Data { -// fn disc() -> DataDescription; -// } + pub fn cache_mode_pos_specnode(&mut self) -> &mut Self { + self.building.as_mut().unwrap().cache_mode &= 0x11011111; + self + } -// impl Data for AppMeta { -// fn disc() -> DataDescription { -// DataDescription::default() -// } -// } + pub fn version(&mut self, version: u64) -> &mut Self { + self.building.as_mut().unwrap().version = version; + self + } + + pub fn set_data_splits(&mut self, splits: Vec>) -> &mut Self { + self.building.as_mut().unwrap().datas_splits = splits; + self + } + + pub fn build(&mut self) -> DataSetMetaV2 { + self.building.take().unwrap() + } +} + +impl From for DataSetMetaV2 { + fn from( + DataSetMetaV1 { + version, + data_metas, + synced_nodes, + }: DataSetMetaV1, + ) -> Self { + DataSetMetaBuilder::new() + .version(version) + .cache_mode_pos_allnode() + .build() + // DataSetMetaV2 { + // version, + // data_metas, + // synced_nodes, + // } + } +} + +#[test] +fn test_option_and_vec_serialization_size() { + // 定义一个具体的值 + let value: i32 = 42; + + // 创建 Option 类型的变量 + let some_value: Option = Some(value); + let none_value: Option = None; + + // 创建 Vec 类型的变量 + let empty_vec: Vec = Vec::new(); + let single_element_vec: Vec = vec![value]; + + let some_empty_vec: Option> = Some(vec![]); + let some_one_vec: Option> = Some(vec![value]); + + // 序列化 + let serialized_some = bincode::serialize(&some_value).unwrap(); + let serialized_none = bincode::serialize(&none_value).unwrap(); + let serialized_empty_vec = bincode::serialize(&empty_vec).unwrap(); + let serialized_single_element_vec = bincode::serialize(&single_element_vec).unwrap(); + let serialized_some_empty_vec = bincode::serialize(&some_empty_vec).unwrap(); + let serialized_some_one_vec = bincode::serialize(&some_one_vec).unwrap(); + + // 获取序列化后的字节大小 + let size_some = serialized_some.len(); + let size_none = serialized_none.len(); + let size_empty_vec = serialized_empty_vec.len(); + let size_single_element_vec = serialized_single_element_vec.len(); + let size_some_empty_vec = serialized_some_empty_vec.len(); + let size_some_one_vec = serialized_some_one_vec.len(); + + // 打印结果 + println!("Size of serialized Some(42): {}", size_some); + println!("Size of serialized None: {}", size_none); + println!("Size of serialized empty Vec: {}", size_empty_vec); + println!( + "Size of serialized Vec with one element (42): {}", + size_single_element_vec + ); + println!( + "Size of serialized Some(empty Vec): {}", + size_some_empty_vec + ); + println!( + "Size of serialized Some(one element Vec): {}", + size_some_one_vec + ); + + // 比较大小 + assert!( + size_some > size_none, + "Expected serialized Some to be larger than serialized None" + ); + assert!( + size_single_element_vec > size_empty_vec, + "Expected serialized Vec with one element to be larger than serialized empty Vec" + ); +} diff --git a/src/general/m_kv_store_engine.rs b/src/main/src/general/m_kv_store_engine.rs similarity index 52% rename from src/general/m_kv_store_engine.rs rename to src/main/src/general/m_kv_store_engine.rs index 8748cd2..5520f5a 100644 --- a/src/general/m_kv_store_engine.rs +++ b/src/main/src/general/m_kv_store_engine.rs @@ -2,20 +2,23 @@ // // testmap: SkipMap, Vec>, // pub view: KvStorageView, // } +use axum::async_trait; +use bincode::serialize; +use bincode::serialize_into; +use camelpaste::paste; +use serde::Serialize; +use serde::{de::DeserializeOwned, ser::SerializeTuple}; + +use std::sync::OnceLock; -use super::{m_data_general::DataSetMeta, m_os::OperatingSystem, network::m_p2p::P2PModule}; +use super::{m_data_general::DataSetMetaV1, m_os::OperatingSystem, network::m_p2p::P2PModule}; +use crate::general::m_data_general::DataSetMetaV2; use crate::{ logical_module_view_impl, result::WSResult, sys::{LogicalModule, LogicalModuleNewArgs, LogicalModulesRef, NodeID}, util::JoinHandleWrapper, }; -use axum::async_trait; -use bincode::serialize; -use bincode::serialize_into; -use serde::Serialize; -use serde::{de::DeserializeOwned, ser::SerializeTuple}; -use std::sync::OnceLock; use ws_derive::LogicalModule; logical_module_view_impl!(View); @@ -72,17 +75,22 @@ impl KvStoreEngine { .insert(key, serialize(value).unwrap()) .unwrap(); } - pub fn get<'a, K>(&self, key: K) -> Option + pub fn get<'a, K>(&self, key_: K) -> Option where K: KeyType, { - let key = key.make_key(); + let key = key_.make_key(); self.db.get().unwrap().get(key).map_or_else( |e| { tracing::error!("get kv error: {:?}", e); None }, - |v| v.map(|v| bincode::deserialize_from(v.as_ref()).unwrap()), + |v| { + v.map(|v| { + key_.deserialize_from(v.as_ref()) + .unwrap_or_else(|| panic!("deserialize failed")) + }) + }, ) } pub fn del(&self, key: K) @@ -106,61 +114,140 @@ pub trait KeyType: Serialize { serialize_into(&mut key, self).unwrap(); key } + + fn deserialize_from(&self, bytes: &[u8]) -> Option; //-> Result +} + +macro_rules! generate_key_struct_content { + ($id:expr, $latest:ty, [$($old:ty),+]) => { + type Value= $latest; + fn id(&self) -> u8 { + $id + } + fn deserialize_from(&self, bytes:&[u8]) -> Option<$latest>//-> Result + { + // 尝试最新版本的反序列化 + if let Ok(val) = bincode::deserialize::<$latest>(bytes) { + return Some(val); + } + + // 尝试旧版本的反序列化 + $( + if let Ok(old_val) = bincode::deserialize::<$old>(bytes) { + // 如果旧版本反序列化成功,尝试转换为最新版本 + return Some(<$latest>::from(old_val)); + } + )* + + None + } + }; + ($id:expr, $latest:ty) => { + type Value= $latest; + fn id(&self) -> u8 { + $id + } + fn deserialize_from(&self, bytes:&[u8]) -> Option<$latest>//-> Result + { + // 尝试最新版本的反序列化 + if let Ok(val) = bincode::deserialize::<$latest>(bytes) { + return Some(val); + } + None + } + }; +} + +macro_rules! generate_key_struct { + ([$name:ident], $id:expr, $latest:ty, [$($old:ty),+]) => { + paste! { + impl KeyType for $name { + generate_key_struct_content!( $id, $latest, [$($old),+]); + } + } + }; + ([$name:ident], $id:expr, $latest:ty) => { + paste! { + impl KeyType for $name { + generate_key_struct_content!( $id, $latest); + } + } + }; + ([$name:ident,$lifetime:lifetime], $id:expr, $latest:ty, [$($old:ty),+]) => { + paste! { + impl KeyType for $name<$lifetime> { + generate_key_struct_content!( $id, $latest, [$($old),+]); + } + } + }; + ([$name:ident,$lifetime:lifetime], $id:expr, $latest:ty) => { + paste! { + impl KeyType for $name<$lifetime> { + generate_key_struct_content!( $id, $latest); + } + } + }; } pub struct KeyTypeKv<'a>(pub &'a [u8]); +generate_key_struct!([KeyTypeKv,'_], 1, Vec); pub struct KeyTypeKvPosition<'a>(pub &'a [u8]); +generate_key_struct!([KeyTypeKvPosition,'_], 0, NodeID); pub struct KeyTypeServiceMeta<'a>(pub &'a [u8]); +generate_key_struct!([KeyTypeServiceMeta,'_], 2, Vec); pub struct KeyTypeServiceList; +generate_key_struct!([KeyTypeServiceList], 3, Vec); pub struct KeyTypeDataSetMeta<'a>(pub &'a [u8]); +generate_key_struct!([KeyTypeDataSetMeta,'_], 4, DataSetMetaV2, [DataSetMetaV1]); pub struct KeyTypeDataSetItem<'a> { pub uid: &'a [u8], pub idx: u8, } +generate_key_struct!([KeyTypeDataSetItem,'_], 5, Vec); -impl KeyType for KeyTypeKvPosition<'_> { - type Value = NodeID; - fn id(&self) -> u8 { - 0 - } -} -impl KeyType for KeyTypeKv<'_> { - type Value = Vec; - fn id(&self) -> u8 { - 1 - } -} -impl KeyType for KeyTypeServiceMeta<'_> { - type Value = Vec; - fn id(&self) -> u8 { - 2 - } -} -impl KeyType for KeyTypeServiceList { - type Value = Vec; - fn id(&self) -> u8 { - 3 - } -} +// impl KeyType for KeyTypeKvPosition<'_> { +// type Value = NodeID; +// fn id(&self) -> u8 { +// 0 +// } +// } +// impl KeyType for KeyTypeKv<'_> { +// type Value = Vec; +// fn id(&self) -> u8 { +// 1 +// } +// } +// impl KeyType for KeyTypeServiceMeta<'_> { +// type Value = Vec; +// fn id(&self) -> u8 { +// 2 +// } +// } +// impl KeyType for KeyTypeServiceList { +// type Value = Vec; +// fn id(&self) -> u8 { +// 3 +// } +// } -impl KeyType for KeyTypeDataSetMeta<'_> { - type Value = DataSetMeta; - fn id(&self) -> u8 { - 4 - } -} +// impl KeyType for KeyTypeDataSetMeta<'_> { +// type Value = DataSetMetaV1; +// fn id(&self) -> u8 { +// 4 +// } +// } -impl KeyType for KeyTypeDataSetItem<'_> { - type Value = Vec; - fn id(&self) -> u8 { - 5 - } -} +// impl KeyType for KeyTypeDataSetItem<'_> { +// type Value = Vec; +// fn id(&self) -> u8 { +// 5 +// } +// } impl Serialize for KeyTypeKvPosition<'_> { fn serialize(&self, serializer: S) -> Result { diff --git a/src/general/m_metric_publisher.rs b/src/main/src/general/m_metric_publisher.rs similarity index 100% rename from src/general/m_metric_publisher.rs rename to src/main/src/general/m_metric_publisher.rs diff --git a/src/general/m_os/mod.rs b/src/main/src/general/m_os/mod.rs similarity index 100% rename from src/general/m_os/mod.rs rename to src/main/src/general/m_os/mod.rs diff --git a/src/general/m_os/zip.rs b/src/main/src/general/m_os/zip.rs similarity index 100% rename from src/general/m_os/zip.rs rename to src/main/src/general/m_os/zip.rs diff --git a/src/general/mod.rs b/src/main/src/general/mod.rs similarity index 100% rename from src/general/mod.rs rename to src/main/src/general/mod.rs diff --git a/src/general/network/http_handler.rs b/src/main/src/general/network/http_handler.rs similarity index 100% rename from src/general/network/http_handler.rs rename to src/main/src/general/network/http_handler.rs diff --git a/src/general/network/m_p2p.rs b/src/main/src/general/network/m_p2p.rs similarity index 100% rename from src/general/network/m_p2p.rs rename to src/main/src/general/network/m_p2p.rs diff --git a/src/general/network/m_p2p_quic.rs b/src/main/src/general/network/m_p2p_quic.rs similarity index 100% rename from src/general/network/m_p2p_quic.rs rename to src/main/src/general/network/m_p2p_quic.rs diff --git a/src/general/network/mod.rs b/src/main/src/general/network/mod.rs similarity index 96% rename from src/general/network/mod.rs rename to src/main/src/general/network/mod.rs index f157fcc..8f1ceff 100644 --- a/src/general/network/mod.rs +++ b/src/main/src/general/network/mod.rs @@ -2,6 +2,7 @@ pub mod http_handler; pub mod m_p2p; pub mod m_p2p_quic; pub mod msg_pack; +pub mod proto_ext; pub mod rpc_model; pub mod proto { diff --git a/src/general/network/msg_pack.rs b/src/main/src/general/network/msg_pack.rs similarity index 95% rename from src/general/network/msg_pack.rs rename to src/main/src/general/network/msg_pack.rs index dce2a3b..65d1687 100644 --- a/src/general/network/msg_pack.rs +++ b/src/main/src/general/network/msg_pack.rs @@ -61,8 +61,8 @@ define_msg_ids!( proto::remote_sys::GetDirContentResp, proto::remote_sys::RunCmdReq, proto::remote_sys::RunCmdResp, - proto::DataVersionRequest, - proto::DataVersionResponse, + proto::DataVersionScheduleRequest, + proto::DataVersionScheduleResponse, proto::WriteOneDataRequest, proto::WriteOneDataResponse ); @@ -95,8 +95,8 @@ impl RPCReq for proto::remote_sys::RunCmdReq { type Resp = proto::remote_sys::RunCmdResp; } -impl RPCReq for proto::DataVersionRequest { - type Resp = proto::DataVersionResponse; +impl RPCReq for proto::DataVersionScheduleRequest { + type Resp = proto::DataVersionScheduleResponse; } impl RPCReq for proto::WriteOneDataRequest { diff --git a/src/main/src/general/network/proto_ext.rs b/src/main/src/general/network/proto_ext.rs new file mode 100644 index 0000000..7fcbf73 --- /dev/null +++ b/src/main/src/general/network/proto_ext.rs @@ -0,0 +1,14 @@ +use super::proto; + +pub trait ProtoExtDataItem { + fn data_sz_bytes(&self); +} + +impl ProtoExtDataItem for proto::write_one_data_request::DataItem { + fn data_sz_bytes(&self) { + match self { + proto::write_one_data_request::DataItem::Data(d) => d.data.len(), + proto::write_one_data_request::DataItem::DataVersion(d) => d.data.len(), + } + } +} diff --git a/src/main/src/general/network/proto_src/data.proto b/src/main/src/general/network/proto_src/data.proto new file mode 100644 index 0000000..f874c7e --- /dev/null +++ b/src/main/src/general/network/proto_src/data.proto @@ -0,0 +1,97 @@ +syntax = "proto3"; +package data; + +enum DataOpeType{ + Read = 0; + Write = 1; +} + +// depracated +enum DataModeCache { + AlwaysInMem = 0; + AlwaysInFs = 1; +} + +// depracated +enum DataModeDistribute { + BroadcastRough = 0; +} + +// depracated +message DataMeta{ + DataModeCache cache = 1; + DataModeDistribute distribute = 2; +} + + +message DataOpeRoleUploadApp{} + +message DataOpeRoleFuncCall{ + string app_func=1; + uint32 node_id=2; +} + + + +message DataScheduleContext{ + int64 ope_node=1; // data source info + DataOpeType ope_type = 2; + repeated uint32 data_sz_bytes=3; // split for big data + oneof ope_role { + DataOpeRoleUploadApp upload_app = 4; + DataOpeRoleFuncCall func_call = 5; + } +} + +message DataSplit{ + uint32 split_size = 1; + repeated uint32 node_ids = 2; +} + +message DataVersionScheduleRequest { + string unique_id = 1; + + uint64 version = 2; + + DataScheduleContext context = 3; +} + +message DataCachePlan{ + uint32 cache_mode=1; + repeated uint32 cache_nodes=2; // left empty when mode is all node +} + +message DataVersionScheduleResponse { + uint64 version = 1; + // split of each data part + DataCachePlan cache_plan = 2; + repeated DataSplit split = 3; +} + + +message WriteOneDataRequest { + string unique_id = 1; + uint64 version = 2; + + repeated DataItem data = 3; + + message FileData { + string file_name = 1; + bool is_dir =2; + bytes file_content = 3; + } + + message DataItem { + oneof data { + FileData file = 1; + bytes raw_bytes = 2; + } + } +} + +message WriteOneDataResponse { + uint64 remote_version = 1; + bool success = 2; + string message = 3; // Optional: To provide additional info in case of failure +} + diff --git a/src/general/network/proto_src/kv.proto b/src/main/src/general/network/proto_src/kv.proto similarity index 100% rename from src/general/network/proto_src/kv.proto rename to src/main/src/general/network/proto_src/kv.proto diff --git a/src/general/network/proto_src/metric.proto b/src/main/src/general/network/proto_src/metric.proto similarity index 100% rename from src/general/network/proto_src/metric.proto rename to src/main/src/general/network/proto_src/metric.proto diff --git a/src/general/network/proto_src/raft.proto b/src/main/src/general/network/proto_src/raft.proto similarity index 100% rename from src/general/network/proto_src/raft.proto rename to src/main/src/general/network/proto_src/raft.proto diff --git a/src/general/network/proto_src/remote_sys.proto b/src/main/src/general/network/proto_src/remote_sys.proto similarity index 100% rename from src/general/network/proto_src/remote_sys.proto rename to src/main/src/general/network/proto_src/remote_sys.proto diff --git a/src/general/network/proto_src/sche.proto b/src/main/src/general/network/proto_src/sche.proto similarity index 100% rename from src/general/network/proto_src/sche.proto rename to src/main/src/general/network/proto_src/sche.proto diff --git a/src/general/network/rpc_model.rs b/src/main/src/general/network/rpc_model.rs similarity index 100% rename from src/general/network/rpc_model.rs rename to src/main/src/general/network/rpc_model.rs diff --git a/src/main.rs b/src/main/src/main.rs similarity index 100% rename from src/main.rs rename to src/main/src/main.rs diff --git a/src/master/m_data_master.rs b/src/main/src/master/m_data_master.rs similarity index 89% rename from src/master/m_data_master.rs rename to src/main/src/master/m_data_master.rs index 9b3b4c9..ea4bcbe 100644 --- a/src/master/m_data_master.rs +++ b/src/main/src/master/m_data_master.rs @@ -2,10 +2,12 @@ use std::cell::RefCell; use std::collections::HashSet; use std::time::Duration; -use crate::general::m_data_general::{DataGeneral, DataSetMeta}; +use crate::general::m_data_general::{DataGeneral, DataSetMetaV1}; use crate::general::m_kv_store_engine::{KeyTypeDataSetMeta, KvStoreEngine}; use crate::general::network::m_p2p::{P2PModule, RPCHandler, RPCResponsor}; -use crate::general::network::proto::{self, DataVersionRequest, DataVersionResponse}; +use crate::general::network::proto::{ + self, DataVersionScheduleRequest, DataVersionScheduleResponse, +}; use crate::result::WSResult; use crate::sys::LogicalModulesRef; use crate::util::JoinHandleWrapper; @@ -27,7 +29,7 @@ logical_module_view_impl!(DataMasterView, kv_store_engine, KvStoreEngine); #[derive(LogicalModule)] pub struct DataMaster { view: DataMasterView, - rpc_handler: RPCHandler, + rpc_handler: RPCHandler, } #[async_trait] @@ -67,8 +69,8 @@ impl LogicalModule for DataMaster { impl DataMaster { async fn rpc_handler_dataversion_require( &self, - responsor: RPCResponsor, - req: DataVersionRequest, + responsor: RPCResponsor, + req: DataVersionScheduleRequest, ) -> WSResult<()> { // ## check version tracing::debug!("check version for data({})", req.unique_id); @@ -78,7 +80,7 @@ impl DataMaster { .get(KeyTypeDataSetMeta(req.unique_id.as_bytes())); // ## update version local tracing::debug!("update version local for data({})", req.unique_id); - let setmeta = RefCell::new(Some(DataSetMeta { + let setmeta = RefCell::new(Some(DataSetMetaV1 { version: 1, data_metas: req.data_metas.iter().map(|v| v.clone().into()).collect(), synced_nodes: HashSet::new(), @@ -162,14 +164,14 @@ impl DataMaster { v.version ); responsor - .send_resp(DataVersionResponse { version: v.version }) + .send_resp(DataVersionScheduleResponse { version: v.version }) .await; Ok(()) } async fn rpc_handler_dataversion_synced_on_node( &self, - responsor: RPCResponsor, - req: DataVersionRequest, + responsor: RPCResponsor, + req: DataVersionScheduleRequest, ) -> WSResult<()> { // 1. check version let v = self @@ -179,7 +181,7 @@ impl DataMaster { let mut v = if let Some(v) = v { if v.version != req.version { responsor - .send_resp(DataVersionResponse { version: v.version }) + .send_resp(DataVersionScheduleResponse { version: v.version }) .await; tracing::warn!( "version not match for data({}), cur: {}", @@ -191,7 +193,7 @@ impl DataMaster { v } else { responsor - .send_resp(DataVersionResponse { version: 0 }) + .send_resp(DataVersionScheduleResponse { version: 0 }) .await; tracing::warn!("version not match for data({}), cur: {}", req.unique_id, 0); return Ok(()); @@ -212,14 +214,14 @@ impl DataMaster { responsor.node_id() ); responsor - .send_resp(DataVersionResponse { version: v.version }) + .send_resp(DataVersionScheduleResponse { version: v.version }) .await; Ok(()) } async fn rpc_handler_dataversion( &self, - responsor: RPCResponsor, - req: DataVersionRequest, + responsor: RPCResponsor, + req: DataVersionScheduleRequest, ) -> WSResult<()> { if req.version > 0 { self.rpc_handler_dataversion_synced_on_node(responsor, req) diff --git a/src/master/m_http_handler.rs b/src/main/src/master/m_http_handler.rs similarity index 87% rename from src/master/m_http_handler.rs rename to src/main/src/master/m_http_handler.rs index d37ef4c..a27ae8d 100644 --- a/src/master/m_http_handler.rs +++ b/src/main/src/master/m_http_handler.rs @@ -151,27 +151,3 @@ impl HttpHandler for MasterHttpHandler { // proto::sche::FnEventScheResponse { target_node: 2 } // } } - -#[cfg(test)] -mod tests { - use crate::config::NodeConfig; - - use super::*; - - // test construct_target_path - #[test] - fn test_construct_target_path() { - let mut node_config = - NodeConfig::new("127.0.0.1:2500".parse().unwrap(), None, Default::default()); - let sub_api = "test"; - assert_eq!( - construct_target_path(&node_config, sub_api), - "http://127.0.0.1:2501/test", - ); - node_config.set_domain(Some("http://hanbaoaaa.xyz/waverless_api1".to_owned())); - assert_eq!( - construct_target_path(&node_config, sub_api), - "http://hanbaoaaa.xyz/waverless_api1/test", - ); - } -} diff --git a/src/master/m_master.rs b/src/main/src/master/m_master.rs similarity index 100% rename from src/master/m_master.rs rename to src/main/src/master/m_master.rs diff --git a/src/master/m_master_kv.rs b/src/main/src/master/m_master_kv.rs similarity index 100% rename from src/master/m_master_kv.rs rename to src/main/src/master/m_master_kv.rs diff --git a/src/master/m_metric_observor.rs b/src/main/src/master/m_metric_observor.rs similarity index 100% rename from src/master/m_metric_observor.rs rename to src/main/src/master/m_metric_observor.rs diff --git a/src/master/mod.rs b/src/main/src/master/mod.rs similarity index 100% rename from src/master/mod.rs rename to src/main/src/master/mod.rs diff --git a/src/module_state_trans.rs b/src/main/src/module_state_trans.rs similarity index 100% rename from src/module_state_trans.rs rename to src/main/src/module_state_trans.rs diff --git a/src/modules_global_bridge/mod.rs b/src/main/src/modules_global_bridge/mod.rs similarity index 100% rename from src/modules_global_bridge/mod.rs rename to src/main/src/modules_global_bridge/mod.rs diff --git a/src/modules_global_bridge/process_func.rs b/src/main/src/modules_global_bridge/process_func.rs similarity index 100% rename from src/modules_global_bridge/process_func.rs rename to src/main/src/modules_global_bridge/process_func.rs diff --git a/src/result.rs b/src/main/src/result.rs similarity index 99% rename from src/result.rs rename to src/main/src/result.rs index c846f9d..3979c53 100644 --- a/src/result.rs +++ b/src/main/src/result.rs @@ -153,6 +153,9 @@ pub enum WsFuncError { #[derive(Debug)] pub enum WsDataError { + DataSetNotFound { + uniqueid: String, + }, SetExpiredDataVersion { target_version: u64, cur_version: u64, diff --git a/src/sys.rs b/src/main/src/sys.rs similarity index 100% rename from src/sys.rs rename to src/main/src/sys.rs diff --git a/src/util.rs b/src/main/src/util.rs similarity index 100% rename from src/util.rs rename to src/main/src/util.rs diff --git a/src/worker/func/fn_event/kv_event.rs b/src/main/src/worker/func/fn_event/kv_event.rs similarity index 100% rename from src/worker/func/fn_event/kv_event.rs rename to src/main/src/worker/func/fn_event/kv_event.rs diff --git a/src/worker/func/fn_event/mod.rs b/src/main/src/worker/func/fn_event/mod.rs similarity index 100% rename from src/worker/func/fn_event/mod.rs rename to src/main/src/worker/func/fn_event/mod.rs diff --git a/src/worker/func/m_instance_manager.rs b/src/main/src/worker/func/m_instance_manager.rs similarity index 100% rename from src/worker/func/m_instance_manager.rs rename to src/main/src/worker/func/m_instance_manager.rs diff --git a/src/worker/func/mod.rs b/src/main/src/worker/func/mod.rs similarity index 100% rename from src/worker/func/mod.rs rename to src/main/src/worker/func/mod.rs diff --git a/src/worker/func/owned/mod.rs b/src/main/src/worker/func/owned/mod.rs similarity index 100% rename from src/worker/func/owned/mod.rs rename to src/main/src/worker/func/owned/mod.rs diff --git a/src/worker/func/owned/wasm.rs b/src/main/src/worker/func/owned/wasm.rs similarity index 100% rename from src/worker/func/owned/wasm.rs rename to src/main/src/worker/func/owned/wasm.rs diff --git a/src/worker/func/shared/java.rs b/src/main/src/worker/func/shared/java.rs similarity index 100% rename from src/worker/func/shared/java.rs rename to src/main/src/worker/func/shared/java.rs diff --git a/src/worker/func/shared/mod.rs b/src/main/src/worker/func/shared/mod.rs similarity index 100% rename from src/worker/func/shared/mod.rs rename to src/main/src/worker/func/shared/mod.rs diff --git a/src/worker/func/shared/process.rs b/src/main/src/worker/func/shared/process.rs similarity index 100% rename from src/worker/func/shared/process.rs rename to src/main/src/worker/func/shared/process.rs diff --git a/src/worker/func/shared/process_instance_man_related.rs b/src/main/src/worker/func/shared/process_instance_man_related.rs similarity index 100% rename from src/worker/func/shared/process_instance_man_related.rs rename to src/main/src/worker/func/shared/process_instance_man_related.rs diff --git a/src/worker/func/shared/process_rpc.rs b/src/main/src/worker/func/shared/process_rpc.rs similarity index 100% rename from src/worker/func/shared/process_rpc.rs rename to src/main/src/worker/func/shared/process_rpc.rs diff --git a/src/worker/func/shared/process_rpc_proto.proto b/src/main/src/worker/func/shared/process_rpc_proto.proto similarity index 100% rename from src/worker/func/shared/process_rpc_proto.proto rename to src/main/src/worker/func/shared/process_rpc_proto.proto diff --git a/src/worker/func/wasm_host_funcs/fs.rs b/src/main/src/worker/func/wasm_host_funcs/fs.rs similarity index 100% rename from src/worker/func/wasm_host_funcs/fs.rs rename to src/main/src/worker/func/wasm_host_funcs/fs.rs diff --git a/src/worker/func/wasm_host_funcs/kv.rs b/src/main/src/worker/func/wasm_host_funcs/kv.rs similarity index 100% rename from src/worker/func/wasm_host_funcs/kv.rs rename to src/main/src/worker/func/wasm_host_funcs/kv.rs diff --git a/src/worker/func/wasm_host_funcs/mod.rs b/src/main/src/worker/func/wasm_host_funcs/mod.rs similarity index 100% rename from src/worker/func/wasm_host_funcs/mod.rs rename to src/main/src/worker/func/wasm_host_funcs/mod.rs diff --git a/src/worker/func/wasm_host_funcs/result.rs b/src/main/src/worker/func/wasm_host_funcs/result.rs similarity index 100% rename from src/worker/func/wasm_host_funcs/result.rs rename to src/main/src/worker/func/wasm_host_funcs/result.rs diff --git a/src/worker/m_data_follower.rs b/src/main/src/worker/m_data_follower.rs similarity index 85% rename from src/worker/m_data_follower.rs rename to src/main/src/worker/m_data_follower.rs index ee2729a..2dc8481 100644 --- a/src/worker/m_data_follower.rs +++ b/src/main/src/worker/m_data_follower.rs @@ -1,9 +1,9 @@ - - -use crate::general::m_data_general::{DataGeneral}; -use crate::general::m_kv_store_engine::{KvStoreEngine}; +use crate::general::m_data_general::DataGeneral; +use crate::general::m_kv_store_engine::KvStoreEngine; use crate::general::network::m_p2p::{P2PModule, RPCHandler, RPCResponsor}; -use crate::general::network::proto::{self, DataVersionRequest, DataVersionResponse}; +use crate::general::network::proto::{ + self, DataVersionScheduleRequest, DataVersionScheduleResponse, +}; use crate::result::{WSError, WSResult, WsDataError}; use crate::sys::LogicalModulesRef; use crate::util::JoinHandleWrapper; @@ -25,7 +25,7 @@ logical_module_view_impl!(DataFollowerView, data_general, DataGeneral); #[derive(LogicalModule)] pub struct DataFollower { view: DataFollowerView, - rpc_handler: RPCHandler, + rpc_handler: RPCHandler, } #[async_trait] @@ -65,8 +65,8 @@ impl LogicalModule for DataFollower { impl DataFollower { async fn rpc_handler_dataversion( &self, - responsor: RPCResponsor, - req: DataVersionRequest, + responsor: RPCResponsor, + req: DataVersionScheduleRequest, ) -> WSResult<()> { let targetv = req.version; tracing::debug!( @@ -84,7 +84,7 @@ impl DataFollower { _ => 0, }; responsor - .send_resp(DataVersionResponse { + .send_resp(DataVersionScheduleResponse { version: cur_version, }) .await; @@ -93,7 +93,7 @@ impl DataFollower { tracing::debug!("follower updated version({})", targetv); responsor - .send_resp(DataVersionResponse { version: targetv }) + .send_resp(DataVersionScheduleResponse { version: targetv }) .await; Ok(()) } diff --git a/src/worker/m_executor.rs b/src/main/src/worker/m_executor.rs similarity index 100% rename from src/worker/m_executor.rs rename to src/main/src/worker/m_executor.rs diff --git a/src/worker/m_http_handler.rs b/src/main/src/worker/m_http_handler.rs similarity index 100% rename from src/worker/m_http_handler.rs rename to src/main/src/worker/m_http_handler.rs diff --git a/src/worker/m_kv_user_client.rs b/src/main/src/worker/m_kv_user_client.rs similarity index 100% rename from src/worker/m_kv_user_client.rs rename to src/main/src/worker/m_kv_user_client.rs diff --git a/src/worker/m_worker.rs b/src/main/src/worker/m_worker.rs similarity index 100% rename from src/worker/m_worker.rs rename to src/main/src/worker/m_worker.rs diff --git a/src/worker/mod.rs b/src/main/src/worker/mod.rs similarity index 100% rename from src/worker/mod.rs rename to src/main/src/worker/mod.rs diff --git a/src/s3_server b/src/s3_server new file mode 160000 index 0000000..529a907 --- /dev/null +++ b/src/s3_server @@ -0,0 +1 @@ +Subproject commit 529a90760eda2c528bc2e4d967f618137c140d65 From 50e4baaa8e6d335f879028fcb87c2052bb6d8bf6 Mon Sep 17 00:00:00 2001 From: ActivePeter <1020401660@qq.com> Date: Thu, 21 Nov 2024 14:05:21 +0800 Subject: [PATCH 02/26] feat: distributed lock --- .gitignore | 3 +- Cargo.lock | 2026 ++++++++--------- Cargo.toml | 8 +- .../storage/kv/raft_kv/tikvraft_kernel/mod.rs | 2 +- src/main/Cargo.toml | 7 +- src/main/src/config.rs | 4 +- .../src/general/m_appmeta_manager/http.rs | 11 +- src/main/src/general/m_appmeta_manager/mod.rs | 75 +- src/main/src/general/m_data_general.rs | 1084 +++++++-- src/main/src/general/m_dist_lock.rs | 557 +++++ src/main/src/general/m_kv_store_engine.rs | 280 ++- src/main/src/general/m_metric_publisher.rs | 2 + src/main/src/general/mod.rs | 3 + src/main/src/general/network/m_p2p_quic.rs | 2 +- src/main/src/general/network/msg_pack.rs | 151 +- src/main/src/general/network/proto_ext.rs | 79 +- .../src/general/network/proto_src/data.proto | 110 +- .../src/general/network/proto_src/kv.proto | 24 + src/main/src/general/test_utils.rs | 71 + src/main/src/main.rs | 4 +- src/main/src/master/m_data_master.rs | 380 ++-- src/main/src/master/m_master_kv.rs | 565 +++-- src/main/src/modules_global_bridge/mod.rs | 13 +- src/main/src/result.rs | 55 +- src/main/src/sys.rs | 73 +- src/main/src/util.rs | 39 +- .../src/worker/func/m_instance_manager.rs | 10 +- .../src/worker/func/shared/process_rpc.rs | 9 + .../src/worker/func/wasm_host_funcs/kv.rs | 28 +- .../src/worker/func/wasm_host_funcs/mod.rs | 27 +- src/main/src/worker/m_data_follower.rs | 188 +- src/main/src/worker/m_kv_user_client.rs | 347 ++- src/main/src/worker/mod.rs | 2 +- src/s3_server | 1 - test/files/node_config.yaml | 7 + test/kv_store_engine_1/conf | 4 + test/kv_store_engine_1/db | Bin 0 -> 96 bytes ws_derive/src/lib.rs | 14 +- 38 files changed, 4127 insertions(+), 2138 deletions(-) create mode 100644 src/main/src/general/m_dist_lock.rs create mode 100644 src/main/src/general/test_utils.rs delete mode 160000 src/s3_server create mode 100644 test/files/node_config.yaml create mode 100644 test/kv_store_engine_1/conf create mode 100644 test/kv_store_engine_1/db diff --git a/.gitignore b/.gitignore index 94c1bac..8b3728b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ target *.zip -Python-3.10.12 \ No newline at end of file +Python-3.10.12 +test_temp_dir* \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 18d5b72..ad35ee5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aes" @@ -30,51 +30,26 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" [[package]] name = "async-channel" -version = "2.1.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d37875bd9915b7d67c2f117ea2c30a0989874d0b2cb694fe25403c85763c0c9e" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ "concurrent-queue", - "event-listener", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -102,13 +77,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.74" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -117,10 +92,10 @@ version = "0.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be22061baf4b10a69b85c37dd7eb542021030bf1b0838eef0987d54b091663a6" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cfg-if", "futures", - "getrandom 0.2.10", + "getrandom 0.2.15", "libc", "path-absolutize", "serde", @@ -147,9 +122,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.1.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" @@ -162,9 +137,9 @@ dependencies = [ "bitflags 1.3.2", "bytes", "futures-util", - "http 0.2.10", - "http-body 0.4.5", - "hyper 0.14.27", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.31", "itoa", "matchit", "memchr", @@ -177,7 +152,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 0.1.2", "tokio", "tower", "tower-layer", @@ -193,8 +168,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 0.2.10", - "http-body 0.4.5", + "http 0.2.12", + "http-body 0.4.6", "mime", "rustversion", "tower-layer", @@ -203,17 +178,17 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -228,16 +203,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64-simd" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" -dependencies = [ - "outref", - "vsimd", -] - [[package]] name = "base64ct" version = "1.6.0" @@ -271,7 +236,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -282,18 +247,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" - -[[package]] -name = "block-buffer" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" -dependencies = [ - "generic-array", -] +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "block-buffer" @@ -306,15 +262,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" - -[[package]] -name = "bytecount" -version = "0.6.7" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byteorder" @@ -324,9 +274,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" dependencies = [ "serde", ] @@ -358,45 +308,15 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02d88a780e6aa14b75d7be99f374d8b5c315aaf9c12ada1e2b1cb281468584c9" -[[package]] -name = "camino" -version = "1.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" -dependencies = [ - "camino", - "cargo-platform", - "semver", - "serde", - "serde_json", -] - [[package]] name = "cc" -version = "1.0.83" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -414,21 +334,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "chrono" -version = "0.4.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "serde", - "wasm-bindgen", - "windows-targets 0.52.5", -] - [[package]] name = "cipher" version = "0.4.4" @@ -441,30 +346,15 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.7.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", "libloading", ] -[[package]] -name = "clap" -version = "2.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" -dependencies = [ - "ansi_term", - "atty", - "bitflags 1.3.2", - "strsim 0.8.0", - "textwrap 0.11.0", - "unicode-width", - "vec_map", -] - [[package]] name = "clap" version = "3.2.25" @@ -477,9 +367,9 @@ dependencies = [ "clap_lex", "indexmap 1.9.3", "once_cell", - "strsim 0.10.0", + "strsim", "termcolor", - "textwrap 0.16.0", + "textwrap", ] [[package]] @@ -506,43 +396,22 @@ dependencies = [ [[package]] name = "cmake" -version = "0.1.50" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130" +checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" dependencies = [ "cc", ] [[package]] name = "concurrent-queue" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", ] -[[package]] -name = "const-str" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21077772762a1002bb421c3af42ac1725fa56066bfc53d9a55bb79905df2aaf3" -dependencies = [ - "const-str-proc-macro", -] - -[[package]] -name = "const-str-proc-macro" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1e0fdd2e5d3041e530e1b21158aeeef8b5d0e306bc5c1e3d6cf0930d10e25a" -dependencies = [ - "proc-macro2", - "quote", - "regex", - "syn 1.0.109", -] - [[package]] name = "constant_time_eq" version = "0.1.5" @@ -570,79 +439,71 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "0ca741a962e1b0bff6d724a1a0958b686406e853bb14061f218562e1896f95e6" dependencies = [ "libc", ] [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "cfg-if", "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-skiplist" -version = "0.1.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "883a5821d7d079fcf34ac55f27a833ee61678110f6b97637cc74513c0d0b42fc" +checksum = "df29de440c58ca2cc6e587ec3d22347551a32435fbde9d2bff64e78a9ffa151b" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", - "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crypto-common" @@ -654,16 +515,6 @@ dependencies = [ "typenum", ] -[[package]] -name = "crypto-mac" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" -dependencies = [ - "generic-array", - "subtle", -] - [[package]] name = "darling" version = "0.13.4" @@ -684,7 +535,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", + "strsim", "syn 1.0.109", ] @@ -700,32 +551,37 @@ dependencies = [ ] [[package]] -name = "deranged" -version = "0.3.9" +name = "dashmap" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ - "powerfmt", + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", ] [[package]] -name = "derive_more" -version = "0.99.17" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "powerfmt", ] [[package]] -name = "digest" -version = "0.9.0" +name = "derive_more" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ - "generic-array", + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] @@ -734,7 +590,7 @@ version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "block-buffer 0.10.4", + "block-buffer", "crypto-common", "subtle", ] @@ -761,16 +617,21 @@ dependencies = [ ] [[package]] -name = "dotenv" -version = "0.15.0" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] [[package]] name = "downcast-rs" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "dtoa" @@ -780,29 +641,29 @@ checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "either" -version = "1.9.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "encoding_rs" -version = "0.8.34" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ "cfg-if", ] [[package]] name = "enum-as-inner" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -813,28 +674,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.5" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3e13f66a2f95e32a39eaa81f6b95d42878ca0e1db0c7543723dfe12557e860" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", - "windows-sys 0.48.0", -] - -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "version_check", + "windows-sys 0.52.0", ] [[package]] name = "event-listener" -version = "3.1.0" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ "concurrent-queue", "parking", @@ -843,9 +695,9 @@ dependencies = [ [[package]] name = "event-listener-strategy" -version = "0.3.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96b852f1345da36d551b9473fa1e2b1eb5c5195585c6c018118bc92a8d91160" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ "event-listener", "pin-project-lite", @@ -853,9 +705,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" [[package]] name = "fiber-for-wasmedge" @@ -878,9 +730,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", "miniz_oxide", @@ -909,9 +761,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -928,9 +780,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -943,9 +795,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -953,15 +805,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -970,38 +822,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1047,9 +899,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -1058,9 +910,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "glob" @@ -1070,28 +922,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "h2" -version = "0.3.26" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.10", - "indexmap 2.0.2", - "slab", - "tokio", - "tokio-util", - "tracing", -] - -[[package]] -name = "h2" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -1099,7 +932,7 @@ dependencies = [ "futures-core", "futures-sink", "http 1.1.0", - "indexmap 2.0.2", + "indexmap 2.6.0", "slab", "tokio", "tokio-util", @@ -1114,18 +947,15 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.2" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" [[package]] -name = "heck" -version = "0.3.3" +name = "hashbrown" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3" [[package]] name = "heck" @@ -1133,6 +963,12 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -1144,35 +980,15 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hex-simd" -version = "0.8.0" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f7685beb53fc20efc2605f32f5d51e9ba18b8ef237961d1760169d2290d3bee" -dependencies = [ - "outref", - "vsimd", -] +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] -name = "hmac" -version = "0.11.0" +name = "hermit-abi" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b" -dependencies = [ - "crypto-mac", - "digest 0.9.0", -] +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "hmac" @@ -1180,23 +996,14 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.7", -] - -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys 0.48.0", + "digest", ] [[package]] name = "http" -version = "0.2.10" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f95b9abcae896730d42b78e09c155ed4ddf82c07b4de772c64aee5b2d8b7c150" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -1216,20 +1023,20 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http 0.2.10", + "http 0.2.12", "pin-project-lite", ] [[package]] name = "http-body" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", "http 1.1.0", @@ -1237,14 +1044,14 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", - "futures-core", + "futures-util", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -1256,9 +1063,9 @@ checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" [[package]] name = "httpdate" @@ -1268,22 +1075,21 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", - "h2 0.3.26", - "http 0.2.10", - "http-body 0.4.5", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2 0.5.7", "tokio", "tower-service", "tracing", @@ -1292,16 +1098,16 @@ dependencies = [ [[package]] name = "hyper" -version = "1.3.1" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" +checksum = "bbbff0a806a4728c99295b254c8838933b5b082d75e3cb70c8dab21fdfbcfa9a" dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.5", + "h2", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "httparse", "itoa", "pin-project-lite", @@ -1311,16 +1117,20 @@ dependencies = [ ] [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "hyper-rustls" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ - "bytes", - "hyper 0.14.27", - "native-tls", + "futures-util", + "http 1.1.0", + "hyper 1.5.0", + "hyper-util", + "rustls 0.23.17", + "rustls-pki-types", "tokio", - "tokio-native-tls", + "tokio-rustls", + "tower-service", ] [[package]] @@ -1331,7 +1141,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.3.1", + "hyper 1.5.0", "hyper-util", "native-tls", "tokio", @@ -1341,45 +1151,139 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.5" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", "http 1.1.0", - "http-body 1.0.0", - "hyper 1.3.1", + "http-body 1.0.1", + "hyper 1.5.0", "pin-project-lite", - "socket2 0.5.5", + "socket2 0.5.7", "tokio", - "tower", "tower-service", "tracing", ] [[package]] -name = "iana-time-zone" -version = "0.1.61" +name = "icu_collections" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "windows-core", + "displaydoc", + "yoke", + "zerofrom", + "zerovec", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "icu_locid" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" dependencies = [ - "cc", + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", ] [[package]] @@ -1390,12 +1294,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.4.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1410,12 +1325,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.2", + "hashbrown 0.15.1", ] [[package]] @@ -1429,9 +1344,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -1442,16 +1357,27 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.3", + "hermit-abi 0.3.9", "libc", "windows-sys 0.48.0", ] [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" + +[[package]] +name = "is-terminal" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +dependencies = [ + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", +] [[package]] name = "itertools" @@ -1464,24 +1390,24 @@ dependencies = [ [[package]] name = "itertools" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "jobserver" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -1497,9 +1423,9 @@ dependencies = [ [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "lazycell" @@ -1515,18 +1441,28 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.149" +version = "0.2.164" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "433bfe06b8c75da9b2e3fbea6e5329ff87748f0b144ef75306e674c3f6f7c13f" [[package]] name = "libloading" -version = "0.8.1" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-sys 0.48.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", ] [[package]] @@ -1545,9 +1481,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.12" +version = "1.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" dependencies = [ "cc", "libc", @@ -1563,15 +1499,21 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.10" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da2479e8c062e40bf0066ffa0bc823de0a9368974af99c9f6df941d2c231e03f" +checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704" [[package]] name = "lock_api" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -1579,17 +1521,17 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] -name = "mach2" -version = "0.4.2" +name = "matchers" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "libc", + "regex-automata 0.1.10", ] [[package]] @@ -1598,17 +1540,6 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" -[[package]] -name = "md-5" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "md-5" version = "0.10.6" @@ -1616,23 +1547,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ "cfg-if", - "digest 0.10.7", + "digest", ] [[package]] name = "memchr" -version = "2.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" - -[[package]] -name = "memoffset" -version = "0.9.0" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -1648,38 +1570,38 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "0.8.9" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "moka" -version = "0.12.1" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8017ec3548ffe7d4cef7ac0e12b044c01164a74c0f3119420faeaf13490ad8b" +checksum = "32cf62eb4dd975d2dde76432fb1075c49e3ee2331cf36f1f8fd4b66550d32b6f" dependencies = [ "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "quanta", "rustc_version", - "skeptic", "smallvec", "tagptr", "thiserror", @@ -1696,7 +1618,7 @@ dependencies = [ "bytes", "encoding_rs", "futures-util", - "http 0.2.10", + "http 0.2.12", "httparse", "log", "memchr", @@ -1707,9 +1629,9 @@ dependencies = [ [[package]] name = "multimap" -version = "0.8.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" +checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" [[package]] name = "native-tls" @@ -1757,6 +1679,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-derive" version = "0.3.3" @@ -1770,60 +1698,35 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi 0.3.3", - "libc", -] - -[[package]] -name = "num_threads" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" -dependencies = [ - "libc", -] - [[package]] name = "object" -version = "0.32.1" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" - -[[package]] -name = "opaque-debug" -version = "0.3.1" +version = "1.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" [[package]] name = "openssl" -version = "0.10.64" +version = "0.10.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" +checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "cfg-if", "foreign-types", "libc", @@ -1840,7 +1743,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -1851,9 +1754,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.102" +version = "0.9.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" +checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741" dependencies = [ "cc", "libc", @@ -1867,12 +1770,6 @@ version = "6.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1" -[[package]] -name = "outref" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" - [[package]] name = "overload" version = "0.1.1" @@ -1881,9 +1778,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -1898,12 +1795,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core 0.9.8", + "parking_lot_core 0.9.10", ] [[package]] @@ -1922,15 +1819,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.8" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.3.5", + "redox_syscall 0.5.7", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -1946,9 +1843,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "path-absolutize" @@ -1974,10 +1871,10 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" dependencies = [ - "digest 0.10.7", - "hmac 0.12.1", + "digest", + "hmac", "password-hash", - "sha2 0.10.8", + "sha2", ] [[package]] @@ -1997,45 +1894,45 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ "fixedbitset", - "indexmap 2.0.2", + "indexmap 2.6.0", ] [[package]] name = "pin-project" -version = "1.1.3" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.3" +version = "1.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" [[package]] name = "pin-utils" @@ -2045,9 +1942,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "powerfmt" @@ -2057,18 +1954,21 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] [[package]] name = "prettyplease" -version = "0.2.15" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d" +checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" dependencies = [ "proc-macro2", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -2097,22 +1997,22 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.69" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" dependencies = [ "unicode-ident", ] [[package]] name = "prometheus-client" -version = "0.22.1" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f87c10af16e0af74010d2a123d202e8363c04db5acfa91d8747f64a8524da3a" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" dependencies = [ "dtoa", "itoa", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "prometheus-client-derive-encode", ] @@ -2124,7 +2024,7 @@ checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -2139,34 +2039,33 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fdd22f3b9c31b53c060df4a0613a1c7f062d4115a2b984dd15b1858f7e340d" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" dependencies = [ "bytes", - "prost-derive 0.12.1", + "prost-derive 0.12.6", ] [[package]] name = "prost-build" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bdf592881d821b83d471f8af290226c8d51402259e9bb5be7f9f8bdebbb11ac" +checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", - "heck 0.4.1", - "itertools 0.11.0", + "heck 0.5.0", + "itertools 0.12.1", "log", "multimap", "once_cell", "petgraph", "prettyplease", - "prost 0.12.1", + "prost 0.12.6", "prost-types", "regex", - "syn 2.0.38", + "syn 2.0.87", "tempfile", - "which", ] [[package]] @@ -2184,35 +2083,24 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265baba7fabd416cf5078179f7d2cbeca4ce7a9041111900675ea7c4cb8a4c32" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.11.0", + "itertools 0.12.1", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] name = "prost-types" -version = "0.12.1" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e081b29f63d83a4bc75cfc9f3fe424f9156cf92d8a4f0c9407cce9a1b67327cf" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" dependencies = [ - "prost 0.12.1", -] - -[[package]] -name = "pulldown-cmark" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" -dependencies = [ - "bitflags 1.3.2", - "memchr", - "unicase", + "prost 0.12.6", ] [[package]] @@ -2227,7 +2115,7 @@ dependencies = [ "quinn", "quinn-proto", "rcgen", - "rustls", + "rustls 0.20.9", "serde", "thiserror", "tokio", @@ -2237,13 +2125,12 @@ dependencies = [ [[package]] name = "quanta" -version = "0.11.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab" +checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" dependencies = [ "crossbeam-utils", "libc", - "mach2", "once_cell", "raw-cpuid", "wasi 0.11.0+wasi-snapshot-preview1", @@ -2251,16 +2138,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "quick-xml" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc053f057dd768a56f62cd7e434c42c831d296968997e9ac1f76ea7c2d14c41" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "quinn" version = "0.9.4" @@ -2272,7 +2149,7 @@ dependencies = [ "quinn-proto", "quinn-udp", "rustc-hash", - "rustls", + "rustls 0.20.9", "thiserror", "tokio", "tracing", @@ -2289,7 +2166,7 @@ dependencies = [ "rand 0.8.5", "ring 0.16.20", "rustc-hash", - "rustls", + "rustls 0.20.9", "slab", "thiserror", "tinyvec", @@ -2312,9 +2189,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -2378,7 +2255,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.15", ] [[package]] @@ -2392,18 +2269,18 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "10.7.0" +version = "11.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" +checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] name = "rayon" -version = "1.8.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -2411,9 +2288,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -2427,7 +2304,7 @@ checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd" dependencies = [ "pem", "ring 0.16.20", - "time 0.3.30", + "time 0.3.36", "yasna", ] @@ -2442,79 +2319,86 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags 1.3.2", -] - -[[package]] -name = "redox_syscall" -version = "0.4.1" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ - "getrandom 0.2.10", - "redox_syscall 0.2.16", + "getrandom 0.2.15", + "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", ] [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.5", ] [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.4" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ "base64 0.22.1", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.5", + "h2", "http 1.1.0", - "http-body 1.0.0", + "http-body 1.0.1", "http-body-util", - "hyper 1.3.1", - "hyper-tls 0.6.0", + "hyper 1.5.0", + "hyper-rustls", + "hyper-tls", "hyper-util", "ipnet", "js-sys", @@ -2528,7 +2412,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper", + "sync_wrapper 1.0.1", "system-configuration", "tokio", "tokio-native-tls", @@ -2537,7 +2421,7 @@ dependencies = [ "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "winreg", + "windows-registry", ] [[package]] @@ -2557,105 +2441,24 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.5" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", - "getrandom 0.2.10", + "cfg-if", + "getrandom 0.2.15", "libc", "spin 0.9.8", "untrusted 0.9.0", - "windows-sys 0.48.0", -] - -[[package]] -name = "rusoto_core" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db30db44ea73551326269adcf7a2169428a054f14faf9e1768f2163494f2fa2" -dependencies = [ - "async-trait", - "base64 0.13.1", - "bytes", - "crc32fast", - "futures", - "http 0.2.10", - "hyper 0.14.27", - "hyper-tls 0.5.0", - "lazy_static", - "log", - "rusoto_credential", - "rusoto_signature", - "rustc_version", - "serde", - "serde_json", - "tokio", - "xml-rs", -] - -[[package]] -name = "rusoto_credential" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee0a6c13db5aad6047b6a44ef023dbbc21a056b6dab5be3b79ce4283d5c02d05" -dependencies = [ - "async-trait", - "chrono", - "dirs-next", - "futures", - "hyper 0.14.27", - "serde", - "serde_json", - "shlex", - "tokio", - "zeroize", -] - -[[package]] -name = "rusoto_s3" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aae4677183411f6b0b412d66194ef5403293917d66e70ab118f07cc24c5b14d" -dependencies = [ - "async-trait", - "bytes", - "futures", - "rusoto_core", - "xml-rs", -] - -[[package]] -name = "rusoto_signature" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ae95491c8b4847931e291b151127eccd6ff8ca13f33603eb3d0035ecb05272" -dependencies = [ - "base64 0.13.1", - "bytes", - "chrono", - "digest 0.9.0", - "futures", - "hex", - "hmac 0.11.0", - "http 0.2.10", - "hyper 0.14.27", - "log", - "md-5 0.9.1", - "percent-encoding", - "pin-project-lite", - "rusoto_credential", - "rustc_version", - "serde", - "sha2 0.9.9", - "tokio", + "windows-sys 0.52.0", ] [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -2665,9 +2468,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] @@ -2688,15 +2491,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.21" +version = "0.38.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys 0.4.10", - "windows-sys 0.48.0", + "linux-raw-sys 0.4.14", + "windows-sys 0.52.0", ] [[package]] @@ -2710,79 +2513,56 @@ dependencies = [ "webpki", ] +[[package]] +name = "rustls" +version = "0.23.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f1a745511c54ba6d4465e8d5dfbd81b45791756de28d4981af70d6dca128f1e" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" [[package]] -name = "rustversion" -version = "1.0.14" +name = "rustls-webpki" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] [[package]] -name = "ryu" -version = "1.0.15" +name = "rustversion" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" [[package]] -name = "s3_server" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "backtrace", - "base64-simd", - "chrono", - "const-str", - "dotenv", - "futures", - "hex-simd", - "hmac 0.12.1", - "http 0.2.10", - "httparse", - "hyper 0.14.27", - "md-5 0.10.6", - "memchr", - "mime", - "nom", - "once_cell", - "path-absolutize", - "pin-project-lite", - "quick-xml", - "regex", - "rusoto_core", - "rusoto_s3", - "serde", - "serde_json", - "serde_urlencoded", - "sha2 0.10.8", - "smallvec", - "structopt", - "thiserror", - "tokio", - "tracing", - "tracing-error", - "tracing-futures", - "tracing-subscriber", - "transform-stream", - "urlencoding", - "uuid", - "xml-rs", -] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -2795,11 +2575,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2820,17 +2600,17 @@ version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.5", + "ring 0.17.8", "untrusted 0.9.0", ] [[package]] name = "security-framework" -version = "2.10.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770452e37cad93e0a50d5abc3990d2bc351c36d0328f86cefec2f2fb206eaef6" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -2839,59 +2619,57 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.0" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" +checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" dependencies = [ "core-foundation-sys", "libc", ] [[package]] -name = "semver" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" -dependencies = [ - "serde", -] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.190" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.190" +version = "1.0.215" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.133" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] [[package]] name = "serde_path_to_error" -version = "0.1.14" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" dependencies = [ "itoa", "serde", @@ -2911,11 +2689,11 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.27" +version = "0.9.34+deprecated" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" dependencies = [ - "indexmap 2.0.2", + "indexmap 2.6.0", "itoa", "ryu", "serde", @@ -2930,20 +2708,7 @@ checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", -] - -[[package]] -name = "sha2" -version = "0.9.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", + "digest", ] [[package]] @@ -2954,7 +2719,7 @@ checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", - "digest 0.10.7", + "digest", ] [[package]] @@ -2974,28 +2739,13 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] -[[package]] -name = "skeptic" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" -dependencies = [ - "bytecount", - "cargo_metadata", - "error-chain", - "glob", - "pulldown-cmark", - "tempfile", - "walkdir", -] - [[package]] name = "slab" version = "0.4.9" @@ -3041,15 +2791,15 @@ dependencies = [ [[package]] name = "slog-term" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87d29185c55b7b258b4f120eab00f48557d4d9bc814f41713f449d35b0f8977c" +checksum = "b6e022d0b998abfe5c3782c1f03551a596269450ccd677ea51c56f8b214610e8" dependencies = [ - "atty", + "is-terminal", "slog", "term", "thread_local", - "time 0.3.30", + "time 0.3.36", ] [[package]] @@ -3079,12 +2829,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3112,10 +2862,10 @@ dependencies = [ ] [[package]] -name = "strsim" -version = "0.8.0" +name = "stable_deref_trait" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "strsim" @@ -3123,35 +2873,11 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" -[[package]] -name = "structopt" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" -dependencies = [ - "clap 2.34.0", - "lazy_static", - "structopt-derive", -] - -[[package]] -name = "structopt-derive" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" -dependencies = [ - "heck 0.3.3", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "subtle" -version = "2.4.1" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -3166,9 +2892,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" dependencies = [ "proc-macro2", "quote", @@ -3181,11 +2907,31 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "sysinfo" -version = "0.29.10" +version = "0.29.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" +checksum = "cd727fc423c2060f6c92d9534cef765c65a6ed3f428a03d7def74a8c4348e666" dependencies = [ "cfg-if", "core-foundation-sys", @@ -3198,20 +2944,20 @@ dependencies = [ [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -3231,15 +2977,15 @@ checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" [[package]] name = "tempfile" -version = "3.8.1" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.4.1", - "rustix 0.38.21", - "windows-sys 0.48.0", + "once_cell", + "rustix 0.38.41", + "windows-sys 0.59.0", ] [[package]] @@ -3255,53 +3001,44 @@ dependencies = [ [[package]] name = "termcolor" -version = "1.3.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" dependencies = [ "winapi-util", ] [[package]] name = "textwrap" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" -dependencies = [ - "unicode-width", -] - -[[package]] -name = "textwrap" -version = "0.16.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" +checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -3320,14 +3057,13 @@ dependencies = [ [[package]] name = "time" -version = "0.3.30" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", - "libc", - "num_threads", + "num-conv", "powerfmt", "serde", "time-core", @@ -3342,18 +3078,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.15" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ + "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -3366,32 +3113,31 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.33.0" +version = "1.41.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f38200e3ef7995e5ef13baec2f432a6da0aa9ac495b2c0e8f3b7eec2c92d653" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" dependencies = [ "backtrace", "bytes", "libc", "mio", - "num_cpus", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "pin-project-lite", "signal-hook-registry", - "socket2 0.5.5", + "socket2 0.5.7", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -3404,11 +3150,22 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.17", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -3439,12 +3196,12 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.6.0", "bytes", "futures-core", "futures-util", - "http 0.2.10", - "http-body 0.4.5", + "http 0.2.12", + "http-body 0.4.6", "http-range-header", "pin-project-lite", "tower-layer", @@ -3453,15 +3210,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -3483,7 +3240,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -3496,16 +3253,6 @@ dependencies = [ "valuable", ] -[[package]] -name = "tracing-error" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e" -dependencies = [ - "tracing", - "tracing-subscriber", -] - [[package]] name = "tracing-futures" version = "0.2.5" @@ -3518,9 +3265,9 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.4" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ "log", "once_cell", @@ -3529,27 +3276,22 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ + "matchers", "nu-ansi-term", + "once_cell", + "regex", "sharded-slab", "smallvec", "thread_local", + "tracing", "tracing-core", "tracing-log", ] -[[package]] -name = "transform-stream" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05034de7a8fcb11796a36478a2a8b16dca6772644dec5f49f709d5c66a38d359" -dependencies = [ - "futures-core", -] - [[package]] name = "triomphe" version = "0.1.11" @@ -3558,9 +3300,9 @@ checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typenum" @@ -3568,53 +3310,29 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "unicase" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.23" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "unicode-width" -version = "0.1.11" +version = "0.1.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" [[package]] name = "unsafe-libyaml" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" [[package]] name = "untrusted" @@ -3630,9 +3348,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.4.1" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada" dependencies = [ "form_urlencoded", "idna", @@ -3640,31 +3358,37 @@ dependencies = [ ] [[package]] -name = "urlencoding" -version = "2.1.3" +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.15", "rand 0.8.5", "uuid-macro-internal", ] [[package]] name = "uuid-macro-internal" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9881bea7cbe687e36c9ab3b778c36cd0487402e270304e8b1296d5085303c1a2" +checksum = "6b91f57fe13a38d0ce9e28a03463d8d3c2468ed03d75375110ec71d93b449a08" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -3679,23 +3403,11 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "vec_map" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" - [[package]] name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "vsimd" -version = "0.8.0" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "walkdir" @@ -3756,15 +3468,15 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" dependencies = [ "cfg-if", "js-sys", @@ -3790,7 +3502,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3821,14 +3533,15 @@ dependencies = [ "axum", "bincode", "camelpaste", - "clap 3.2.25", + "clap", "crossbeam-skiplist", + "dashmap", "downcast-rs", "enum-as-inner", "futures", - "hyper 0.14.27", + "hyper 0.14.31", "lazy_static", - "md-5 0.10.6", + "md-5", "moka", "parking_lot 0.11.2", "path-absolutize", @@ -3839,7 +3552,6 @@ dependencies = [ "rand 0.8.5", "regex", "reqwest", - "s3_server", "serde", "serde_json", "serde_yaml", @@ -3872,7 +3584,7 @@ checksum = "ad17cbd3b8a8ed1cba44755e616495e13baf3f7e7f9576df7d7a357b928c070a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.87", ] [[package]] @@ -3902,7 +3614,7 @@ dependencies = [ "fiber-for-wasmedge", "lazy_static", "libc", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "paste", "rand 0.8.5", "scoped-tls", @@ -3954,9 +3666,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" dependencies = [ "js-sys", "wasm-bindgen", @@ -3968,22 +3680,10 @@ version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53" dependencies = [ - "ring 0.17.5", + "ring 0.17.8", "untrusted 0.9.0", ] -[[package]] -name = "which" -version = "4.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" -dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.21", -] - [[package]] name = "winapi" version = "0.3.9" @@ -4002,11 +3702,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi", + "windows-sys 0.59.0", ] [[package]] @@ -4016,12 +3716,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows-core" -version = "0.52.0" +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" dependencies = [ - "windows-targets 0.52.5", + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -4054,7 +3775,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.5", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -4074,18 +3804,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.5", - "windows_aarch64_msvc 0.52.5", - "windows_i686_gnu 0.52.5", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.5", - "windows_x86_64_gnu 0.52.5", - "windows_x86_64_gnullvm 0.52.5", - "windows_x86_64_msvc 0.52.5", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -4102,9 +3832,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -4120,9 +3850,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -4138,15 +3868,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -4162,9 +3892,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -4180,9 +3910,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -4198,9 +3928,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -4216,19 +3946,21 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "winreg" -version = "0.52.0" +name = "write16" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a277a57398d4bfa075df44f501a17cfdf8542d224f0d36095a2adc7aee4ef0a5" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] name = "ws_derive" @@ -4241,19 +3973,79 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "xml-rs" -version = "0.8.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4e2e2f7cba5a093896c1e150fbfe177d1883e7448200efb81d40b9d339ef26" - [[package]] name = "yasna" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" dependencies = [ - "time 0.3.30", + "time 0.3.36", +] + +[[package]] +name = "yoke" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + +[[package]] +name = "zerofrom" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", + "synstructure", ] [[package]] @@ -4262,6 +4054,28 @@ version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "zip" version = "0.5.13" @@ -4289,7 +4103,7 @@ dependencies = [ "crc32fast", "crossbeam-utils", "flate2", - "hmac 0.12.1", + "hmac", "pbkdf2", "sha1", "zstd", @@ -4327,9 +4141,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.11+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index d311dd8..ae25ebd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,7 @@ [workspace] -members = ["src/main", "src/s3_server"] +members = ["src/main"] resolver = "2" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [workspace.package] version = "0.9.5" @@ -20,8 +19,9 @@ parking_lot = "0.11.1" # raft = { version = "0.7.0", default-features = false, features = [ # "prost-codec", # ] } # tikv raft -async-raft = "0.6.1" #{ path = "async-raft/async-raft" } # +async-raft = "0.6.1" #{ path = "async-raft/async-raft" } # tracing = "0.1.40" +tracing-subscriber = { version = "0.3", features = ["env-filter", "std"] } # openraft = "0.8" serde = "1.0.126" serde_json = "1.0.64" @@ -32,7 +32,6 @@ slog-async = "2.3.0" slog-term = "2.4.0" regex = "1" camelpaste = "0.1.0" -tracing-subscriber = "0.3" ws_derive = { path = "./ws_derive" } clap = { version = "3", features = ["derive"] } downcast-rs = "1.2.0" @@ -59,6 +58,7 @@ walkdir = "2.5.0" hyper = { version = "0.14.18", features = ["server"] } md-5 = "0.10.1" path-absolutize = "3.0.13" +dashmap = "6.1.0" [profile.test] # 0: no optimizations diff --git a/src/_back/storage/kv/raft_kv/tikvraft_kernel/mod.rs b/src/_back/storage/kv/raft_kv/tikvraft_kernel/mod.rs index 2c8b640..fcd136c 100644 --- a/src/_back/storage/kv/raft_kv/tikvraft_kernel/mod.rs +++ b/src/_back/storage/kv/raft_kv/tikvraft_kernel/mod.rs @@ -138,7 +138,7 @@ impl RaftThreadState { tracing::info!("proprose join"); self.proprosed_join = true; let mut steps = vec![]; - for p in &self.view.p2p().peers { + for p in &self.view.p2p() { steps.push(ConfChangeSingle { change_type: ConfChangeType::AddNode.into(), node_id: p.1 as u64, diff --git a/src/main/Cargo.toml b/src/main/Cargo.toml index cba3019..938e4f2 100644 --- a/src/main/Cargo.toml +++ b/src/main/Cargo.toml @@ -4,6 +4,10 @@ version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[features] +default = [] # 默认启用的特性 +unsafe-log = [] [dependencies] qp2p.workspace = true #{ path = "qp2p" } @@ -51,10 +55,11 @@ futures.workspace = true zip-extract.workspace = true zip.workspace = true walkdir.workspace = true -s3_server = { path = "../s3_server" } +# s3_server = { path = "../s3_server" } hyper.workspace = true md-5.workspace = true path-absolutize.workspace = true +dashmap.workspace = true [dependencies.uuid] version = "1.8.0" diff --git a/src/main/src/config.rs b/src/main/src/config.rs index d5894a4..601b985 100644 --- a/src/main/src/config.rs +++ b/src/main/src/config.rs @@ -116,8 +116,10 @@ pub struct YamlConfig { } fn read_yaml_config(file_path: impl AsRef) -> YamlConfig { + tracing::info!("Running at dir: {:?}", std::env::current_dir()); + let path = file_path.as_ref().to_owned(); let file = std::fs::File::open(file_path).unwrap_or_else(|err| { - panic!("open config file failed, err: {:?}", err); + panic!("open config file {:?} failed, err: {:?}", path, err); }); serde_yaml::from_reader(file).unwrap_or_else(|e| { panic!("parse yaml config file failed, err: {:?}", e); diff --git a/src/main/src/general/m_appmeta_manager/http.rs b/src/main/src/general/m_appmeta_manager/http.rs index 76e2f01..49bfbc0 100644 --- a/src/main/src/general/m_appmeta_manager/http.rs +++ b/src/main/src/general/m_appmeta_manager/http.rs @@ -13,12 +13,21 @@ lazy_static! { static ref VIEW: Option = None; } fn view() -> &'static super::View { - unsafe { util::non_null(&*VIEW).as_ref().as_ref().unwrap() } + #[cfg(feature = "unsafe-log")] + tracing::debug!("unsafe http view begin"); + let res = unsafe { util::non_null(&*VIEW).as_ref().as_ref().unwrap() }; + #[cfg(feature = "unsafe-log")] + tracing::debug!("unsafe http view end"); + res } pub(super) fn binds(router: Router, view: super::View) -> Router { unsafe { + #[cfg(feature = "unsafe-log")] + tracing::debug!("unsafe http view bind"); let _ = util::non_null(&*VIEW).as_mut().replace(view); + #[cfg(feature = "unsafe-log")] + tracing::debug!("unsafe http view bind end"); } tracing::debug!("binds appmeta_manager http"); router diff --git a/src/main/src/general/m_appmeta_manager/mod.rs b/src/main/src/general/m_appmeta_manager/mod.rs index 5adf4f7..d0ec8e4 100644 --- a/src/main/src/general/m_appmeta_manager/mod.rs +++ b/src/main/src/general/m_appmeta_manager/mod.rs @@ -5,22 +5,16 @@ mod v_os; use self::v_os::AppMetaVisitOs; use super::{ m_data_general::{DataGeneral, DATA_UID_PREFIX_APP_META}, - m_kv_store_engine::{KeyTypeServiceList, KvStoreEngine}, + m_kv_store_engine::{KeyTypeServiceList, KvAdditionalConf, KvStoreEngine}, m_os::OperatingSystem, - network::{ - http_handler::HttpHandler, - m_p2p::P2PModule, - proto::{ - write_one_data_request::{ - data_item::{self, Data}, - DataItem, FileData, - }, - DataMeta, DataModeCache, DataModeDistribute, - }, - }, + network::{http_handler::HttpHandler, m_p2p::P2PModule}, }; +use crate::{general::network::proto, worker::m_executor::Executor}; use crate::{ - general::kv_interface::KvOps, + general::{ + kv_interface::KvOps, + network::proto::{data_schedule_context::OpeRole, DataOpeRoleUploadApp}, + }, logical_module_view_impl, master::m_master::Master, result::{ErrCvt, WSResult, WsFuncError}, @@ -28,7 +22,6 @@ use crate::{ util::{self, JoinHandleWrapper}, worker::func::m_instance_manager::InstanceManager, }; -use crate::{general::network::proto, worker::m_executor::Executor}; use async_trait::async_trait; use axum::body::Bytes; use enum_as_inner::EnumAsInner; @@ -236,9 +229,13 @@ impl AppMeta { .iter() .any(|(_, fnmeta)| fnmeta.allow_http_call().is_some()); unsafe { + #[cfg(feature = "unsafe-log")] + tracing::debug!("http_handler begin"); let _ = util::non_null(&self.cache_contains_http_fn) .as_mut() .replace(res); + #[cfg(feature = "unsafe-log")] + tracing::debug!("http_handler end"); } res } @@ -524,7 +521,10 @@ lazy_static::lazy_static! { static ref VIEW: Option = None; } fn view() -> &'static View { - unsafe { util::non_null(&*VIEW).as_ref().as_ref().unwrap() } + tracing::debug!("get view"); + let res = unsafe { util::non_null(&*VIEW).as_ref().as_ref().unwrap() }; + tracing::debug!("get view end"); + res } #[derive(LogicalModule)] @@ -543,7 +543,11 @@ impl LogicalModule for AppMetaManager { { let view = View::new(args.logical_modules_ref.clone()); unsafe { + #[cfg(feature = "unsafe-log")] + tracing::debug!("app man view begin"); let _ = util::non_null(&*VIEW).as_mut().replace(view.clone()); + #[cfg(feature = "unsafe-log")] + tracing::debug!("app man view end"); } let fs_layer = AppMetaVisitOs::new(view.clone()); Self { @@ -595,10 +599,10 @@ impl AppMetas { // self.app_metas.get(app) let meta = view() .data_general() - .get_data_item(format!("{}{}", DATA_UID_PREFIX_APP_META, app), 0) + .get_data_item(format!("{}{}", DATA_UID_PREFIX_APP_META, app).as_bytes(), 0) .await; - let Some(DataItem { - data: Some(Data::RawBytes(metabytes)), + let Some(proto::DataItem { + data_item_dispatch: Some(proto::data_item::DataItemDispatch::RawBytes(metabytes)), }) = meta else { return None; @@ -732,7 +736,7 @@ impl AppMetaManager { Ok(self .view .data_general() - .get_data_item(format!("{}{}", DATA_UID_PREFIX_APP_META, app), 0) + .get_data_item(format!("{}{}", DATA_UID_PREFIX_APP_META, app).as_bytes(), 0) .await .is_some()) } @@ -817,17 +821,19 @@ impl AppMetaManager { .write_data( format!("{}{}", DATA_UID_PREFIX_APP_META, appname), vec![ - DataItem { - data: Some(data_item::Data::RawBytes( + proto::DataItem { + data_item_dispatch: Some(proto::data_item::DataItemDispatch::RawBytes( bincode::serialize(&appmeta).unwrap(), )), }, - DataItem { - data: Some(data_item::Data::File(FileData { - file_name: format!("apps/{}", appname), - is_dir: true, - file_content: zipfiledata, - })), + proto::DataItem { + data_item_dispatch: Some(proto::data_item::DataItemDispatch::File( + proto::FileData { + file_name_opt: format!("apps/{}", appname), + is_dir_opt: true, + file_content: zipfiledata, + }, + )), }, ], // vec![ @@ -840,12 +846,11 @@ impl AppMetaManager { // distribute: DataModeDistribute::BroadcastRough as i32, // }, // ], - proto::DataScheduleContext { - ope_node: self.view.p2p().nodes_config.this_node(), - ope_type: proto::DataOpeType::Write as i32, - data_sz_bytes: vec![], - ope_role, - }, + Some(( + self.view.p2p().nodes_config.this_node(), + proto::DataOpeType::Write, + OpeRole::UploadApp(DataOpeRoleUploadApp {}), + )), ) .await; tracing::debug!("app uploaded"); @@ -856,13 +861,15 @@ impl AppMetaManager { self.view.kv_store_engine().set( KeyTypeServiceList, &serde_json::to_string(&list).unwrap().into(), + false, ); } pub fn get_app_meta_list(&self) -> Vec { let res = self .view .kv_store_engine() - .get(KeyTypeServiceList) + .get(&KeyTypeServiceList, false, KvAdditionalConf {}) + .map(|(_version, list)| list) .unwrap_or_else(|| { return vec![]; }); diff --git a/src/main/src/general/m_data_general.rs b/src/main/src/general/m_data_general.rs index e42cabe..0fa9891 100644 --- a/src/main/src/general/m_data_general.rs +++ b/src/main/src/general/m_data_general.rs @@ -1,31 +1,37 @@ use super::{ - m_kv_store_engine::{KeyTypeDataSetItem, KeyTypeDataSetMeta, KvStoreEngine}, + m_kv_store_engine::{ + KeyTypeDataSetItem, KeyTypeDataSetMeta, KvAdditionalConf, KvStoreEngine, KvVersion, + }, m_os::OperatingSystem, network::{ m_p2p::{P2PModule, RPCCaller, RPCHandler, RPCResponsor}, proto::{ - self, - write_one_data_request::{data_item::Data, DataItem}, - DataMeta, DataModeDistribute, DataVersionScheduleRequest, WriteOneDataRequest, - WriteOneDataResponse, + self, DataMeta, DataMetaGetRequest, DataVersionScheduleRequest, + WriteOneDataRequest, WriteOneDataResponse, }, proto_ext::ProtoExtDataItem, }, }; use crate::{ - general::network::proto::write_one_data_request, + general::m_kv_store_engine::KeyType, logical_module_view_impl, - result::WSResult, + result::{WSError, WSResult, WsRuntimeErr, WsSerialErr}, sys::{LogicalModule, LogicalModuleNewArgs, NodeID}, util::JoinHandleWrapper, }; use crate::{result::WsDataError, sys::LogicalModulesRef}; use async_trait::async_trait; +use camelpaste::paste; +use core::str; + +use prost::Message; use serde::{Deserialize, Serialize}; use std::{ collections::{HashMap, HashSet}, + sync::Arc, time::Duration, }; +use tokio::task::JoinHandle; use ws_derive::LogicalModule; // use super::m_appmeta_manager::AppMeta; @@ -39,16 +45,47 @@ logical_module_view_impl!(DataGeneralView, os, OperatingSystem); pub type DataVersion = u64; pub const DATA_UID_PREFIX_APP_META: &str = "app"; +pub const DATA_UID_PREFIX_FN_KV: &str = "fkv"; + +pub const CACHE_MODE_TIME_MASK: u16 = 0xf000; +pub const CACHE_MODE_TIME_FOREVER_MASK: u16 = 0x0fff; +pub const CACHE_MODE_TIME_AUTO_MASK: u16 = 0x1fff; + +pub const CACHE_MODE_POS_MASK: u16 = 0x0f00; +pub const CACHE_MODE_POS_ALLNODE_MASK: u16 = 0xf0ff; +pub const CACHE_MODE_POS_SPECNODE_MASK: u16 = 0xf1ff; +pub const CACHE_MODE_POS_AUTO_MASK: u16 = 0xf2ff; +pub const CACHE_MODE_MAP_MASK: u16 = 0x00f0; +pub const CACHE_MODE_MAP_COMMON_KV_MASK: u16 = 0xff0f; +pub const CACHE_MODE_MAP_FILE_MASK: u16 = 0xff1f; // const DATA_UID_PREFIX_OBJ: &str = "obj"; +pub fn new_data_unique_id_app(app_name: &str) -> String { + format!("{}{}", DATA_UID_PREFIX_APP_META, app_name) +} + +pub fn new_data_unique_id_fn_kv(key: &[u8]) -> Vec { + let mut temp = DATA_UID_PREFIX_FN_KV.as_bytes().to_owned(); + temp.extend(key); + temp + // let key_str = str::from_utf8(key).unwrap(); + // format!("{}{}", DATA_UID_PREFIX_FN_KV, key_str) +} + #[derive(LogicalModule)] pub struct DataGeneral { view: DataGeneralView, - pub rpc_call_data_version: RPCCaller, + pub rpc_call_data_version_schedule: RPCCaller, rpc_call_write_once_data: RPCCaller, + rpc_call_get_data_meta: RPCCaller, + rpc_call_get_data: RPCCaller, + rpc_handler_write_once_data: RPCHandler, + rpc_handler_data_meta_update: RPCHandler, + rpc_handler_get_data_meta: RPCHandler, + rpc_handler_get_data: RPCHandler, } #[async_trait] @@ -59,140 +96,321 @@ impl LogicalModule for DataGeneral { { Self { view: DataGeneralView::new(args.logical_modules_ref.clone()), - rpc_call_data_version: RPCCaller::new(), + + rpc_call_data_version_schedule: RPCCaller::new(), rpc_call_write_once_data: RPCCaller::new(), + rpc_call_get_data_meta: RPCCaller::new(), + rpc_call_get_data: RPCCaller::new(), + rpc_handler_write_once_data: RPCHandler::new(), + rpc_handler_data_meta_update: RPCHandler::new(), + rpc_handler_get_data_meta: RPCHandler::new(), + rpc_handler_get_data: RPCHandler::new(), } } async fn start(&self) -> WSResult> { tracing::info!("start as master"); + let p2p = self.view.p2p(); - self.rpc_call_data_version.regist(p2p); - self.rpc_call_write_once_data.regist(p2p); - let view = self.view.clone(); - self.rpc_handler_write_once_data - .regist(p2p, move |responsor, req| { - let view = view.clone(); - let _ = tokio::spawn(async move { - view.data_general().write_one_data(responsor, req).await; + // register rpc callers + { + self.rpc_call_data_version_schedule.regist(p2p); + self.rpc_call_write_once_data.regist(p2p); + self.rpc_call_get_data_meta.regist(p2p); + self.rpc_call_get_data.regist(p2p); + } + + // register rpc handlers + { + let view = self.view.clone(); + self.rpc_handler_write_once_data + .regist(p2p, move |responsor, req| { + let view = view.clone(); + let _ = tokio::spawn(async move { + view.rpc_handle_write_one_data(responsor, req).await; + }); + Ok(()) }); - Ok(()) - }); + let view = self.view.clone(); + self.rpc_handler_data_meta_update.regist( + p2p, + move |responsor: RPCResponsor, + req: proto::DataMetaUpdateRequest| { + let view = view.clone(); + let _ = + tokio::spawn( + async move { view.rpc_handle_data_meta_update(responsor, req) }, + ); + Ok(()) + }, + ); + let view = self.view.clone(); + self.rpc_handler_get_data_meta + .regist(p2p, move |responsor, req| { + let view = view.clone(); + let _ = tokio::spawn(async move { + view.rpc_handle_get_data_meta(req, responsor).await; + }); + Ok(()) + }); + let view = self.view.clone(); + self.rpc_handler_get_data.regist( + p2p, + move |responsor: RPCResponsor, + req: proto::GetOneDataRequest| { + let view = view.clone(); + let _ = + tokio::spawn(async move { view.rpc_handle_get_one_data(responsor, req) }); + Ok(()) + }, + ); + } + Ok(vec![]) } } -// pub enum DataWrapper { -// Bytes(Vec), -// File(PathBuf), -// } +impl DataGeneralView { + async fn rpc_handle_data_meta_update( + self, + responsor: RPCResponsor, + mut req: proto::DataMetaUpdateRequest, + ) { + let key = KeyTypeDataSetMeta(&req.unique_id); + let keybytes = key.make_key(); -impl DataGeneral { - async fn write_one_data( - &self, + let write_lock = self.kv_store_engine().with_rwlock(&keybytes); + write_lock.write(); + + if let Some((_old_version, mut old_meta)) = + self.kv_store_engine().get(&key, true, KvAdditionalConf {}) + { + if old_meta.version > req.version { + responsor.send_resp(proto::DataMetaUpdateResponse { + version: old_meta.version, + message: "New data version overwrite".to_owned(), + }); + return; + } + old_meta.version = req.version; + if req.serialized_meta.len() > 0 { + self.kv_store_engine().set_raw( + &keybytes, + std::mem::take(&mut req.serialized_meta), + true, + ); + } else { + self.kv_store_engine().set(key, &old_meta, true); + } + } else { + if req.serialized_meta.len() > 0 { + self.kv_store_engine().set_raw( + &keybytes, + std::mem::take(&mut req.serialized_meta), + true, + ); + } else { + responsor.send_resp(proto::DataMetaUpdateResponse { + version: 0, + message: "Old meta data not found and missing new meta".to_owned(), + }); + return; + } + } + responsor.send_resp(proto::DataMetaUpdateResponse { + version: req.version, + message: "Update success".to_owned(), + }); + } + + async fn rpc_handle_get_one_data( + self, + responsor: RPCResponsor, + req: proto::GetOneDataRequest, + ) -> WSResult<()> { + // req.unique_id + let kv_store_engine = self.kv_store_engine(); + let _ = self.get_data_meta(&req.unique_id, true)?; + // let meta = bincode::deserialize::(&req.serialized_meta).map_err(|err| { + // WsSerialErr::BincodeErr { + // err, + // context: "rpc_handle_get_one_data".to_owned(), + // } + // })?; + let mut deleted = vec![]; + + let mut kv_ope_err = vec![]; + + for idx in req.idxs { + let value = if req.delete { + match kv_store_engine.del( + KeyTypeDataSetItem { + uid: req.unique_id.as_ref(), //req.unique_id.clone(), + idx: idx as u8, + }, + false, + ) { + Ok(value) => value, + Err(e) => { + kv_ope_err.push(e); + None + } + } + } else { + kv_store_engine.get( + &KeyTypeDataSetItem { + uid: req.unique_id.as_ref(), //req.unique_id.clone(), + idx: idx as u8, + }, + false, + KvAdditionalConf {}, + ) + }; + deleted.push(value); + } + + tracing::warn!("temporaly no data response"); + + let (success, message): (bool, String) = if kv_ope_err.len() > 0 { + (false, { + let mut msg = String::from("KvEngine operation failed: "); + for e in kv_ope_err.iter() { + msg.push_str(&format!("{:?}", e)); + } + msg + }) + } else if deleted.iter().all(|v| v.is_some()) { + (true, "success".to_owned()) + } else { + (false, "some data not found".to_owned()) + }; + + responsor + .send_resp(proto::GetOneDataResponse { + success, + data: vec![], + message, + }) + .await?; + + Ok(()) + } + async fn rpc_handle_write_one_data( + self, responsor: RPCResponsor, req: WriteOneDataRequest, ) { - // ## verify data tracing::debug!("verify data meta bf write data"); + let kv_store_engine = self.kv_store_engine(); - let Some(res) = self - .view - .kv_store_engine() - .get(KeyTypeDataSetMeta(req.unique_id.as_bytes())) - else { - responsor.send_resp(WriteOneDataResponse { - remote_version: 0, - success: false, - message: "Data meta not found".to_owned(), - }); - return; - }; - if res.version != req.version { - responsor.send_resp(WriteOneDataResponse { - remote_version: res.version, - success: false, - message: "Data meta version not match".to_owned(), - }); - return; - } - if req.data.is_empty() { - responsor.send_resp(WriteOneDataResponse { - remote_version: res.version, - success: false, - message: "Data is empty".to_owned(), - }); - return; - } - if req.data[0].data.is_none() { - responsor.send_resp(WriteOneDataResponse { - remote_version: res.version, - success: false, - message: "Data enum is none".to_owned(), - }); - return; + // Step 0: pre-check + { + if req.data.is_empty() { + responsor.send_resp(WriteOneDataResponse { + remote_version: 0, + success: false, + message: "Request data is empty".to_owned(), + }); + return; + } + if req.data[0].data_item_dispatch.is_none() { + responsor.send_resp(WriteOneDataResponse { + remote_version: 0, + success: false, + message: "Request data enum is none".to_owned(), + }); + return; + } } - for (_idx, data) in req.data.iter().enumerate() { - match data.data.as_ref().unwrap() { - write_one_data_request::data_item::Data::File(f) => { - if f.file_name.starts_with("/") { - responsor.send_resp(WriteOneDataResponse { - remote_version: res.version, - success: false, - message: format!( - "File name {} starts with / is forbidden", - f.file_name - ), - }); + + // Step1: verify version + // take old meta + { + let keybytes = KeyTypeDataSetMeta(&req.unique_id).make_key(); + let fail_by_overwrite = || { + let message = "New data version overwrite".to_owned(); + tracing::warn!("{}", message); + responsor.send_resp(WriteOneDataResponse { + remote_version: 0, + success: false, + message, + }); + }; + let fail_with_msg = |message: String| { + tracing::warn!("{}", message); + responsor.send_resp(WriteOneDataResponse { + remote_version: 0, + success: false, + message, + }); + }; + loop { + let res = kv_store_engine.get( + &KeyTypeDataSetMeta(&req.unique_id), + false, + KvAdditionalConf {}, + ); //tofix, master send maybe not synced + let old_dataset_version = if res.is_none() { + 0 + } else { + res.as_ref().unwrap().1.version + }; + // need to wait for new version + if res.is_none() || res.as_ref().unwrap().1.version < req.version { + let (_, new_value) = kv_store_engine.wait_for_new(&keybytes).await; + let Some(new_value) = new_value.as_data_set_meta() else { + fail_with_msg(format!( + "fatal error, kv value supposed to be DataSetMeta, rathe than {:?}", + new_value + )); return; + }; + + if new_value.version > req.version { + fail_by_overwrite(); + return; + } else if new_value.version < req.version { + // still need to wait for new version + continue; + } else { + break; } + } else if old_dataset_version > req.version { + fail_by_overwrite(); + return; } - _ => {} } } - // ## write data + + // Step3: write data tracing::debug!("start to write data"); for (idx, data) in req.data.into_iter().enumerate() { - match data.data.unwrap() { - write_one_data_request::data_item::Data::File(f) => { - tracing::debug!("writing data part{} file {}", idx, f.file_name); - let p: std::path::PathBuf = self.view.os().file_path.join(f.file_name); - let view = self.view.clone(); - - let p2 = p.clone(); - let res = if f.is_dir { - tokio::task::spawn_blocking(move || { - view.os().unzip_data_2_path(p2, f.file_content); - }) - } else { - // flush to p - tokio::task::spawn_blocking(move || { - view.os().cover_data_2_path(p2, f.file_content); - }) - }; - let res = res.await; - if let Err(e) = res { - responsor.send_resp(WriteOneDataResponse { - remote_version: req.version, - success: false, - message: format!("Write file error: {:?}, path: {:?}", e, p), - }); - return; - } + match data.data_item_dispatch.unwrap() { + proto::data_item::DataItemDispatch::File(f) => { + // just store in kv + kv_store_engine.set( + KeyTypeDataSetItem { + uid: req.unique_id.as_ref(), //req.unique_id.clone(), + idx: idx as u8, + }, + &f.encode_to_vec(), + false, + ); } - write_one_data_request::data_item::Data::RawBytes(bytes) => { + proto::data_item::DataItemDispatch::RawBytes(bytes) => { tracing::debug!("writing data part{} bytes", idx); - self.view.kv_store_engine().set( + kv_store_engine.set( KeyTypeDataSetItem { - uid: req.unique_id.as_bytes(), + uid: &req.unique_id, idx: idx as u8, }, &bytes, + false, ); } } } - self.view.kv_store_engine().flush(); + kv_store_engine.flush(); tracing::debug!("data is written"); responsor .send_resp(WriteOneDataResponse { @@ -203,78 +421,215 @@ impl DataGeneral { .await; // ## response } - pub async fn get_data_item(&self, unique_id: String, idx: u8) -> Option { - let Some(itembytes) = self.view.kv_store_engine().get(KeyTypeDataSetItem { - uid: unique_id.as_bytes(), - idx: idx as u8, - }) else { - return None; + + async fn rpc_handle_get_data_meta( + self, + req: proto::DataMetaGetRequest, + responsor: RPCResponsor, + ) -> WSResult<()> { + let meta = self.get_data_meta(&req.unique_id, req.delete)?; + + let serialized_meta = meta.map_or(vec![], |(_kvversion, meta)| { + bincode::serialize(&meta).unwrap() + }); + + responsor + .send_resp(proto::DataMetaGetResponse { serialized_meta }) + .await?; + + Ok(()) + } + // pub async fn + + fn get_data_meta( + &self, + unique_id: &[u8], + delete: bool, + ) -> WSResult> { + let kv_store_engine = self.kv_store_engine(); + let key = KeyTypeDataSetMeta(&unique_id); + let keybytes = key.make_key(); + + let write_lock = kv_store_engine.with_rwlock(&keybytes); + let _guard = write_lock.write(); + + let meta_opt = if delete { + kv_store_engine.get(&key, true, KvAdditionalConf {}) + } else { + kv_store_engine.del(key, true)? }; - Some(DataItem { - data: Some(Data::RawBytes(itembytes)), - }) + Ok(meta_opt) } +} - pub async fn set_dataversion(&self, req: DataVersionScheduleRequest) -> WSResult<()> { - // follower just update the version from master - let old = self - .view - .kv_store_engine() - .get(KeyTypeDataSetMeta(req.unique_id.as_bytes())); +// pub enum DataWrapper { +// Bytes(Vec), +// File(PathBuf), +// } - let Some(mut old) = old else { - return Err(WsDataError::DataSetNotFound { - uniqueid: req.unique_id, +impl DataGeneral { + async fn get_datameta_from_master(&self, unique_id: &[u8]) -> WSResult { + let p2p = self.view.p2p(); + let data_general = self.view.data_general(); + // get meta from master + let meta = data_general + .rpc_call_get_data_meta + .call( + p2p, + p2p.nodes_config.get_master_node(), + DataMetaGetRequest { + unique_id: unique_id.to_owned(), + delete: true, + }, + Some(Duration::from_secs(30)), + ) + .await?; + bincode::deserialize::(&meta.serialized_meta).map_err(|e| { + WSError::from(WsSerialErr::BincodeErr { + err: e, + context: "delete data meta at master wrong meta serialized".to_owned(), + }) + }) + } + + async fn get_data_by_meta( + &self, + unique_id: &[u8], + meta: DataSetMetaV2, + delete: bool, + ) -> WSResult<(DataSetMetaV2, HashMap<(NodeID, usize), proto::DataItem>)> { + let view = &self.view; + // Step2: delete data on each node + let mut each_node_data: HashMap = HashMap::new(); + for (idx, data_splits) in meta.datas_splits.iter().enumerate() { + for split in &data_splits.splits { + let _ = each_node_data + .entry(split.node_id) + .and_modify(|old| { + old.idxs.push(idx as u32); + }) + .or_insert(proto::GetOneDataRequest { + unique_id: unique_id.to_owned(), + idxs: vec![idx as u32], + delete, + return_data: true, + }); } - .into()); - }; + } + + let mut tasks = vec![]; + for (node_id, req) in each_node_data { + let view = view.clone(); + let task = tokio::spawn(async move { + let req_idxs = req.idxs.clone(); + let res = view + .data_general() + .rpc_call_get_data + .call(view.p2p(), node_id, req, Some(Duration::from_secs(30))) + .await; + let res: WSResult> = res.map(|response| { + if !response.success { + tracing::warn!("get/delete data failed {}", response.message); + vec![] + } else { + req_idxs.into_iter().zip(response.data).collect() + } + }); + (node_id, res) + }); + tasks.push(task); + } - // only the latest version has the permission - if old.version > req.version { - return Err(WsDataError::SetExpiredDataVersion { - target_version: req.version, - cur_version: old.version, - data_id: req.unique_id.clone(), + let mut node_2_datas: HashMap<(NodeID, usize), proto::DataItem> = HashMap::new(); + for tasks in tasks { + let (node_id, data) = tasks.await.map_err(|err| { + WSError::from(WsRuntimeErr::TokioJoin { + err, + context: "delete_data - deleting remote data".to_owned(), + }) + })?; + for (idx, data_item) in data? { + let _ = node_2_datas.insert((node_id, idx as usize), data_item); } - .into()); } - // update the version - old.version = req.version; - - self.view.kv_store_engine().set( - KeyTypeDataSetMeta(req.unique_id.as_bytes()), - &old, // &DataSetMetaV1 { - // version: req.version, - // data_metas: req.data_metas.into_iter().map(|v| v.into()).collect(), - // synced_nodes: HashSet::new(), - // }, - ); - self.view.kv_store_engine().flush(); - Ok(()) + Ok((meta, node_2_datas)) + } + + pub async fn get_data( + &self, + unique_id: impl Into>, + ) -> WSResult<(DataSetMetaV2, HashMap<(NodeID, usize), proto::DataItem>)> { + let unique_id: Vec = unique_id.into(); + // Step1: get meta + let meta: DataSetMetaV2 = self.get_datameta_from_master(&unique_id).await?; + self.get_data_by_meta(&unique_id, meta, false).await } - /// check the design here - /// https://fvd360f8oos.feishu.cn/docx/XoFudWhAgox84MxKC3ccP1TcnUh#share-Rtxod8uDqoIcRwxOM1rccuXxnQg + /// return (meta, data_map) + /// data_map: (node_id, idx) -> data_items + pub async fn delete_data( + &self, + unique_id: impl Into>, + ) -> WSResult<(DataSetMetaV2, HashMap<(NodeID, usize), proto::DataItem>)> { + let unique_id: Vec = unique_id.into(); + + // Step1: get meta + let meta: DataSetMetaV2 = self.get_datameta_from_master(&unique_id).await?; + + self.get_data_by_meta(&unique_id, meta, true).await + // + } + + /// - check the uid from DATA_UID_PREFIX_XXX + pub async fn get_data_item(&self, unique_id: &[u8], idx: u8) -> Option { + let Some((_, itembytes)) = self.view.kv_store_engine().get( + &KeyTypeDataSetItem { + uid: unique_id, + idx: idx as u8, + }, + false, + KvAdditionalConf {}, + ) else { + return None; + }; + Some(proto::DataItem { + data_item_dispatch: Some(proto::data_item::DataItemDispatch::RawBytes(itembytes)), + }) + } + + /// The user's data write entry + /// + /// - check the design here + /// + /// - check the uid from DATA_UID_PREFIX_XXX + /// + /// - https://fvd360f8oos.feishu.cn/docx/XoFudWhAgox84MxKC3ccP1TcnUh#share-Rtxod8uDqoIcRwxOM1rccuXxnQg pub async fn write_data( &self, - unique_id: String, + unique_id: impl Into>, // data_metas: Vec, - datas: Vec, + datas: Vec, context_openode_opetype_operole: Option<( NodeID, proto::DataOpeType, proto::data_schedule_context::OpeRole, )>, - ) { + ) -> WSResult<()> { let p2p = self.view.p2p(); + let unique_id: Vec = unique_id.into(); + let log_tag = Arc::new(format!( + "write_data,uid:{:?},operole:{:?}", + str::from_utf8(&unique_id), + context_openode_opetype_operole.as_ref().map(|v| &v.2) + )); // Step 1: need the master to do the decision // - require for the latest version for write permission // - require for the distribution and cache mode - let resp = { + let version_schedule_resp = { let resp = self - .rpc_call_data_version + .rpc_call_data_version_schedule .call( self.view.p2p(), p2p.nodes_config.get_master_node(), @@ -285,7 +640,10 @@ impl DataGeneral { |(ope_node, ope_type, ope_role)| proto::DataScheduleContext { ope_node: ope_node as i64, ope_type: ope_type as i32, - data_sz_bytes: datas.iter().map(|v| v.data_sz_bytes()).collect(), + each_data_sz_bytes: datas + .iter() + .map(|data_item| data_item.data_sz_bytes() as u32) + .collect::>(), ope_role: Some(ope_role), }, ), @@ -295,9 +653,16 @@ impl DataGeneral { .await; let resp = match resp { - Err(e) => { - tracing::warn!("write_data_broadcast_rough require version error: {:?}", e); - return; + Err(inner_e) => { + let e = WsDataError::WriteDataRequireVersionErr { + unique_id, + err: Box::new(inner_e), + }; + tracing::warn!("{:?}", e); + return Err(e.into()); + + // tracing::warn!("write_data require version error: {:?}", e); + // return e; } Ok(ok) => ok, }; @@ -306,91 +671,167 @@ impl DataGeneral { // Step2: dispatch the data source and caches { + // resp.split is decision for each data, so the length should be verified + if version_schedule_resp.split.len() != datas.len() { + let e = WsDataError::WriteDataSplitLenNotMatch { + unique_id, + expect: datas.len(), + actual: version_schedule_resp.split.len(), + }; + tracing::warn!("{:?}", e); + return Err(e.into()); + } + let mut write_source_data_tasks = vec![]; // write the data split to kv - for one_data_splits in resp.split { - let mut last_node_begin: Option<(NodeID, usize)> = None; - let flush_the_data = |nodeid: NodeID, begin: usize| { - let t = tokio::spawn(async move {}); + for (one_data_splits, one_data_item) in + version_schedule_resp.split.into_iter().zip(datas) + { + // let mut last_node_begin: Option<(NodeID, usize)> = None; + fn flush_the_data( + log_tag: &str, + unique_id: &[u8], + version: u64, + split_size: usize, + view: &DataGeneralView, + one_data_item: &proto::DataItem, + nodeid: NodeID, + offset: usize, + write_source_data_tasks: &mut Vec>>, + ) { + let log_tag = log_tag.to_owned(); + let unique_id = unique_id.to_owned(); + let view = view.clone(); + // let version = version_schedule_resp.version; + // let split_size = one_data_splits.split_size as usize; + let one_data_item_split = + one_data_item.clone_split_range(offset..offset + split_size); + let t = tokio::spawn(async move { + tracing::debug!("write_data flushing {}", log_tag); + view.data_general() + .rpc_call_write_once_data + .call( + view.p2p(), + nodeid, + WriteOneDataRequest { + unique_id, + version, + data: vec![one_data_item_split], + }, + Some(Duration::from_secs(60)), + ) + .await + }); write_source_data_tasks.push(t); - }; - for (idx, node) in one_data_splits.node_ids.iter().enumerate() { - if let Some((node, begin)) = last_node_begin { - if node != *node { - // flush the data - } else { - last_node_begin = Some((*node, idx)); + } + for split in one_data_splits.splits.iter() { + flush_the_data( + &log_tag, + &unique_id, + version_schedule_resp.version, + split.data_size as usize, + &self.view, + &one_data_item, + split.node_id, + split.data_offset as usize, + &mut write_source_data_tasks, + ); + } + } + + // count and hanlde failed + let mut failed = false; + for t in write_source_data_tasks { + let res = t.await; + match res { + Ok(res) => match res { + Ok(_) => {} + Err(e) => { + failed = true; + tracing::warn!("write source data failed: {}", e); } - } else { - last_node_begin = Some((*node, idx)); + }, + + Err(e) => { + failed = true; + tracing::warn!("write_source_data_tasks failed: {}", e); } } - - // one_data_splits.node_ids. } + if failed { + tracing::warn!("TODO: need to rollback"); + } + // let res = join_all(write_source_data_tasks).await; + // // check if there's error + // if let Some(err)=res.iter().filter(|res|{res.is_err()}).next(){ + // tracing::warn!("failed to write data {}") + // panic!("failed to write data"); + // } } + Ok(()) // if DataModeDistribute::BroadcastRough as i32 == data_metas[0].distribute { // self.write_data_broadcast_rough(unique_id, data_metas, datas) // .await; // } } - async fn write_data_broadcast_rough( - &self, - unique_id: String, - data_metas: Vec, - datas: Vec, - ) { - let p2p = self.view.p2p(); - tracing::debug!("start broadcast data with version"); - let version = resp.version; - // use the got version to send to global paralell - let mut tasks = vec![]; + // async fn write_data_broadcast_rough( + // &self, + // unique_id: String, + // data_metas: Vec, + // datas: Vec, + // ) { + // let p2p = self.view.p2p(); - for (_idx, node) in p2p.nodes_config.all_nodes_iter().enumerate() { - let n = *node.0; - let view = self.view.clone(); - let datas = datas.clone(); - let unique_id = unique_id.clone(); - // let datas = unsafe { util::SendNonNull(util::non_null(&datas)) }; - - let t = tokio::spawn(async move { - view.data_general() - .rpc_call_write_once_data - .call( - view.p2p(), - n, - WriteOneDataRequest { - unique_id, - version, - data: datas, - }, - Some(Duration::from_secs(60)), - ) - .await - }); + // tracing::debug!("start broadcast data with version"); + // let version = resp.version; + // // use the got version to send to global paralell + // let mut tasks = vec![]; - tasks.push(t); - } - for t in tasks { - let res = t.await.unwrap(); - match res { - Err(e) => { - tracing::warn!("write_data_broadcast_rough broadcast error: {:?}", e); - } - Ok(ok) => { - if !ok.success { - tracing::warn!( - "write_data_broadcast_rough broadcast error: {:?}", - ok.message - ); - } - } - } - } - } + // for (_idx, node) in p2p.nodes_config.all_nodes_iter().enumerate() { + // let n = *node.0; + // let view = self.view.clone(); + // let datas = datas.clone(); + // let unique_id = unique_id.clone(); + // // let datas = unsafe { util::SendNonNull(util::non_null(&datas)) }; + + // let t = tokio::spawn(async move { + // view.data_general() + // .rpc_call_write_once_data + // .call( + // view.p2p(), + // n, + // WriteOneDataRequest { + // unique_id, + // version, + // data: datas, + // }, + // Some(Duration::from_secs(60)), + // ) + // .await + // }); + + // tasks.push(t); + // } + // for t in tasks { + // let res = t.await.unwrap(); + // match res { + // Err(e) => { + // tracing::warn!("write_data_broadcast_rough broadcast error: {:?}", e); + // } + // Ok(ok) => { + // if !ok.success { + // tracing::warn!( + // "write_data_broadcast_rough broadcast error: {:?}", + // ok.message + // ); + // } + // } + // } + // } + // } } #[derive(Serialize, Deserialize)] @@ -415,6 +856,7 @@ impl Into for DataMetaSys { } } +/// depracated, latest is v2 /// the data's all in one meta /// https://fvd360f8oos.feishu.cn/docx/XoFudWhAgox84MxKC3ccP1TcnUh#share-Tqqkdxubpokwi5xREincb1sFnLc #[derive(Serialize, Deserialize)] @@ -424,18 +866,173 @@ pub struct DataSetMetaV1 { pub data_metas: Vec, pub synced_nodes: HashSet, } -#[derive(Serialize, Deserialize)] + +/// the data's all in one meta +/// +/// attention: new from `DataSetMetaBuilder` +/// +/// https://fvd360f8oos.feishu.cn/docx/XoFudWhAgox84MxKC3ccP1TcnUh#share-Tqqkdxubpokwi5xREincb1sFnLc +#[derive(Serialize, Deserialize, Debug)] pub struct DataSetMetaV2 { // unique_id: Vec, - pub api_version: u8, + api_version: u8, pub version: u64, pub cache_mode: u16, - pub datas_splits: Vec>, + pub datas_splits: Vec, +} + +// message EachNodeSplit{ +// uint32 node_id=1; +// uint32 data_offset=2; +// uint32 data_size=3; +// } + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct EachNodeSplit { + pub node_id: NodeID, + pub data_offset: u32, + pub data_size: u32, +} + +/// we need to know the split size for one data +#[derive(Serialize, Deserialize, Debug)] +pub struct DataSplit { + pub splits: Vec, +} + +impl DataSplit { + /// node_2_datas will be consumed partially + pub fn recorver_data( + &self, + unique_id: &[u8], + idx: usize, + node_2_datas: &mut HashMap<(NodeID, usize), proto::DataItem>, + ) -> WSResult> { + let nodes = node_2_datas + .iter() + .filter(|v| v.0 .1 == idx) + .map(|v| v.0 .0) + .collect::>(); + + let mut each_node_splits: HashMap)> = + HashMap::new(); + + for node in nodes { + let data = node_2_datas.remove(&(node, idx)).unwrap(); + let _ = each_node_splits.insert(node, (data, None)); + } + + let mut max_size = 0; + let mut missing = vec![]; + + // zip with split info + // by the way, check if the split is missing + for split in &self.splits { + let Some(find) = each_node_splits.get_mut(&split.node_id) else { + missing.push((*split).clone()); + continue; + }; + find.1 = Some(split.clone()); + if split.data_offset + split.data_size > max_size { + max_size = split.data_offset + split.data_size; + } + } + + if missing.len() > 0 { + return Err(WsDataError::SplitRecoverMissing { + unique_id: unique_id.to_owned(), + idx, + missing, + } + .into()); + } + + let mut recover = vec![0; max_size.try_into().unwrap()]; + + for (_node, (data, splitmeta)) in each_node_splits { + let splitmeta = splitmeta.unwrap(); + let begin = splitmeta.data_offset as usize; + let end = begin + splitmeta.data_size as usize; + recover[begin..end].copy_from_slice(data.as_ref()); + } + + Ok(recover) + } +} + +impl Into for EachNodeSplit { + fn into(self) -> proto::EachNodeSplit { + proto::EachNodeSplit { + node_id: self.node_id, + data_offset: self.data_offset, + data_size: self.data_size, + } + } +} + +impl Into for DataSplit { + fn into(self) -> proto::DataSplit { + proto::DataSplit { + splits: self.splits.into_iter().map(|s| s.into()).collect(), + } + } +} +// uint32 split_size = 1; +// repeated uint32 node_ids = 2; + +#[derive(Debug, Clone, Copy)] +pub struct CacheModeVisitor(pub u16); + +macro_rules! generate_cache_mode_methods { + // The macro takes a list of pairs of the form [time, mask] and generates methods. + ($(($group:ident, $mode:ident)),*) => { + paste!{ + impl CacheModeVisitor { + $( + pub fn [](&self) -> bool { + self.0 & [] + == self.0 & [] & [] + } + )* + } + + } + }; +} +generate_cache_mode_methods!( + (time, forever), + (time, auto), + (pos, allnode), + (pos, specnode), + (pos, auto), + (map, common_kv), + (map, file) +); + +#[test] +fn test_cache_mode_visitor() { + let cache_mode_visitor = CacheModeVisitor(CACHE_MODE_TIME_FOREVER_MASK); + assert!(cache_mode_visitor.is_time_forever()); + assert!(!cache_mode_visitor.is_time_auto()); + + let cache_mode_visitor = CacheModeVisitor(CACHE_MODE_POS_ALLNODE_MASK); + assert!(cache_mode_visitor.is_pos_allnode()); + assert!(!cache_mode_visitor.is_pos_specnode()); + assert!(!cache_mode_visitor.is_pos_auto()); + + let cache_mode_visitor = CacheModeVisitor(CACHE_MODE_MAP_FILE_MASK); + assert!(cache_mode_visitor.is_map_file()); + assert!(!cache_mode_visitor.is_map_common_kv()); } pub struct DataSetMetaBuilder { building: Option, } +impl From for DataSetMetaBuilder { + fn from(d: DataSetMetaV2) -> Self { + Self { building: Some(d) } + } +} impl DataSetMetaBuilder { pub fn new() -> Self { Self { @@ -448,17 +1045,37 @@ impl DataSetMetaBuilder { } } pub fn cache_mode_time_forever(&mut self) -> &mut Self { - self.building.as_mut().unwrap().cache_mode &= 0x00111111; + self.building.as_mut().unwrap().cache_mode &= CACHE_MODE_TIME_FOREVER_MASK; + self + } + + pub fn cache_mode_time_auto(&mut self) -> &mut Self { + self.building.as_mut().unwrap().cache_mode &= CACHE_MODE_TIME_AUTO_MASK; self } pub fn cache_mode_pos_allnode(&mut self) -> &mut Self { - self.building.as_mut().unwrap().cache_mode &= 0x11001111; + self.building.as_mut().unwrap().cache_mode &= CACHE_MODE_POS_ALLNODE_MASK; self } pub fn cache_mode_pos_specnode(&mut self) -> &mut Self { - self.building.as_mut().unwrap().cache_mode &= 0x11011111; + self.building.as_mut().unwrap().cache_mode &= CACHE_MODE_POS_SPECNODE_MASK; + self + } + + pub fn cache_mode_pos_auto(&mut self) -> &mut Self { + self.building.as_mut().unwrap().cache_mode &= CACHE_MODE_POS_AUTO_MASK; + self + } + + pub fn cache_mode_map_common_kv(&mut self) -> &mut Self { + self.building.as_mut().unwrap().cache_mode &= CACHE_MODE_MAP_COMMON_KV_MASK; + self + } + + pub fn cache_mode_map_file(&mut self) -> &mut Self { + self.building.as_mut().unwrap().cache_mode &= CACHE_MODE_MAP_FILE_MASK; self } @@ -467,7 +1084,8 @@ impl DataSetMetaBuilder { self } - pub fn set_data_splits(&mut self, splits: Vec>) -> &mut Self { + #[must_use] + pub fn set_data_splits(&mut self, splits: Vec) -> &mut Self { self.building.as_mut().unwrap().datas_splits = splits; self } @@ -481,8 +1099,8 @@ impl From for DataSetMetaV2 { fn from( DataSetMetaV1 { version, - data_metas, - synced_nodes, + data_metas: _, + synced_nodes: _, }: DataSetMetaV1, ) -> Self { DataSetMetaBuilder::new() diff --git a/src/main/src/general/m_dist_lock.rs b/src/main/src/general/m_dist_lock.rs new file mode 100644 index 0000000..5cee707 --- /dev/null +++ b/src/main/src/general/m_dist_lock.rs @@ -0,0 +1,557 @@ +use std::collections::HashMap; +use std::collections::HashSet; +use std::fmt; +use std::fmt::Debug; +use std::hash::DefaultHasher; +use std::hash::Hash; +use std::hash::Hasher; +use std::sync::atomic::AtomicUsize; +use std::sync::atomic::Ordering; +use std::sync::Arc; +use std::time::Duration; + +use crate::sys::LogicalModule; +use crate::sys::LogicalModulesRef; +use crate::util::DropDebug; +use crate::{ + logical_module_view_impl, result::WSResult, sys::LogicalModuleNewArgs, util::JoinHandleWrapper, +}; +use axum::async_trait; +use parking_lot::Mutex; +use rand::thread_rng; +use rand::Rng; +use tokio::sync::Notify; +use tokio::sync::OwnedRwLockReadGuard; +use tokio::sync::OwnedRwLockWriteGuard; +use tokio::sync::RwLock; +use ws_derive::LogicalModule; + +use super::network::m_p2p::P2PModule; +use super::network::m_p2p::RPCCaller; +use super::network::m_p2p::RPCHandler; +use super::network::m_p2p::RPCResponsor; +use super::network::proto; + +logical_module_view_impl!(View); +logical_module_view_impl!(View, p2p, P2PModule); +logical_module_view_impl!(View, dist_lock, DistLock); + +type LockReleaseId = u32; + +/// https://fvd360f8oos.feishu.cn/wiki/ZUPNwpKLEiRs6Ukzf3ncVa9FnHe +/// 这个是对于某个key的锁的状态记录,包括读写锁的引用计数,以及等待释放的notify +/// 对于写锁,只有第一个人竞争往map里插入能拿到锁,后续的都得等notify,然后竞争往map里插入 +/// 对于读锁,只要自增的初始值>=1即可,初始值为0意味着当前锁已经处于释放过程中(cnt减到0但可能还在map里)得等到map中的值被删掉 +/// 如何等map中的值被删掉:等到map中的值被删掉,再把wait_for_delete中的notify全部notify +/// 有没有在删掉后,全部notify过了,又有用户往notify队列里插入,(使用Mutex