From 266bf20a859955050612208894c6d22d533eef67 Mon Sep 17 00:00:00 2001 From: Devon Hudson Date: Tue, 29 Nov 2022 18:12:18 -0700 Subject: [PATCH] Try sending to async mailservers if the conditions are right --- federationapi/queue/destinationqueue.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/federationapi/queue/destinationqueue.go b/federationapi/queue/destinationqueue.go index a1aaae9f4..c1bdb2ac8 100644 --- a/federationapi/queue/destinationqueue.go +++ b/federationapi/queue/destinationqueue.go @@ -387,7 +387,17 @@ func (oq *destinationQueue) nextTransaction( ctx, cancel := context.WithTimeout(oq.process.Context(), time.Minute*5) defer cancel() - _, err := oq.client.SendTransaction(ctx, t) + var err error + mailservers := oq.statistics.KnownMailservers() + if oq.statistics.AssumedOffline() && len(mailservers) > 0 { + // TODO : how to pass through actual userID here?!?!?!?! + userID, _ := gomatrixserverlib.NewUserID("@:"+string(oq.origin), false) + for _, mailserver := range mailservers { + _, _ = oq.client.SendAsyncTransaction(ctx, *userID, t, mailserver) + } + } else { + _, err = oq.client.SendTransaction(ctx, t) + } switch errResponse := err.(type) { case nil: // Clean up the transaction in the database.