fix(GODT-2442): Handle event poll not starting after resync

It is possible, on slower machines, that the new event poll task is not
yet registered and attempts to cancel have nothing to cancel.

In this case, we need the refresh event to cancel the task, at that
point it is guaranteed that the task exists.
This commit is contained in:
Leander Beernaert
2023-03-08 17:02:27 +01:00
parent 13c8a98389
commit 182dab18a6
5 changed files with 22 additions and 12 deletions

View File

@ -299,15 +299,19 @@ func (user *User) SetAddressMode(_ context.Context, mode vault.AddressMode) erro
}, user.eventLock, user.apiAddrsLock, user.updateChLock)
}
// BadEventAbort stops user to communicate. The resolution is either logout or resync.
func (user *User) BadEventAbort() {
// CancelSyncAndEventPoll stops the sync or event poll go-routine.
func (user *User) CancelSyncAndEventPoll() {
user.syncAbort.Abort()
user.pollAbort.Abort()
}
// BadEventFeedbackResync sends user feedback whether should do message re-sync.
func (user *User) BadEventFeedbackResync(ctx context.Context) {
if err := user.syncUserAddressesLabelsAndClearSync(ctx); err != nil {
user.CancelSyncAndEventPoll()
// We need to cancel the event poll later again as it is not guaranteed, due to timing, that we have a
// task to cancel.
if err := user.syncUserAddressesLabelsAndClearSync(ctx, true); err != nil {
user.log.WithError(err).Error("Bad event resync failed")
}
}