@@ -170,14 +170,22 @@ func (p *processor) handle(ctx *fh.RequestCtx) {
170
170
return
171
171
}
172
172
173
+ tenantPrefix := p .cfg .Tenant .Prefix
174
+
175
+ if p .cfg .Tenant .PrefixPreferSource {
176
+ if string (ctx .Request .Header .Peek ("X-Scope-OrgID" )) != "" {
177
+ tenantPrefix = string (ctx .Request .Header .Peek ("X-Scope-OrgID" )) + "-"
178
+ }
179
+ }
180
+
173
181
clientIP := ctx .RemoteAddr ()
174
182
reqID , _ := uuid .NewRandom ()
175
183
176
184
if len (wrReqIn .Timeseries ) == 0 {
177
185
// If there's metadata - just accept the request and drop it
178
186
if len (wrReqIn .Metadata ) > 0 {
179
187
if p .cfg .Metadata && p .cfg .Tenant .Default != "" {
180
- r := p .send (clientIP , reqID , p .cfg .Tenant .Default , wrReqIn )
188
+ r := p .send (clientIP , reqID , tenantPrefix , p .cfg .Tenant .Default , wrReqIn )
181
189
if r .err != nil {
182
190
ctx .Error (err .Error (), fh .StatusInternalServerError )
183
191
p .Errorf ("src=%s req_id=%s: unable to proxy metadata: %s" , clientIP , reqID , r .err )
@@ -202,7 +210,7 @@ func (p *processor) handle(ctx *fh.RequestCtx) {
202
210
203
211
metricTenant := ""
204
212
var errs * me.Error
205
- results := p .dispatch (clientIP , reqID , m )
213
+ results := p .dispatch (clientIP , reqID , tenantPrefix , m )
206
214
207
215
code , body := 0 , []byte ("Ok" )
208
216
@@ -304,7 +312,7 @@ func (p *processor) marshal(wr *prompb.WriteRequest) (bufOut []byte, err error)
304
312
return snappy .Encode (nil , b ), nil
305
313
}
306
314
307
- func (p * processor ) dispatch (clientIP net.Addr , reqID uuid.UUID , m map [string ]* prompb.WriteRequest ) (res []result ) {
315
+ func (p * processor ) dispatch (clientIP net.Addr , reqID uuid.UUID , tenantPrefix string , m map [string ]* prompb.WriteRequest ) (res []result ) {
308
316
var wg sync.WaitGroup
309
317
res = make ([]result , len (m ))
310
318
@@ -315,7 +323,7 @@ func (p *processor) dispatch(clientIP net.Addr, reqID uuid.UUID, m map[string]*p
315
323
go func (idx int , tenant string , wrReq * prompb.WriteRequest ) {
316
324
defer wg .Done ()
317
325
318
- r := p .send (clientIP , reqID , tenant , wrReq )
326
+ r := p .send (clientIP , reqID , tenantPrefix , tenant , wrReq )
319
327
res [idx ] = r
320
328
}(i , tenant , wrReq )
321
329
@@ -360,7 +368,7 @@ func (p *processor) processTimeseries(ts *prompb.TimeSeries) (tenant string, err
360
368
return
361
369
}
362
370
363
- func (p * processor ) send (clientIP net.Addr , reqID uuid.UUID , tenant string , wr * prompb.WriteRequest ) (r result ) {
371
+ func (p * processor ) send (clientIP net.Addr , reqID uuid.UUID , tenantPrefix string , tenant string , wr * prompb.WriteRequest ) (r result ) {
364
372
start := time .Now ()
365
373
r .tenant = tenant
366
374
@@ -378,7 +386,7 @@ func (p *processor) send(clientIP net.Addr, reqID uuid.UUID, tenant string, wr *
378
386
return
379
387
}
380
388
381
- p .fillRequestHeaders (clientIP , reqID , tenant , req )
389
+ p .fillRequestHeaders (clientIP , reqID , tenantPrefix , tenant , req )
382
390
383
391
if p .auth .egressHeader != nil {
384
392
req .Header .SetBytesV ("Authorization" , p .auth .egressHeader )
@@ -402,14 +410,14 @@ func (p *processor) send(clientIP net.Addr, reqID uuid.UUID, tenant string, wr *
402
410
}
403
411
404
412
func (p * processor ) fillRequestHeaders (
405
- clientIP net.Addr , reqID uuid.UUID , tenant string , req * fh.Request ) {
413
+ clientIP net.Addr , reqID uuid.UUID , tenantPrefix string , tenant string , req * fh.Request ) {
406
414
req .Header .Set ("Content-Encoding" , "snappy" )
407
415
req .Header .Set ("Content-Type" , "application/x-protobuf" )
408
416
req .Header .Set ("X-Prometheus-Remote-Write-Version" , "0.1.0" )
409
417
req .Header .Set ("X-Cortex-Tenant-Client" , clientIP .String ())
410
418
req .Header .Set ("X-Cortex-Tenant-ReqID" , reqID .String ())
411
- if p . cfg . Tenant . Prefix != "" {
412
- tenant = p . cfg . Tenant . Prefix + tenant
419
+ if tenantPrefix != "" {
420
+ tenant = tenantPrefix + tenant
413
421
}
414
422
req .Header .Set (p .cfg .Tenant .Header , tenant )
415
423
}
0 commit comments