diff --git a/.github/workflows/bench.yaml b/.github/workflows/bench.yaml index edf8a29..0896e0e 100644 --- a/.github/workflows/bench.yaml +++ b/.github/workflows/bench.yaml @@ -1,42 +1,20 @@ on: pull_request: paths: - - 'benches/*' - - 'src/*' - - '.github/workflows/bench.yaml' + - "benches/sqlite.rs" + - "src/*" + - ".github/workflows/bench.yaml" name: Benchmark jobs: - storageBenchmark: - name: Storage Benchmarks - permissions: + benchmark: + name: Core Benchmarks + + permissions: pull-requests: write runs-on: ubuntu-latest - services: - redis: - image: redis - ports: - - 6379:6379 - postgres: - image: postgres:16 - env: - POSTGRES_PASSWORD: postgres - ports: - - 5432:5432 - mysql: - image: mysql:8 - env: - MYSQL_DATABASE: test - MYSQL_USER: test - MYSQL_PASSWORD: test - MYSQL_ROOT_PASSWORD: root - ports: - - 3306:3306 - env: - POSTGRES_URL: postgres://postgres:postgres@localhost/postgres - MYSQL_URL: mysql://test:test@localhost/test - REDIS_URL: redis://127.0.0.1/ steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4 + - uses: actions/checkout@v4 # v4 + - run: sqlite3 /tmp/test.db "create table foo (a int, b text)" - uses: boa-dev/criterion-compare-action@v3 with: branchName: ${{ github.base_ref }} diff --git a/Cargo.lock b/Cargo.lock index 80b0841..16c1339 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -45,12 +45,6 @@ version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" -[[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" @@ -77,112 +71,81 @@ name = "apalis-benches" version = "0.1.0" dependencies = [ "apalis-core", - "apalis-redis", - "apalis-sql", + "apalis-sqlite", "criterion", "futures", "paste", "pprof", "serde", "tokio", + "tower 0.4.13", ] [[package]] name = "apalis-core" -version = "0.6.4" +version = "1.0.0-alpha.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade84ea7d39131db019fb646ebff22a11ab3445c9e9deac026413980d2a9b924" +checksum = "06a04a3460ebb5b6773f03f05b1770e6ca926859d8d76cdf3c4ac7ea824b9fb9" dependencies = [ - "futures", + "futures-channel", + "futures-core", + "futures-sink", "futures-timer", - "pin-project-lite", + "futures-util", + "pin-project", "serde", "serde_json", "thiserror 2.0.11", - "tower", - "ulid", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "apalis-redis" -version = "0.6.4" +name = "apalis-sqlite" +version = "1.0.0-alpha.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d085ac6b5cf00445d45b2e1b2cfee7e1cdc3ddcb5a79db8066528a02fd85cfda" +checksum = "ff9edb056c68a126a965a581c7e5d567b0b6622c460cadc3a08316b0e9deffe7" dependencies = [ "apalis-core", + "apalis-workflow", + "bytes", "chrono", "futures", + "libsqlite3-sys", "log", - "redis", + "pin-project", "serde", + "serde_json", + "sqlx", "thiserror 2.0.11", "tokio", + "tower-layer", + "tower-service", + "ulid", ] [[package]] -name = "apalis-sql" -version = "0.6.4" +name = "apalis-workflow" +version = "0.1.0-alpha.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f390f4b5fdf9a70f9573675e33bb046e42ffa507804e08218c5c3255bd8b497" +checksum = "bf42001ba0ba01f9912008c495a4367df24aa513230685975ce54375a7a58c8a" dependencies = [ "apalis-core", - "async-stream", - "chrono", "futures", - "futures-lite", - "log", "serde", - "serde_json", - "sqlx", "thiserror 2.0.11", - "tokio", + "tower 0.5.2", + "tracing", + "ulid", ] -[[package]] -name = "arc-swap" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" - [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-trait" -version = "0.1.86" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "atoi" version = "2.0.0" @@ -198,15 +161,6 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" -[[package]] -name = "backon" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49fef586913a57ff189f25c9b3d034356a5bf6b3fa9a7f067588fe1698ba1f5d" -dependencies = [ - "fastrand", -] - [[package]] name = "backtrace" version = "0.3.74" @@ -230,22 +184,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - -[[package]] -name = "bigdecimal" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f31f3af01c5c65a07985c804d3366560e6fa7883d640a122819b14ec327482c" -dependencies = [ - "autocfg", - "libm", - "num-bigint", - "num-integer", - "num-traits", -] +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" [[package]] name = "bitflags" @@ -291,9 +232,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cast" @@ -318,11 +259,10 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", @@ -383,20 +323,6 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" -[[package]] -name = "combine" -version = "4.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" -dependencies = [ - "bytes", - "futures-core", - "memchr", - "pin-project-lite", - "tokio", - "tokio-util", -] - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -438,9 +364,9 @@ dependencies = [ [[package]] name = "crc" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" dependencies = [ "crc-catalog", ] @@ -464,7 +390,7 @@ dependencies = [ "criterion-plot", "futures", "is-terminal", - "itertools 0.10.5", + "itertools", "num-traits", "once_cell", "oorandom", @@ -486,7 +412,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ "cast", - "itertools 0.10.5", + "itertools", ] [[package]] @@ -550,9 +476,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.9" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" dependencies = [ "const-oid", "pem-rfc7468", @@ -626,9 +552,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "5.4.0" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" dependencies = [ "concurrent-queue", "parking", @@ -666,15 +592,15 @@ dependencies = [ [[package]] name = "foldhash" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" [[package]] name = "form_urlencoded" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ "percent-encoding", ] @@ -738,19 +664,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" -[[package]] -name = "futures-lite" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - [[package]] name = "futures-macro" version = "0.3.31" @@ -800,9 +713,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ "typenum", "version_check", @@ -914,14 +827,15 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.61" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -937,21 +851,22 @@ dependencies = [ [[package]] name = "icu_collections" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" dependencies = [ "displaydoc", + "potential_utf", "yoke", "zerofrom", "zerovec", ] [[package]] -name = "icu_locid" -version = "1.5.0" +name = "icu_locale_core" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" dependencies = [ "displaydoc", "litemap", @@ -960,31 +875,11 @@ dependencies = [ "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" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" dependencies = [ "displaydoc", "icu_collections", @@ -992,72 +887,59 @@ dependencies = [ "icu_properties", "icu_provider", "smallvec", - "utf16_iter", - "utf8_iter", - "write16", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" [[package]] name = "icu_properties" -version = "1.5.1" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" dependencies = [ "displaydoc", "icu_collections", - "icu_locid_transform", + "icu_locale_core", "icu_properties_data", "icu_provider", - "tinystr", + "potential_utf", + "zerotrie", "zerovec", ] [[package]] name = "icu_properties_data" -version = "1.5.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "1.5.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" dependencies = [ "displaydoc", - "icu_locid", - "icu_provider_macros", + "icu_locale_core", "stable_deref_trait", "tinystr", "writeable", "yoke", "zerofrom", + "zerotrie", "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", -] - [[package]] name = "idna" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", "smallvec", @@ -1066,9 +948,9 @@ dependencies = [ [[package]] name = "idna_adapter" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" dependencies = [ "icu_normalizer", "icu_properties", @@ -1122,15 +1004,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.14" @@ -1164,9 +1037,20 @@ checksum = "875b3680cb2f8f71bdcf9a30f38d48282f5d3c95cbf9b3fa57269bb5d5c06828" [[package]] name = "libm" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + +[[package]] +name = "libredox" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" +dependencies = [ + "bitflags 2.8.0", + "libc", + "redox_syscall", +] [[package]] name = "libsqlite3-sys" @@ -1187,9 +1071,9 @@ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" [[package]] name = "litemap" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23fb14cb19457329c82206317a5663005a4d404783dc74f4252769b0d5f42856" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" [[package]] name = "lock_api" @@ -1243,13 +1127,13 @@ dependencies = [ [[package]] name = "mio" -version = "1.0.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1263,16 +1147,6 @@ dependencies = [ "libc", ] -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-bigint-dig" version = "0.8.4" @@ -1397,9 +1271,29 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.3.1" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] name = "pin-project-lite" @@ -1436,9 +1330,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "plotters" @@ -1468,6 +1362,15 @@ dependencies = [ "plotters-backend", ] +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + [[package]] name = "pprof" version = "0.13.0" @@ -1491,11 +1394,11 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.20" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" dependencies = [ - "zerocopy 0.7.35", + "zerocopy 0.8.27", ] [[package]] @@ -1538,13 +1441,12 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.0" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha 0.9.0", - "rand_core 0.9.2", - "zerocopy 0.8.21", + "rand_core 0.9.3", ] [[package]] @@ -1564,7 +1466,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core 0.9.2", + "rand_core 0.9.3", ] [[package]] @@ -1578,12 +1480,11 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a509b1a2ffbe92afab0e55c8fd99dea1c280e8171bd2d88682bb20bc41cbc2c" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" dependencies = [ "getrandom 0.3.1", - "zerocopy 0.8.21", ] [[package]] @@ -1606,36 +1507,11 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "redis" -version = "0.27.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d8f99a4090c89cc489a94833c901ead69bfbf3877b4867d5482e321ee875bc" -dependencies = [ - "arc-swap", - "async-trait", - "backon", - "bytes", - "combine", - "futures", - "futures-util", - "itertools 0.13.0", - "itoa", - "num-bigint", - "percent-encoding", - "pin-project-lite", - "ryu", - "sha1_smol", - "tokio", - "tokio-util", - "url", -] - [[package]] name = "redox_syscall" -version = "0.5.9" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags 2.8.0", ] @@ -1680,9 +1556,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.10" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34b5020fcdea098ef7d95e9f89ec15952123a4a039badd09fabebe9e963e839" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" dependencies = [ "cc", "cfg-if", @@ -1694,9 +1570,9 @@ dependencies = [ [[package]] name = "rsa" -version = "0.9.7" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" dependencies = [ "const-oid", "digest", @@ -1733,9 +1609,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.23" +version = "0.23.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" dependencies = [ "once_cell", "ring", @@ -1746,25 +1622,19 @@ dependencies = [ ] [[package]] -name = "rustls-pemfile" -version = "2.2.0" +name = "rustls-pki-types" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" dependencies = [ - "rustls-pki-types", + "zeroize", ] -[[package]] -name = "rustls-pki-types" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" - [[package]] name = "rustls-webpki" -version = "0.102.8" +version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" dependencies = [ "ring", "rustls-pki-types", @@ -1853,17 +1723,11 @@ dependencies = [ "digest", ] -[[package]] -name = "sha1_smol" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" - [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -1935,9 +1799,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4410e73b3c0d8442c5f99b425d7a435b5ee0ae4167b3196771dd3f7a01be745f" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" dependencies = [ "sqlx-core", "sqlx-macros", @@ -1948,11 +1812,11 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a007b6936676aa9ab40207cde35daab0a04b823be8ae004368c0793b96a61e0" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" dependencies = [ - "bigdecimal", + "base64", "bytes", "chrono", "crc", @@ -1971,7 +1835,6 @@ dependencies = [ "once_cell", "percent-encoding", "rustls", - "rustls-pemfile", "serde", "serde_json", "sha2", @@ -1981,14 +1844,14 @@ dependencies = [ "tokio-stream", "tracing", "url", - "webpki-roots", + "webpki-roots 0.26.11", ] [[package]] name = "sqlx-macros" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3112e2ad78643fef903618d78cf0aec1cb3134b019730edb039b69eaf531f310" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" dependencies = [ "proc-macro2", "quote", @@ -1999,9 +1862,9 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e9f90acc5ab146a99bf5061a7eb4976b573f560bc898ef3bf8435448dd5e7ad" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" dependencies = [ "dotenvy", "either", @@ -2018,20 +1881,18 @@ dependencies = [ "sqlx-postgres", "sqlx-sqlite", "syn", - "tempfile", "tokio", "url", ] [[package]] name = "sqlx-mysql" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4560278f0e00ce64938540546f59f590d60beee33fffbd3b9cd47851e5fff233" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", "base64", - "bigdecimal", "bitflags 2.8.0", "byteorder", "bytes", @@ -2069,13 +1930,12 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b98a57f363ed6764d5b3a12bfedf62f07aa16e1856a7ddc2a0bb190a959613" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", "base64", - "bigdecimal", "bitflags 2.8.0", "byteorder", "chrono", @@ -2093,7 +1953,6 @@ dependencies = [ "log", "md-5", "memchr", - "num-bigint", "once_cell", "rand 0.8.5", "serde", @@ -2109,9 +1968,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f85ca71d3a5b24e64e1d08dd8fe36c6c95c339a896cc33068148906784620540" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" dependencies = [ "atoi", "chrono", @@ -2127,6 +1986,7 @@ dependencies = [ "serde", "serde_urlencoded", "sqlx-core", + "thiserror 2.0.11", "tracing", "url", ] @@ -2202,9 +2062,9 @@ checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" [[package]] name = "synstructure" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", @@ -2267,9 +2127,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.6" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" dependencies = [ "displaydoc", "zerovec", @@ -2287,9 +2147,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" dependencies = [ "tinyvec_macros", ] @@ -2339,16 +2199,14 @@ dependencies = [ ] [[package]] -name = "tokio-util" -version = "0.7.13" +name = "tower" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "pin-project-lite", - "tokio", + "tower-layer", + "tower-service", + "tracing", ] [[package]] @@ -2391,9 +2249,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", @@ -2411,17 +2269,18 @@ dependencies = [ [[package]] name = "typenum" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" [[package]] name = "ulid" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab82fc73182c29b02e2926a6df32f2241dbadb5cfc111fd595515b3598f46bb3" +checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe" dependencies = [ - "rand 0.9.0", + "rand 0.9.2", + "serde", "web-time", ] @@ -2460,21 +2319,16 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.4" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] -[[package]] -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" @@ -2610,20 +2464,29 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.8" +version = "0.26.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" +dependencies = [ + "webpki-roots 1.0.3", +] + +[[package]] +name = "webpki-roots" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" dependencies = [ "rustls-pki-types", ] [[package]] name = "whoami" -version = "1.5.2" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" +checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d" dependencies = [ - "redox_syscall", + "libredox", "wasite", ] @@ -2660,18 +2523,62 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.52.0" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ - "windows-targets 0.52.6", + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] name = "windows-link" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dccfd733ce2b1753b03b6d3c65edf020262ea35e20ccdf3e288043e6dd620e3" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] [[package]] name = "windows-sys" @@ -2700,6 +2607,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -2830,23 +2746,17 @@ dependencies = [ "bitflags 2.8.0", ] -[[package]] -name = "write16" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" - [[package]] name = "writeable" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" [[package]] name = "yoke" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ "serde", "stable_deref_trait", @@ -2856,9 +2766,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.7.5" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" dependencies = [ "proc-macro2", "quote", @@ -2872,17 +2782,16 @@ version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "byteorder", "zerocopy-derive 0.7.35", ] [[package]] name = "zerocopy" -version = "0.8.21" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf01143b2dd5d134f11f545cf9f1431b13b749695cb33bcce051e7568f99478" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ - "zerocopy-derive 0.8.21", + "zerocopy-derive 0.8.27", ] [[package]] @@ -2898,9 +2807,9 @@ dependencies = [ [[package]] name = "zerocopy-derive" -version = "0.8.21" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712c8386f4f4299382c9abee219bee7084f78fb939d88b6840fcc1320d5f6da2" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" dependencies = [ "proc-macro2", "quote", @@ -2930,15 +2839,26 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] [[package]] name = "zerovec" -version = "0.10.4" +version = "0.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" dependencies = [ "yoke", "zerofrom", @@ -2947,9 +2867,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.10.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 657cece..8beee53 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,24 +2,32 @@ name = "apalis-benches" version = "0.1.0" edition = "2021" +authors = ["Njuguna Mureithi "] +description = "Benchmark suite for apalis backends using Criterion and pprof." +readme = "README.md" +license = "MIT OR Apache-2.0" +repository = "https://github.com/apalis-dev/apalis-benches" +homepage = "https://github.com/apalis-dev/apalis-benches" +documentation = "https://docs.rs/apalis-benches" +keywords = ["apalis", "benchmarks", "criterion", "tokio", "profiling"] +categories = ["benchmarking", "asynchronous", "performance"] [lib] bench = false [dependencies] -serde = { version = "1" } -apalis-core = { version = "0.6" } +serde = { version = "1", features = ["derive"] } +apalis-core = { version = "1.0.0-alpha.6" } futures = "0.3" +tower = "0.4" +paste = "1.0.14" [dev-dependencies] -apalis-redis = { version = "0.6" } criterion = { version = "0.5", features = ["async_tokio", "html_reports"] } pprof = { version = "0.13", features = ["flamegraph"] } -paste = "1.0.14" -serde = "1" tokio = { version = "1", features = ["macros", "rt-multi-thread"] } -apalis-sql = { version = "0.6", features = ["sqlite", "postgres", "mysql", "tokio-comp"] } +apalis-sqlite = { version = "1.0.0-alpha.2", features = ["tokio-comp"] } [[bench]] -name = "storages" +name = "sqlite" harness = false diff --git a/README.md b/README.md new file mode 100644 index 0000000..baca249 --- /dev/null +++ b/README.md @@ -0,0 +1,127 @@ +# README — Include and Benchmark the Backend + +This README explains how to include the backend in your project and run the benchmark suite. + +## Overview +- Add the backend crate/library to your project. +- Configure any required services (databases, queues). +- Run the benchmark suite and inspect results. + +## Prerequisites +- Rust toolchain (stable) and Cargo installed. +- Any backend services the benchmarks require (e.g., Redis, Postgres, SQLite) running and reachable. +- Optional: Criterion for nicer benchmark reports (added in dev-dependencies). + +## Add the backend to your project +Example for a local crate or Git dependency in Cargo.toml: + +```toml +[dependencies] +my-backend = { path = "../my-backend" } +# or from Git +# my-backend = { git = "https://github.com/your-org/my-backend.git", tag = "vX.Y.Z" } +``` + +If the bench repository is separate, add your backend as a dependency of the bench crate or use a workspace with member crates. + +## Configure the backend +Use environment variables or a small config file the benches read. Example env variables: + +```bash +export BACKEND_URL=postgres://user:pass@localhost/db +export REDIS_URL=redis://127.0.0.1/ +``` + +Document required variables in a `.env.example` file. + +## Example usage in code +A minimal example showing how tests/benches create a client: + +```rust +let cfg = BackendConfig::from_env(); +let client = MyBackend::new(cfg).await?; +``` + +Place benchmark code under `benches/` using Criterion or the standard Rust bench harness. + +## Registering a backend benchmark +If your bench harness exposes a convenience macro to register backend benchmarks, document the macro usage and show concrete examples. Example using a `define_backend_bench!` macro: + +```rust +define_backend_bench!("sqlite_in_memory", 10000, { + let pool = SqlitePool::connect("sqlite::memory:").await.unwrap(); + let _ = SqliteStorage::setup(&pool).await; + SqliteStorage::new_with_config( + pool, + apalis_sqlite::Config::default() + ) +}); +``` + +- First argument: bench identifier/name. +- Second argument: number of operations (or configurable iterations) the bench will run. +- Third argument: async block that constructs and returns the backend/storage instance used by the benchmark. Use this block to set up in-memory DBs, connection pools, or test fixtures. Ensure any required setup (schema creation, migrations, sample data) runs before returning the constructed backend. + +Adapt the closure to your backend type (Postgres, Redis, etc.), and keep setup deterministic to reduce variance in results. + +## Run benchmarks +- Using Criterion (recommended): + 1. Ensure dev-dependency: `criterion = "0.xx"` + 2. Run: + ```bash + cargo bench + ``` + 3. Results and HTML reports are written to `target/criterion//report/index.html`. + +- Run a single bench: + ```bash + cargo bench --bench bench_name + ``` + +- To measure with specific config: + ```bash + BACKEND_URL=... cargo bench + ``` + +## Interpret results +- Criterion produces statistical summaries and HTML reports in `target/criterion`. +- For quick comparisons, use `cargo-benchcmp` or `benchcmp` tools to compare outputs between commits. + +## CI integration (GitHub Actions) +Simple CI job to run benches and upload artifacts: + +```yaml +name: Bench +on: [push] +jobs: + bench: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + - name: Run benchmarks + run: | + export BACKEND_URL=postgres://... + cargo bench --no-run + cargo bench + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: criterion-reports + path: target/criterion +``` + +## Troubleshooting +- Bench hangs: confirm backend service is reachable and credentials are correct. +- No benchmark output: ensure benches are in `benches/` or use Criterion’s macros correctly. +- For noisy environments, increase Criterion sample size in the bench code. + +## Contributing +- Keep the bench harness deterministic. +- Document required external services and sample data setup. +- Add CI checks that run benchmarks periodically or on significant performance PRs. + +That's it — add the backend as a dependency, configure env vars for services, register your backend benches (example above), run `cargo bench`, and examine `target/criterion` reports. diff --git a/benches/sqlite.rs b/benches/sqlite.rs new file mode 100644 index 0000000..adba065 --- /dev/null +++ b/benches/sqlite.rs @@ -0,0 +1,25 @@ +use apalis_benches::define_backend_bench; +use apalis_core::backend::TaskSink; +use apalis_benches::{bench_worker, TestJob}; +use criterion::{criterion_group, criterion_main, BenchmarkId}; +use criterion::Criterion; +use tokio::runtime::Runtime; +use apalis_sqlite::SqlitePool; +use apalis_sqlite::SqliteStorage; + use std::hint::black_box; + use apalis_core::task_fn::task_fn; + +define_backend_bench!("sqlite_in_file", 10000, { + let pool = SqlitePool::connect("/tmp/test.db").await.unwrap(); + let _ = SqliteStorage::setup(&pool).await; + SqliteStorage::new_with_config(&pool, &apalis_sqlite::Config::default()) +}); + +define_backend_bench!("sqlite_in_memory", 10000, { + let pool = SqlitePool::connect("sqlite::memory:").await.unwrap(); + let _ = SqliteStorage::setup(&pool).await; + SqliteStorage::new_with_config(&pool, &apalis_sqlite::Config::default()) +}); + +criterion_group!(benches, sqlite_in_file, sqlite_in_memory); +criterion_main!(benches); diff --git a/benches/storages.rs b/benches/storages.rs deleted file mode 100644 index f6bd96a..0000000 --- a/benches/storages.rs +++ /dev/null @@ -1,100 +0,0 @@ -use apalis_benches::*; -use apalis_core::service_fn::service_fn; -use apalis_core::storage::Storage; -use apalis_redis::RedisStorage; -use apalis_sql::{ - mysql::MysqlStorage, - postgres::PostgresStorage, - sqlite::SqliteStorage, - sqlx::{MySqlPool, PgPool, SqlitePool}, -}; -use criterion::*; -use paste::paste; -use std::time::{Duration, Instant}; -use tokio::runtime::Runtime; -macro_rules! define_storage_bench { - ($name:expr, $task_count:expr, $setup:expr ) => { - paste! { - fn [<$name>](c: &mut Criterion) { - let mut group = c.benchmark_group($name); - group.sample_size(10); - group.bench_with_input(BenchmarkId::new("consume", &$task_count), &$task_count, |b, &s| { - b.to_async(Runtime::new().unwrap()) - .iter_custom(|iters| async move { - let storage = { $setup }; - let mut s1 = storage.clone(); - for _ in 0..iters { - for _i in 0..s { - let _ = s1.push(TestJob).await; - } - } - - let start = Instant::now(); - for _ in 0..iters { - black_box(bench_worker($name, storage.clone(), service_fn(empty_job), s).await); - } - let elapsed = start.elapsed(); - s1.vacuum().await; - elapsed - }) - }); - group.bench_with_input(BenchmarkId::new("push", &$task_count), &$task_count, |b, &s| { - b.to_async(Runtime::new().unwrap()).iter(|| async move { - let mut storage = { $setup }; - let start = Instant::now(); - for _i in 0..s { - let _ = black_box(storage.push(TestJob).await); - } - start.elapsed() - }); - }); - }} - }; -} - -define_storage_bench!("sqlite_in_memory", 10000, { - let pool = SqlitePool::connect("sqlite::memory:").await.unwrap(); - let _ = SqliteStorage::setup(&pool).await; - SqliteStorage::new_with_config( - pool, - apalis_sql::Config::default() - .set_buffer_size(1000) - .set_poll_interval(Duration::from_millis(100)), - ) -}); - -define_storage_bench!("redis", 10000, { - let conn = apalis_redis::connect(env!("REDIS_URL")).await.unwrap(); - let redis = RedisStorage::new_with_config( - conn, - apalis_redis::Config::default() - .set_buffer_size(1000) - .set_poll_interval(Duration::from_millis(100)), - ); - redis -}); - -define_storage_bench!("postgres", 10000, { - let pool = PgPool::connect(env!("POSTGRES_URL")).await.unwrap(); - let _ = PostgresStorage::setup(&pool).await.unwrap(); - PostgresStorage::new_with_config( - pool, - apalis_sql::Config::default() - .set_buffer_size(1000) - .set_poll_interval(Duration::from_millis(100)), - ) -}); - -define_storage_bench!("mysql", 10000, { - let pool = MySqlPool::connect(env!("MYSQL_URL")).await.unwrap(); - let _ = MysqlStorage::setup(&pool).await.unwrap(); - MysqlStorage::new_with_config( - pool, - apalis_sql::Config::default() - .set_buffer_size(1000) - .set_poll_interval(Duration::from_millis(100)), - ) -}); - -criterion_group!(benches, sqlite_in_memory, redis, postgres, mysql); -criterion_main!(benches); diff --git a/src/lib.rs b/src/lib.rs index 1548aed..e8d1cdf 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,11 +1,11 @@ use apalis_core::backend::Backend; -use apalis_core::builder::WorkerBuilder; -use apalis_core::builder::WorkerFactory; -use apalis_core::layers::Layer; +use apalis_core::error::BoxDynError; use apalis_core::layers::Service; -use apalis_core::notify::Notify; -use apalis_core::request::Request; -use futures::future; +use apalis_core::task::Task; +use apalis_core::worker::builder::WorkerBuilder; +use apalis_core::worker::context::WorkerContext; +use apalis_core::worker::ReadinessService; +use apalis_core::worker::TrackerService; use futures::FutureExt; use serde::{Deserialize, Serialize}; use std::pin::Pin; @@ -14,46 +14,58 @@ use std::sync::atomic::Ordering; use std::sync::Arc; use std::task::Context; use std::task::Poll; +use tower::Layer; -#[derive(Serialize, Deserialize, Debug)] +mod macros; + +/// A simple job struct for benchmarking purposes. +#[derive(Serialize, Deserialize, Debug, Clone)] pub struct TestJob; +/// An empty job function that does nothing. pub async fn empty_job(_: TestJob) {} +/// Benchmarks a worker processing tasks from the given backend. pub async fn bench_worker(name: &str, backend: B, service: Svc, task_count: usize) where B::Stream: Send + Unpin + 'static, - B: Backend, ()> + 'static, + B: Backend + 'static + Send, Ctx: Send + Sync + 'static, - Svc: Send + Sync + Service, Response = ()> + 'static, + Svc: Send + Sync + Service> + 'static + Clone, Svc::Future: Send, - Svc::Error: Send + Sync + std::error::Error + 'static, - B::Layer: Layer>, - >>::Service: - Service, Response = ()> + Send, - <>>::Service as Service>>::Future: + Svc::Error: Into+ Send+ Sync + 'static, + B::Layer: Layer>>>, + >>>>::Service: + Service, Response = ()> + Send, + <>>>>::Service as Service>>::Future: Send, - <>>::Service as Service>>::Error: - Send + Sync + std::error::Error + 'static, + <>>>>::Service as Service>>::Error: + Into+ Send+ Sync + 'static, + B::Args: Send + 'static, + B::IdType: Send + 'static, + B::Error: Into + Send + Sync + 'static, + B::Beat: Unpin + Send + 'static, + { - let notify = Notify::new(); - let worker = WorkerBuilder::new(format!("{}-bench", name)) + let mut ctx = WorkerContext::new::(&format!("{}-bench", name)); + WorkerBuilder::new(format!("{}-bench", name)) + .backend(backend) .layer(BenchLayer { - counter: Arc::default(), - sender: notify.clone(), + counter: Arc::new(AtomicUsize::new(0)), task_count, + worker: ctx.clone(), }) - .backend(backend) .build(service) - .run(); - let wait_for_completion = notify.notified().boxed(); - future::select(worker, wait_for_completion).await; + .run_with_ctx(&mut ctx) + .await + .unwrap(); } +/// A Tower layer that wraps services to count processed tasks and stop the worker when done. pub struct BenchLayer { counter: Arc, - sender: Notify<()>, task_count: usize, + worker: WorkerContext, } impl Layer for BenchLayer { @@ -62,17 +74,19 @@ impl Layer for BenchLayer { fn layer(&self, service: S) -> Self::Service { BenchService { counter: self.counter.clone(), - sender: self.sender.clone(), max_tasks: self.task_count.clone(), service, + worker: self.worker.clone(), } } } + +/// A Tower service that counts processed tasks and stops the worker when the maximum is reached. pub struct BenchService { counter: Arc, - sender: Notify<()>, max_tasks: usize, service: S, + worker: WorkerContext, } impl Service for BenchService @@ -91,14 +105,14 @@ where fn call(&mut self, request: Request) -> Self::Future { let counter = self.counter.clone(); - let sender = self.sender.clone(); + let worker = self.worker.clone(); let max_tasks = self.max_tasks; self.service .call(request) .map(move |res| { - let val = counter.fetch_add(1, Ordering::Relaxed); + let val = counter.fetch_add(1, Ordering::Acquire); if max_tasks - 1 == val { - sender.notify(()).unwrap(); + worker.stop().unwrap(); } res }) diff --git a/src/macros.rs b/src/macros.rs new file mode 100644 index 0000000..85561a5 --- /dev/null +++ b/src/macros.rs @@ -0,0 +1,33 @@ +/// Macro to define backend benchmarks using Criterion and Tokio. +#[macro_export] +macro_rules! define_backend_bench { + ($name:expr, $task_count:expr, $setup:expr ) => { + paste::paste! { + fn [<$name>](c: &mut Criterion) { + let mut group = c.benchmark_group($name); + group.sample_size(10); + group.bench_with_input(BenchmarkId::new("consume", &$task_count), &$task_count, |b, &s| { + b.to_async(Runtime::new().unwrap()) + .iter(|| async move { + let storage = { $setup }; + let mut s1 = storage.clone(); + tokio::spawn(async move { + for _ in 0..s { + let _ = s1.push(TestJob).await; + } + }); + std::hint::black_box(bench_worker($name, storage.clone(), task_fn(apalis_benches::empty_job), s).await); + + }) + }); + group.bench_with_input(BenchmarkId::new("push", &$task_count), &$task_count, |b, &s| { + b.to_async(Runtime::new().unwrap()).iter(|| async move { + let mut storage = { $setup }; + for _i in 0..s { + let _ = black_box(storage.push(TestJob).await); + } + }); + }); + }} + }; +}