From 2dc6b721f3fa9b218d767a2f8367029277084924 Mon Sep 17 00:00:00 2001 From: Usamoi Date: Thu, 28 Dec 2023 19:14:55 +0800 Subject: [PATCH] chore: move memfd detect to detect crate (#213) Signed-off-by: usamoi --- Cargo.lock | 186 +++++++++++++++++----------------- Cargo.toml | 3 +- crates/detect/Cargo.toml | 1 + crates/detect/src/lib.rs | 1 + crates/detect/src/linux.rs | 24 +++++ crates/detect/src/x86_64.rs | 2 +- crates/detect/tests/linux.rs | 6 ++ crates/detect/tests/x86_64.rs | 12 +++ src/ipc/client/mod.rs | 30 +++--- src/lib.rs | 2 - src/utils/os.rs | 13 +-- 11 files changed, 157 insertions(+), 123 deletions(-) create mode 100644 crates/detect/src/linux.rs create mode 100644 crates/detect/tests/linux.rs create mode 100644 crates/detect/tests/x86_64.rs diff --git a/Cargo.lock b/Cargo.lock index 9fcf854..03fbedd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,9 +49,9 @@ checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" [[package]] name = "anyhow" -version = "1.0.75" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" +checksum = "c9d19de80eff169429ac1e9f48fffb163916b448a44e8e046186232046d9e1f9" [[package]] name = "arc-swap" @@ -105,7 +105,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" dependencies = [ "concurrent-queue", - "event-listener 4.0.0", + "event-listener 4.0.1", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -194,7 +194,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" dependencies = [ - "event-listener 4.0.0", + "event-listener 4.0.1", "event-listener-strategy", "pin-project-lite", ] @@ -272,19 +272,19 @@ dependencies = [ [[package]] name = "async-task" -version = "4.5.0" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" +checksum = "e1d90cd0b264dfdd8eb5bad0a2c217c1f88fa96a8573f40e7b12de23fb468f46" [[package]] name = "async-trait" -version = "0.1.74" +version = "0.1.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +checksum = "fdf6721fb0140e4f897002dd086c06f6c27775df19cfe1fccb21181a48fd2c98" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -376,7 +376,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -466,7 +466,7 @@ checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -594,7 +594,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -653,9 +653,9 @@ checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216" [[package]] name = "crossbeam" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +checksum = "6eb9105919ca8e40d437fc9cbb8f1975d916f1bd28afe795a48aae32a2cc8920" dependencies = [ "cfg-if", "crossbeam-channel", @@ -667,9 +667,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2" dependencies = [ "cfg-if", "crossbeam-utils", @@ -677,9 +677,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" dependencies = [ "cfg-if", "crossbeam-epoch", @@ -688,22 +688,20 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.15" +version = "0.9.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d" dependencies = [ "autocfg", "cfg-if", "crossbeam-utils", - "memoffset", - "scopeguard", ] [[package]] name = "crossbeam-queue" -version = "0.3.8" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +checksum = "adc6598521bb5a83d491e8c1fe51db7296019d2ca3cb93cc6c2a20369a4d78a2" dependencies = [ "cfg-if", "crossbeam-utils", @@ -711,9 +709,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c" dependencies = [ "cfg-if", ] @@ -741,7 +739,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" dependencies = [ "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -802,7 +800,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -813,7 +811,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -844,6 +842,7 @@ name = "detect" version = "0.0.0" dependencies = [ "ctor", + "rustix 0.38.28", "std_detect", ] @@ -965,7 +964,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -1016,9 +1015,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.0" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770d968249b5d99410d61f5bf89057f3199a077a04d087092f58e7d10692baae" +checksum = "84f2cdcf274580f2d63697192d744727b3198894b1bf02923643bf59e2c26712" dependencies = [ "concurrent-queue", "parking", @@ -1031,15 +1030,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" dependencies = [ - "event-listener 4.0.0", + "event-listener 4.0.1", "pin-project-lite", ] [[package]] name = "eyre" -version = "0.6.9" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f656be11ddf91bd709454d15d5bd896fbaf4cc3314e69349e4d1569f5b46cd" +checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799" dependencies = [ "indenter", "once_cell", @@ -1126,9 +1125,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures-channel" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -1136,15 +1135,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-io" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-lite" @@ -1176,32 +1175,32 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-core", "futures-macro", @@ -1409,9 +1408,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -1423,7 +1422,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2 0.5.5", "tokio", "tower-service", "tracing", @@ -1757,9 +1756,9 @@ checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memmap2" -version = "0.9.0" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deaba38d7abf1d4cca21cc89e932e542ba2b9258664d2a9ef0e61512039c9375" +checksum = "45fd3a57831bf88bc63f8cebc0cf956116276e97fef3966103e96416209f7c92" dependencies = [ "libc", ] @@ -1907,9 +1906,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] @@ -1941,9 +1940,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.97" +version = "0.9.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" +checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" dependencies = [ "cc", "libc", @@ -2191,7 +2190,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -2219,9 +2218,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" [[package]] name = "polling" @@ -2370,9 +2369,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.70" +version = "1.0.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" dependencies = [ "unicode-ident", ] @@ -2670,11 +2669,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -2756,7 +2755,7 @@ checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -2782,9 +2781,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" dependencies = [ "serde", ] @@ -2815,7 +2814,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -3016,9 +3015,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.41" +version = "2.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269" +checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53" dependencies = [ "proc-macro2", "quote", @@ -3054,15 +3053,15 @@ checksum = "cfb5fa503293557c5158bd215fdc225695e567a77e453f5d4452a50a193969bd" [[package]] name = "tempfile" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", "fastrand 2.0.1", "redox_syscall", "rustix 0.38.28", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3093,29 +3092,29 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.50" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +checksum = "83a48fd946b02c0a526b2e9481c8e2a17755e47039164a86c4070446e3a4614d" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.50" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +checksum = "e7fbe9b594d6568a6a1443250a7e67d80b74e1e96f6d1715e1e21cc1888291d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] name = "time" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" dependencies = [ "deranged", "itoa", @@ -3133,9 +3132,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" dependencies = [ "time-core", ] @@ -3166,9 +3165,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.35.0" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ "backtrace", "bytes", @@ -3190,7 +3189,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -3293,7 +3292,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", ] [[package]] @@ -3492,6 +3491,7 @@ version = "0.0.0" dependencies = [ "bincode", "byteorder", + "detect", "env_logger", "half 2.3.1", "httpmock", @@ -3579,7 +3579,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", "wasm-bindgen-shared", ] @@ -3613,7 +3613,7 @@ checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.43", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -3824,9 +3824,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.28" +version = "0.5.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c830786f7720c2fd27a1a0e27a709dbd3c4d009b56d098fc742d4f4eab91fe2" +checksum = "97a4882e6b134d6c28953a387571f1acdd3496830d5e36c5e3a1075580ea641c" dependencies = [ "memchr", ] diff --git a/Cargo.toml b/Cargo.toml index ac2853d..2328769 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ bincode.workspace = true half.workspace = true num-traits.workspace = true service = { path = "crates/service" } +detect = { path = "crates/detect" } pgrx = { git = "https://github.com/tensorchord/pgrx.git", rev = "7c30e2023876c1efce613756f5ec81f3ab05696b", default-features = false, features = [ ] } openai_api_rust = { git = "https://github.com/tensorchord/openai-api.git", rev = "228d54b6002e98257b3c81501a054942342f585f" } @@ -70,7 +71,7 @@ half = { version = "~2.3", features = [ ] } num-traits = "~0.2" validator = { version = "~0.16", features = ["derive"] } -rustix = { version = "~0.38", features = ["net", "mm"] } +rustix = { version = "~0.38", features = ["fs", "net", "mm"] } [profile.dev] panic = "unwind" diff --git a/crates/detect/Cargo.toml b/crates/detect/Cargo.toml index 758effe..b3ac782 100644 --- a/crates/detect/Cargo.toml +++ b/crates/detect/Cargo.toml @@ -6,3 +6,4 @@ edition.workspace = true [dependencies] std_detect = { git = "https://github.com/tensorchord/stdarch.git", branch = "avx512fp16" } ctor = "0.2.6" +rustix.workspace = true diff --git a/crates/detect/src/lib.rs b/crates/detect/src/lib.rs index 2a99bf5..4211fc0 100644 --- a/crates/detect/src/lib.rs +++ b/crates/detect/src/lib.rs @@ -1 +1,2 @@ +pub mod linux; pub mod x86_64; diff --git a/crates/detect/src/linux.rs b/crates/detect/src/linux.rs new file mode 100644 index 0000000..b77a966 --- /dev/null +++ b/crates/detect/src/linux.rs @@ -0,0 +1,24 @@ +#![cfg(target_os = "linux")] + +use std::sync::atomic::{AtomicBool, Ordering}; + +static ATOMIC_MEMFD: AtomicBool = AtomicBool::new(false); + +pub fn test_memfd() -> bool { + use rustix::fs::MemfdFlags; + use std::io::ErrorKind; + match rustix::fs::memfd_create(".memfd.VECTORS.SUPPORT", MemfdFlags::empty()) { + Ok(_) => true, + Err(e) if e.kind() == ErrorKind::Unsupported => false, + Err(_) => false, + } +} + +#[ctor::ctor] +fn ctor_memfd() { + ATOMIC_MEMFD.store(test_memfd(), Ordering::Relaxed); +} + +pub fn detect_memfd() -> bool { + ATOMIC_MEMFD.load(Ordering::Relaxed) +} diff --git a/crates/detect/src/x86_64.rs b/crates/detect/src/x86_64.rs index b9790a8..1c4f0d7 100644 --- a/crates/detect/src/x86_64.rs +++ b/crates/detect/src/x86_64.rs @@ -80,6 +80,6 @@ fn ctor_v2() { ATOMIC_V2.store(test_v2(), Ordering::Relaxed); } -pub fn _detect_v2() -> bool { +pub fn detect_v2() -> bool { ATOMIC_V2.load(Ordering::Relaxed) } diff --git a/crates/detect/tests/linux.rs b/crates/detect/tests/linux.rs new file mode 100644 index 0000000..b4a6552 --- /dev/null +++ b/crates/detect/tests/linux.rs @@ -0,0 +1,6 @@ +#![cfg(target_os = "linux")] + +#[test] +fn print() { + assert_eq!(detect::linux::test_memfd(), detect::linux::detect_memfd()); +} diff --git a/crates/detect/tests/x86_64.rs b/crates/detect/tests/x86_64.rs new file mode 100644 index 0000000..07f612a --- /dev/null +++ b/crates/detect/tests/x86_64.rs @@ -0,0 +1,12 @@ +#![cfg(target_arch = "x86_64")] + +#[test] +fn print() { + assert_eq!( + detect::x86_64::test_avx512fp16(), + detect::x86_64::detect_avx512fp16() + ); + assert_eq!(detect::x86_64::test_v4(), detect::x86_64::detect_v4()); + assert_eq!(detect::x86_64::test_v3(), detect::x86_64::detect_v3()); + assert_eq!(detect::x86_64::test_v2(), detect::x86_64::detect_v2()); +} diff --git a/src/ipc/client/mod.rs b/src/ipc/client/mod.rs index 145f4aa..2840dcc 100644 --- a/src/ipc/client/mod.rs +++ b/src/ipc/client/mod.rs @@ -50,13 +50,16 @@ impl Rpc { pub fn new(socket: ClientSocket) -> Self { Self { socket } } - pub fn create(self: &mut ClientGuard, id: Id, options: IndexOptions) { +} + +impl ClientGuard { + pub fn create(&mut self, id: Id, options: IndexOptions) { let packet = RpcPacket::Create { id, options }; self.socket.send(packet).friendly(); let create::CreatePacket::Leave {} = self.socket.recv().friendly(); } pub fn search( - self: &mut ClientGuard, + &mut self, id: Id, search: (DynamicVector, usize), prefilter: bool, @@ -81,7 +84,7 @@ impl Rpc { } } } - pub fn delete(self: &mut ClientGuard, id: Id, mut t: impl Delete) { + pub fn delete(&mut self, id: Id, mut t: impl Delete) { let packet = RpcPacket::Delete { id }; self.socket.send(packet).friendly(); loop { @@ -97,32 +100,28 @@ impl Rpc { } } } - pub fn insert(self: &mut ClientGuard, id: Id, insert: (DynamicVector, Pointer)) { + pub fn insert(&mut self, id: Id, insert: (DynamicVector, Pointer)) { let packet = RpcPacket::Insert { id, insert }; self.socket.send(packet).friendly(); let insert::InsertPacket::Leave {} = self.socket.recv().friendly(); } - pub fn flush(self: &mut ClientGuard, id: Id) { + pub fn flush(&mut self, id: Id) { let packet = RpcPacket::Flush { id }; self.socket.send(packet).friendly(); let flush::FlushPacket::Leave {} = self.socket.recv().friendly(); } - pub fn destory(self: &mut ClientGuard, ids: Vec) { + pub fn destory(&mut self, ids: Vec) { let packet = RpcPacket::Destory { ids }; self.socket.send(packet).friendly(); let destory::DestoryPacket::Leave {} = self.socket.recv().friendly(); } - pub fn stat(self: &mut ClientGuard, id: Id) -> IndexStat { + pub fn stat(&mut self, id: Id) -> IndexStat { let packet = RpcPacket::Stat { id }; self.socket.send(packet).friendly(); let stat::StatPacket::Leave { result } = self.socket.recv().friendly(); result } - pub fn vbase( - mut self: ClientGuard, - id: Id, - vbase: (DynamicVector, usize), - ) -> ClientGuard { + pub fn vbase(mut self, id: Id, vbase: (DynamicVector, usize)) -> ClientGuard { let packet = RpcPacket::Vbase { id, vbase }; self.socket.send(packet).friendly(); let vbase::VbaseErrorPacket {} = self.socket.recv().friendly(); @@ -155,13 +154,16 @@ pub struct Vbase { } impl Vbase { - pub fn next(self: &mut ClientGuard) -> Option { + pub fn next(&mut self) -> Option { let packet = vbase::VbasePacket::Next {}; self.socket.send(packet).friendly(); let vbase::VbaseNextPacket { p } = self.socket.recv().friendly(); p } - pub fn leave(mut self: ClientGuard) -> ClientGuard { +} + +impl ClientGuard { + pub fn leave(mut self) -> ClientGuard { let packet = vbase::VbasePacket::Leave {}; self.socket.send(packet).friendly(); let vbase::VbaseLeavePacket {} = self.socket.recv().friendly(); diff --git a/src/lib.rs b/src/lib.rs index b79c06f..0f3faa1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,8 +2,6 @@ //! //! Provides an easy-to-use extension for vector similarity search. #![feature(offset_of)] -#![feature(arbitrary_self_types)] -#![feature(lazy_cell)] #![feature(never_type)] mod bgworker; diff --git a/src/utils/os.rs b/src/utils/os.rs index 5fd9a89..431efc0 100644 --- a/src/utils/os.rs +++ b/src/utils/os.rs @@ -2,17 +2,6 @@ use rustix::fd::{AsFd, OwnedFd}; use rustix::mm::{MapFlags, ProtFlags}; use std::sync::atomic::AtomicU32; -#[cfg(target_os = "linux")] -static SUPPORT_MEMFD: std::sync::LazyLock = std::sync::LazyLock::new(|| { - use rustix::fs::MemfdFlags; - use std::io::ErrorKind; - match rustix::fs::memfd_create(".memfd.VECTORS.SUPPORT", MemfdFlags::empty()) { - Ok(_) => true, - Err(e) if e.kind() == ErrorKind::Unsupported => false, - Err(_) => false, - } -}); - #[cfg(target_os = "linux")] pub unsafe fn futex_wait(futex: &AtomicU32, value: u32) { const FUTEX_TIMEOUT: libc::timespec = libc::timespec { @@ -39,7 +28,7 @@ pub unsafe fn futex_wake(futex: &AtomicU32) { #[cfg(target_os = "linux")] pub fn memfd_create() -> std::io::Result { - if *SUPPORT_MEMFD { + if detect::linux::detect_memfd() { use rustix::fs::MemfdFlags; Ok(rustix::fs::memfd_create( format!(".memfd.VECTORS.{:x}", std::process::id()),