diff --git a/frameworks/Rust/xitca-web/Cargo.lock b/frameworks/Rust/xitca-web/Cargo.lock index 8d9787826ad..d63c908f9b6 100755 --- a/frameworks/Rust/xitca-web/Cargo.lock +++ b/frameworks/Rust/xitca-web/Cargo.lock @@ -77,18 +77,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bb8" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "457d7ed3f888dfd2c7af56d4975cade43c622f74bdcddfed6d4352f57acc6310" -dependencies = [ - "futures-util", - "parking_lot", - "portable-atomic", - "tokio", -] - [[package]] name = "bit-set" version = "0.8.0" @@ -104,12 +92,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.10.0" @@ -151,9 +133,9 @@ checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" [[package]] name = "cc" -version = "1.2.48" +version = "1.2.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c481bdbf0ed3b892f6f806287d72acd515b352a4ec27a208489b8c1bc839633a" +checksum = "90583009037521a116abf44494efecd645ba48b6622457080f080b85544e2215" dependencies = [ "find-msvc-tools", "shlex", @@ -236,7 +218,7 @@ version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c415189028b232660655e4893e8bc25ca7aee8e96888db66d9edb400535456a" dependencies = [ - "bitflags 2.10.0", + "bitflags", "byteorder", "diesel_derives", "downcast-rs", @@ -250,13 +232,10 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13096fb8dae53f2d411c4b523bec85f45552ed3044a2ab4d85fb2092d9cb4f34" dependencies = [ - "bb8", "diesel", "futures-core", "futures-util", "scoped-futures", - "tokio", - "tokio-postgres", ] [[package]] @@ -377,16 +356,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - [[package]] name = "futures-core" version = "0.3.31" @@ -416,7 +385,6 @@ dependencies = [ "futures-task", "pin-project-lite", "pin-utils", - "slab", ] [[package]] @@ -642,11 +610,12 @@ dependencies = [ [[package]] name = "io-uring" -version = "0.6.4" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "595a0399f411a508feb2ec1e970a4a30c249351e30208960d58298de8660b0e5" +checksum = "fdd7bddefd0a8833b88a4b68f90dae22c7450d11b354198baee3874fd811b344" dependencies = [ - "bitflags 1.3.2", + "bitflags", + "cfg-if", "libc", ] @@ -680,9 +649,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.177" +version = "0.2.178" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" +checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" [[package]] name = "libmimalloc-sys" @@ -694,17 +663,6 @@ dependencies = [ "libc", ] -[[package]] -name = "libredox" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" -dependencies = [ - "bitflags 2.10.0", - "libc", - "redox_syscall", -] - [[package]] name = "litemap" version = "0.8.1" @@ -720,12 +678,6 @@ dependencies = [ "scopeguard", ] -[[package]] -name = "log" -version = "0.4.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" - [[package]] name = "md-5" version = "0.10.6" @@ -753,9 +705,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" dependencies = [ "libc", "wasi", @@ -816,25 +768,6 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "phf" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1562dc717473dbaa4c1f85a36410e03c047b2e7df7f45ee938fbef64ae7fadf" -dependencies = [ - "phf_shared", - "serde", -] - -[[package]] -name = "phf_shared" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e57fef6bc5981e38c2ce2d63bfa546861309f875b8a75f092d1d54ae2d64f266" -dependencies = [ - "siphasher", -] - [[package]] name = "pin-project-lite" version = "0.2.16" @@ -863,12 +796,6 @@ dependencies = [ "regex", ] -[[package]] -name = "portable-atomic" -version = "1.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" - [[package]] name = "postgres-protocol" version = "0.6.9" @@ -1016,7 +943,7 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.10.0", + "bitflags", ] [[package]] @@ -1082,9 +1009,9 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "sailfish" -version = "0.10.0" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40efbac4e16ca6b1a5706348ada4d8b67d7b417ac2001aa6c4ae092511bb1763" +checksum = "51bd7299cb39e7e0d9350a2f4ec0c0f2a98de9608ada54983c3c30f4d55051b8" dependencies = [ "itoap", "ryu", @@ -1234,12 +1161,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - [[package]] name = "slab" version = "0.4.11" @@ -1252,16 +1173,6 @@ version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.6.1" @@ -1281,7 +1192,7 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "std-util" version = "0.1.0" -source = "git+https://github.com/fakeshadow/toasty?branch=engine#adff354a113ae85dd26a5fd8cecc2807fa12d5bf" +source = "git+https://github.com/fakeshadow/toasty?branch=engine#2132c89dfd7a4698cdaaa85888c016b97c01471a" dependencies = [ "heck", "pluralizer", @@ -1381,7 +1292,7 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toasty" version = "0.1.0" -source = "git+https://github.com/fakeshadow/toasty?branch=engine#adff354a113ae85dd26a5fd8cecc2807fa12d5bf" +source = "git+https://github.com/fakeshadow/toasty?branch=engine#2132c89dfd7a4698cdaaa85888c016b97c01471a" dependencies = [ "anyhow", "async-stream", @@ -1399,7 +1310,7 @@ dependencies = [ [[package]] name = "toasty-codegen" version = "0.1.0" -source = "git+https://github.com/fakeshadow/toasty?branch=engine#adff354a113ae85dd26a5fd8cecc2807fa12d5bf" +source = "git+https://github.com/fakeshadow/toasty?branch=engine#2132c89dfd7a4698cdaaa85888c016b97c01471a" dependencies = [ "proc-macro2", "quote", @@ -1410,7 +1321,7 @@ dependencies = [ [[package]] name = "toasty-core" version = "0.1.0" -source = "git+https://github.com/fakeshadow/toasty?branch=engine#adff354a113ae85dd26a5fd8cecc2807fa12d5bf" +source = "git+https://github.com/fakeshadow/toasty?branch=engine#2132c89dfd7a4698cdaaa85888c016b97c01471a" dependencies = [ "anyhow", "async-trait", @@ -1424,7 +1335,7 @@ dependencies = [ [[package]] name = "toasty-macros" version = "0.1.0" -source = "git+https://github.com/fakeshadow/toasty?branch=engine#adff354a113ae85dd26a5fd8cecc2807fa12d5bf" +source = "git+https://github.com/fakeshadow/toasty?branch=engine#2132c89dfd7a4698cdaaa85888c016b97c01471a" dependencies = [ "proc-macro2", "quote", @@ -1436,7 +1347,7 @@ dependencies = [ [[package]] name = "toasty-sql" version = "0.1.0" -source = "git+https://github.com/fakeshadow/toasty?branch=engine#adff354a113ae85dd26a5fd8cecc2807fa12d5bf" +source = "git+https://github.com/fakeshadow/toasty?branch=engine#2132c89dfd7a4698cdaaa85888c016b97c01471a" dependencies = [ "anyhow", "toasty-core", @@ -1454,7 +1365,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2 0.6.1", + "socket2", "tokio-macros", "windows-sys 0.61.2", ] @@ -1470,32 +1381,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tokio-postgres" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b40d66d9b2cfe04b628173409368e58247e8eddbbd3b0e6c6ba1d09f20f6c9e" -dependencies = [ - "async-trait", - "byteorder", - "bytes", - "fallible-iterator", - "futures-channel", - "futures-util", - "log", - "parking_lot", - "percent-encoding", - "phf", - "pin-project-lite", - "postgres-protocol", - "postgres-types", - "rand 0.9.2", - "socket2 0.6.1", - "tokio", - "tokio-util", - "whoami", -] - [[package]] name = "tokio-stream" version = "0.1.17" @@ -1509,29 +1394,14 @@ dependencies = [ [[package]] name = "tokio-uring" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "748482e3e13584a34664a710168ad5068e8cb1d968aa4ffa887e83ca6dd27967" +version = "0.5.1" +source = "git+http://github.com/fakeshadow/tokio-uring?rev=97d9a98#97d9a988704b5466809633b3ca6ba07acba3f38b" dependencies = [ "bytes", - "futures-util", "io-uring", "libc", "slab", - "socket2 0.4.10", - "tokio", -] - -[[package]] -name = "tokio-util" -version = "0.7.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", + "socket2", "tokio", ] @@ -1604,9 +1474,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.18.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a" dependencies = [ "getrandom 0.3.4", "js-sys", @@ -1653,12 +1523,6 @@ dependencies = [ "wit-bindgen", ] -[[package]] -name = "wasite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" - [[package]] name = "wasm-bindgen" version = "0.2.106" @@ -1704,27 +1568,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "web-sys" -version = "0.3.83" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b32828d774c412041098d182a8b38b16ea816958e07cf40eec2bc080ae137ac" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "whoami" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" -dependencies = [ - "libredox", - "wasite", - "web-sys", -] - [[package]] name = "winapi" version = "0.3.9" @@ -1851,7 +1694,7 @@ checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" [[package]] name = "xitca-codegen" version = "0.4.0" -source = "git+http://github.com/HFQR/xitca-web?rev=cf70ed7#cf70ed7328c1b6d60c339a7dc67be454f59b1736" +source = "git+http://github.com/HFQR/xitca-web?rev=adc7ff1#adc7ff1a385c8a81e21a3c7619dc70adaf9e79de" dependencies = [ "quote", "syn", @@ -1860,7 +1703,7 @@ dependencies = [ [[package]] name = "xitca-http" version = "0.7.1" -source = "git+http://github.com/HFQR/xitca-web?rev=cf70ed7#cf70ed7328c1b6d60c339a7dc67be454f59b1736" +source = "git+http://github.com/HFQR/xitca-web?rev=adc7ff1#adc7ff1a385c8a81e21a3c7619dc70adaf9e79de" dependencies = [ "futures-core", "http", @@ -1868,7 +1711,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.6.1", + "socket2", "tokio", "tokio-uring", "tracing", @@ -1893,7 +1736,7 @@ dependencies = [ [[package]] name = "xitca-postgres" version = "0.3.0" -source = "git+http://github.com/HFQR/xitca-web?rev=cf70ed7#cf70ed7328c1b6d60c339a7dc67be454f59b1736" +source = "git+http://github.com/HFQR/xitca-web?rev=adc7ff1#adc7ff1a385c8a81e21a3c7619dc70adaf9e79de" dependencies = [ "fallible-iterator", "futures-core", @@ -1909,7 +1752,7 @@ dependencies = [ [[package]] name = "xitca-postgres-diesel" version = "0.2.0" -source = "git+https://github.com/fakeshadow/xitca-postgres-diesel?rev=7671975#7671975951fdd71bfaedaa1686aa7c69e4af6caf" +source = "git+https://github.com/fakeshadow/xitca-postgres-diesel?rev=fb5dcba#fb5dcba5a89164a880a3e82d62dcb3ae5e99ae6e" dependencies = [ "diesel", "diesel-async", @@ -1946,9 +1789,9 @@ dependencies = [ [[package]] name = "xitca-server" version = "0.5.0" -source = "git+http://github.com/HFQR/xitca-web?rev=cf70ed7#cf70ed7328c1b6d60c339a7dc67be454f59b1736" +source = "git+http://github.com/HFQR/xitca-web?rev=adc7ff1#adc7ff1a385c8a81e21a3c7619dc70adaf9e79de" dependencies = [ - "socket2 0.6.1", + "socket2", "tokio", "tokio-uring", "tracing", @@ -1960,7 +1803,7 @@ dependencies = [ [[package]] name = "xitca-service" version = "0.3.0" -source = "git+http://github.com/HFQR/xitca-web?rev=cf70ed7#cf70ed7328c1b6d60c339a7dc67be454f59b1736" +source = "git+http://github.com/HFQR/xitca-web?rev=adc7ff1#adc7ff1a385c8a81e21a3c7619dc70adaf9e79de" [[package]] name = "xitca-unsafe-collection" @@ -2006,7 +1849,7 @@ dependencies = [ [[package]] name = "xitca-web" version = "0.7.1" -source = "git+http://github.com/HFQR/xitca-web?rev=cf70ed7#cf70ed7328c1b6d60c339a7dc67be454f59b1736" +source = "git+http://github.com/HFQR/xitca-web?rev=adc7ff1#adc7ff1a385c8a81e21a3c7619dc70adaf9e79de" dependencies = [ "futures-core", "pin-project-lite", diff --git a/frameworks/Rust/xitca-web/Cargo.toml b/frameworks/Rust/xitca-web/Cargo.toml index 5b116760b18..4c4aca6acdf 100755 --- a/frameworks/Rust/xitca-web/Cargo.toml +++ b/frameworks/Rust/xitca-web/Cargo.toml @@ -9,19 +9,19 @@ path = "./src/main.rs" required-features = ["io-uring", "pg", "router", "template"] [[bin]] -name = "xitca-web-unrealistic" -path = "./src/main_unrealistic.rs" -required-features = ["perf", "pg", "template"] +name = "xitca-web-barebone" +path = "./src/main_barebone.rs" +required-features = ["perf", "perf-json", "pg", "template"] [[bin]] name = "xitca-web-diesel" path = "./src/main_orm.rs" -required-features = ["diesel", "template", "web-codegen"] +required-features = ["diesel", "perf", "template", "web-codegen"] [[bin]] name = "xitca-web-toasty" path = "./src/main_orm.rs" -required-features = ["toasty", "template", "web-codegen"] +required-features = ["perf", "template", "toasty", "web-codegen"] [features] # pg client optional @@ -41,7 +41,8 @@ template = ["dep:sailfish"] # io-uring optional io-uring = ["dep:tokio-uring", "xitca-http/io-uring", "xitca-server/io-uring"] # unrealistic performance optimization -perf = ["dep:core_affinity", "dep:mimalloc", "tokio/parking_lot", "simd-json", "simd-json-derive"] +perf = ["dep:core_affinity", "dep:mimalloc", "tokio/parking_lot"] +perf-json = ["simd-json", "simd-json-derive"] [dependencies] xitca-http = "0.7" @@ -63,7 +64,7 @@ xitca-postgres = { version = "0.3", optional = true } # diesel orm optional diesel = { version = "2", features = ["postgres"], optional = true } -diesel-async = { version = "0.7", features = ["bb8", "postgres"], optional = true } +diesel-async = { version = "0.7", optional = true } xitca-postgres-diesel = { version = "0.2", default-features = false, optional = true } futures-util = { version = "0.3", default-features = false, optional = true } @@ -85,7 +86,7 @@ simd-json-derive = { version = "0.18", default-features = false, optional = tru futures-core = { version = "0.3", default-features = false } rand = { version = "0.9", features = ["os_rng", "small_rng"], default-features = false } -tokio = "1.41" +tokio = "1.48" [profile.release] lto = true @@ -94,17 +95,18 @@ codegen-units = 1 panic = "abort" [patch.crates-io] -xitca-postgres-diesel = { git = "https://github.com/fakeshadow/xitca-postgres-diesel", rev = "7671975" } +xitca-postgres-diesel = { git = "https://github.com/fakeshadow/xitca-postgres-diesel", rev = "fb5dcba" } xitca-postgres-toasty = { git = "https://github.com/fakeshadow/xitca-postgres-toasty", rev = "04bedb8" } # personal fork for efficient toasty engine fine tuned with pipelined xitca-postgres client toasty = { git = "https://github.com/fakeshadow/toasty", branch = "engine" } toasty-core = { git = "https://github.com/fakeshadow/toasty", branch = "engine" } toasty-sql = { git = "https://github.com/fakeshadow/toasty", branch = "engine" } - -xitca-codegen = { git = "http://github.com/HFQR/xitca-web", rev = "cf70ed7" } -xitca-http = { git = "http://github.com/HFQR/xitca-web", rev = "cf70ed7" } -xitca-postgres = { git = "http://github.com/HFQR/xitca-web", rev = "cf70ed7" } -xitca-server = { git = "http://github.com/HFQR/xitca-web", rev = "cf70ed7" } -xitca-service = { git = "http://github.com/HFQR/xitca-web", rev = "cf70ed7" } -xitca-web = { git = "http://github.com/HFQR/xitca-web", rev = "cf70ed7" } +tokio-uring = { git = "http://github.com/fakeshadow/tokio-uring", rev = "97d9a98" } + +xitca-codegen = { git = "http://github.com/HFQR/xitca-web", rev = "adc7ff1" } +xitca-http = { git = "http://github.com/HFQR/xitca-web", rev = "adc7ff1" } +xitca-postgres = { git = "http://github.com/HFQR/xitca-web", rev = "adc7ff1" } +xitca-server = { git = "http://github.com/HFQR/xitca-web", rev = "adc7ff1" } +xitca-service = { git = "http://github.com/HFQR/xitca-web", rev = "adc7ff1" } +xitca-web = { git = "http://github.com/HFQR/xitca-web", rev = "adc7ff1" } diff --git a/frameworks/Rust/xitca-web/benchmark_config.json b/frameworks/Rust/xitca-web/benchmark_config.json index 4481eae03b2..b1b96249711 100755 --- a/frameworks/Rust/xitca-web/benchmark_config.json +++ b/frameworks/Rust/xitca-web/benchmark_config.json @@ -24,7 +24,7 @@ "notes": "", "versus": "" }, - "unrealistic": { + "barebone": { "json_url": "/json", "plaintext_url": "/plaintext", "db_url": "/db", @@ -32,7 +32,7 @@ "query_url": "/queries?q=", "update_url": "/updates?q=", "port": 8080, - "approach": "Stripped", + "approach": "Realistic", "classification": "Platform", "database": "Postgres", "framework": "xitca-web", @@ -42,7 +42,7 @@ "webserver": "xitca-server", "os": "Linux", "database_os": "Linux", - "display_name": "xitca-web [unrealistic]", + "display_name": "xitca-web [barebone]", "notes": "", "versus": "" }, diff --git a/frameworks/Rust/xitca-web/src/db.rs b/frameworks/Rust/xitca-web/src/db.rs index 697023b33de..7a380357cd5 100755 --- a/frameworks/Rust/xitca-web/src/db.rs +++ b/frameworks/Rust/xitca-web/src/db.rs @@ -1,26 +1,24 @@ #[path = "./db_util.rs"] mod db_util; -use core::cell::RefCell; - -use xitca_postgres::{Execute, iter::AsyncLendingIterator, pipeline::Pipeline, pool::Pool}; +use xitca_postgres::{Execute, iter::AsyncLendingIterator, pool::Pool}; use super::{ ser::{Fortune, Fortunes, World}, - util::{DB_URL, HandleResult}, + util::{DB_URL, HandleResult, Rand}, }; -use db_util::{FORTUNE_STMT, Shared, UPDATE_STMT, WORLD_STMT, not_found}; +use db_util::{FORTUNE_STMT, UPDATE_STMT, WORLD_STMT, not_found}; pub struct Client { pool: Pool, - shared: RefCell, + rng: core::cell::RefCell, } pub async fn create() -> HandleResult { Ok(Client { pool: Pool::builder(DB_URL).capacity(1).build()?, - shared: Default::default(), + rng: Default::default(), }) } @@ -28,7 +26,7 @@ impl Client { pub async fn get_world(&self) -> HandleResult { let mut conn = self.pool.get().await?; let stmt = WORLD_STMT.execute(&mut conn).await?; - let id = self.shared.borrow_mut().0.gen_id(); + let id = self.rng.borrow_mut().gen_id(); let mut res = stmt.bind([id]).query(&conn.consume()).await?; let row = res.try_next().await?.ok_or_else(not_found)?; Ok(World::new(row.get(0), row.get(1))) @@ -38,19 +36,21 @@ impl Client { let mut conn = self.pool.get().await?; let stmt = WORLD_STMT.execute(&mut conn).await?; - let mut res = { - let (ref mut rng, ref mut buf) = *self.shared.borrow_mut(); - let mut pipe = Pipeline::with_capacity_from_buf(num as _, buf); - rng.gen_multi() - .take(num as _) - .try_for_each(|id| stmt.bind([id]).query(&mut pipe))?; - pipe.query(&conn.consume())? - }; + let get = self + .rng + .borrow_mut() + .gen_multi() + .take(num as _) + .map(|id| stmt.bind([id]).query(&conn)) + .collect::>(); + + drop(conn); let mut worlds = Vec::with_capacity(num as _); - while let Some(mut item) = res.try_next().await? { - let row = item.try_next().await?.ok_or_else(not_found)?; + for get in get { + let mut res = get.await?; + let row = res.try_next().await?.ok_or_else(not_found)?; worlds.push(World::new(row.get(0), row.get(1))); } @@ -62,32 +62,32 @@ impl Client { let world_stmt = WORLD_STMT.execute(&mut conn).await?; let update_stmt = UPDATE_STMT.execute(&mut conn).await?; - let (mut res, worlds) = { - let (ref mut rng, ref mut buf) = *self.shared.borrow_mut(); - let mut pipe = Pipeline::with_capacity_from_buf((num + 1) as _, buf); - + let (get, update, worlds) = { + let mut rng = self.rng.borrow_mut(); let mut ids = rng.gen_multi().take(num as _).collect::>(); ids.sort(); - let (rngs, worlds) = ids + let (get, rngs, worlds) = ids .iter() .cloned() .zip(rng.gen_multi()) .map(|(id, rand)| { - world_stmt.bind([id]).query(&mut pipe)?; - HandleResult::Ok((rand, World::new(id, rand))) + let get = world_stmt.bind([id]).query(&conn); + (get, rand, World::new(id, rand)) }) - .collect::, Vec<_>)>>()?; - update_stmt.bind([&ids, &rngs]).query(&mut pipe)?; - (pipe.query(&conn.consume())?, worlds) + .collect::<(Vec<_>, Vec<_>, Vec<_>)>(); + + let update = update_stmt.bind([&ids, &rngs]).query(&conn.consume()); + + (get, update, worlds) }; - while let Some(mut item) = res.try_next().await? { - while let Some(row) = item.try_next().await? { - let _rand = row.get::(1); - } + for fut in get { + let _rand = fut.await?.try_next().await?.ok_or_else(not_found)?.get::(1); } + update.await?; + Ok(worlds) } diff --git a/frameworks/Rust/xitca-web/src/db_diesel.rs b/frameworks/Rust/xitca-web/src/db_diesel.rs index d6bae3d2d8f..19231abee85 100755 --- a/frameworks/Rust/xitca-web/src/db_diesel.rs +++ b/frameworks/Rust/xitca-web/src/db_diesel.rs @@ -1,8 +1,5 @@ use diesel::prelude::*; -use diesel_async::{ - RunQueryDsl, - pooled_connection::{AsyncDieselConnectionManager, bb8}, -}; +use diesel_async::{AsyncConnection, RunQueryDsl}; use futures_util::future::{TryFutureExt, TryJoinAll, try_join}; use xitca_postgres_diesel::AsyncPgConnection; @@ -12,18 +9,13 @@ use crate::{ }; pub struct Pool { - pool: bb8::Pool, + pool: AsyncPgConnection, rng: core::cell::RefCell, } impl Pool { pub async fn create() -> HandleResult { - let pool = bb8::Pool::builder() - .max_size(1) - .min_idle(Some(1)) - .test_on_check_out(false) - .build(AsyncDieselConnectionManager::new(DB_URL)) - .await?; + let pool = AsyncPgConnection::establish(DB_URL).await?; Ok(Self { pool, @@ -36,8 +28,7 @@ impl Pool { use schema::world::dsl::*; let w_id = self.rng.borrow_mut().gen_id(); - let mut conn = self.pool.get().await?; - world.filter(id.eq(w_id)).first(&mut conn).map_err(Into::into) + world.filter(id.eq(w_id)).first(&mut &self.pool).map_err(Into::into) } .await } @@ -46,12 +37,11 @@ impl Pool { { use schema::world::dsl::*; - let mut conn = self.pool.get().await?; self.rng .borrow_mut() .gen_multi() .take(num as _) - .map(|w_id| world.filter(id.eq(w_id)).first(&mut conn).map_err(Into::into)) + .map(|w_id| world.filter(id.eq(w_id)).first(&mut &self.pool).map_err(Into::into)) .collect::>() } .await @@ -61,7 +51,6 @@ impl Pool { { use schema::world::dsl::*; - let mut conn = self.pool.get().await?; let mut rng = self.rng.borrow_mut(); let mut params = Vec::with_capacity(num as _); @@ -71,7 +60,7 @@ impl Pool { .take(num as _) .zip(rng.gen_multi()) .map(|(w_id, rng)| { - let get = world.filter(id.eq(w_id)).first::(&mut conn); + let get = world.filter(id.eq(w_id)).first::(&mut &self.pool); params.push((w_id, rng)); @@ -84,7 +73,7 @@ impl Pool { .collect::>(); let sql = update_query_from_ids(params); - let update = diesel::sql_query(sql).execute(&mut conn).map_err(Into::into); + let update = diesel::sql_query(sql).execute(&mut &self.pool).map_err(Into::into); try_join(get, update) } @@ -96,8 +85,7 @@ impl Pool { { use schema::fortune::dsl::*; - let mut conn = self.pool.get().await?; - fortune.load(&mut conn).map_err(Into::into) + fortune.load(&mut &self.pool).map_err(Into::into) } .await .map(Fortunes::new) diff --git a/frameworks/Rust/xitca-web/src/db_toasty.rs b/frameworks/Rust/xitca-web/src/db_toasty.rs index f0681ba00e6..092f483a61b 100755 --- a/frameworks/Rust/xitca-web/src/db_toasty.rs +++ b/frameworks/Rust/xitca-web/src/db_toasty.rs @@ -6,7 +6,6 @@ use crate::{ util::{DB_URL, HandleResult, Rand}, }; -// this is not a realistic connection pool. pub struct Pool { db: Db, rng: core::cell::RefCell, diff --git a/frameworks/Rust/xitca-web/src/db_unrealistic.rs b/frameworks/Rust/xitca-web/src/db_unrealistic.rs index 6a266483fc7..364e020b3b0 100755 --- a/frameworks/Rust/xitca-web/src/db_unrealistic.rs +++ b/frameworks/Rust/xitca-web/src/db_unrealistic.rs @@ -4,20 +4,18 @@ #[path = "./db_util.rs"] mod db_util; -use std::cell::RefCell; - -use xitca_postgres::{Execute, iter::AsyncLendingIterator, pipeline::Pipeline, statement::Statement}; +use xitca_postgres::{Execute, iter::AsyncLendingIterator, statement::Statement}; use super::{ ser::{Fortune, Fortunes, World}, - util::{DB_URL, HandleResult}, + util::{DB_URL, HandleResult, Rand}, }; -use db_util::{FORTUNE_STMT, Shared, UPDATE_STMT, WORLD_STMT, not_found}; +use db_util::{FORTUNE_STMT, UPDATE_STMT, WORLD_STMT, not_found}; pub struct Client { cli: xitca_postgres::Client, - shared: RefCell, + rng: core::cell::RefCell, fortune: Statement, world: Statement, update: Statement, @@ -37,7 +35,7 @@ pub async fn create() -> HandleResult { Ok(Client { cli, - shared: Default::default(), + rng: Default::default(), world, fortune, update, @@ -46,63 +44,59 @@ pub async fn create() -> HandleResult { impl Client { pub async fn get_world(&self) -> HandleResult { - let id = self.shared.borrow_mut().0.gen_id(); + let id = self.rng.borrow_mut().gen_id(); let mut res = self.world.bind([id]).query(&self.cli).await?; let row = res.try_next().await?.ok_or_else(not_found)?; Ok(World::new(row.get(0), row.get(1))) } pub async fn get_worlds(&self, num: u16) -> HandleResult> { - let mut res = { - let (ref mut rng, ref mut buf) = *self.shared.borrow_mut(); - let mut pipe = Pipeline::with_capacity_from_buf(num as _, buf); - rng.gen_multi() - .take(num as _) - .try_for_each(|id| self.world.bind([id]).query(&mut pipe))?; - pipe.query(&self.cli)? - }; + let get = self + .rng + .borrow_mut() + .gen_multi() + .take(num as _) + .map(|id| self.world.bind([id]).query(&self.cli)) + .collect::>(); let mut worlds = Vec::with_capacity(num as _); - while let Some(mut item) = res.try_next().await? { - while let Some(row) = item.try_next().await? { - worlds.push(World::new(row.get(0), row.get(1))); - } + for query in get { + let mut res = query.await?; + let row = res.try_next().await?.ok_or_else(not_found)?; + worlds.push(World::new(row.get(0), row.get(1))); } Ok(worlds) } pub async fn update(&self, num: u16) -> HandleResult> { - let len = num as usize; - - let (mut res, worlds) = { - let (ref mut rng, ref mut buf) = *self.shared.borrow_mut(); - let mut pipe = Pipeline::with_capacity_from_buf(len + 1, buf); - + let (get, update, worlds) = { + let mut rng = self.rng.borrow_mut(); let mut ids = rng.gen_multi().take(num as _).collect::>(); ids.sort(); - let (rngs, worlds) = ids + let (get, rngs, worlds) = ids .iter() .cloned() .zip(rng.gen_multi()) .map(|(id, rand)| { - self.world.bind([id]).query(&mut pipe)?; - HandleResult::Ok((rand, World::new(id, rand))) + let get = self.world.bind([id]).query(&self.cli); + (get, rand, World::new(id, rand)) }) - .collect::, Vec<_>)>>()?; - self.update.bind([&ids, &rngs]).query(&mut pipe)?; + .collect::<(Vec<_>, Vec<_>, Vec<_>)>(); + + let update = self.update.bind([&ids, &rngs]).query(&self.cli); - (pipe.query(&self.cli)?, worlds) + (get, update, worlds) }; - while let Some(mut item) = res.try_next().await? { - while let Some(row) = item.try_next().await? { - let _rand = row.get::(1); - } + for fut in get { + let _rand = fut.await?.try_next().await?.ok_or_else(not_found)?.get::(1); } + update.await?; + Ok(worlds) } diff --git a/frameworks/Rust/xitca-web/src/db_util.rs b/frameworks/Rust/xitca-web/src/db_util.rs index 83d03575709..afde4496d9e 100755 --- a/frameworks/Rust/xitca-web/src/db_util.rs +++ b/frameworks/Rust/xitca-web/src/db_util.rs @@ -1,31 +1,21 @@ -#[cfg(feature = "pg")] -pub use pg::*; +use xitca_postgres::{ + statement::{Statement, StatementNamed}, + types::Type, +}; -#[cfg(feature = "pg")] -pub mod pg { - #![allow(dead_code)] +use crate::util::Error; - use xitca_io::bytes::BytesMut; - use xitca_postgres::{ - statement::{Statement, StatementNamed}, - types::Type, - }; +pub const FORTUNE_STMT: StatementNamed = Statement::named("SELECT id,message FROM fortune", &[]); - use crate::util::{Error, Rand}; +pub const WORLD_STMT: StatementNamed = Statement::named("SELECT id,randomnumber FROM world WHERE id=$1", &[Type::INT4]); - pub type Shared = (Rand, BytesMut); +pub const UPDATE_STMT: StatementNamed = Statement::named( + "UPDATE world SET randomnumber=w.r FROM (SELECT unnest($1) as i,unnest($2) as r) w WHERE world.id=w.i", + &[Type::INT4_ARRAY, Type::INT4_ARRAY], +); - pub const FORTUNE_STMT: StatementNamed = Statement::named("SELECT id,message FROM fortune", &[]); - pub const WORLD_STMT: StatementNamed = - Statement::named("SELECT id,randomnumber FROM world WHERE id=$1", &[Type::INT4]); - pub const UPDATE_STMT: StatementNamed = Statement::named( - "UPDATE world SET randomnumber=w.r FROM (SELECT unnest($1) as i,unnest($2) as r) w WHERE world.id=w.i", - &[Type::INT4_ARRAY, Type::INT4_ARRAY], - ); - - #[cold] - #[inline(never)] - pub fn not_found() -> Error { - "request World does not exist".into() - } +#[cold] +#[inline(never)] +pub fn not_found() -> Error { + "request World does not exist".into() } diff --git a/frameworks/Rust/xitca-web/src/main.rs b/frameworks/Rust/xitca-web/src/main.rs index 449651ed129..30fded2d8d9 100755 --- a/frameworks/Rust/xitca-web/src/main.rs +++ b/frameworks/Rust/xitca-web/src/main.rs @@ -47,7 +47,6 @@ fn main() -> std::io::Result<()> { "/fortunes", get(fn_service(async |ctx: Ctx| { let (req, state) = ctx.into_parts(); - use sailfish::TemplateOnce; let fortunes = state.client.tell_fortune().await?.render_once()?; req.html_response(fortunes) })), diff --git a/frameworks/Rust/xitca-web/src/main_unrealistic.rs b/frameworks/Rust/xitca-web/src/main_barebone.rs similarity index 99% rename from frameworks/Rust/xitca-web/src/main_unrealistic.rs rename to frameworks/Rust/xitca-web/src/main_barebone.rs index 2b45164fd8d..a12504ea2fa 100644 --- a/frameworks/Rust/xitca-web/src/main_unrealistic.rs +++ b/frameworks/Rust/xitca-web/src/main_barebone.rs @@ -113,7 +113,6 @@ async fn handler<'h>(req: Request<'h, State>, res: Response<'h>) -> // all database related categories are unrealistic. please reference db_unrealistic module for detail. "/fortunes" => { - use sailfish::TemplateOnce; let fortunes = req.ctx.client.tell_fortune().await.unwrap().render_once().unwrap(); res.status(StatusCode::OK) .header("content-type", "text/html; charset=utf-8") diff --git a/frameworks/Rust/xitca-web/src/main_orm.rs b/frameworks/Rust/xitca-web/src/main_orm.rs index 37311cd4f73..6fd0e7a3732 100755 --- a/frameworks/Rust/xitca-web/src/main_orm.rs +++ b/frameworks/Rust/xitca-web/src/main_orm.rs @@ -1,3 +1,6 @@ +#[global_allocator] +static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc; + mod ser; mod util; @@ -47,7 +50,6 @@ async fn db(StateRef(pool): StateRef<'_, Pool>) -> HandleResult> { #[route("/fortunes", method = get)] async fn fortunes(StateRef(pool): StateRef<'_, Pool>) -> HandleResult> { - use sailfish::TemplateOnce; let html = pool.tell_fortune().await?.render_once()?; Ok(Html(html)) } diff --git a/frameworks/Rust/xitca-web/src/ser.rs b/frameworks/Rust/xitca-web/src/ser.rs index 88ae65f5e7d..1e52bb2cf20 100755 --- a/frameworks/Rust/xitca-web/src/ser.rs +++ b/frameworks/Rust/xitca-web/src/ser.rs @@ -1,5 +1,7 @@ #![allow(dead_code)] +use std::borrow::Cow; + use serde::{Deserialize, Deserializer, Serialize, Serializer, ser::SerializeStruct}; use xitca_http::{ body::Once, @@ -16,7 +18,7 @@ use crate::util::{Error, State}; const HELLO: &str = "Hello, World!"; const HELLO_BYTES: &[u8] = HELLO.as_bytes(); -#[cfg_attr(feature = "perf", derive(simd_json_derive::Serialize))] +#[cfg_attr(feature = "perf-json", derive(simd_json_derive::Serialize))] #[derive(Clone)] pub struct Message { message: &'static str, @@ -34,7 +36,7 @@ pub struct Num(pub u16); #[cfg_attr(feature = "diesel", derive(diesel::Queryable))] #[cfg_attr(feature = "toasty", derive(toasty::Model))] #[cfg_attr(feature = "toasty", table = "world")] -#[cfg_attr(feature = "perf", derive(simd_json_derive::Serialize))] +#[cfg_attr(feature = "perf-json", derive(simd_json_derive::Serialize))] pub struct World { #[cfg_attr(feature = "toasty", key)] pub id: i32, @@ -54,27 +56,12 @@ impl World { pub struct Fortune { #[cfg_attr(feature = "toasty", key)] pub id: i32, - #[cfg(not(feature = "toasty"))] - pub message: std::borrow::Cow<'static, str>, - #[cfg(feature = "toasty")] - pub message: String, + pub message: Cow<'static, str>, } -#[cfg(not(feature = "toasty"))] impl Fortune { #[inline] - pub fn new(id: i32, message: impl Into>) -> Self { - Self { - id, - message: message.into(), - } - } -} - -#[cfg(feature = "toasty")] -impl Fortune { - #[inline] - pub fn new(id: i32, message: impl Into) -> Self { + pub fn new(id: i32, message: impl Into>) -> Self { Self { id, message: message.into(), @@ -90,8 +77,8 @@ pub struct Fortunes { // using the macro does not have any perf cost and this piece of code is expanded manually to speed up compile time of // bench to reduce resource usage of bench runner #[cfg(feature = "template")] -impl sailfish::TemplateOnce for Fortunes { - fn render_once(self) -> sailfish::RenderResult { +impl Fortunes { + pub fn render_once(self) -> sailfish::RenderResult { use sailfish::runtime::{Buffer, Render}; const PREFIX: &str = "\n\nFortunes\n\n\n\n"; @@ -111,10 +98,6 @@ impl sailfish::TemplateOnce for Fortunes { Ok(buf.into_string()) } - - fn render_once_to(self, _: &mut sailfish::runtime::Buffer) -> Result<(), sailfish::runtime::RenderError> { - unimplemented!("") - } } impl Fortunes { diff --git a/frameworks/Rust/xitca-web/templates/fortune.stpl b/frameworks/Rust/xitca-web/templates/fortune.stpl deleted file mode 100644 index 28227945b4c..00000000000 --- a/frameworks/Rust/xitca-web/templates/fortune.stpl +++ /dev/null @@ -1,10 +0,0 @@ - - - Fortunes - -
idmessage
- - <% for item in self.items { %><% } %> -
idmessage
<%= item.id %><%= &*item.message %>
- - \ No newline at end of file diff --git a/frameworks/Rust/xitca-web/xitca-web-barebone.dockerfile b/frameworks/Rust/xitca-web/xitca-web-barebone.dockerfile new file mode 100644 index 00000000000..4a5bbf9d898 --- /dev/null +++ b/frameworks/Rust/xitca-web/xitca-web-barebone.dockerfile @@ -0,0 +1,10 @@ +FROM rust:1.91.1 + +ADD ./ /xitca-web +WORKDIR /xitca-web + +RUN cargo build --release --bin xitca-web-barebone --features perf,perf-json,pg,template + +EXPOSE 8080 + +CMD ./target/release/xitca-web-barebone diff --git a/frameworks/Rust/xitca-web/xitca-web-diesel.dockerfile b/frameworks/Rust/xitca-web/xitca-web-diesel.dockerfile index ceaacc0f659..66ff80b5dfd 100755 --- a/frameworks/Rust/xitca-web/xitca-web-diesel.dockerfile +++ b/frameworks/Rust/xitca-web/xitca-web-diesel.dockerfile @@ -3,7 +3,7 @@ FROM rust:1.91.1 ADD ./ /xitca-web WORKDIR /xitca-web -RUN cargo build --release --bin xitca-web-diesel --features diesel,template,web-codegen +RUN cargo build --release --bin xitca-web-diesel --features diesel,perf,template,web-codegen EXPOSE 8080 diff --git a/frameworks/Rust/xitca-web/xitca-web-toasty.dockerfile b/frameworks/Rust/xitca-web/xitca-web-toasty.dockerfile index 4de7ed3c9a6..30a2cea648d 100755 --- a/frameworks/Rust/xitca-web/xitca-web-toasty.dockerfile +++ b/frameworks/Rust/xitca-web/xitca-web-toasty.dockerfile @@ -3,7 +3,7 @@ FROM rust:1.91.1 ADD ./ /xitca-web WORKDIR /xitca-web -RUN cargo build --release --bin xitca-web-toasty --features toasty,template,web-codegen +RUN cargo build --release --bin xitca-web-toasty --features perf,template,toasty,web-codegen EXPOSE 8080 diff --git a/frameworks/Rust/xitca-web/xitca-web-unrealistic.dockerfile b/frameworks/Rust/xitca-web/xitca-web-unrealistic.dockerfile deleted file mode 100644 index 299ee0fbfc1..00000000000 --- a/frameworks/Rust/xitca-web/xitca-web-unrealistic.dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM rust:1.91.1 - -ADD ./ /xitca-web -WORKDIR /xitca-web - -RUN cargo build --release --bin xitca-web-unrealistic --features perf,pg,template - -EXPOSE 8080 - -CMD ./target/release/xitca-web-unrealistic