]> git.kaiwu.me - haproxy.git/commit
MEDIUM: otel: added HTTP header operations for context propagation
authorMiroslav Zagorac <mzagorac@haproxy.com>
Sun, 12 Apr 2026 09:20:59 +0000 (11:20 +0200)
committerWilliam Lallemand <wlallemand@haproxy.com>
Mon, 13 Apr 2026 07:23:26 +0000 (09:23 +0200)
commit8effcac6f5beec73feb20ee55603a84dc5a7e5a5
treefe9b0c863fd90606b34de03a55d87e0101b16717
parentea9d05de02a214ff59ea5311a3349db21afe96ac
MEDIUM: otel: added HTTP header operations for context propagation

Added the HTTP header manipulation layer that enables span context
injection into and extraction from HAProxy's HTX message buffers,
completing the end-to-end context propagation path.

The new http.c module implements three public functions:
flt_otel_http_headers_get() extracts HTTP headers matching a name prefix
from the channel's HTX buffer into an otelc_text_map structure, stripping
the prefix and separator dash from header names before storage;
flt_otel_http_header_set() constructs a full header name from a prefix and
suffix joined by a dash, removes all existing occurrences, and optionally
adds the header with a new value; and flt_otel_http_headers_remove()
removes all headers matching a given prefix.  A debug-only
flt_otel_http_headers_dump() logs all HTTP headers from a channel at
NOTICE level.

The scope runner in event.c now extracts propagation contexts from HTTP
headers before processing spans: for each configured extract context, it
calls flt_otel_http_headers_get() to read matching headers into a text
map, then passes the text map to flt_otel_scope_context_init() which
extracts the OTel span context from the carrier.  After span execution,
the span runner injects the span context back into HTTP headers via
flt_otel_inject_http_headers() followed by flt_otel_http_header_set()
for each propagation key.

The unused resource cleanup in flt_otel_scope_free_unused() now also
removes contexts that failed extraction by deleting their associated
HTTP headers via flt_otel_http_headers_remove() before freeing the scope
context structure.
addons/otel/Makefile
addons/otel/include/http.h [new file with mode: 0644]
addons/otel/include/include.h
addons/otel/src/event.c
addons/otel/src/filter.c
addons/otel/src/http.c [new file with mode: 0644]
addons/otel/src/scope.c