From 077e66381fffb47038a99ce82c7c07a1f1b19f62 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Fri, 2 Sep 2022 10:58:42 +0100 Subject: [performance] cache account db lookups by public key URI (#795) Signed-off-by: kim Signed-off-by: kim --- internal/db/account.go | 3 +++ internal/db/bundb/account.go | 12 ++++++++++++ 2 files changed, 15 insertions(+) (limited to 'internal/db') diff --git a/internal/db/account.go b/internal/db/account.go index 54e24784f..04c76777f 100644 --- a/internal/db/account.go +++ b/internal/db/account.go @@ -39,6 +39,9 @@ type Account interface { // GetAccountByUsernameDomain returns one account with the given username and domain, or an error if something goes wrong. GetAccountByUsernameDomain(ctx context.Context, username string, domain string) (*gtsmodel.Account, Error) + // GetAccountByPubkeyID returns one account with the given public key URI (ID), or an error if something goes wrong. + GetAccountByPubkeyID(ctx context.Context, id string) (*gtsmodel.Account, Error) + // UpdateAccount updates one account by ID. UpdateAccount(ctx context.Context, account *gtsmodel.Account) (*gtsmodel.Account, Error) diff --git a/internal/db/bundb/account.go b/internal/db/bundb/account.go index 7bee375e3..23030c612 100644 --- a/internal/db/bundb/account.go +++ b/internal/db/bundb/account.go @@ -106,6 +106,18 @@ func (a *accountDB) GetAccountByUsernameDomain(ctx context.Context, username str ) } +func (a *accountDB) GetAccountByPubkeyID(ctx context.Context, id string) (*gtsmodel.Account, db.Error) { + return a.getAccount( + ctx, + func() (*gtsmodel.Account, bool) { + return a.cache.GetByPubkeyID(id) + }, + func(account *gtsmodel.Account) error { + return a.newAccountQ(account).Where("account.public_key_uri = ?", id).Scan(ctx) + }, + ) +} + func (a *accountDB) getAccount(ctx context.Context, cacheGet func() (*gtsmodel.Account, bool), dbQuery func(*gtsmodel.Account) error) (*gtsmodel.Account, db.Error) { // Attempt to fetch cached account account, cached := cacheGet() -- cgit v1.2.3