gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 45ae719bd9d7bbffad0e2338149d87c47f18a4e6
parent dccc2eee81c0c9ca4496bcb326812268c22ee732
Author: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com>
Date:   Fri, 18 Nov 2022 17:29:25 +0000

[performance] replace account emojis relational query with separate calls to emojiDB to rely on cache (#1074)

Signed-off-by: kim <grufwub@gmail.com>

Signed-off-by: kim <grufwub@gmail.com>
Diffstat:
Minternal/db/bundb/account.go | 20+++++++++++++++++---
Minternal/db/bundb/bundb.go | 1+
2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/internal/db/bundb/account.go b/internal/db/bundb/account.go @@ -36,6 +36,7 @@ import ( type accountDB struct { conn *DBConn cache *result.Cache[*gtsmodel.Account] + emojis *emojiDB status *statusDB } @@ -63,8 +64,7 @@ func (a *accountDB) newAccountQ(account *gtsmodel.Account) *bun.SelectQuery { NewSelect(). Model(account). Relation("AvatarMediaAttachment"). - Relation("HeaderMediaAttachment"). - Relation("Emojis") + Relation("HeaderMediaAttachment") } func (a *accountDB) GetAccountByID(ctx context.Context, id string) (*gtsmodel.Account, db.Error) { @@ -149,7 +149,8 @@ func (a *accountDB) GetInstanceAccount(ctx context.Context, domain string) (*gts } func (a *accountDB) getAccount(ctx context.Context, lookup string, dbQuery func(*gtsmodel.Account) error, keyParts ...any) (*gtsmodel.Account, db.Error) { - return a.cache.Load(lookup, func() (*gtsmodel.Account, error) { + // Fetch account from database cache with loader callback + account, err := a.cache.Load(lookup, func() (*gtsmodel.Account, error) { var account gtsmodel.Account // Not cached! Perform database query @@ -159,6 +160,19 @@ func (a *accountDB) getAccount(ctx context.Context, lookup string, dbQuery func( return &account, nil }, keyParts...) + if err != nil { + return nil, err + } + + if len(account.EmojiIDs) > 0 { + // Set the account's related emojis + account.Emojis, err = a.emojis.emojisFromIDs(ctx, account.EmojiIDs) + if err != nil { + return nil, err + } + } + + return account, nil } func (a *accountDB) PutAccount(ctx context.Context, account *gtsmodel.Account) db.Error { diff --git a/internal/db/bundb/bundb.go b/internal/db/bundb/bundb.go @@ -171,6 +171,7 @@ func NewBunDBService(ctx context.Context) (db.DB, error) { user := &userDB{conn: conn} // Setup DB cross-referencing + account.emojis = emoji account.status = status admin.users = user status.accounts = account