Skip to content

Commit

Permalink
prune test runs, then test instances (#538)
Browse files Browse the repository at this point in the history
  • Loading branch information
laverya authored Jan 22, 2024
1 parent d59ab66 commit 24903d6
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 23 deletions.
3 changes: 2 additions & 1 deletion tgapi/pkg/cli/api/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,8 @@ func RunCmd() *cobra.Command {
go metrics.PollTestStats()

go func() {
pruned, deleted, err := persistence.PrunePG(time.Hour * 24 * 60)
pg := persistence.MustGetPGSession()
pruned, deleted, err := persistence.PrunePG(pg, time.Hour*24*60)
if err != nil {
log.Printf("Failed to prune postgres: %v", err)
} else {
Expand Down
48 changes: 26 additions & 22 deletions tgapi/pkg/persistence/prune.go
Original file line number Diff line number Diff line change
@@ -1,47 +1,51 @@
package persistence

import (
"database/sql"
"fmt"
"time"
)

func PrunePG(pruneDuration time.Duration) (int, int, error) {
pg := MustGetPGSession()

func PrunePG(pg *sql.DB, pruneDuration time.Duration) (int, int, error) {
deletedRows := 0
prunedRows := 0

// delete old testinstance entries
//// prune old testinstance output
//pruneBefore := time.Now().Add(-pruneDuration)
//result, err = pg.Exec("UPDATE testinstance SET output = '' WHERE enqueued_at < $1", pruneBefore)
//if err != nil {
// return -1, -1, fmt.Errorf("error pruning testinstance output: %v", err)
//}
//pruned, err := result.RowsAffected()
//if err != nil {
// return -1, -1, fmt.Errorf("error getting rows affected after pruning testinstance output: %v", err)
//}
//prunedRows += int(pruned)

// delete old testrun entries
deleteBefore := time.Now().Add(-pruneDuration * 3)
result, err := pg.Exec("DELETE FROM testinstance WHERE enqueued_at < $1", deleteBefore)

runDeleteQuery := `
DELETE FROM testrun
WHERE ref = any (array(SELECT ref FROM testrun WHERE enqueued_at < $1 ORDER BY enqueued_at LIMIT 1000))`
result, err := pg.Exec(runDeleteQuery, deleteBefore)
if err != nil {
return -1, -1, fmt.Errorf("error deleting testinstance entries: %v", err)
return -1, -1, fmt.Errorf("error deleting testrun entries: %v", err)
}
deleted, err := result.RowsAffected()
if err != nil {
return -1, -1, fmt.Errorf("error getting rows affected after deleting testinstance entries: %v", err)
return -1, -1, fmt.Errorf("error getting rows affected after deleting testrun entries: %v", err)
}
deletedRows += int(deleted)

// prune old testinstance output
pruneBefore := time.Now().Add(-pruneDuration)
result, err = pg.Exec("UPDATE testinstance SET output = '' WHERE enqueued_at < $1", pruneBefore)
if err != nil {
return -1, -1, fmt.Errorf("error pruning testinstance output: %v", err)
}
pruned, err := result.RowsAffected()
if err != nil {
return -1, -1, fmt.Errorf("error getting rows affected after pruning testinstance output: %v", err)
}
prunedRows += int(pruned)

result, err = pg.Exec("DELETE FROM testrun WHERE timestamp < $1", deleteBefore)
// delete test runs that do not have a matching testrun
result, err = pg.Exec("DELETE FROM testinstance WHERE testrun_ref NOT IN (SELECT ref FROM testrun)")
if err != nil {
return -1, -1, fmt.Errorf("error deleting testrun entries: %v", err)
return -1, -1, fmt.Errorf("error deleting testinstance entries: %v", err)
}
deleted, err = result.RowsAffected()
if err != nil {
return -1, -1, fmt.Errorf("error getting rows affected after deleting testrun entries: %v", err)
return -1, -1, fmt.Errorf("error getting rows affected after deleting testinstance entries: %v", err)
}
deletedRows += int(deleted)

Expand Down

0 comments on commit 24903d6

Please sign in to comment.