@@ -3,6 +3,7 @@ package notifications
3
3
import (
4
4
"context"
5
5
"encoding/json"
6
+ "fmt"
6
7
"sync"
7
8
"text/template"
8
9
@@ -27,7 +28,22 @@ const (
27
28
notificationsDefaultAppName = "Coder"
28
29
)
29
30
30
- var errDecorateHelpersFailed = xerrors .New ("failed to decorate helpers" )
31
+ type decorateHelpersError struct {
32
+ inner error
33
+ }
34
+
35
+ func (e decorateHelpersError ) Error () string {
36
+ return fmt .Sprintf ("failed to decorate helpers: %s" , e .inner .Error ())
37
+ }
38
+
39
+ func (e decorateHelpersError ) Unwrap () error {
40
+ return e .inner
41
+ }
42
+
43
+ func (decorateHelpersError ) Is (other error ) bool {
44
+ _ , ok := other .(decorateHelpersError )
45
+ return ok
46
+ }
31
47
32
48
// notifier is a consumer of the notifications_messages queue. It dequeues messages from that table and processes them
33
49
// through a pipeline of fetch -> prepare -> render -> acquire handler -> deliver.
@@ -164,8 +180,12 @@ func (n *notifier) process(ctx context.Context, success chan<- dispatchResult, f
164
180
// A message failing to be prepared correctly should not affect other messages.
165
181
deliverFn , err := n .prepare (ctx , msg )
166
182
if err != nil {
167
- n .log .Warn (ctx , "dispatcher construction failed" , slog .F ("msg_id" , msg .ID ), slog .Error (err ))
168
- failure <- n .newFailedDispatch (msg , err , xerrors .Is (err , errDecorateHelpersFailed ))
183
+ if database .IsQueryCanceledError (err ) {
184
+ n .log .Debug (ctx , "dispatcher construction canceled" , slog .F ("msg_id" , msg .ID ), slog .Error (err ))
185
+ } else {
186
+ n .log .Error (ctx , "dispatcher construction failed" , slog .F ("msg_id" , msg .ID ), slog .Error (err ))
187
+ }
188
+ failure <- n .newFailedDispatch (msg , err , xerrors .Is (err , decorateHelpersError {}))
169
189
n .metrics .PendingUpdates .Set (float64 (len (success ) + len (failure )))
170
190
continue
171
191
}
@@ -226,7 +246,7 @@ func (n *notifier) prepare(ctx context.Context, msg database.AcquireNotification
226
246
227
247
helpers , err := n .fetchHelpers (ctx )
228
248
if err != nil {
229
- return nil , errDecorateHelpersFailed
249
+ return nil , decorateHelpersError { err }
230
250
}
231
251
232
252
var title , body string
0 commit comments