Skip to content
Snippets Groups Projects
Commit 5309d9a8 authored by Travis Ralston's avatar Travis Ralston
Browse files

Expire entries from the Media ID hold table

parent 66d22923
No related branches found
No related tags found
No related merge requests found
...@@ -5,6 +5,7 @@ import ( ...@@ -5,6 +5,7 @@ import (
"errors" "errors"
"github.com/turt2live/matrix-media-repo/common/rcontext" "github.com/turt2live/matrix-media-repo/common/rcontext"
"github.com/turt2live/matrix-media-repo/util"
) )
type DbHeldMedia struct { type DbHeldMedia struct {
...@@ -19,10 +20,12 @@ const ( ...@@ -19,10 +20,12 @@ const (
ForCreateHeldReason HeldReason = "media_create" ForCreateHeldReason HeldReason = "media_create"
) )
const insertHeldMedia = "INSERT INTO media_id_hold (origin, media_id, reason) VALUES ($1, $2, $3);" const insertHeldMedia = "INSERT INTO media_id_hold (origin, media_id, reason, held_ts) VALUES ($1, $2, $3, $4);"
const deleteHeldMedia = "DELETE FROM media_id_hold WHERE reason = $1 AND held_ts <= $2;"
type heldMediaTableStatements struct { type heldMediaTableStatements struct {
insertHeldMedia *sql.Stmt insertHeldMedia *sql.Stmt
deleteHeldMedia *sql.Stmt
} }
type heldMediaTableWithContext struct { type heldMediaTableWithContext struct {
...@@ -37,6 +40,9 @@ func prepareHeldMediaTables(db *sql.DB) (*heldMediaTableStatements, error) { ...@@ -37,6 +40,9 @@ func prepareHeldMediaTables(db *sql.DB) (*heldMediaTableStatements, error) {
if stmts.insertHeldMedia, err = db.Prepare(insertHeldMedia); err != nil { if stmts.insertHeldMedia, err = db.Prepare(insertHeldMedia); err != nil {
return nil, errors.New("error preparing insertHeldMedia: " + err.Error()) return nil, errors.New("error preparing insertHeldMedia: " + err.Error())
} }
if stmts.deleteHeldMedia, err = db.Prepare(deleteHeldMedia); err != nil {
return nil, errors.New("error preparing deleteHeldMedia: " + err.Error())
}
return stmts, nil return stmts, nil
} }
...@@ -49,6 +55,11 @@ func (s *heldMediaTableStatements) Prepare(ctx rcontext.RequestContext) *heldMed ...@@ -49,6 +55,11 @@ func (s *heldMediaTableStatements) Prepare(ctx rcontext.RequestContext) *heldMed
} }
func (s *heldMediaTableWithContext) TryInsert(origin string, mediaId string, reason HeldReason) error { func (s *heldMediaTableWithContext) TryInsert(origin string, mediaId string, reason HeldReason) error {
_, err := s.statements.insertHeldMedia.ExecContext(s.ctx, origin, mediaId, reason) _, err := s.statements.insertHeldMedia.ExecContext(s.ctx, origin, mediaId, reason, util.NowMillis())
return err
}
func (s *heldMediaTableWithContext) DeleteOlderThan(reason HeldReason, olderThanTs int64) error {
_, err := s.statements.deleteHeldMedia.ExecContext(s.ctx, reason, olderThanTs)
return err return err
} }
ALTER TABLE media_id_hold DROP COLUMN held_ts;
ALTER TABLE media_id_hold ADD COLUMN held_ts BIGINT NOT NULL DEFAULT 0;
...@@ -10,6 +10,7 @@ func StartAll() { ...@@ -10,6 +10,7 @@ func StartAll() {
scheduleHourly(RecurringTaskPurgeRemoteMedia, task_runner.PurgeRemoteMedia) scheduleHourly(RecurringTaskPurgeRemoteMedia, task_runner.PurgeRemoteMedia)
scheduleHourly(RecurringTaskPurgeThumbnails, task_runner.PurgeThumbnails) scheduleHourly(RecurringTaskPurgeThumbnails, task_runner.PurgeThumbnails)
scheduleHourly(RecurringTaskPurgePreviews, task_runner.PurgePreviews) scheduleHourly(RecurringTaskPurgePreviews, task_runner.PurgePreviews)
scheduleHourly(RecurringTaskPurgeHeldMediaIds, task_runner.PurgeHeldMediaIds)
scheduleUnfinished() scheduleUnfinished()
} }
......
...@@ -24,9 +24,10 @@ const ( ...@@ -24,9 +24,10 @@ const (
TaskImportData TaskName = "import_data" TaskImportData TaskName = "import_data"
) )
const ( const (
RecurringTaskPurgeThumbnails RecurringTaskName = "recurring_purge_thumbnails" RecurringTaskPurgeThumbnails RecurringTaskName = "recurring_purge_thumbnails"
RecurringTaskPurgePreviews RecurringTaskName = "recurring_purge_previews" RecurringTaskPurgePreviews RecurringTaskName = "recurring_purge_previews"
RecurringTaskPurgeRemoteMedia RecurringTaskName = "recurring_purge_remote_media" RecurringTaskPurgeRemoteMedia RecurringTaskName = "recurring_purge_remote_media"
RecurringTaskPurgeHeldMediaIds RecurringTaskName = "recurring_purge_held_media_ids"
) )
const ExecutingMachineId = int64(0) const ExecutingMachineId = int64(0)
......
package task_runner
import (
"github.com/getsentry/sentry-go"
"github.com/turt2live/matrix-media-repo/common/rcontext"
"github.com/turt2live/matrix-media-repo/database"
"github.com/turt2live/matrix-media-repo/util"
)
func PurgeHeldMediaIds(ctx rcontext.RequestContext) {
// dev note: don't use ctx for config lookup to avoid misreading it
beforeTs := util.NowMillis() - int64(7*24*60*60*1000) // 7 days
db := database.GetInstance().HeldMedia.Prepare(ctx)
if err := db.DeleteOlderThan(database.ForCreateHeldReason, beforeTs); err != nil {
ctx.Log.Error("Error deleting held media IDs: ", err)
sentry.CaptureException(err)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment