diff options
Diffstat (limited to 'internal/processing')
-rw-r--r-- | internal/processing/account/delete.go | 18 | ||||
-rw-r--r-- | internal/processing/account_test.go | 11 |
2 files changed, 20 insertions, 9 deletions
diff --git a/internal/processing/account/delete.go b/internal/processing/account/delete.go index 5b40804d8..67192cb8f 100644 --- a/internal/processing/account/delete.go +++ b/internal/processing/account/delete.go @@ -145,11 +145,12 @@ selectStatusesLoop: for { statuses, err := p.db.GetAccountStatuses(ctx, account.ID, 20, false, false, maxID, "", false, false, false) if err != nil { - if err == db.ErrNoEntries { + if errors.Is(err, db.ErrNoEntries) { // no statuses left for this instance so we're done l.Infof("Delete: done iterating through statuses for account %s", account.Username) break selectStatusesLoop } + // an actual error has occurred l.Errorf("Delete: db error selecting statuses for account %s: %s", account.Username, err) break selectStatusesLoop @@ -158,6 +159,7 @@ selectStatusesLoop: for i, s := range statuses { // pass the status delete through the client api channel for processing s.Account = account + l.Debug("putting status in the client api channel") p.clientWorker.Queue(messages.FromClientAPI{ APObjectType: ap.ObjectNote, @@ -168,20 +170,20 @@ selectStatusesLoop: }) if err := p.db.DeleteByID(ctx, s.ID, s); err != nil { - if err != db.ErrNoEntries { + if !errors.Is(err, db.ErrNoEntries) { // actual error has occurred - l.Errorf("Delete: db error status %s for account %s: %s", s.ID, account.Username, err) - break selectStatusesLoop + l.Errorf("Delete: db error deleting status %s for account %s: %s", s.ID, account.Username, err) + continue } } // if there are any boosts of this status, delete them as well boosts := []*gtsmodel.Status{} if err := p.db.GetWhere(ctx, []db.Where{{Key: "boost_of_id", Value: s.ID}}, &boosts); err != nil { - if err != db.ErrNoEntries { + if !errors.Is(err, db.ErrNoEntries) { // an actual error has occurred l.Errorf("Delete: db error selecting boosts of status %s for account %s: %s", s.ID, account.Username, err) - break selectStatusesLoop + continue } } @@ -189,8 +191,10 @@ selectStatusesLoop: if b.Account == nil { bAccount, err := p.db.GetAccountByID(ctx, b.AccountID) if err != nil { + l.Errorf("Delete: db error populating boosted status account: %v", err) continue } + b.Account = bAccount } @@ -207,7 +211,7 @@ selectStatusesLoop: if err != db.ErrNoEntries { // actual error has occurred l.Errorf("Delete: db error deleting boost with id %s: %s", b.ID, err) - break selectStatusesLoop + continue } } } diff --git a/internal/processing/account_test.go b/internal/processing/account_test.go index 3fd7d83f4..b34358ba1 100644 --- a/internal/processing/account_test.go +++ b/internal/processing/account_test.go @@ -57,10 +57,14 @@ func (suite *AccountTestSuite) TestAccountDeleteLocal() { DeleteOriginID: deletingAccount.ID, }) suite.NoError(errWithCode) - time.Sleep(1 * time.Second) // wait a sec for the delete to process // the delete should be federated outwards to the following account's inbox - sent, ok := suite.httpClient.SentMessages[followingAccount.InboxURI] + var sent []byte + var ok bool + for !ok { + sent, ok = suite.httpClient.SentMessages[followingAccount.InboxURI] + } + suite.True(ok) delete := &struct { Actor string `json:"actor"` @@ -79,6 +83,9 @@ func (suite *AccountTestSuite) TestAccountDeleteLocal() { suite.Equal(pub.PublicActivityPubIRI, delete.CC) suite.Equal("Delete", delete.Type) + // wait for the delete to go through + time.Sleep(1 * time.Second) + // the deleted account should be deleted dbAccount, err := suite.db.GetAccountByID(ctx, deletingAccount.ID) suite.NoError(err) |