diff --git a/.github/workflows/bench.yaml b/.github/workflows/bench.yaml index 0896e0e..2f7718a 100644 --- a/.github/workflows/bench.yaml +++ b/.github/workflows/bench.yaml @@ -1,20 +1,38 @@ on: pull_request: paths: - - "benches/sqlite.rs" + - "benches/*" - "src/*" - ".github/workflows/bench.yaml" name: Benchmark jobs: benchmark: name: Core Benchmarks - + permissions: pull-requests: write runs-on: ubuntu-latest + services: + postgres: + image: postgres:17 + env: + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + env: + DATABASE_URL: postgres://postgres:postgres@localhost/postgres steps: - uses: actions/checkout@v4 # v4 - - run: sqlite3 /tmp/test.db "create table foo (a int, b text)" + - uses: cargo-bins/cargo-binstall@main + - run: cargo binstall sqlx-cli + - run: git clone https://github.com/apalis-dev/apalis-postgres.git + - run: sqlx migrate run --source ./apalis-postgres/migrations --database-url $DATABASE_URL + # - run: sqlite3 /tmp/test.db "create table foo (a int, b text)" + + # - run: git clone https://github.com/apalis-dev/apalis-sqlite.git + # - run: sqlx migrate run --source ./apalis-sqlite/migrations --database-url sqlite:/tmp/test.db + - uses: boa-dev/criterion-compare-action@v3 with: branchName: ${{ github.base_ref }} + benchName: "postgres" diff --git a/Cargo.lock b/Cargo.lock index 16c1339..df74049 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -71,21 +71,23 @@ name = "apalis-benches" version = "0.1.0" dependencies = [ "apalis-core", - "apalis-sqlite", + "apalis-postgres", + "apalis-sql", "criterion", "futures", "paste", "pprof", "serde", + "sqlx", "tokio", - "tower 0.4.13", + "tower", ] [[package]] name = "apalis-core" -version = "1.0.0-alpha.6" +version = "1.0.0-alpha.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06a04a3460ebb5b6773f03f05b1770e6ca926859d8d76cdf3c4ac7ea824b9fb9" +checksum = "4c89aa1201b676ea5b481685cf8af2034b96aac6c01dbc64bd6d36237b220d39" dependencies = [ "futures-channel", "futures-core", @@ -98,46 +100,38 @@ dependencies = [ "thiserror 2.0.11", "tower-layer", "tower-service", - "tracing", ] [[package]] -name = "apalis-sqlite" -version = "1.0.0-alpha.2" +name = "apalis-postgres" +version = "1.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff9edb056c68a126a965a581c7e5d567b0b6622c460cadc3a08316b0e9deffe7" +checksum = "6b3fb17b7ed405a21fd5c7964675b10fe0985e8f70d16b7f36de6bb46bcb78df" dependencies = [ "apalis-core", - "apalis-workflow", - "bytes", + "apalis-sql", "chrono", "futures", - "libsqlite3-sys", - "log", "pin-project", "serde", "serde_json", "sqlx", "thiserror 2.0.11", "tokio", - "tower-layer", - "tower-service", "ulid", ] [[package]] -name = "apalis-workflow" -version = "0.1.0-alpha.4" +name = "apalis-sql" +version = "1.0.0-alpha.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf42001ba0ba01f9912008c495a4367df24aa513230685975ce54375a7a58c8a" +checksum = "bdc2cfd73562f8e47d77073985ed05a06cf0c74b246e687896d0dcdfa6a48c81" dependencies = [ "apalis-core", - "futures", + "chrono", "serde", + "serde_json", "thiserror 2.0.11", - "tower 0.5.2", - "tracing", - "ulid", ] [[package]] @@ -1058,7 +1052,6 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" dependencies = [ - "cc", "pkg-config", "vcpkg", ] @@ -2054,12 +2047,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" - [[package]] name = "synstructure" version = "0.13.2" @@ -2209,20 +2196,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "tower" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" -dependencies = [ - "futures-core", - "futures-util", - "pin-project-lite", - "sync_wrapper", - "tower-layer", - "tower-service", -] - [[package]] name = "tower-layer" version = "0.3.3" diff --git a/Cargo.toml b/Cargo.toml index 8beee53..137edc4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -17,7 +17,7 @@ bench = false [dependencies] serde = { version = "1", features = ["derive"] } -apalis-core = { version = "1.0.0-alpha.6" } +apalis-core = { version = "1.0.0-alpha.7" } futures = "0.3" tower = "0.4" paste = "1.0.14" @@ -26,8 +26,22 @@ paste = "1.0.14" criterion = { version = "0.5", features = ["async_tokio", "html_reports"] } pprof = { version = "0.13", features = ["flamegraph"] } tokio = { version = "1", features = ["macros", "rt-multi-thread"] } -apalis-sqlite = { version = "1.0.0-alpha.2", features = ["tokio-comp"] } +apalis-sql = { version = "1.0.0-alpha.4" } +apalis-postgres = { version = "1.0.0-alpha.1", features = [ + "tokio-comp", + "migrate", +] } +sqlx = { version = "0.8", features = [ + "runtime-tokio-rustls", + "postgres", + "macros", + "migrate", +] } + +# [[bench]] +# name = "sqlite" +# harness = false [[bench]] -name = "sqlite" +name = "postgres" harness = false diff --git a/benches/postgres.rs b/benches/postgres.rs new file mode 100644 index 0000000..adbd1d8 --- /dev/null +++ b/benches/postgres.rs @@ -0,0 +1,26 @@ +use apalis_benches::define_backend_bench; +use apalis_benches::{bench_worker, TestJob}; +use apalis_core::backend::TaskSink; +use apalis_core::task_fn::task_fn; +use apalis_postgres::PostgresStorage; +use apalis_sql::config::Config; +use criterion::Criterion; +use criterion::{criterion_group, criterion_main, BenchmarkId}; +use sqlx::PgPool; +use std::hint::black_box; +use tokio::runtime::Runtime; + +define_backend_bench!("postgres_basic", 10000, { + let pool = PgPool::connect(env!("DATABASE_URL")).await.unwrap(); + let _ = PostgresStorage::setup(&pool).await; + PostgresStorage::new_with_config(&pool, &Config::new("benches_basic")) +}); + +// define_backend_bench!("postgres_with_notify", 10000, { +// let pool = PgPool::connect(env!("DATABASE_URL")).await.unwrap(); +// let _ = PostgresStorage::setup(&pool).await; +// PostgresStorage::new_with_notify(&pool, &Config::new("benches_with_notify")).await +// }); + +criterion_group!(benches, postgres_basic); +criterion_main!(benches); diff --git a/benches/sqlite.rs b/benches/sqlite.rs index 3b2f9cf..d284d4a 100644 --- a/benches/sqlite.rs +++ b/benches/sqlite.rs @@ -1,31 +1,31 @@ -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; +// 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_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()) -}); +// 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()) +// }); -define_backend_bench!("sqlite_in_memory_with_callback", 10000, { - let pool = SqlitePool::connect("sqlite::memory:").await.unwrap(); - let _ = SqliteStorage::setup(&pool).await; - SqliteStorage::new_with_callback(&pool, &apalis_sqlite::Config::default()) -}); +// define_backend_bench!("sqlite_in_memory_with_callback", 10000, { +// let pool = SqlitePool::connect("sqlite::memory:").await.unwrap(); +// let _ = SqliteStorage::setup(&pool).await; +// SqliteStorage::new_with_callback(&pool, &apalis_sqlite::Config::default()) +// }); -criterion_group!(benches, sqlite_in_file, sqlite_in_memory, sqlite_in_memory_with_callback); -criterion_main!(benches); +// criterion_group!(benches, sqlite_in_file, sqlite_in_memory, sqlite_in_memory_with_callback); +// criterion_main!(benches);