Alerting: Fix header precedence in the remote writer (#114999)

This commit is contained in:
Santiago
2025-12-09 15:38:57 +01:00
committed by GitHub
parent b5f1573aef
commit b8ad272159
2 changed files with 12 additions and 7 deletions
@@ -217,6 +217,8 @@ func (w *DatasourceWriter) makeWriter(ctx context.Context, orgID int64, dsUID st
}
for k, values := range dsHeaders {
// Clear out any custom writer headers before adding the data souce ones.
headers.Del(k)
for _, v := range values {
headers.Add(k, v)
}
@@ -141,7 +141,7 @@ func setupDataSources(t *testing.T) *testDataSources {
res.DataSourceHeaders["prom-4"] = http.Header{
"X-Scope-OrgID": []string{"test-user"},
"X-Test-Header": []string{"test-value"},
"X-Double-Header": []string{"one", "two", "three"},
"X-Double-Header": []string{"one", "two"},
}
return res
@@ -231,7 +231,7 @@ func TestDatasourceWriter(t *testing.T) {
cHeaders := map[string]string{
"X-Custom-Header": "test-value",
"X-Another-Header": "another-value",
overwrittenHeader: "overwritten", // Data source headers should be overwritten by custom headers.
overwrittenHeader: "should-be-overwritten", // Data source headers overwrite custom headers.
}
cfg = DatasourceWriterConfig{
@@ -249,17 +249,20 @@ func TestDatasourceWriter(t *testing.T) {
require.Len(t, dsHeaders, 3)
// We're confirming we have a data source header with the same name but different value.
// This one should not be sent in the request.
require.NotEmpty(t, dsHeaders[overwrittenHeader])
require.NotEqual(t, dsHeaders[overwrittenHeader], cHeaders[overwrittenHeader])
// All headers (except for the one that was overwritten) should have been used.
// All data source headers should have been used.
for k, vv := range dsHeaders {
if k != overwrittenHeader {
assert.Equal(t, vv, testDS.prom4.LastHeaders.Values(k))
}
assert.Equal(t, vv, testDS.prom4.LastHeaders.Values(k))
}
// All custom headers except for the overwritten one should have been used.
for k, v := range cHeaders {
if k == overwrittenHeader {
assert.NotEqual(t, v, testDS.prom4.LastHeaders.Get(k))
continue
}
assert.Equal(t, v, testDS.prom4.LastHeaders.Get(k))
}
})