Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
248 changes: 57 additions & 191 deletions CHANGELOG.md

Large diffs are not rendered by default.

18 changes: 9 additions & 9 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ members = [
exclude = ["awa-python", "spike"]

[workspace.package]
version = "0.6.13"
version = "0.6.14-alpha.1"
edition = "2021"
license = "MIT OR Apache-2.0"
description = "Postgres-native background job queue — transactional enqueue, heartbeat crash recovery, SKIP LOCKED dispatch"
Expand All @@ -25,11 +25,11 @@ categories = ["database", "asynchronous", "web-programming"]

[workspace.dependencies]
# Internal crates
awa-model = { path = "awa-model", version = "0.6.13" }
awa-macros = { path = "awa-macros", version = "0.6.13" }
awa-metrics = { path = "awa-metrics", version = "0.6.13" }
awa-worker = { path = "awa-worker", version = "0.6.13" }
awa = { path = "awa", version = "0.6.13" }
awa-model = { path = "awa-model", version = "0.6.14-alpha.1" }
awa-macros = { path = "awa-macros", version = "0.6.14-alpha.1" }
awa-metrics = { path = "awa-metrics", version = "0.6.14-alpha.1" }
awa-worker = { path = "awa-worker", version = "0.6.14-alpha.1" }
awa = { path = "awa", version = "0.6.14-alpha.1" }

# Database
sea-orm = { version = "=2.0.0-rc.38", default-features = false, features = ["sqlx-postgres", "runtime-tokio-rustls", "with-chrono", "with-json"] }
Expand Down
4 changes: 2 additions & 2 deletions awa-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ path = "src/main.rs"
[dependencies]
awa-model.workspace = true
awa-worker.workspace = true
awa-ui = { path = "../awa-ui", version = "0.6.13" }
awa-ui = { path = "../awa-ui", version = "0.6.14-alpha.1" }
axum.workspace = true
sqlx.workspace = true
tokio.workspace = true
Expand All @@ -28,5 +28,5 @@ hex.workspace = true
uuid.workspace = true

[dev-dependencies]
awa-testing = { path = "../awa-testing", version = "0.6.13" }
awa-testing = { path = "../awa-testing", version = "0.6.14-alpha.1" }
assert_cmd = "2"
2 changes: 1 addition & 1 deletion awa-cli/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "maturin"

[project]
name = "awa-cli"
version = "0.6.13"
version = "0.6.14-alpha.1"
description = "CLI for the Awa Postgres-native job queue (migrations, admin, serve)"
readme = "README.md"
requires-python = ">=3.10"
Expand Down
10 changes: 5 additions & 5 deletions awa-python/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions awa-python/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "awa-python"
version = "0.6.13"
version = "0.6.14-alpha.1"
edition = "2021"

[lib]
Expand All @@ -12,8 +12,8 @@ default = ["cel"]
cel = ["awa-model/cel"]

[dependencies]
awa-model = { path = "../awa-model", version = "0.6.13" }
awa-worker = { path = "../awa-worker", version = "0.6.13", features = ["__python-bridge"] }
awa-model = { path = "../awa-model", version = "0.6.14-alpha.1" }
awa-worker = { path = "../awa-worker", version = "0.6.14-alpha.1", features = ["__python-bridge"] }
pyo3 = { version = "0.29", features = ["macros", "abi3-py310", "chrono"] }
pyo3-async-runtimes = { version = "0.29", features = ["tokio-runtime"] }
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "postgres", "chrono", "json"] }
Expand Down
4 changes: 2 additions & 2 deletions awa-python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ build-backend = "maturin"
[project]
name = "awa-pg"
requires-python = ">=3.10"
version = "0.6.13"
version = "0.6.14-alpha.1"
description = "Postgres-native background job queue — Python SDK with async/sync workers, transactional enqueue, and progress tracking. Install awa-pg[ui] to add the bundled web dashboard."
readme = "README.md"
license = {text = "MIT OR Apache-2.0"}
Expand Down Expand Up @@ -34,7 +34,7 @@ classifiers = [
#
# Kept opt-in so the default `awa-pg` install stays small — workers and
# producers don't need the ~10 MB UI bundle.
ui = ["awa-cli==0.6.13"]
ui = ["awa-cli==0.6.14-alpha.1"]

[project.urls]
Homepage = "https://github.com/hardbyte/awa"
Expand Down
4 changes: 2 additions & 2 deletions awa-python/uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion awa-seaorm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ serde_json.workspace = true
sqlx.workspace = true

[dev-dependencies]
awa-testing = { path = "../awa-testing", version = "0.6.13" }
awa-testing = { path = "../awa-testing", version = "0.6.14-alpha.1" }
serde = { workspace = true, features = ["derive"] }
tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
2 changes: 1 addition & 1 deletion awa/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ awa-macros.workspace = true
awa-worker.workspace = true

[dev-dependencies]
awa-testing = { path = "../awa-testing", version = "0.6.13" }
awa-testing = { path = "../awa-testing", version = "0.6.14-alpha.1" }
sqlx.workspace = true
serde.workspace = true
serde_json.workspace = true
Expand Down
13 changes: 13 additions & 0 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -585,6 +585,19 @@ Use the defaults unless you have a reason not to:
- Increase rotation intervals to reduce partition churn and metadata activity.
- Decrease rotation intervals to tighten dead-tuple bounds at the cost of more frequent rotate/prune work.

Longer rotation intervals accumulate more work in each slot. At a steady enqueue
rate, ready rows per queue slot are roughly the enqueue rate multiplied by
`queue_rotate_interval`; retries and blocked recycling can increase the retained
footprint. Budget for larger partitions and indexes. Queue-ring history becomes
coarser and generally spans about `queue_slot_count × queue_rotate_interval`;
active or blocked slots can retain it longer. The independent
`claim_rotate_interval` changes claim-evidence retention, not completed-job
history in the ready/terminal ring.

A longer interval does not remove the locks required by each prune.
`prune_lock_timeout` still applies separately to each acquisition; queue prune
can lock up to eight partitions before its later reads and writes.

### Sharding the enqueue head per queue

Each queue's `awa.queue_meta.enqueue_shards` (default `1`, range `1..=64`) governs how many independent enqueue head rows the queue has. With the default value, the queue uses a single head row and the ordering contract is strict FIFO per `(queue, priority)` — identical to v016.
Expand Down
15 changes: 15 additions & 0 deletions docs/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,21 @@ appear available or missing. Retry with a fresh read before treating that result
as missing durable work. Filtering tombstoned source rows after a queue or
priority move does not close these separate windows.

### Failed Jobs Rescued After Priority Aging

0.6.14 preserves the physical ready-lane identity when rescue writes a failed
terminal row, so manual retry, failed-row carry and `terminal_jobs` retain its
original arguments and retry limit. Rust reads, manual retry and failed-row
carry also recover older narrow terminal rows by attempt identity while their
ready backing remains retained. These paths preserve terminal metadata and
fill missing defaults from the live ready row. The installed `terminal_jobs`
SQL view and creation-time bucket joins remain unchanged for older rows whose
stored priority differs from their ready lane. Already-pruned backing data
cannot be recovered by this fix. Manual terminal retry restarts aging from the
physical lane. Manual terminal-to-DLQ moves retain that lane for later DLQ
retry; automatic retryable rescue and automatic DLQ routing retain effective
priority.

### Inspect Runtime Health

```sql
Expand Down
Loading