Repository navigation
Releases: g4st3r-d3v/akadze
Release list
v0.6.1
v0.6.0
Breaking
- A run that returns while a cancel is pending ends
succeededwith its result, notcancelled(#52).
Fixes
- Limits hold when a claim waits on another claimer's lock (#46).
- The worker keeps serving through transient database errors; a failed outcome write does not rerun the job (#47).
- Task arguments arrive as their declared types (#48).
- A worker claims only tasks it has registered (#49). Upgrade akadze on all workers before adding new tasks.
- A sync task registered with
timeoutlogs a warning (#50). - 0.5.0 audit tail:
jobs cancelexit code, migration checker,drainreadiness,overlap=Falsedocs (#51). Migration005_jobs_metabuilds a GIN index that blocks writes toakadze.jobs; on a large table create itCONCURRENTLYfirst (see docs).
Performance
- Claim reads the queue in windows: fair claim and claims past a key at its limit go from 90–310 ms to 3–18 ms on 100k jobs (#53).
Docs
- Documentation site with a Russian translation: https://g4st3r-d3v.github.io/akadze/ (#54, #55). Version banners updated for the release in this PR.
Note
Low Risk
Version and documentation-only changes with no application or worker logic in the diff.
Overview
Releases akadze 0.6.0 by bumping __version__ and Poetry version from 0.5.0 to 0.6.0.
Documentation is updated so readers no longer see “main is ahead of PyPI (0.5.0)”. The home pages (EN/RU) now say docs track main, point “since 0.6.0” markers at behavior from that release, and link to GitHub release notes for upgrades. Claim docs (EN/RU) state windowed claim ships in 0.6.0 and later instead of “first release after 0.5.0”. Cancel-on-running-job notes in the retries guides (EN/RU) drop the awkward “on PyPI” wording while keeping the 0.6.0 vs 0.5.0 behavior contrast.
Reviewed by Cursor Bugbot for commit 23e74aa. Bugbot is set up for automated code reviews on this repo. Configure here.
v0.5.0
akadze 0.5.0
Product features for multi-tenant and scheduled workloads, and a much cheaper claim. Run akadze migrate after upgrading (adds an index; see below).
New
- Cron in a timezone —
@app.periodic(..., timezone="Europe/Berlin"), also inadd_schedule/ schedule specs. DST follows classic cron: fixed-hour entries fire once when clocks go back, wildcard-hour entries keep firing; skipped wall times fire shifted by the gap. (#38) - Backoff policy —
@app.task(..., backoff=fn)/app.register/@app.periodic,fn(attempt) -> timedelta; typeakadze.BackoffPolicy. (#39) - Bulk enqueue —
task.using(...).enqueue_many(items): one statement per 1000 rows, all-or-nothing, in the caller's transaction (10 000 jobs ≈ 0.07 s). (#40) - Job meta —
using(meta={...}),list_jobs(meta=...),akadze jobs list --meta k=v,JobSummary.meta(read-only),Job.metain hooks. (#41) - Fair claim —
Worker(fair=True)/akadze worker --fair: within a priority, a free slot goes to thelimit_keygroup with the fewest running jobs. (#42)
Changed
- Default retry backoff now has jitter in
[50 %, 100 %]of2^(attempt-1)s (cap 300 s). Jobs requeued from a lost worker get the same jittered delay instead of all starting at once. (#39) - A negative
Retry/Snoozedelay means "now" instead of failing the finish; policy delays are clamped to[0, 365 days]. (#39) - The default claim reads the head of the queue first: ~18 ms instead of ~330 ms per claim on a 100 000-job backlog. Fair claims still scan the queue. (#43)
tzdatais a runtime dependency. (#38)
Migration
005_jobs_metabuilds a GIN index onakadze.jobs.meta. It blocks writes toakadze.jobswhile it builds; on a large table pre-build it withCREATE INDEX CONCURRENTLY IF NOT EXISTS jobs_meta_idx ON akadze.jobs USING gin (meta jsonb_path_ops).
Docs
- Public surface and versioning policy are pinned by a test of
akadze.__all__. (#44)
v0.4.1
v0.4.0
Alpha DX для замены Celery: расписания из конфига приложения и регистрация задач без global bind.
Новое
app.add_schedule/app.add_schedules— cron/every для уже зарегистрированной задачи; YAML/TOML парсит приложение, не пакетapp.register(fn, name=…)— unbound-регистрация;@app.taskидёт тем же путём- README: статус alpha (0.3.x→0.4.x) и короткий stub миграции с Celery (
unique_key,limit_key,using(...).enqueue/complete_tx,Snooze)
Не ломает
Аддитивный релиз относительно 0.3.0. Новых SQL-миграций нет (001–004 как раньше).
Ops CLI (jobs / queues / limits / workers / metrics) без изменений с 0.3.0.
v0.3.0
Операционный CLI поверх Wave 3 и одно ломающее изменение в limit_key.
Ломающее относительно 0.2.0
Если у задачи задан limit_key, а строки с этим ключом в akadze.limits нет, claim больше не блокирует задачу. Воркер считает, что лимита нет. В 0.2.0 такая задача оставалась в queued навсегда.
clear_limit теперь реально снимает ограничение: удаляет строку из akadze.limits, и задачи с этим ключом снова берутся в работу.
Новой миграции схемы нет. Достаточно уже накатанных 001–004.
Новое
akadze jobs cancel JOB_ID— ставит запрос на отмену черезrequest_cancellist_limits/clear_limitи CLIakadze limits list,akadze limits clear KEYlist_workersи CLIakadze workers list- CLI
akadze metrics(иakadze metrics render) печатает текст изrender_metrics Akadze.include("pkg.mod")— импортирует модуль и вызываетregister(app)
Оператору
akadze limits list
akadze workers list
akadze metricsПеременная окружения та же: AKADZE_DATABASE_URL.
v0.2.0
Wave 3 ops and cluster limits on top of 0.1.x.
list_jobs/akadze jobs list(no args/result in summaries)requeuefor failed jobs;pause_queue/resume_queue- Cluster concurrency via
limit_key+set_limit(max_running=…) - Start rate via
set_limit(max_starts=…, window=…) akadze.metrics.render_metrics→ Prometheus text (no HTTP)
Schema migrations: 002_queue_pauses, 003_limits, 004_start_rate (kept separate).