diff --git a/internal/store/event_loop.go b/internal/store/event_loop.go index 87de7821..28cc5b7b 100644 --- a/internal/store/event_loop.go +++ b/internal/store/event_loop.go @@ -394,7 +394,7 @@ func (loop *eventLoop) processLabels(eventLog *logrus.Entry, labels []*pmapi.Eve return nil } -func (loop *eventLoop) processMessages(eventLog *logrus.Entry, messages []*pmapi.EventMessage) (err error) { +func (loop *eventLoop) processMessages(eventLog *logrus.Entry, messages []*pmapi.EventMessage) (err error) { // nolint[funlen] eventLog.Debug("Processing message change event") for _, message := range messages { @@ -422,18 +422,23 @@ func (loop *eventLoop) processMessages(eventLog *logrus.Entry, messages []*pmapi } var msg *pmapi.Message - msg, err = loop.store.getMessageFromDB(message.ID) - if err == ErrNoSuchAPIID { - msgLog.WithError(err).Warning("Cannot get message from DB for updating. Trying fetch...") - msg, err = loop.store.fetchMessage(message.ID) - // If message does not exist anywhere, update event is probably old and off topic - skip it. - if err == ErrNoSuchAPIID { - msgLog.Warn("Skipping message update, because message does not exist nor in local DB or on API") - continue + + if msg, err = loop.store.getMessageFromDB(message.ID); err != nil { + if err != ErrNoSuchAPIID { + return errors.Wrap(err, "failed to get message from DB for updating") + } + + msgLog.WithError(err).Warning("Message was not present in DB. Trying fetch...") + + if msg, err = loop.store.fetchMessage(message.ID); err != nil { + if err != pmapi.ErrAPINotReachable { + msgLog.WithError(err).Warn("Skipping message update because message exists neither in local DB nor on API") + err = nil + continue + } + + return errors.Wrap(err, "failed to get message from API for updating") } - } - if err != nil { - return errors.Wrap(err, "failed to get message from DB for updating") } updateMessage(msgLog, msg, message.Updated) diff --git a/internal/store/user_message.go b/internal/store/user_message.go index ee4465a5..e0dc3782 100644 --- a/internal/store/user_message.go +++ b/internal/store/user_message.go @@ -147,12 +147,7 @@ func (store *Store) getMessageFromDB(apiID string) (msg *pmapi.Message, err erro // NOTE: Do not update the database here to prevent issues (extreme edge case). // The database will be updated by the event loop anyway. func (store *Store) fetchMessage(apiID string) (msg *pmapi.Message, err error) { - if msg, err = store.api.GetMessage(apiID); err != nil { - if err.Error() == "Message does not exist" { - return nil, ErrNoSuchAPIID - } - } - return + return store.api.GetMessage(apiID) } func (store *Store) txGetMessage(tx *bolt.Tx, apiID string) (*pmapi.Message, error) {