feat(GODT-2442): handle bad event resync resolution.

This commit is contained in:
Jakub
2023-03-03 17:20:49 +01:00
parent 53c2cbcaee
commit 8c0bb22de3
3 changed files with 54 additions and 7 deletions

View File

@ -142,21 +142,47 @@ func (bridge *Bridge) handleUserDeauth(ctx context.Context, user *user.User) {
func (bridge *Bridge) handleUserBadEvent(ctx context.Context, user *user.User, event events.UserBadEvent) {
safe.Lock(func() {
if rerr := bridge.reporter.ReportMessageWithContext("Failed to handle event", reporter.Context{
reportContext := reporter.Context{
"user_id": user.ID(),
"old_event_id": event.OldEventID,
"new_event_id": event.NewEventID,
"event_info": event.EventInfo,
"error": event.Error,
"error_type": fmt.Sprintf("%T", internal.ErrCause(event.Error)),
}); rerr != nil {
logrus.WithError(rerr).Error("Failed to report failed event handling")
}
bridge.logoutUser(ctx, user, true, false)
// blockEventsIMAPandSMTP()
if doResyc, err := bridge.getBadEventUserFeedback(); err != nil || !doResyc {
if rerr := bridge.reporter.ReportMessageWithContext("Failed to handle event: logout", reportContext); rerr != nil {
logrus.WithError(rerr).Error("Failed to report failed event handling")
}
bridge.logoutUser(ctx, user, true, false)
return
}
if rerr := bridge.reporter.ReportMessageWithContext("Failed to handle event: repair", reportContext); rerr != nil {
logrus.WithError(rerr).Error("Failed to report event handling failure")
}
if syncErr := user.SyncEvent(ctx); syncErr != nil {
reportContext["error"] = syncErr
reportContext["error_type"] = fmt.Sprintf("%T", internal.ErrCause(syncErr))
if rerr := bridge.reporter.ReportMessageWithContext("Failed to handle event: repair failed: logging out", reportContext); rerr != nil {
logrus.WithError(rerr).Error("Failed to report repair failure")
}
bridge.logoutUser(ctx, user, true, false)
return
}
}, bridge.usersLock)
}
func (bridge *Bridge) getBadEventUserFeedback() (doResyc bool, err error) {
return true, nil
}
func (bridge *Bridge) handleUncategorizedErrorEvent(event events.UncategorizedEventError) {
if rerr := bridge.reporter.ReportMessageWithContext("Failed to handle due to uncategorized error", reporter.Context{
"error_type": fmt.Sprintf("%T", internal.ErrCause(event.Error)),