MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / handleRequest

Method handleRequest

src/Server/HTTPHandler.cpp:716–823  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

714}
715
716void HTTPHandler::handleRequest(HTTPServerRequest & request, HTTPServerResponse & response, const ProfileEvents::Event & write_event)
717{
718 DB::setThreadName(ThreadName::HTTP_HANDLER);
719
720 session = std::make_unique<Session>(server.context(), ClientInfo::Interface::HTTP, request.isSecure());
721 SCOPE_EXIT({ session.reset(); });
722 QueryScope query_scope;
723
724 Output used_output;
725
726 /// In case of exception, send stack trace to client.
727 bool with_stacktrace = false;
728
729 OpenTelemetry::TracingContextHolderPtr thread_trace_context;
730 SCOPE_EXIT({
731 // make sure the response status is recorded
732 if (thread_trace_context)
733 thread_trace_context->root_span.addAttribute("clickhouse.http_status", response.getStatus());
734 });
735
736 try
737 {
738 if (request.getMethod() == HTTPServerRequest::HTTP_OPTIONS)
739 {
740 processOptionsRequest(response, server.config());
741 return;
742 }
743
744 // Parse the OpenTelemetry traceparent header.
745 auto & client_trace_context = session->getClientTraceContext();
746 if (request.has("traceparent"))
747 {
748 std::string opentelemetry_traceparent = request.get("traceparent");
749 std::string error;
750 if (!client_trace_context.parseTraceparentHeader(opentelemetry_traceparent, error))
751 {
752 LOG_DEBUG(log, "Failed to parse OpenTelemetry traceparent header '{}': {}", opentelemetry_traceparent, error);
753 }
754 client_trace_context.tracestate = request.get("tracestate", "");
755 }
756
757 // Setup tracing context for this thread
758 auto context = session->sessionOrGlobalContext();
759 thread_trace_context = std::make_unique<OpenTelemetry::TracingContextHolder>("HTTPHandler",
760 client_trace_context,
761 context->getSettingsRef(),
762 context->getOpenTelemetrySpanLog());
763 thread_trace_context->root_span.kind = OpenTelemetry::SpanKind::SERVER;
764 thread_trace_context->root_span.addAttribute("clickhouse.uri", request.getURI());
765 thread_trace_context->root_span.addAttribute("http.referer", request.get("Referer", ""));
766 thread_trace_context->root_span.addAttribute("http.user.agent", request.get("User-Agent", ""));
767 thread_trace_context->root_span.addAttribute("http.method", request.getMethod());
768
769 response.setContentType("text/plain; charset=UTF-8");
770 response.add("Access-Control-Expose-Headers", "X-ClickHouse-Query-Id,X-ClickHouse-Summary,X-ClickHouse-Server-Display-Name,X-ClickHouse-Format,X-ClickHouse-Timezone,X-ClickHouse-Exception-Code,X-ClickHouse-Exception-Tag");
771 response.set("X-ClickHouse-Server-Display-Name", server_display_name);
772
773 if (!request.get("Origin", "").empty())

Calls 15

processOptionsRequestFunction · 0.85
getURIMethod · 0.80
hasContentLengthMethod · 0.80
sessionContextMethod · 0.80
setThreadNameFunction · 0.50
ExceptionClass · 0.50

Tested by

no test coverage detected