diff --git a/federationsender/consumers/roomserver.go b/federationsender/consumers/roomserver.go index 13c415bc7..b53cb251b 100644 --- a/federationsender/consumers/roomserver.go +++ b/federationsender/consumers/roomserver.go @@ -94,13 +94,20 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error { } if err := s.processMessage(*output.NewRoomEvent); err != nil { - // panic rather than continue with an inconsistent database - log.WithFields(log.Fields{ - "event": string(ev.JSON()), - "add": output.NewRoomEvent.AddsStateEventIDs, - "del": output.NewRoomEvent.RemovesStateEventIDs, - log.ErrorKey: err, - }).Panicf("roomserver output log: write room event failure") + switch err.(type) { + case *queue.ErrorFederationDisabled: + log.WithField("error", output.Type).Info( + err.Error(), + ) + default: + // panic rather than continue with an inconsistent database + log.WithFields(log.Fields{ + "event": string(ev.JSON()), + "add": output.NewRoomEvent.AddsStateEventIDs, + "del": output.NewRoomEvent.RemovesStateEventIDs, + log.ErrorKey: err, + }).Panicf("roomserver output log: write room event failure") + } return nil } default: diff --git a/federationsender/queue/queue.go b/federationsender/queue/queue.go index 95d37b2b8..d45af8686 100644 --- a/federationsender/queue/queue.go +++ b/federationsender/queue/queue.go @@ -122,13 +122,23 @@ func (oqs *OutgoingQueues) getQueue(destination gomatrixserverlib.ServerName) *d return oq } +type ErrorFederationDisabled struct { + Message string +} + +func (e *ErrorFederationDisabled) Error() string { + return e.Message +} + // SendEvent sends an event to the destinations func (oqs *OutgoingQueues) SendEvent( ev *gomatrixserverlib.HeaderedEvent, origin gomatrixserverlib.ServerName, destinations []gomatrixserverlib.ServerName, ) error { if oqs.disabled { - return fmt.Errorf("federation is disabled") + return &ErrorFederationDisabled{ + Message: "Federation disabled", + } } if origin != oqs.origin { // TODO: Support virtual hosting; gh issue #577. @@ -190,7 +200,9 @@ func (oqs *OutgoingQueues) SendEDU( destinations []gomatrixserverlib.ServerName, ) error { if oqs.disabled { - return fmt.Errorf("federation is disabled") + return &ErrorFederationDisabled{ + Message: "Federation disabled", + } } if origin != oqs.origin { // TODO: Support virtual hosting; gh issue #577. diff --git a/sytest-blacklist b/sytest-blacklist index f42d5f822..601a3f705 100644 --- a/sytest-blacklist +++ b/sytest-blacklist @@ -63,4 +63,7 @@ If user leaves room, remote user changes device and rejoins we see update in /sy A prev_batch token from incremental sync can be used in the v1 messages API # Blacklisted due to flakiness -Forgotten room messages cannot be paginated \ No newline at end of file +Forgotten room messages cannot be paginated + +# Blacklisted due to flakiness +Can re-join room if re-invited \ No newline at end of file diff --git a/sytest-whitelist b/sytest-whitelist index 17027041d..da4b201ce 100644 --- a/sytest-whitelist +++ b/sytest-whitelist @@ -501,6 +501,5 @@ Can get rooms/{roomId}/state for a departed room (SPEC-216) Users cannot set notifications powerlevel higher than their own Forgetting room does not show up in v2 /sync Can forget room you've been kicked from -Can re-join room if re-invited /whois /joined_members return joined members