·
3 commits
to main
since this release
Summary
v0.15.0 focuses on runtime reliability and defensive behavior in the controller and DB layers, plus a substantial front-end performance and UX improvement. This release tightens queue/worker semantics, centralizes and sanitizes pod duration/exit heuristics, hardens DB reads/writes, and adds lazy-loading + skeletons and many unit tests to the UI.
Changes
Queue & memory retention
- New context-aware API: PopWithContext / PopBatchWithContext implemented and
Pop/PopBatch now delegate to them — queue pops respect cancellation/timeouts. - MemoryQueue: no longer retains popped elements (nil-out slots and periodic compaction
using a head index) to avoid unbounded memory retention. - PebbleQueue:
- Opens/validates the DB during construction and surfaces errors early.
- Ensures head/tail counters are consistent on init (tail adjusted if behind head).
- Notifies waiters reliably after pushes and records the last committed head
position.
Workers, pod duration & exit handling
- Centralized heuristics: computePodDurationAndExit consolidates logic for exit code,
best-effort duration (seconds) and finished timestamp so metrics, DB writes and webhooks
are consistent. - Defensive duration handling:
- Avoids dereferencing nil Terminated states.
- Estimates durations only when reasonable; prevents writing absurd durations.
- For pods failing before container start, default exit code -1 is used; config
errors use -2 in the config error path.
- writeStatusToDB now consumes computePodDurationAndExit and only writes sane durations.
- Improved log-collection flow: readiness checks and fetch bookkeeping prevent duplicate
log uploads. - Safer pod deletion paths (background propagation, proper finalizer handling in config
error flows).
Database & storage hardening
- Postgres and SQLite managers:
- Queries adjusted to include tasks even when there are no Task_Runs (LEFT JOIN
fixes) so task lists are complete. - Task pod duration sanitization on read: absurd values (e.g., >10 years or negative)
are treated as unknown and not exposed. - SQLite: new read-only connection helper with optional PRAGMA tuning and safer
placeholder handling for parameterized IN-list queries. - GetIsSecrets and parameter-related lookups validate parameter existence and fail
early with clear errors.
- Queries adjusted to include tasks even when there are no Task_Runs (LEFT JOIN
UI / Frontend
- Loadable component: unified loading/error state wrapper (accepts optional skeleton
placeholder). - Skeleton placeholders added across dashboard, Dags, DagRuns, Tasks, ManageUsers for
better perceived performance. - Lazy-loading and chunking:
- Route components and large vendor modules (e.g. dagViz) are lazy-loaded.
- Manual chunking + code-splitting dramatically reduced main bundle size (main bundle
reported reduced significantly in this change).
- Numerous UI bugfixes: pagination, DagForm validations, ManageUsers cleanup, Log viewer
dead-SVG removal, plus multiple component fixes for reactivity and caching. - Large addition of unit tests for Loadable, skeletons, dag components, task box,
pagination, main/dags pages and log highlighting.