Skip to content

Commit

Permalink
delete 1000 rows per table per day
Browse files Browse the repository at this point in the history
  • Loading branch information
laverya committed Jan 23, 2024
1 parent 47ce21b commit 01c8c21
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 34 deletions.
21 changes: 14 additions & 7 deletions tgapi/pkg/cli/api/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,20 @@ func RunCmd() *cobra.Command {
go metrics.PollTestStats()

go func() {
pg := persistence.MustGetPGSession()
log.Printf("Starting to prune postgres")
pruned, deleted, err := persistence.PrunePG(pg, time.Hour*24*60)
if err != nil {
log.Printf("Failed to prune postgres: %v", err)
} else {
log.Printf("Successfully pruned postgres, pruned %d and deleted %d rows", pruned, deleted)
for {
pg := persistence.MustGetPGSession()
log.Printf("Starting to prune postgres")
pruned, deleted, err := persistence.PrunePG(pg, time.Hour*24*60)
if err != nil {
log.Printf("Failed to prune postgres: %v", err)
} else {
log.Printf("Successfully pruned postgres, pruned %d and deleted %d rows", pruned, deleted)
}

// sleep for 24 hours plus or minus 30 minutes
sleepDuration := time.Hour*23 + time.Minute*30
sleepDuration += time.Second * time.Duration(rand.Int63n(60*60))
time.Sleep(sleepDuration)
}
}()

Expand Down
103 changes: 76 additions & 27 deletions tgapi/pkg/persistence/prune.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,17 @@ func PrunePG(pg *sql.DB, pruneDuration time.Duration) (int, int, error) {
deleteBefore := time.Now().Add(-pruneDuration * 3)

runDeleteQuery := `
DELETE FROM testrun
WHERE ref = any (array(SELECT ref FROM testrun WHERE created_at < $1 ORDER BY created_at LIMIT 1000))`
DELETE FROM testrun
WHERE ref = any (
array(
SELECT ref
FROM testrun
WHERE created_at < $1
ORDER BY created_at
LIMIT 1000
)
)
`
result, err := pg.Exec(runDeleteQuery, deleteBefore)
if err != nil {
return -1, -1, fmt.Errorf("error deleting testrun entries: %v", err)
Expand All @@ -40,8 +49,22 @@ WHERE ref = any (array(SELECT ref FROM testrun WHERE created_at < $1 ORDER BY cr
deletedRows += int(deleted)
log.Printf("Deleted %d testrun entries", deleted)

// delete test instances that do not have a matching testrun
result, err = pg.Exec("DELETE FROM testinstance WHERE NOT EXISTS (SELECT FROM testrun WHERE testinstance.testrun_ref = testrun.ref)")
// delete 1000 test instances that do not have a matching testrun
instanceDeleteQuery := `
DELETE FROM testinstance
WHERE id = any (
array(
SELECT id FROM testinstance
WHERE NOT EXISTS (
SELECT FROM testrun
WHERE testinstance.testrun_ref = testrun.ref
)
ORDER BY enqueued_at
LIMIT 1000
)
)
`
result, err = pg.Exec(instanceDeleteQuery)
if err != nil {
return -1, -1, fmt.Errorf("error deleting testinstance entries: %v", err)
}
Expand All @@ -52,29 +75,55 @@ WHERE ref = any (array(SELECT ref FROM testrun WHERE created_at < $1 ORDER BY cr
deletedRows += int(deleted)
log.Printf("Deleted %d testinstance entries", deleted)

// TODO: reenable these deletion jobs at some point in the future when we are sure that the DB is in a good state
//// delete test upgrades/nodes that do not have a matching testinstance
//result, err = pg.Exec("DELETE FROM clusternode WHERE NOT EXISTS (SELECT FROM testinstance WHERE clusternode.testinstance_id = testinstance.id)")
//if err != nil {
// return -1, -1, fmt.Errorf("error deleting clusternode entries: %v", err)
//}
//deleted, err = result.RowsAffected()
//if err != nil {
// return -1, -1, fmt.Errorf("error getting rows affected after deleting clusternode entries: %v", err)
//}
//deletedRows += int(deleted)
//log.Printf("Deleted %d clusternode entries", deleted)
//
//result, err = pg.Exec("DELETE FROM testupgrade WHERE NOT EXISTS (SELECT FROM testinstance WHERE testupgrade.id = testinstance.id)")
//if err != nil {
// return -1, -1, fmt.Errorf("error deleting testupgrade entries: %v", err)
//}
//deleted, err = result.RowsAffected()
//if err != nil {
// return -1, -1, fmt.Errorf("error getting rows affected after deleting testupgrade entries: %v", err)
//}
//deletedRows += int(deleted)
//log.Printf("Deleted %d testupgrade entries", deleted)
// delete 1000 test upgrades/nodes that do not have a matching testinstance
nodeDeleteQuery := `
DELETE FROM clusternode
WHERE id = any (
array(
SELECT id FROM clusternode
WHERE NOT EXISTS (
SELECT FROM testinstance
WHERE clusternode.testinstance_id = testinstance.id
)
ORDER BY created_at
LIMIT 1000
)
)
`
result, err = pg.Exec(nodeDeleteQuery)
if err != nil {
return -1, -1, fmt.Errorf("error deleting clusternode entries: %v", err)
}
deleted, err = result.RowsAffected()
if err != nil {
return -1, -1, fmt.Errorf("error getting rows affected after deleting clusternode entries: %v", err)
}
deletedRows += int(deleted)
log.Printf("Deleted %d clusternode entries", deleted)

upgradeDeleteQuery := `
DELETE FROM testupgrade
WHERE id = any (
array(
SELECT id FROM testupgrade
WHERE NOT EXISTS (
SELECT FROM testinstance
WHERE testupgrade.id = testinstance.id
)
LIMIT 1000
)
)
`
result, err = pg.Exec(upgradeDeleteQuery)
if err != nil {
return -1, -1, fmt.Errorf("error deleting testupgrade entries: %v", err)
}
deleted, err = result.RowsAffected()
if err != nil {
return -1, -1, fmt.Errorf("error getting rows affected after deleting testupgrade entries: %v", err)
}
deletedRows += int(deleted)
log.Printf("Deleted %d testupgrade entries", deleted)

return prunedRows, deletedRows, nil
}

0 comments on commit 01c8c21

Please sign in to comment.