| 633 | } |
| 634 | |
| 635 | func writeError(logger log.Logger, w http.ResponseWriter, err error, additionalHeaders http.Header) { |
| 636 | switch err { |
| 637 | case context.Canceled: |
| 638 | err = errCanceled |
| 639 | case context.DeadlineExceeded: |
| 640 | err = errDeadlineExceeded |
| 641 | default: |
| 642 | if util.IsRequestBodyTooLarge(err) { |
| 643 | err = errRequestEntityTooLarge |
| 644 | } |
| 645 | } |
| 646 | |
| 647 | headers := w.Header() |
| 648 | for k, values := range additionalHeaders { |
| 649 | for _, value := range values { |
| 650 | headers.Set(k, value) |
| 651 | } |
| 652 | } |
| 653 | util_api.RespondFromGRPCError(logger, w, err) |
| 654 | } |
| 655 | |
| 656 | func writeServiceTimingHeader(queryResponseTime time.Duration, headers http.Header, stats *querier_stats.QueryStats) { |
| 657 | if stats != nil { |