From 0d0787e6561d48b5726ce9085460a33b636e1597 Mon Sep 17 00:00:00 2001 From: Deluan Date: Sat, 1 Feb 2020 12:15:12 -0500 Subject: [PATCH] refactor:clean annotations in GC --- persistence/persistence.go | 14 +++++++++++++- persistence/{annotation.go => sql_annotations.go} | 13 +++++++++++++ .../{sql_repository.go => sql_base_repository.go} | 0 persistence/{search.go => sql_search.go} | 0 4 files changed, 26 insertions(+), 1 deletion(-) rename persistence/{annotation.go => sql_annotations.go} (87%) rename persistence/{sql_repository.go => sql_base_repository.go} (100%) rename persistence/{search.go => sql_search.go} (100%) diff --git a/persistence/persistence.go b/persistence/persistence.go index 65ccadcf..9d1766ba 100644 --- a/persistence/persistence.go +++ b/persistence/persistence.go @@ -126,7 +126,19 @@ func (db *NewSQLStore) GC(ctx context.Context) error { if err != nil { return err } - return db.Artist(ctx).(*artistRepository).cleanSearchIndex() + err = db.Artist(ctx).(*artistRepository).cleanSearchIndex() + if err != nil { + return err + } + err = db.MediaFile(ctx).(*mediaFileRepository).cleanAnnotations() + if err != nil { + return err + } + err = db.Album(ctx).(*albumRepository).cleanAnnotations() + if err != nil { + return err + } + return db.Artist(ctx).(*artistRepository).cleanAnnotations() } func (db *NewSQLStore) getOrmer() orm.Ormer { diff --git a/persistence/annotation.go b/persistence/sql_annotations.go similarity index 87% rename from persistence/annotation.go rename to persistence/sql_annotations.go index 7a2607d3..298cc23c 100644 --- a/persistence/annotation.go +++ b/persistence/sql_annotations.go @@ -5,6 +5,7 @@ import ( . "github.com/Masterminds/squirrel" "github.com/astaxie/beego/orm" + "github.com/deluan/navidrome/log" "github.com/deluan/navidrome/model" "github.com/google/uuid" ) @@ -95,3 +96,15 @@ func (r sqlRepository) SetStar(starred bool, ids ...string) error { func (r sqlRepository) SetRating(rating int, itemID string) error { return r.annUpsert(map[string]interface{}{"rating": rating}, itemID) } + +func (r sqlRepository) cleanAnnotations() error { + del := Delete(annotationTable).Where(Eq{"item_type": r.tableName}).Where("item_id not in (select id from " + r.tableName + ")") + c, err := r.executeSQL(del) + if err != nil { + return err + } + if c > 0 { + log.Debug(r.ctx, "Clean-up annotations", "table", r.tableName, "totalDeleted", c) + } + return nil +} diff --git a/persistence/sql_repository.go b/persistence/sql_base_repository.go similarity index 100% rename from persistence/sql_repository.go rename to persistence/sql_base_repository.go diff --git a/persistence/search.go b/persistence/sql_search.go similarity index 100% rename from persistence/search.go rename to persistence/sql_search.go