Skip to content

Commit 936f992

Browse files
authored
Fix failed query blocking (#69)
2 parents c51fcda + 0ed6273 commit 936f992

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

internal/cortex/frontend/transport/handler.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,10 @@ func NewHandler(cfg HandlerConfig, roundTripper http.RoundTripper, log log.Logge
114114
func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
115115
var (
116116
stats *querier_stats.Stats
117+
// For failed/slow query logging and query stats.
117118
queryString url.Values
119+
// For failed query cache
120+
urlQuery url.Values
118121
)
119122

120123
// Initialise the stats in the context and make sure it's propagated
@@ -134,11 +137,13 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
134137
r.Body = http.MaxBytesReader(w, r.Body, f.cfg.MaxBodySize)
135138
r.Body = io.NopCloser(io.TeeReader(r.Body, &buf))
136139

137-
queryString = f.parseRequestQueryString(r, buf)
138-
139140
// Check if query is cached
140141
if f.failedQueryCache != nil {
141-
cached, message := f.failedQueryCache.QueryHitCache(queryString)
142+
// NB: don't call f.parseRequestQueryString(r, buf) before f.roundTripper.RoundTrip(r)
143+
// because the call closes the buffer which has content if the request is a POST with
144+
// form data in body.
145+
urlQuery = r.URL.Query()
146+
cached, message := f.failedQueryCache.QueryHitCache(urlQuery)
142147
if cached {
143148
w.WriteHeader(http.StatusForbidden)
144149
level.Info(util_log.WithContext(r.Context(), f.log)).Log("msg", message)
@@ -155,7 +160,7 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
155160

156161
// Update cache for failed queries.
157162
if f.failedQueryCache != nil {
158-
success, message := f.failedQueryCache.UpdateFailedQueryCache(err, queryString, queryResponseTime)
163+
success, message := f.failedQueryCache.UpdateFailedQueryCache(err, urlQuery, queryResponseTime)
159164
if success {
160165
level.Info(util_log.WithContext(r.Context(), f.log)).Log("msg", message)
161166
} else {
@@ -164,6 +169,7 @@ func (f *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
164169
}
165170

166171
if f.cfg.LogFailedQueries {
172+
queryString = f.parseRequestQueryString(r, buf)
167173
f.reportFailedQuery(r, queryString, err, queryResponseTime)
168174
}
169175
return

0 commit comments

Comments
 (0)