From 4747fd9b2fe76fc9557dcb441e65e0517e56ad97 Mon Sep 17 00:00:00 2001 From: beorn7 Date: Wed, 6 Feb 2019 18:15:19 +0100 Subject: [PATCH] Propagate timeout to alert listing via context The context is created by the http.TimeoutHandler we use to set the timeout. I believe this is the only endpoint where propagating the timeout is feasible and needed. Signed-off-by: beorn7 --- api/v1/api.go | 5 ++++- api/v2/api.go | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/api/v1/api.go b/api/v1/api.go index a8e2cc52..221781c3 100644 --- a/api/v1/api.go +++ b/api/v1/api.go @@ -253,6 +253,7 @@ func (api *API) listAlerts(w http.ResponseWriter, r *http.Request) { // are no alerts present res = []*Alert{} matchers = []*labels.Matcher{} + ctx = r.Context() showActive, showInhibited bool showSilenced, showUnprocessed bool @@ -326,11 +327,13 @@ func (api *API) listAlerts(w http.ResponseWriter, r *http.Request) { defer alerts.Close() api.mtx.RLock() - // TODO(fabxc): enforce a sensible timeout. for a := range alerts.Next() { if err = alerts.Err(); err != nil { break } + if err = ctx.Err(); err != nil { + break + } routes := api.route.Match(a.Labels) receivers := make([]string, 0, len(routes)) diff --git a/api/v2/api.go b/api/v2/api.go index b0e619ed..ae633342 100644 --- a/api/v2/api.go +++ b/api/v2/api.go @@ -195,6 +195,7 @@ func (api *API) getAlertsHandler(params alert_ops.GetAlertsParams) middleware.Re // are no alerts present res = open_api_models.GettableAlerts{} matchers = []*labels.Matcher{} + ctx = params.HTTPRequest.Context() ) if params.Filter != nil { @@ -224,11 +225,13 @@ func (api *API) getAlertsHandler(params alert_ops.GetAlertsParams) middleware.Re defer alerts.Close() api.mtx.RLock() - // TODO(fabxc): enforce a sensible timeout. for a := range alerts.Next() { if err = alerts.Err(); err != nil { break } + if err = ctx.Err(); err != nil { + break + } routes := api.route.Match(a.Labels) receivers := make([]*open_api_models.Receiver, 0, len(routes))