Skip to content

Commit ba43603

Browse files
committed
Fix failed query blocking
1 parent d3b24cb commit ba43603

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

internal/cortex/frontend/transport/handler.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
115115
var (
116116
stats *querier_stats.Stats
117117
queryString url.Values
118+
// For failed query cache
119+
urlQuery url.Values
118120
)
119121

120122
// Initialise the stats in the context and make sure it's propagated
@@ -134,11 +136,12 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
134136
r.Body = http.MaxBytesReader(w, r.Body, f.cfg.MaxBodySize)
135137
r.Body = io.NopCloser(io.TeeReader(r.Body, &buf))
136138

137-
queryString = f.parseRequestQueryString(r, buf)
138-
139139
// Check if query is cached
140140
if f.failedQueryCache != nil {
141-
cached, message := f.failedQueryCache.QueryHitCache(queryString)
141+
// NB: don't call f.parseRequestQueryString(r, buf) before f.roundTripper.RoundTrip(r)
142+
// because the call closes the buffer.
143+
urlQuery = r.URL.Query()
144+
cached, message := f.failedQueryCache.QueryHitCache(urlQuery)
142145
if cached {
143146
w.WriteHeader(http.StatusForbidden)
144147
level.Info(util_log.WithContext(r.Context(), f.log)).Log("msg", message)
@@ -155,14 +158,15 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
155158

156159
// Update cache for failed queries.
157160
if f.failedQueryCache != nil {
158-
success, message := f.failedQueryCache.UpdateFailedQueryCache(err, queryString, queryResponseTime)
161+
success, message := f.failedQueryCache.UpdateFailedQueryCache(err, urlQuery, queryResponseTime)
159162
if success {
160163
level.Info(util_log.WithContext(r.Context(), f.log)).Log("msg", message)
161164
} else {
162165
level.Debug(util_log.WithContext(r.Context(), f.log)).Log("msg", message)
163166
}
164167
}
165168

169+
queryString = f.parseRequestQueryString(r, buf)
166170
if f.cfg.LogFailedQueries {
167171
f.reportFailedQuery(r, queryString, err, queryResponseTime)
168172
}

0 commit comments

Comments
 (0)