| 121 | } |
| 122 | |
| 123 | func (fp *frontendProcessor) runRequest(ctx context.Context, request *httpgrpc.HTTPRequest, statsEnabled bool, sendHTTPResponse func(response *httpgrpc.HTTPResponse, stats *querier_stats.QueryStats) error) { |
| 124 | var stats *querier_stats.QueryStats |
| 125 | if statsEnabled { |
| 126 | stats, ctx = querier_stats.ContextWithEmptyStats(ctx) |
| 127 | } |
| 128 | |
| 129 | headers := make(map[string]string, 0) |
| 130 | for _, h := range request.Headers { |
| 131 | headers[h.Key] = h.Values[0] |
| 132 | } |
| 133 | ctx = requestmeta.ContextWithRequestMetadataMapFromHeaders(ctx, headers, fp.targetHeaders) |
| 134 | |
| 135 | orgID, ok := headers[textproto.CanonicalMIMEHeaderKey(user.OrgIDHeaderName)] |
| 136 | if ok { |
| 137 | ctx = user.InjectOrgID(ctx, orgID) |
| 138 | } |
| 139 | logger := util_log.WithContext(ctx, fp.log) |
| 140 | if statsEnabled { |
| 141 | level.Info(logger).Log("msg", "started running request") |
| 142 | } |
| 143 | |
| 144 | response, err := fp.handler.Handle(ctx, request) |
| 145 | if err != nil { |
| 146 | var ok bool |
| 147 | response, ok = httpgrpc.HTTPResponseFromError(err) |
| 148 | if !ok { |
| 149 | response = &httpgrpc.HTTPResponse{ |
| 150 | Code: http.StatusInternalServerError, |
| 151 | Body: []byte(err.Error()), |
| 152 | } |
| 153 | } |
| 154 | } |
| 155 | if statsEnabled { |
| 156 | level.Info(logger).Log("msg", "finished request", "status_code", response.Code, "response_size", len(response.GetBody())) |
| 157 | } |
| 158 | |
| 159 | // Ensure responses that are too big are not retried. |
| 160 | if len(response.Body) >= fp.maxMessageSize { |
| 161 | errMsg := fmt.Sprintf("response larger than the max (%d vs %d)", len(response.Body), fp.maxMessageSize) |
| 162 | response = &httpgrpc.HTTPResponse{ |
| 163 | Code: http.StatusRequestEntityTooLarge, |
| 164 | Body: []byte(errMsg), |
| 165 | } |
| 166 | level.Error(fp.log).Log("msg", "error processing query", "err", errMsg) |
| 167 | } |
| 168 | |
| 169 | if err := sendHTTPResponse(response, stats); err != nil { |
| 170 | level.Error(fp.log).Log("msg", "error processing requests", "err", err) |
| 171 | } |
| 172 | } |