Skip to content

Commit 811d549

Browse files
committed
Mailer: Make a queue
1 parent 9ab1c76 commit 811d549

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

modules/setting/queue.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,17 @@ func NewQueueService() {
182182
if _, ok := issueIndexerSectionMap["CONN_STR"]; !ok {
183183
section.Key("CONN_STR").SetValue(Indexer.IssueQueueConnStr)
184184
}
185+
186+
hasLength := false
187+
for _, key := range Cfg.Section("queue.mail").Keys() {
188+
if key.Name() == "LENGTH" {
189+
hasLength = true
190+
break
191+
}
192+
}
193+
if !hasLength {
194+
Cfg.Section("queue.mail").Key("LENGTH").SetValue(fmt.Sprintf("%d", Cfg.Section("mailer").Key("SEND_BUFFER_LEN").MustInt(100)))
195+
}
185196
}
186197

187198
// ParseQueueConnStr parses a queue connection string

services/mailer/mailer.go

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ import (
1818
"time"
1919

2020
"code.gitea.io/gitea/modules/base"
21+
"code.gitea.io/gitea/modules/graceful"
2122
"code.gitea.io/gitea/modules/log"
23+
"code.gitea.io/gitea/modules/queue"
2224
"code.gitea.io/gitea/modules/setting"
2325

2426
"github.com/jaytaylor/html2text"
@@ -257,18 +259,7 @@ func (s *dummySender) Send(from string, to []string, msg io.WriterTo) error {
257259
return nil
258260
}
259261

260-
func processMailQueue() {
261-
for msg := range mailQueue {
262-
log.Trace("New e-mail sending request %s: %s", msg.GetHeader("To"), msg.Info)
263-
if err := gomail.Send(Sender, msg.Message); err != nil {
264-
log.Error("Failed to send emails %s: %s - %v", msg.GetHeader("To"), msg.Info, err)
265-
} else {
266-
log.Trace("E-mails sent %s: %s", msg.GetHeader("To"), msg.Info)
267-
}
268-
}
269-
}
270-
271-
var mailQueue chan *Message
262+
var mailQueue queue.Queue
272263

273264
// Sender sender for sending mail synchronously
274265
var Sender gomail.Sender
@@ -291,24 +282,33 @@ func NewContext() {
291282
Sender = &dummySender{}
292283
}
293284

294-
mailQueue = make(chan *Message, setting.MailService.QueueLength)
285+
mailQueue = setting.CreateQueue("mail", func(data ...queue.Data) {
286+
for _, datum := range data {
287+
msg := datum.(*Message)
288+
log.Trace("New e-mail sending request %s: %s", msg.GetHeader("To"), msg.Info)
289+
if err := gomail.Send(Sender, msg.Message); err != nil {
290+
log.Error("Failed to send emails %s: %s - %v", msg.GetHeader("To"), msg.Info, err)
291+
} else {
292+
log.Trace("E-mails sent %s: %s", msg.GetHeader("To"), msg.Info)
293+
}
294+
}
295+
}, &Message{})
295296

296-
// FIXME: graceful: Needs to become a queue and graceful
297-
go processMailQueue()
297+
go graceful.GetManager().RunWithShutdownFns(mailQueue.Run)
298298
}
299299

300300
// SendAsync send mail asynchronously
301301
func SendAsync(msg *Message) {
302302
go func() {
303-
mailQueue <- msg
303+
_ = mailQueue.Push(msg)
304304
}()
305305
}
306306

307307
// SendAsyncs send mails asynchronously
308308
func SendAsyncs(msgs []*Message) {
309309
go func() {
310310
for _, msg := range msgs {
311-
mailQueue <- msg
311+
_ = mailQueue.Push(msg)
312312
}
313313
}()
314314
}

0 commit comments

Comments
 (0)