From 69d4429e8f550dee630d382b2f847d22f4f60c60 Mon Sep 17 00:00:00 2001 From: Sanne Raymaekers Date: Sat, 30 Jul 2022 13:22:12 +0200 Subject: [PATCH] osbuild-service-maintenance: Honor dryrun in db cleanup --- cmd/osbuild-service-maintenance/db.go | 21 +++++++++++++++++++++ cmd/osbuild-service-maintenance/db_test.go | 3 +++ 2 files changed, 24 insertions(+) diff --git a/cmd/osbuild-service-maintenance/db.go b/cmd/osbuild-service-maintenance/db.go index b63ad697a..2710e8b0b 100644 --- a/cmd/osbuild-service-maintenance/db.go +++ b/cmd/osbuild-service-maintenance/db.go @@ -18,6 +18,9 @@ const ( ORDER BY expires_at LIMIT 1000 )` + sqlExpiredJobCount = ` + SELECT COUNT(*) FROM jobs + WHERE expires_at < NOW()` sqlVacuumAnalyze = ` VACUUM ANALYZE` sqlVacuumStats = ` @@ -55,6 +58,15 @@ func (d *db) DeleteJobs() (int64, error) { return tag.RowsAffected(), nil } +func (d *db) ExpiredJobCount() (int64, error) { + var count int64 + err := d.Conn.QueryRow(context.Background(), sqlExpiredJobCount).Scan(&count) + if err != nil { + return 0, err + } + return count, nil +} + func (d *db) VacuumAnalyze() error { _, err := d.Conn.Exec(context.Background(), sqlVacuumAnalyze) if err != nil { @@ -123,6 +135,15 @@ func DBCleanup(dbURL string, dryRun bool, cutoff time.Time) error { var rows int64 for { + if dryRun { + rows, err = db.ExpiredJobCount() + if err != nil { + logrus.Warningf("Error querying expired jobs: %v", err) + } + logrus.Infof("Dryrun, expired job count: %d", rows) + break + } + rows, err = db.DeleteJobs() if err != nil { logrus.Errorf("Error deleting jobs: %v, %d rows affected", rows, err) diff --git a/cmd/osbuild-service-maintenance/db_test.go b/cmd/osbuild-service-maintenance/db_test.go index 9ff66a24b..ddc26bdbf 100644 --- a/cmd/osbuild-service-maintenance/db_test.go +++ b/cmd/osbuild-service-maintenance/db_test.go @@ -72,6 +72,9 @@ func testDeleteJob(t *testing.T, d db, q *dbjobqueue.DBJobQueue) { require.Equal(t, int64(0), rows) setExpired(t, d, id) + rows, err = d.ExpiredJobCount() + require.NoError(t, err) + require.Equal(t, int64(1), rows) rows, err = d.DeleteJobs() require.NoError(t, err)