[bugfix] on deref new account, check db again for account on ErrAlreadyExists (#1581)

Signed-off-by: kim <grufwub@gmail.com>
This commit is contained in:
kim 2023-03-03 08:34:34 +00:00 committed by GitHub
parent bfccf4e450
commit fe6c8b8152
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 2 deletions

View File

@ -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 {