taskito 0.15.2__tar.gz → 0.16.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {taskito-0.15.2 → taskito-0.16.2}/Cargo.lock +62 -47
- {taskito-0.15.2 → taskito-0.16.2}/PKG-INFO +77 -8
- {taskito-0.15.2 → taskito-0.16.2}/README.md +75 -7
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/Cargo.toml +5 -1
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/maintenance.rs +44 -2
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/mod.rs +20 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/poller.rs +16 -9
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/dead_letter.rs +79 -1
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/jobs.rs +25 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/migrations.rs +2 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/mod.rs +36 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/models.rs +2 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/dead_letter.rs +141 -10
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/dequeue.rs +57 -12
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/helpers.rs +104 -34
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/state.rs +74 -15
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/schema.rs +1 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/tests.rs +141 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/traits.rs +13 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/tests/rust/storage_tests.rs +263 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/Cargo.toml +3 -1
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/inspection.rs +8 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/mod.rs +30 -1
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/worker.rs +103 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/test_helpers.rs +2 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/Cargo.toml +1 -1
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/__init__.py +3 -1
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/_taskito.pyi +4 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/app.py +8 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/mixins.py +5 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/auth.py +7 -7
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/oauth.py +8 -7
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/settings.py +6 -2
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/overrides_store.py +12 -3
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/routes.py +4 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/webhook_store.py +1 -1
- taskito-0.16.2/py_src/taskito/mesh.py +103 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/lifecycle.py +7 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/operations.py +4 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/notes.py +14 -1
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/result.py +5 -1
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-400-normal-CDDApCn2.woff2 +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-400-normal-CYLoc0-x.woff +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-500-normal-6ng42L7E.woff2 +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-500-normal-BgVn5rGT.woff +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-600-normal-Cu4Hd6ag.woff +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-sans-latin-600-normal-CuJfVYMP.woff2 +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-serif-latin-500-normal-C3_OdgN3.woff +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-serif-latin-500-normal-REKAfBVG.woff2 +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-serif-latin-600-normal-D3rpGdkS.woff +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/ibm-plex-serif-latin-600-normal-DAxitmSu.woff2 +0 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/index-W-qtINsk.js +58 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/index-XTjpQV4Y.css +1 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/logs.lazy-BRzWGIVq.js +1 -0
- taskito-0.16.2/py_src/taskito/static/dashboard/assets/metrics.lazy-7u0OCPof.js +36 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/static/dashboard/index.html +2 -2
- {taskito-0.15.2 → taskito-0.16.2}/pyproject.toml +2 -2
- taskito-0.15.2/py_src/taskito/static/dashboard/assets/index-CmeQPfSs.js +0 -58
- taskito-0.15.2/py_src/taskito/static/dashboard/assets/index-u3dkUvf_.css +0 -2
- taskito-0.15.2/py_src/taskito/static/dashboard/assets/logs.lazy-DSR9BFSO.js +0 -1
- taskito-0.15.2/py_src/taskito/static/dashboard/assets/metrics.lazy-CYZj78Ak.js +0 -36
- {taskito-0.15.2 → taskito-0.16.2}/Cargo.toml +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/LICENSE +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/error.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/job.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/lib.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/periodic.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/circuit_breaker.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/dlq.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/mod.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/rate_limiter.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/resilience/retry.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/result_handler.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/scheduler/wake.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/archival.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/locks.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/logs.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/metrics.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/mod.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/diesel_common/workers.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/notify.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/archival.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/circuit_breakers.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/dashboard_settings.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/dead_letter.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/jobs.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/listener.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/locks.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/logs.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/metrics.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/mod.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/periodic.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/queue_state.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/rate_limits.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/trait_impl.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/postgres/workers.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/archival.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/circuit_breakers.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/dashboard_settings.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/enqueue.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/errors.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/maintenance.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/mod.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/jobs/query.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/listener.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/locks.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/logs.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/metrics.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/mod.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/periodic.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/queue_state.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/rate_limits.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/trait_impl.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/redis_backend/workers.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/archival.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/circuit_breakers.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/dashboard_settings.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/dead_letter.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/jobs.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/locks.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/logs.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/metrics.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/mod.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/periodic.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/queue_state.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/rate_limits.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/trait_impl.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/storage/sqlite/workers.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/src/worker.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-core/tests/rust.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/async_worker.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/lib.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/child.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/dispatch.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/mod.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/protocol.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/slot.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/prefork/watchdog.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_config.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_job.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/fan_out.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/gates.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/lifecycle.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/mod.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/nodes.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/queries.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_queue/workflow_ops/saga.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_worker.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-python/src/py_workflow/mod.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/common.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/definition.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/diesel_common.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/error.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/lib.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/node.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/postgres_store.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/redis_store.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/run.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/sqlite_store.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/state.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/storage.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/tests.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/src/topology.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/crates/taskito-workflows/tests/storage_contract.rs +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/_active_context.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/canvas.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/context.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/executor.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/helpers.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/locks.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/async_support/result.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/autoscale/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/autoscale/config.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/autoscale/controller.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/autoscale/process_manager.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/accumulator.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/config.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/item_result.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/batching/result.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/canvas.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/cli.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/context.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/admin.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/apps.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/commands/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/commands/taskito_dashboard.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/commands/taskito_info.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/management/commands/taskito_worker.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/django/settings.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/fastapi.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/flask.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/otel.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/prometheus.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/contrib/sentry.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/_testing.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/delivery_store.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/errors.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/_qs.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/auth.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/dead_letters.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/jobs.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/logs.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/metrics.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/middleware.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/overrides.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/queues.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/scaler.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/webhook_deliveries.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/webhooks.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/handlers/workflows.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/middleware_store.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/config.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/flow.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/identity.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/pkce.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/providers.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/oauth/state_store.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/request_context.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/server.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/static.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/dashboard/url_safety.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/events.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/exceptions.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/health.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/inject.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/built_in.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/converters.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/errors.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/interceptor.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/metrics.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/reconstruct.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/registry.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/strategy.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/interception/walker.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/locks.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/log_config.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/middleware.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/_shared.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/decorators.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/events.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/inspection.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/locks.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/middleware_admin.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/overrides.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/predicates.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/resources.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/runtime_config.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/mixins/settings.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/context.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/core.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/evaluate.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/metrics.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/outcomes.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/parser.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/providers.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/attributes.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/config.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/system.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/recipes/time.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/predicates/registry.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/prefork/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/prefork/__main__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/prefork/child.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/built_in.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handler.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/boto3_client.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/file.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/gcs_client.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/httpx_client.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/logger.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/handlers/requests_session.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/metrics.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/no_proxy.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/reconstruct.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/registry.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/schema.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/proxies/signing.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/py.typed +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/definition.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/frozen.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/graph.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/health.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/pool.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/runtime.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/thread_local.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/resources/toml_config.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/scaler.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/serializers.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/task.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/testing.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/webhooks.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/analysis.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/builder.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/context.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/fan_out.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/incremental.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/mixins.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/run.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/saga/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/saga/context.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/saga/orchestrator.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/__init__.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/dag.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/event_routing.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/fan_out.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/finalization.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/gates.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/sub_workflows.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/tracker.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/tracker/types.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/types.py +0 -0
- {taskito-0.15.2 → taskito-0.16.2}/py_src/taskito/workflows/visualization.py +0 -0
|
@@ -88,9 +88,9 @@ dependencies = [
|
|
|
88
88
|
|
|
89
89
|
[[package]]
|
|
90
90
|
name = "bitflags"
|
|
91
|
-
version = "2.
|
|
91
|
+
version = "2.13.0"
|
|
92
92
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
93
|
-
checksum = "
|
|
93
|
+
checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8"
|
|
94
94
|
|
|
95
95
|
[[package]]
|
|
96
96
|
name = "bumpalo"
|
|
@@ -112,9 +112,9 @@ checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
|
|
|
112
112
|
|
|
113
113
|
[[package]]
|
|
114
114
|
name = "cc"
|
|
115
|
-
version = "1.2.
|
|
115
|
+
version = "1.2.64"
|
|
116
116
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
117
|
-
checksum = "
|
|
117
|
+
checksum = "dad887fd958be91b5098c0248def011f4523ab786cd411be668777e55063501f"
|
|
118
118
|
dependencies = [
|
|
119
119
|
"find-msvc-tools",
|
|
120
120
|
"shlex",
|
|
@@ -139,9 +139,9 @@ dependencies = [
|
|
|
139
139
|
|
|
140
140
|
[[package]]
|
|
141
141
|
name = "chrono"
|
|
142
|
-
version = "0.4.
|
|
142
|
+
version = "0.4.45"
|
|
143
143
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
144
|
-
checksum = "
|
|
144
|
+
checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327"
|
|
145
145
|
dependencies = [
|
|
146
146
|
"iana-time-zone",
|
|
147
147
|
"js-sys",
|
|
@@ -273,9 +273,9 @@ dependencies = [
|
|
|
273
273
|
|
|
274
274
|
[[package]]
|
|
275
275
|
name = "diesel"
|
|
276
|
-
version = "2.3.
|
|
276
|
+
version = "2.3.10"
|
|
277
277
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
278
|
-
checksum = "
|
|
278
|
+
checksum = "29fe29a87fb84c631ffb3ba21798c4b1f3a964701ba78f0dce4bf8668562ec88"
|
|
279
279
|
dependencies = [
|
|
280
280
|
"bitflags",
|
|
281
281
|
"byteorder",
|
|
@@ -676,13 +676,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
|
|
676
676
|
|
|
677
677
|
[[package]]
|
|
678
678
|
name = "js-sys"
|
|
679
|
-
version = "0.3.
|
|
679
|
+
version = "0.3.102"
|
|
680
680
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
681
|
-
checksum = "
|
|
681
|
+
checksum = "03d04c30968dffe80775bd4d7fb676131cd04a1fb46d2686dbffbaec2d9dfd31"
|
|
682
682
|
dependencies = [
|
|
683
683
|
"cfg-if",
|
|
684
684
|
"futures-util",
|
|
685
|
-
"once_cell",
|
|
686
685
|
"wasm-bindgen",
|
|
687
686
|
]
|
|
688
687
|
|
|
@@ -732,15 +731,15 @@ dependencies = [
|
|
|
732
731
|
|
|
733
732
|
[[package]]
|
|
734
733
|
name = "log"
|
|
735
|
-
version = "0.4.
|
|
734
|
+
version = "0.4.32"
|
|
736
735
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
737
|
-
checksum = "
|
|
736
|
+
checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a"
|
|
738
737
|
|
|
739
738
|
[[package]]
|
|
740
739
|
name = "memchr"
|
|
741
|
-
version = "2.8.
|
|
740
|
+
version = "2.8.2"
|
|
742
741
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
743
|
-
checksum = "
|
|
742
|
+
checksum = "88904434abc2901f197fe8cc55f0445e7ded921dba5911dad2e2b39b48e663c4"
|
|
744
743
|
|
|
745
744
|
[[package]]
|
|
746
745
|
name = "memmap2"
|
|
@@ -813,18 +812,18 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
|
|
813
812
|
|
|
814
813
|
[[package]]
|
|
815
814
|
name = "openssl-src"
|
|
816
|
-
version = "300.6.
|
|
815
|
+
version = "300.6.1+3.6.3"
|
|
817
816
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
818
|
-
checksum = "
|
|
817
|
+
checksum = "46eb8fb9fb3b61ce1c0f8a026c4c1a0714d3a9e138e7fbde78753ce2babc3846"
|
|
819
818
|
dependencies = [
|
|
820
819
|
"cc",
|
|
821
820
|
]
|
|
822
821
|
|
|
823
822
|
[[package]]
|
|
824
823
|
name = "openssl-sys"
|
|
825
|
-
version = "0.9.
|
|
824
|
+
version = "0.9.117"
|
|
826
825
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
827
|
-
checksum = "
|
|
826
|
+
checksum = "b47e7e6bb2c38cd930d25a23b40fa52e068c10e85f3e03a7f5ba5aaca5713695"
|
|
828
827
|
dependencies = [
|
|
829
828
|
"cc",
|
|
830
829
|
"libc",
|
|
@@ -1174,9 +1173,9 @@ dependencies = [
|
|
|
1174
1173
|
|
|
1175
1174
|
[[package]]
|
|
1176
1175
|
name = "regex"
|
|
1177
|
-
version = "1.12.
|
|
1176
|
+
version = "1.12.4"
|
|
1178
1177
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1179
|
-
checksum = "
|
|
1178
|
+
checksum = "f1292b7759ae1cb9ec195452d1390a074f0cd8541ab7a5a8c31cd6db45d4a6ba"
|
|
1180
1179
|
dependencies = [
|
|
1181
1180
|
"aho-corasick",
|
|
1182
1181
|
"memchr",
|
|
@@ -1197,9 +1196,9 @@ dependencies = [
|
|
|
1197
1196
|
|
|
1198
1197
|
[[package]]
|
|
1199
1198
|
name = "regex-syntax"
|
|
1200
|
-
version = "0.8.
|
|
1199
|
+
version = "0.8.11"
|
|
1201
1200
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1202
|
-
checksum = "
|
|
1201
|
+
checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
|
|
1203
1202
|
|
|
1204
1203
|
[[package]]
|
|
1205
1204
|
name = "rsqlite-vfs"
|
|
@@ -1336,9 +1335,9 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5"
|
|
|
1336
1335
|
|
|
1337
1336
|
[[package]]
|
|
1338
1337
|
name = "smallvec"
|
|
1339
|
-
version = "1.15.
|
|
1338
|
+
version = "1.15.2"
|
|
1340
1339
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1341
|
-
checksum = "
|
|
1340
|
+
checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
|
|
1342
1341
|
|
|
1343
1342
|
[[package]]
|
|
1344
1343
|
name = "socket2"
|
|
@@ -1404,7 +1403,7 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
|
|
|
1404
1403
|
|
|
1405
1404
|
[[package]]
|
|
1406
1405
|
name = "taskito-async"
|
|
1407
|
-
version = "0.
|
|
1406
|
+
version = "0.16.2"
|
|
1408
1407
|
dependencies = [
|
|
1409
1408
|
"async-trait",
|
|
1410
1409
|
"crossbeam-channel",
|
|
@@ -1416,7 +1415,7 @@ dependencies = [
|
|
|
1416
1415
|
|
|
1417
1416
|
[[package]]
|
|
1418
1417
|
name = "taskito-core"
|
|
1419
|
-
version = "0.
|
|
1418
|
+
version = "0.16.2"
|
|
1420
1419
|
dependencies = [
|
|
1421
1420
|
"async-trait",
|
|
1422
1421
|
"chrono",
|
|
@@ -1438,9 +1437,24 @@ dependencies = [
|
|
|
1438
1437
|
"uuid",
|
|
1439
1438
|
]
|
|
1440
1439
|
|
|
1440
|
+
[[package]]
|
|
1441
|
+
name = "taskito-mesh"
|
|
1442
|
+
version = "0.16.2"
|
|
1443
|
+
dependencies = [
|
|
1444
|
+
"base64",
|
|
1445
|
+
"bincode",
|
|
1446
|
+
"log",
|
|
1447
|
+
"rand 0.10.1",
|
|
1448
|
+
"serde",
|
|
1449
|
+
"serde_json",
|
|
1450
|
+
"taskito-core",
|
|
1451
|
+
"tokio",
|
|
1452
|
+
"xxhash-rust",
|
|
1453
|
+
]
|
|
1454
|
+
|
|
1441
1455
|
[[package]]
|
|
1442
1456
|
name = "taskito-python"
|
|
1443
|
-
version = "0.
|
|
1457
|
+
version = "0.16.2"
|
|
1444
1458
|
dependencies = [
|
|
1445
1459
|
"async-trait",
|
|
1446
1460
|
"base64",
|
|
@@ -1453,6 +1467,7 @@ dependencies = [
|
|
|
1453
1467
|
"serde_json",
|
|
1454
1468
|
"taskito-async",
|
|
1455
1469
|
"taskito-core",
|
|
1470
|
+
"taskito-mesh",
|
|
1456
1471
|
"taskito-workflows",
|
|
1457
1472
|
"tokio",
|
|
1458
1473
|
"uuid",
|
|
@@ -1460,7 +1475,7 @@ dependencies = [
|
|
|
1460
1475
|
|
|
1461
1476
|
[[package]]
|
|
1462
1477
|
name = "taskito-workflows"
|
|
1463
|
-
version = "0.
|
|
1478
|
+
version = "0.16.2"
|
|
1464
1479
|
dependencies = [
|
|
1465
1480
|
"dagron-core",
|
|
1466
1481
|
"diesel",
|
|
@@ -1612,9 +1627,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
|
|
1612
1627
|
|
|
1613
1628
|
[[package]]
|
|
1614
1629
|
name = "uuid"
|
|
1615
|
-
version = "1.23.
|
|
1630
|
+
version = "1.23.3"
|
|
1616
1631
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1617
|
-
checksum = "
|
|
1632
|
+
checksum = "144d6b123cef80b301b8f72a9e2ca4370ddec21950d0a103dd22c437006d2db7"
|
|
1618
1633
|
dependencies = [
|
|
1619
1634
|
"getrandom 0.4.2",
|
|
1620
1635
|
"js-sys",
|
|
@@ -1641,9 +1656,9 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
|
|
1641
1656
|
|
|
1642
1657
|
[[package]]
|
|
1643
1658
|
name = "wasip2"
|
|
1644
|
-
version = "1.0.
|
|
1659
|
+
version = "1.0.4+wasi-0.2.12"
|
|
1645
1660
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1646
|
-
checksum = "
|
|
1661
|
+
checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487"
|
|
1647
1662
|
dependencies = [
|
|
1648
1663
|
"wit-bindgen 0.57.1",
|
|
1649
1664
|
]
|
|
@@ -1659,9 +1674,9 @@ dependencies = [
|
|
|
1659
1674
|
|
|
1660
1675
|
[[package]]
|
|
1661
1676
|
name = "wasm-bindgen"
|
|
1662
|
-
version = "0.2.
|
|
1677
|
+
version = "0.2.125"
|
|
1663
1678
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1664
|
-
checksum = "
|
|
1679
|
+
checksum = "8ddb3f79143bced6de84270411622a2699cee572fc0875aeaf1e7867cf9fca1a"
|
|
1665
1680
|
dependencies = [
|
|
1666
1681
|
"cfg-if",
|
|
1667
1682
|
"once_cell",
|
|
@@ -1672,9 +1687,9 @@ dependencies = [
|
|
|
1672
1687
|
|
|
1673
1688
|
[[package]]
|
|
1674
1689
|
name = "wasm-bindgen-macro"
|
|
1675
|
-
version = "0.2.
|
|
1690
|
+
version = "0.2.125"
|
|
1676
1691
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1677
|
-
checksum = "
|
|
1692
|
+
checksum = "4e21a184b13fb19e157296e2c46056aec9092264fab83e4ba59e68c61b323c3d"
|
|
1678
1693
|
dependencies = [
|
|
1679
1694
|
"quote",
|
|
1680
1695
|
"wasm-bindgen-macro-support",
|
|
@@ -1682,9 +1697,9 @@ dependencies = [
|
|
|
1682
1697
|
|
|
1683
1698
|
[[package]]
|
|
1684
1699
|
name = "wasm-bindgen-macro-support"
|
|
1685
|
-
version = "0.2.
|
|
1700
|
+
version = "0.2.125"
|
|
1686
1701
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1687
|
-
checksum = "
|
|
1702
|
+
checksum = "fecefd9c35bd935a20fc3fc344b5f29138961e4f47fb03297d88f2587afb5ebd"
|
|
1688
1703
|
dependencies = [
|
|
1689
1704
|
"bumpalo",
|
|
1690
1705
|
"proc-macro2",
|
|
@@ -1695,9 +1710,9 @@ dependencies = [
|
|
|
1695
1710
|
|
|
1696
1711
|
[[package]]
|
|
1697
1712
|
name = "wasm-bindgen-shared"
|
|
1698
|
-
version = "0.2.
|
|
1713
|
+
version = "0.2.125"
|
|
1699
1714
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1700
|
-
checksum = "
|
|
1715
|
+
checksum = "23939e44bb9a5d7576fa2b563dc2e136628f1224e88a8deed09e04858b77871f"
|
|
1701
1716
|
dependencies = [
|
|
1702
1717
|
"unicode-ident",
|
|
1703
1718
|
]
|
|
@@ -1921,9 +1936,9 @@ checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3"
|
|
|
1921
1936
|
|
|
1922
1937
|
[[package]]
|
|
1923
1938
|
name = "yoke"
|
|
1924
|
-
version = "0.8.
|
|
1939
|
+
version = "0.8.3"
|
|
1925
1940
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1926
|
-
checksum = "
|
|
1941
|
+
checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5"
|
|
1927
1942
|
dependencies = [
|
|
1928
1943
|
"stable_deref_trait",
|
|
1929
1944
|
"yoke-derive",
|
|
@@ -1944,18 +1959,18 @@ dependencies = [
|
|
|
1944
1959
|
|
|
1945
1960
|
[[package]]
|
|
1946
1961
|
name = "zerocopy"
|
|
1947
|
-
version = "0.8.
|
|
1962
|
+
version = "0.8.52"
|
|
1948
1963
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1949
|
-
checksum = "
|
|
1964
|
+
checksum = "ce1022995ff5ff5d841ad7d994facc23098cd40152f2c1d11cd607c6f530653f"
|
|
1950
1965
|
dependencies = [
|
|
1951
1966
|
"zerocopy-derive",
|
|
1952
1967
|
]
|
|
1953
1968
|
|
|
1954
1969
|
[[package]]
|
|
1955
1970
|
name = "zerocopy-derive"
|
|
1956
|
-
version = "0.8.
|
|
1971
|
+
version = "0.8.52"
|
|
1957
1972
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1958
|
-
checksum = "
|
|
1973
|
+
checksum = "1ae7f38b72ec2a254e2b87ef277cf2cd4fb97cbebf944faa6f33354da0867930"
|
|
1959
1974
|
dependencies = [
|
|
1960
1975
|
"proc-macro2",
|
|
1961
1976
|
"quote",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: taskito
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.2
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -30,6 +30,7 @@ Requires-Dist: flask>=3.0 ; extra == 'flask'
|
|
|
30
30
|
Requires-Dist: google-cloud-storage>=2.10 ; extra == 'gcs'
|
|
31
31
|
Requires-Dist: msgpack ; extra == 'msgpack'
|
|
32
32
|
Requires-Dist: authlib>=1.7,<2 ; extra == 'oauth'
|
|
33
|
+
Requires-Dist: joserfc>=0.12 ; extra == 'oauth'
|
|
33
34
|
Requires-Dist: requests>=2.31 ; extra == 'oauth'
|
|
34
35
|
Requires-Dist: opentelemetry-api ; extra == 'otel'
|
|
35
36
|
Requires-Dist: opentelemetry-sdk ; extra == 'otel'
|
|
@@ -119,12 +120,78 @@ parallelism on CPU-bound work.
|
|
|
119
120
|
|
|
120
121
|
## Features
|
|
121
122
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
123
|
+
Grouped by what you're trying to do — each section has a one-line sample and a
|
|
124
|
+
link to its deep-dive guide. New here? Start with
|
|
125
|
+
**[Capabilities at a glance](https://docs.byteveda.org/taskito/capabilities)**.
|
|
126
|
+
|
|
127
|
+
### Reliability
|
|
128
|
+
|
|
129
|
+
Retries with exponential backoff, per-exception retry rules, soft timeouts, a
|
|
130
|
+
dead-letter queue with replay, circuit breakers, and idempotent enqueue.
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
@queue.task(max_retries=5, retry_backoff=2.0, retry_on=[TimeoutError])
|
|
134
|
+
def fetch_url(url: str) -> str: ...
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
[→ Reliability guide](https://docs.byteveda.org/taskito/guides/reliability)
|
|
138
|
+
|
|
139
|
+
### Workflows
|
|
140
|
+
|
|
141
|
+
Compose tasks with `chain`, fan out with `group`, fan in with `chord` — plus
|
|
142
|
+
task dependency graphs with cascade cancel.
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
chain(fetch.s(url), parse.s(), store.s()).apply()
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
[→ Workflows guide](https://docs.byteveda.org/taskito/guides/workflows/canvas)
|
|
149
|
+
|
|
150
|
+
### Concurrency
|
|
151
|
+
|
|
152
|
+
A thread pool by default (ideal for I/O-bound tasks); switch to a **prefork**
|
|
153
|
+
pool of child processes for true CPU parallelism with no GIL contention.
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
taskito worker --pool prefork --app tasks:queue # CPU-bound: real parallelism
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
[→ Execution & prefork guide](https://docs.byteveda.org/taskito/guides/advanced-execution/prefork)
|
|
160
|
+
|
|
161
|
+
### Scheduling
|
|
162
|
+
|
|
163
|
+
Priorities, rate limiting, periodic (cron) tasks, delayed execution, and job
|
|
164
|
+
expiration.
|
|
165
|
+
|
|
166
|
+
```python
|
|
167
|
+
@queue.task(priority=9, rate_limit="100/m")
|
|
168
|
+
def notify(user_id: int) -> None: ...
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
[→ Scheduling guide](https://docs.byteveda.org/taskito/guides/core/scheduling)
|
|
172
|
+
|
|
173
|
+
### Observability
|
|
174
|
+
|
|
175
|
+
A built-in web dashboard, an events system, HMAC-signed webhooks, Prometheus and
|
|
176
|
+
OpenTelemetry exporters, structured logging, and worker heartbeats.
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
taskito dashboard --app tasks:queue # Flower-style monitoring UI
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
[→ Dashboard & monitoring guide](https://docs.byteveda.org/taskito/guides/dashboard)
|
|
183
|
+
|
|
184
|
+
### Extensibility
|
|
185
|
+
|
|
186
|
+
Pluggable serializers, per-task middleware, a fully async API, and Postgres or
|
|
187
|
+
Redis backends for multi-machine workers.
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
@queue.task(middleware=[MyMiddleware()]) # per-task hooks
|
|
191
|
+
def handle(payload: dict) -> None: ...
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
[→ Extensibility guide](https://docs.byteveda.org/taskito/guides/extensibility)
|
|
128
195
|
|
|
129
196
|
## Examples
|
|
130
197
|
|
|
@@ -174,7 +241,7 @@ def test_add():
|
|
|
174
241
|
## Documentation
|
|
175
242
|
|
|
176
243
|
**[Read the docs →](https://docs.byteveda.org/taskito)** — guides, API reference, and architecture.
|
|
177
|
-
Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskito/
|
|
244
|
+
Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskito/guides/operations/migration)**.
|
|
178
245
|
|
|
179
246
|
## Comparison
|
|
180
247
|
|
|
@@ -186,9 +253,11 @@ Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskit
|
|
|
186
253
|
| Rate limiting | **Yes** | Yes | No | Yes | No |
|
|
187
254
|
| Dead letter queue | **Yes** | No | Yes | No | No |
|
|
188
255
|
| Task dependencies | **Yes** | No | No | No | No |
|
|
256
|
+
| Workflows (chain/group/chord) | **Yes** | Yes | No | Yes | No |
|
|
189
257
|
| Built-in dashboard | **Yes** | No | No | No | No |
|
|
190
258
|
| FastAPI integration | **Yes** | No | No | No | No |
|
|
191
259
|
| Cancel running tasks | **Yes** | Yes | No | No | No |
|
|
260
|
+
| CPU parallelism (prefork pool) | **Yes** | Yes | Yes | Yes | Yes |
|
|
192
261
|
| Postgres backend | **Yes** | Yes | No | No | No |
|
|
193
262
|
| Setup | **`pip install`** | Broker + backend | Redis | Broker | Redis |
|
|
194
263
|
|
|
@@ -57,12 +57,78 @@ parallelism on CPU-bound work.
|
|
|
57
57
|
|
|
58
58
|
## Features
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
60
|
+
Grouped by what you're trying to do — each section has a one-line sample and a
|
|
61
|
+
link to its deep-dive guide. New here? Start with
|
|
62
|
+
**[Capabilities at a glance](https://docs.byteveda.org/taskito/capabilities)**.
|
|
63
|
+
|
|
64
|
+
### Reliability
|
|
65
|
+
|
|
66
|
+
Retries with exponential backoff, per-exception retry rules, soft timeouts, a
|
|
67
|
+
dead-letter queue with replay, circuit breakers, and idempotent enqueue.
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
@queue.task(max_retries=5, retry_backoff=2.0, retry_on=[TimeoutError])
|
|
71
|
+
def fetch_url(url: str) -> str: ...
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
[→ Reliability guide](https://docs.byteveda.org/taskito/guides/reliability)
|
|
75
|
+
|
|
76
|
+
### Workflows
|
|
77
|
+
|
|
78
|
+
Compose tasks with `chain`, fan out with `group`, fan in with `chord` — plus
|
|
79
|
+
task dependency graphs with cascade cancel.
|
|
80
|
+
|
|
81
|
+
```python
|
|
82
|
+
chain(fetch.s(url), parse.s(), store.s()).apply()
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
[→ Workflows guide](https://docs.byteveda.org/taskito/guides/workflows/canvas)
|
|
86
|
+
|
|
87
|
+
### Concurrency
|
|
88
|
+
|
|
89
|
+
A thread pool by default (ideal for I/O-bound tasks); switch to a **prefork**
|
|
90
|
+
pool of child processes for true CPU parallelism with no GIL contention.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
taskito worker --pool prefork --app tasks:queue # CPU-bound: real parallelism
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
[→ Execution & prefork guide](https://docs.byteveda.org/taskito/guides/advanced-execution/prefork)
|
|
97
|
+
|
|
98
|
+
### Scheduling
|
|
99
|
+
|
|
100
|
+
Priorities, rate limiting, periodic (cron) tasks, delayed execution, and job
|
|
101
|
+
expiration.
|
|
102
|
+
|
|
103
|
+
```python
|
|
104
|
+
@queue.task(priority=9, rate_limit="100/m")
|
|
105
|
+
def notify(user_id: int) -> None: ...
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
[→ Scheduling guide](https://docs.byteveda.org/taskito/guides/core/scheduling)
|
|
109
|
+
|
|
110
|
+
### Observability
|
|
111
|
+
|
|
112
|
+
A built-in web dashboard, an events system, HMAC-signed webhooks, Prometheus and
|
|
113
|
+
OpenTelemetry exporters, structured logging, and worker heartbeats.
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
taskito dashboard --app tasks:queue # Flower-style monitoring UI
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
[→ Dashboard & monitoring guide](https://docs.byteveda.org/taskito/guides/dashboard)
|
|
120
|
+
|
|
121
|
+
### Extensibility
|
|
122
|
+
|
|
123
|
+
Pluggable serializers, per-task middleware, a fully async API, and Postgres or
|
|
124
|
+
Redis backends for multi-machine workers.
|
|
125
|
+
|
|
126
|
+
```python
|
|
127
|
+
@queue.task(middleware=[MyMiddleware()]) # per-task hooks
|
|
128
|
+
def handle(payload: dict) -> None: ...
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
[→ Extensibility guide](https://docs.byteveda.org/taskito/guides/extensibility)
|
|
66
132
|
|
|
67
133
|
## Examples
|
|
68
134
|
|
|
@@ -112,7 +178,7 @@ def test_add():
|
|
|
112
178
|
## Documentation
|
|
113
179
|
|
|
114
180
|
**[Read the docs →](https://docs.byteveda.org/taskito)** — guides, API reference, and architecture.
|
|
115
|
-
Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskito/
|
|
181
|
+
Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskito/guides/operations/migration)**.
|
|
116
182
|
|
|
117
183
|
## Comparison
|
|
118
184
|
|
|
@@ -124,9 +190,11 @@ Coming from Celery? See the **[Migration Guide](https://docs.byteveda.org/taskit
|
|
|
124
190
|
| Rate limiting | **Yes** | Yes | No | Yes | No |
|
|
125
191
|
| Dead letter queue | **Yes** | No | Yes | No | No |
|
|
126
192
|
| Task dependencies | **Yes** | No | No | No | No |
|
|
193
|
+
| Workflows (chain/group/chord) | **Yes** | Yes | No | Yes | No |
|
|
127
194
|
| Built-in dashboard | **Yes** | No | No | No | No |
|
|
128
195
|
| FastAPI integration | **Yes** | No | No | No | No |
|
|
129
196
|
| Cancel running tasks | **Yes** | Yes | No | No | No |
|
|
197
|
+
| CPU parallelism (prefork pool) | **Yes** | Yes | Yes | Yes | Yes |
|
|
130
198
|
| Postgres backend | **Yes** | Yes | No | No | No |
|
|
131
199
|
| Setup | **`pip install`** | Broker + backend | Redis | Broker | Redis |
|
|
132
200
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "taskito-core"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.16.2"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
|
|
6
6
|
[features]
|
|
@@ -32,3 +32,7 @@ redis = { workspace = true, optional = true }
|
|
|
32
32
|
|
|
33
33
|
[dev-dependencies]
|
|
34
34
|
tempfile = "3"
|
|
35
|
+
# Raw connection access in the Redis contract tests, to set up race-window
|
|
36
|
+
# state and assert on internal index keys. Only used by `#[cfg(feature = "redis")]`
|
|
37
|
+
# tests; harmless when the feature is off.
|
|
38
|
+
redis = { workspace = true }
|
|
@@ -57,9 +57,8 @@ impl Scheduler {
|
|
|
57
57
|
|
|
58
58
|
let cutoff = now_millis().saturating_sub(ttl);
|
|
59
59
|
|
|
60
|
-
// Use per-job TTL aware cleanup
|
|
61
60
|
let completed = self.storage.purge_completed_with_ttl(cutoff)?;
|
|
62
|
-
let dead = self.storage.
|
|
61
|
+
let dead = self.storage.purge_dead_with_ttl(cutoff)?;
|
|
63
62
|
let errors = self.storage.purge_job_errors(cutoff)?;
|
|
64
63
|
let metrics = self.storage.purge_metrics(cutoff).unwrap_or_else(|e| {
|
|
65
64
|
warn!("purge_metrics failed: {e}");
|
|
@@ -131,6 +130,49 @@ impl Scheduler {
|
|
|
131
130
|
Ok(())
|
|
132
131
|
}
|
|
133
132
|
|
|
133
|
+
/// Auto-retry eligible DLQ entries that have aged past the configured delay.
|
|
134
|
+
pub(super) fn auto_retry_dlq(&self) -> Result<()> {
|
|
135
|
+
let delay = match self.config.dlq_auto_retry_delay_ms {
|
|
136
|
+
Some(d) => d,
|
|
137
|
+
None => return Ok(()),
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
let now = now_millis();
|
|
141
|
+
let cutoff = now.saturating_sub(delay);
|
|
142
|
+
let max_retries = self.config.dlq_auto_retry_max;
|
|
143
|
+
|
|
144
|
+
let candidates = self.storage.list_dead_for_retry(cutoff, max_retries, 50)?;
|
|
145
|
+
|
|
146
|
+
if candidates.is_empty() {
|
|
147
|
+
return Ok(());
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
let mut retried = 0u64;
|
|
151
|
+
for entry in &candidates {
|
|
152
|
+
match self.storage.retry_dead(&entry.id) {
|
|
153
|
+
Ok(new_id) => {
|
|
154
|
+
info!(
|
|
155
|
+
"dlq auto-retry: {} -> {} (attempt {}/{})",
|
|
156
|
+
entry.id,
|
|
157
|
+
new_id,
|
|
158
|
+
entry.dlq_retry_count + 1,
|
|
159
|
+
max_retries
|
|
160
|
+
);
|
|
161
|
+
retried += 1;
|
|
162
|
+
}
|
|
163
|
+
Err(e) => {
|
|
164
|
+
warn!("dlq auto-retry failed for {}: {e}", entry.id);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if retried > 0 {
|
|
170
|
+
info!("dlq auto-retry: retried {retried} entries");
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
Ok(())
|
|
174
|
+
}
|
|
175
|
+
|
|
134
176
|
/// Build a cloudpickle-compatible payload from stored args.
|
|
135
177
|
fn build_periodic_payload(args: &Option<Vec<u8>>) -> Vec<u8> {
|
|
136
178
|
match args {
|
|
@@ -39,6 +39,12 @@ pub struct SchedulerConfig {
|
|
|
39
39
|
/// preserves the original one-job-per-round-trip behavior; values above
|
|
40
40
|
/// `1` enable batch claiming for higher throughput.
|
|
41
41
|
pub batch_size: usize,
|
|
42
|
+
/// Minimum age (ms) before a DLQ entry is auto-retried. `None` disables.
|
|
43
|
+
pub dlq_auto_retry_delay_ms: Option<i64>,
|
|
44
|
+
/// Max DLQ auto-retries per entry before giving up.
|
|
45
|
+
pub dlq_auto_retry_max: i32,
|
|
46
|
+
/// Check DLQ auto-retry every N ticks.
|
|
47
|
+
pub dlq_auto_retry_interval: u32,
|
|
42
48
|
}
|
|
43
49
|
|
|
44
50
|
impl Default for SchedulerConfig {
|
|
@@ -51,6 +57,9 @@ impl Default for SchedulerConfig {
|
|
|
51
57
|
cleanup_interval: 1200,
|
|
52
58
|
result_ttl_ms: None,
|
|
53
59
|
batch_size: 1,
|
|
60
|
+
dlq_auto_retry_delay_ms: None,
|
|
61
|
+
dlq_auto_retry_max: 1,
|
|
62
|
+
dlq_auto_retry_interval: 60,
|
|
54
63
|
}
|
|
55
64
|
}
|
|
56
65
|
}
|
|
@@ -157,6 +166,7 @@ struct TickCounters {
|
|
|
157
166
|
reap: u32,
|
|
158
167
|
periodic: u32,
|
|
159
168
|
cleanup: u32,
|
|
169
|
+
dlq_auto_retry: u32,
|
|
160
170
|
}
|
|
161
171
|
|
|
162
172
|
impl Scheduler {
|
|
@@ -316,6 +326,16 @@ impl Scheduler {
|
|
|
316
326
|
}
|
|
317
327
|
}
|
|
318
328
|
|
|
329
|
+
counters.dlq_auto_retry += 1;
|
|
330
|
+
if counters
|
|
331
|
+
.dlq_auto_retry
|
|
332
|
+
.is_multiple_of(self.config.dlq_auto_retry_interval)
|
|
333
|
+
{
|
|
334
|
+
if let Err(e) = self.auto_retry_dlq() {
|
|
335
|
+
error!("dlq auto-retry error: {e}");
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
319
339
|
had_maintenance
|
|
320
340
|
}
|
|
321
341
|
}
|