mirror of
https://github.com/element-hq/dendrite.git
synced 2025-09-13 12:52:24 +03:00
[notifications] Give each HTTP request its own context (#3569)
Give each HTTP request its own context to avoid timing out subsequent notification requests if the first already times out. ### Pull Request Checklist <!-- Please read https://matrix-org.github.io/dendrite/development/contributing before submitting your pull request --> * [ ] I have added Go unit tests or [Complement integration tests](https://github.com/matrix-org/complement) for this PR _or_ I have justified why this PR doesn't need tests * [x] Pull request includes a [sign off below](https://element-hq.github.io/dendrite/development/contributing#sign-off) _or_ I have already signed off privately --------- Signed-off-by: Till Faelligen <2353100+S7evinK@users.noreply.github.com>
This commit is contained in:
parent
9de69bc53a
commit
654fee9818
1 changed files with 7 additions and 2 deletions
|
@ -604,7 +604,9 @@ func (s *OutputRoomEventConsumer) notifyLocal(ctx context.Context, event *rstype
|
||||||
// ordering guarantees we must provide.
|
// ordering guarantees we must provide.
|
||||||
go func() {
|
go func() {
|
||||||
// This background processing cannot be tied to a request.
|
// This background processing cannot be tied to a request.
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
|
// We're generous with the "global" timeout, each HTTP request gets its own context with
|
||||||
|
// at most 30 seconds below.
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
var rejected []*pushgateway.Device
|
var rejected []*pushgateway.Device
|
||||||
|
@ -621,7 +623,10 @@ func (s *OutputRoomEventConsumer) notifyLocal(ctx context.Context, event *rstype
|
||||||
// device, rather than per URL. For now, we must
|
// device, rather than per URL. For now, we must
|
||||||
// notify each one separately.
|
// notify each one separately.
|
||||||
for _, dev := range devices {
|
for _, dev := range devices {
|
||||||
rej, err := s.notifyHTTP(ctx, event, url, format, []*pushgateway.Device{dev}, mem.Localpart, roomName, int(userNumUnreadNotifs))
|
// Give each HTTP request its own context.
|
||||||
|
httpCtx, httpCancel := context.WithTimeout(ctx, 30*time.Second)
|
||||||
|
rej, err := s.notifyHTTP(httpCtx, event, url, format, []*pushgateway.Device{dev}, mem.Localpart, roomName, int(userNumUnreadNotifs))
|
||||||
|
httpCancel()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithFields(log.Fields{
|
log.WithFields(log.Fields{
|
||||||
"event_id": event.EventID(),
|
"event_id": event.EventID(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue