From fe6c8b8152d723ff3788e35c79b2e840926d5b22 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Fri, 3 Mar 2023 08:34:34 +0000 Subject: [PATCH] [bugfix] on deref new account, check db again for account on ErrAlreadyExists (#1581) Signed-off-by: kim --- internal/federation/dereferencing/account.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/internal/federation/dereferencing/account.go b/internal/federation/dereferencing/account.go index 041f34a2c..6502c0e96 100644 --- a/internal/federation/dereferencing/account.go +++ b/internal/federation/dereferencing/account.go @@ -293,8 +293,15 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url. latestAcc.CreatedAt = latestAcc.FetchedAt latestAcc.UpdatedAt = latestAcc.FetchedAt - // This is a new account, we need to place it in the database. - if err := d.db.PutAccount(ctx, latestAcc); err != nil { + // This is new, put it in the database. + err := d.db.PutAccount(ctx, latestAcc) + + if errors.Is(err, db.ErrAlreadyExists) { + // TODO: replace this quick fix with per-URI deref locks. + latestAcc, err = d.db.GetAccountByURI(ctx, latestAcc.URI) + } + + if err != nil { return nil, fmt.Errorf("enrichAccount: error putting in database: %w", err) } } else {