From 6007e922b4c0adb841fca7cafa3fdcf6b7a18595 Mon Sep 17 00:00:00 2001 From: dtoro Date: Wed, 29 Jul 2026 19:39:17 +0200 Subject: [PATCH] fix(scheduler): lifecycle gate excluded NULL-state check targets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The B1 target-state filter `tgt.state NOT IN ('deprecated','destroyed')` evaluates to NULL (unknown) when a target's state is NULL, which the WHERE clause treats as false — so freshly-seeded entities without an explicit state (the 20 TLS certificates) were silently dropped from ListEnabledCheckDefs and never monitored. Treat NULL state as active (only explicit deprecated/ destroyed is excluded): `tgt.state IS NULL OR tgt.state NOT IN (...)`. --- internal/db/queries/operations.sql | 2 +- internal/db/sqlcgen/operations.sql.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/db/queries/operations.sql b/internal/db/queries/operations.sql index 03a261a..3578259 100644 --- a/internal/db/queries/operations.sql +++ b/internal/db/queries/operations.sql @@ -65,7 +65,7 @@ FROM check_defs cd JOIN entities e ON e.id = cd.entity_id LEFT JOIN entities tgt ON tgt.id = cd.target_id WHERE cd.enabled = true - AND (tgt.id IS NULL OR tgt.state NOT IN ('deprecated', 'destroyed')) + AND (tgt.id IS NULL OR tgt.state IS NULL OR tgt.state NOT IN ('deprecated', 'destroyed')) AND (cd.last_run_at IS NULL OR cd.last_run_at <= now() - make_interval(secs => cd.interval_s)); diff --git a/internal/db/sqlcgen/operations.sql.go b/internal/db/sqlcgen/operations.sql.go index 637d7b2..fb562ef 100644 --- a/internal/db/sqlcgen/operations.sql.go +++ b/internal/db/sqlcgen/operations.sql.go @@ -698,7 +698,7 @@ FROM check_defs cd JOIN entities e ON e.id = cd.entity_id LEFT JOIN entities tgt ON tgt.id = cd.target_id WHERE cd.enabled = true - AND (tgt.id IS NULL OR tgt.state NOT IN ('deprecated', 'destroyed')) + AND (tgt.id IS NULL OR tgt.state IS NULL OR tgt.state NOT IN ('deprecated', 'destroyed')) AND (cd.last_run_at IS NULL OR cd.last_run_at <= now() - make_interval(secs => cd.interval_s)) `