@@ -99,11 +99,11 @@ type RequestContext struct {
99
99
Response * Response
100
100
101
101
reqHeaderResp * extProcPb.ProcessingResponse
102
- reqBodyResp * extProcPb.ProcessingResponse
102
+ reqBodyResp [] * extProcPb.ProcessingResponse
103
103
reqTrailerResp * extProcPb.ProcessingResponse
104
104
105
105
respHeaderResp * extProcPb.ProcessingResponse
106
- respBodyResp * extProcPb.ProcessingResponse
106
+ respBodyResp [] * extProcPb.ProcessingResponse
107
107
respTrailerResp * extProcPb.ProcessingResponse
108
108
}
109
109
@@ -222,7 +222,7 @@ func (s *StreamingServer) Process(srv extProcPb.ExternalProcessor_ProcessServer)
222
222
}
223
223
reqCtx .RequestSize = len (requestBodyBytes )
224
224
reqCtx .reqHeaderResp = s .generateRequestHeaderResponse (reqCtx )
225
- reqCtx .reqBodyResp = s .generateRequestBodyResponse (requestBodyBytes )
225
+ reqCtx .reqBodyResp = s .generateRequestBodyResponses (requestBodyBytes )
226
226
227
227
metrics .RecordRequestCounter (reqCtx .Model , reqCtx .ResolvedTargetModel )
228
228
metrics .RecordRequestSizes (reqCtx .Model , reqCtx .ResolvedTargetModel , reqCtx .RequestSize )
@@ -264,22 +264,7 @@ func (s *StreamingServer) Process(srv extProcPb.ExternalProcessor_ProcessServer)
264
264
metrics .RecordResponseSizes (reqCtx .Model , reqCtx .ResolvedTargetModel , reqCtx .ResponseSize )
265
265
}
266
266
267
- reqCtx .respBodyResp = & extProcPb.ProcessingResponse {
268
- Response : & extProcPb.ProcessingResponse_ResponseBody {
269
- ResponseBody : & extProcPb.BodyResponse {
270
- Response : & extProcPb.CommonResponse {
271
- BodyMutation : & extProcPb.BodyMutation {
272
- Mutation : & extProcPb.BodyMutation_StreamedResponse {
273
- StreamedResponse : & extProcPb.StreamedBodyResponse {
274
- Body : v .ResponseBody .Body ,
275
- EndOfStream : v .ResponseBody .EndOfStream ,
276
- },
277
- },
278
- },
279
- },
280
- },
281
- },
282
- }
267
+ reqCtx .respBodyResp = generateResponseBodyResponses (v .ResponseBody .Body , v .ResponseBody .EndOfStream )
283
268
} else {
284
269
body = append (body , v .ResponseBody .Body ... )
285
270
@@ -293,22 +278,7 @@ func (s *StreamingServer) Process(srv extProcPb.ExternalProcessor_ProcessServer)
293
278
responseErr = json .Unmarshal (body , & responseBody )
294
279
if responseErr != nil {
295
280
logger .V (logutil .DEFAULT ).Error (responseErr , "Error unmarshaling request body" , "body" , string (body ))
296
- reqCtx .respBodyResp = & extProcPb.ProcessingResponse {
297
- Response : & extProcPb.ProcessingResponse_ResponseBody {
298
- ResponseBody : & extProcPb.BodyResponse {
299
- Response : & extProcPb.CommonResponse {
300
- BodyMutation : & extProcPb.BodyMutation {
301
- Mutation : & extProcPb.BodyMutation_StreamedResponse {
302
- StreamedResponse : & extProcPb.StreamedBodyResponse {
303
- Body : body ,
304
- EndOfStream : true ,
305
- },
306
- },
307
- },
308
- },
309
- },
310
- },
311
- }
281
+ reqCtx .respBodyResp = generateResponseBodyResponses (body , true )
312
282
break
313
283
}
314
284
@@ -361,10 +331,13 @@ func (r *RequestContext) updateStateAndSendIfNeeded(srv extProcPb.ExternalProces
361
331
}
362
332
r .RequestState = HeaderRequestResponseComplete
363
333
}
364
- if r .RequestState == HeaderRequestResponseComplete && r .reqBodyResp != nil {
365
- loggerTrace .Info ("Sending request body response" )
366
- if err := srv .Send (r .reqBodyResp ); err != nil {
367
- return status .Errorf (codes .Unknown , "failed to send response back to Envoy: %v" , err )
334
+ if r .RequestState == HeaderRequestResponseComplete && r .reqBodyResp != nil && len (r .reqBodyResp ) > 0 {
335
+ loggerTrace .Info ("Sending request body response(s)" )
336
+
337
+ for _ , response := range r .reqBodyResp {
338
+ if err := srv .Send (response ); err != nil {
339
+ return status .Errorf (codes .Unknown , "failed to send response back to Envoy: %v" , err )
340
+ }
368
341
}
369
342
r .RequestState = BodyRequestResponsesComplete
370
343
metrics .IncRunningRequests (r .Model )
@@ -385,15 +358,17 @@ func (r *RequestContext) updateStateAndSendIfNeeded(srv extProcPb.ExternalProces
385
358
}
386
359
r .RequestState = HeaderResponseResponseComplete
387
360
}
388
- if r .RequestState == HeaderResponseResponseComplete && r .respBodyResp != nil {
389
- loggerTrace .Info ("Sending response body response" )
390
- if err := srv .Send (r .respBodyResp ); err != nil {
391
- return status .Errorf (codes .Unknown , "failed to send response back to Envoy: %v" , err )
392
- }
361
+ if r .RequestState == HeaderResponseResponseComplete && r .respBodyResp != nil && len (r .respBodyResp ) > 0 {
362
+ loggerTrace .Info ("Sending response body response(s)" )
363
+ for _ , response := range r .respBodyResp {
364
+ if err := srv .Send (response ); err != nil {
365
+ return status .Errorf (codes .Unknown , "failed to send response back to Envoy: %v" , err )
366
+ }
393
367
394
- body := r .respBodyResp .Response .(* extProcPb.ProcessingResponse_ResponseBody )
395
- if body .ResponseBody .Response .GetBodyMutation ().GetStreamedResponse ().GetEndOfStream () {
396
- r .RequestState = BodyResponseResponsesComplete
368
+ body := response .Response .(* extProcPb.ProcessingResponse_ResponseBody )
369
+ if body .ResponseBody .Response .GetBodyMutation ().GetStreamedResponse ().GetEndOfStream () {
370
+ r .RequestState = BodyResponseResponsesComplete
371
+ }
397
372
}
398
373
// Dump the response so a new stream message can begin
399
374
r .respBodyResp = nil
@@ -466,16 +441,31 @@ func BuildErrResponse(err error) (*extProcPb.ProcessingResponse, error) {
466
441
return resp , nil
467
442
}
468
443
469
- func buildCommonResponses (bodyBytes []byte , byteLimit int ) []* extProcPb.CommonResponse {
444
+ func buildCommonResponses (bodyBytes []byte , byteLimit int , setEos bool ) []* extProcPb.CommonResponse {
470
445
responses := []* extProcPb.CommonResponse {}
471
446
startingIndex := 0
472
447
bodyLen := len (bodyBytes )
473
448
449
+ if bodyLen == 0 {
450
+ return []* extProcPb.CommonResponse {
451
+ {
452
+ BodyMutation : & extProcPb.BodyMutation {
453
+ Mutation : & extProcPb.BodyMutation_StreamedResponse {
454
+ StreamedResponse : & extProcPb.StreamedBodyResponse {
455
+ Body : bodyBytes ,
456
+ EndOfStream : setEos ,
457
+ },
458
+ },
459
+ },
460
+ },
461
+ }
462
+ }
463
+
474
464
for startingIndex < bodyLen {
475
465
eos := false
476
466
len := min (bodyLen - startingIndex , byteLimit )
477
467
chunk := bodyBytes [startingIndex : len + startingIndex ]
478
- if len + startingIndex = = bodyLen {
468
+ if setEos && len + startingIndex > = bodyLen {
479
469
eos = true
480
470
}
481
471
@@ -492,5 +482,6 @@ func buildCommonResponses(bodyBytes []byte, byteLimit int) []*extProcPb.CommonRe
492
482
responses = append (responses , commonResp )
493
483
startingIndex += len
494
484
}
485
+
495
486
return responses
496
487
}
0 commit comments