ext_proc hang and response body is never called when behind Decompressor filter
- Dominant language
- C++
- Stars
- 28.9k
- Forks
- 5.6k
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 437
Description
*Title*: *ext_proc response body never get called when behind Decompressor filter*
*Description*:
>Using the following filter chain
```
static_resources:
listeners:
- name: listener_0
address:
socket_address:
address: 0.0.0.0
port_value: 8084
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match:
prefix: "/"
route:
cluster: service_httpbin
http_filters:
- name: envoy.filters.http.ext_proc
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.ext_proc.v3.ExternalProcessor
failure_mode_allow: false
message_timeout: 5s
processing_mode:
request_header_mode: "SEND"
response_header_mode: "SKIP"
request_body_mode: "NONE"
response_body_mode: "BUFFERED"
request_trailer_mode: "SKIP"
response_trailer_mode: "SKIP"
grpc_service:
envoy_grpc:
cluster_name: ext_proc_cluster
- name: envoy.filters.http.decompressor
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.decompressor.v3.Decompressor
decompressor_library:
name: large
typed_config:
"@type": "type.googleapis.com/envoy.extensions.compression.gzip.decompressor.v3.Gzip"
chunk_size: 65536
request_direction_config:
common_config:
enabled:
default_value: false
runtime_key: request_decompressor_enabled
- name: envoy.filters.http.router
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
clusters:
- name: service_httpbin
connect_timeout: 2s
type: LOGICAL_DNS
dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: service_httpbin
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: httpbin.org
port_value: 80
- name: ext_proc_cluster
type: LOGICAL_DNS
connect_timeout: 1s
http2_protocol_options: {}
load_assignment:
cluster_name: ext_proc_cluster
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 9000
```
`curl -v -H "host: http.domain.com" --resolve http.domain.com:8084:127.0.0.1 http://http.domain.com:8084/gzip`
never end and the ext_proc grpc is not receving the message to process response body. All other call works as expected.
and `curl -v -H "host: http.domain.com" --resolve http.domain.com:8084:127.0.0.1 http://http.domain.com:8084/html` for non gzip encoded response works also.
*Logs*:
```
[2022-05-09 21:12:36.788][30950][debug][router] [source/common/router/router.cc:1331] [C0][S12464040349810479909] upstream headers complete: end_stream=false
[2022-05-09 21:12:36.788][30950][debug][filter] [source/extensions/filters/http/decompressor/decompressor_filter.cc:128] [C0][S12464040349810479909] DecompressorFilter::encodeHeaders: ':status', '200'
'date', 'Mon, 09 May 2022 19:12:51 GMT'
'content-type', 'application/json'
'content-length', '251'
'connection', 'keep-alive'
'server', 'gunicorn/19.9.0'
'content-encoding', 'gzip'
'access-control-allow-origin', '*'
'access-control-allow-credentials', 'true'
'x-envoy-upstream-service-time', '289'
[2022-05-09 21:12:36.789][30950][debug][ext_proc] [source/extensions/filters/http/ext_proc/ext_proc.cc:141] Sending headers message
[2022-05-09 21:12:36.789][30950][debug][filter] [source/extensions/filters/http/decompressor/decompressor_filter.cc:168] [C0][S12464040349810479909] response data decompressed from 251 bytes to 328 bytes
[2022-05-09 21:12:36.789][30950][debug][ext_proc] [source/extensions/filters/http/ext_proc/processor_state.cc:363] Watermark raised on encoding
[2022-05-09 21:12:36.789][30950][debug][http] [source/common/http/filter_manager.cc:1611] [C0][S12464040349810479909] Disabling upstream stream due to filter callbacks.
[2022-05-09 21:12:36.789][30950][debug][client] [source/common/http/codec_client.cc:126] [C2] response complete
[2022-05-09 21:12:36.789][30950][debug][filter] [source/extensions/filters/http/decompressor/decompressor_filter.cc:168] [C0][S12464040349810479909] response data decompressed from 0 bytes to 0 bytes
[2022-05-09 21:12:36.789][30950][debug][pool] [source/common/http/http1/conn_pool.cc:53] [C2] response complete
[2022-05-09 21:12:36.789][30950][debug][pool] [source/common/conn_pool/conn_pool_base.cc:210] [C2] destroying stream: 0 remaining
[2022-05-09 21:12:36.791][30950][debug][ext_proc] [source/extensions/filters/http/ext_proc/ext_proc.cc:524] Processing mode overridden by server for this request
[2022-05-09 21:12:36.792][30950][debug][ext_proc] [source/extensions/filters/http/ext_proc/ext_proc.cc:529] Received response headers response
[2022-05-09 21:12:36.792][30950][debug][ext_proc] [source/extensions/filters/http/ext_proc/processor_state.cc:31] applying headers response. body mode = BUFFERED
[2022-05-09 21:12:36.792][30950][debug][ext_proc] [source/extensions/filters/http/ext_proc/processor_state.cc:371] Watermark lowered on decoding
[2022-05-09 21:12:36.792][30950][debug][http] [source/common/http/filter_manager.cc:1616] [C0][S12464040349810479909] Enabling upstream stream due to filter callbacks.
```
`version: 25cc9ea48ba18930e1235dfb6a6a236d59c8b08a/1.23.0-dev/Clean/RELEASE/BoringSSL`
Contributor guide
Assessment
This issue has not been assessed yet.