Skip to content

wasm: add config setting to control StopIteration behavior#40213

Merged
phlax merged 8 commits intoenvoyproxy:mainfrom
mpwarres:wasm-allow-on-headers-stop-iteration
Jul 15, 2025
Merged

wasm: add config setting to control StopIteration behavior#40213
phlax merged 8 commits intoenvoyproxy:mainfrom
mpwarres:wasm-allow-on-headers-stop-iteration

Conversation

@mpwarres
Copy link
Contributor

@mpwarres mpwarres commented Jul 12, 2025

Commit Message:

Add PluginConfig.allow_on_headers_stop_iteration config field to control the behavior of WasmFilter when plugin onRequestHeaders and onResponseHeaders callbacks return a value of FilterHeadersStatus::StopIteration.

If allow_on_headers_stop_iteration is false (the default), then in cases where a Wasm plugin onRequestHeaders or onResponseHeaders callback returns FilterHeadersStatus::StopIteration, WasmFilter will maintain its current behavior of translating that response code to FilterHeadersStatus::StopAllIterationAndWatermark.

If allow_on_headers_stop_iteration is true, then WasmFilter will avoid any translation of FilterHeadersStatus::StopIteration, and will pass it through to HCM unmodified, which allows Wasm plugins to inspect request or response body data before deciding how to handle/transform request or response headers.

For details, see Envoy Wasm / Proxy-Wasm support for FilterHeadersStatus::StopIteration. This PR implements Option B: WasmFilter config knob, building on proxy-wasm/proxy-wasm-cpp-host#434.

Note that this config knob is a stopgap until upcoming v0.3.0 of the Proxy-Wasm ABI adds more comprehensive support for StopIteration and body buffering, per proxy-wasm/spec#63.

Additional Description:

This change updates the proxy-wasm-cpp-host dependency since it depends on proxy-wasm/proxy-wasm-cpp-host#434, which was recently merged there.

Risk Level:

Low: default behavior is unchanged.

Testing:

Updated WasmFilter tests to exercise new functionality.

Docs Changes:

Added field documentation.

Release Notes:

Added changelog entry.

Platform Specific Features:
[Optional Runtime guard:]
[Optional Fixes #Issue]
[Optional Fixes commit #PR or SHA]
[Optional Deprecated:]
[Optional API Considerations:]

Add PluginConfig.allow_on_headers_stop_iteration config field to control the
behavior of WasmFilter when plugin onRequestHeaders and onResponseHeaders
callbacks return a value of FilterHeadersStatus::StopIteration.

Signed-off-by: Michael Warres <mpw@google.com>
@mpwarres mpwarres requested a review from kyessenov as a code owner July 12, 2025 02:04
@repokitteh-read-only repokitteh-read-only bot added api deps Approval required for changes to Envoy's external dependencies labels Jul 12, 2025
@repokitteh-read-only
Copy link

CC @envoyproxy/api-shepherds: Your approval is needed for changes made to (api/envoy/|docs/root/api-docs/).
envoyproxy/api-shepherds assignee is @wbpcode
CC @envoyproxy/api-watchers: FYI only for changes made to (api/envoy/|docs/root/api-docs/).
CC @envoyproxy/dependency-shepherds: Your approval is needed for changes made to (bazel/.*repos.*\.bzl)|(bazel/dependency_imports\.bzl)|(api/bazel/.*\.bzl)|(.*/requirements\.txt)|(.*\.patch).
envoyproxy/dependency-shepherds assignee is @phlax

🐱

Caused by: #40213 was opened by mpwarres.

see: more, trace.

mpwarres added 2 commits July 12, 2025 15:53
Signed-off-by: Michael Warres <mpw@google.com>
Signed-off-by: Michael Warres <mpw@google.com>
mpwarres added a commit to proxy-wasm/proxy-wasm-cpp-host that referenced this pull request Jul 13, 2025
… behavior (#434)

Add protected ContextBase::allow_on_headers_stop_iteration_ field that can be used by host implementations to control whether or not ContextBase propagates FilterHeaderStatus::StopIteration returned by onRequestHeaders() or onResponseHeaders() without modification.

Follow-on envoyproxy/envoy#40213 adds an option in Envoy WasmFilter PluginConfig that sets the value of this field.

For details, see [Envoy Wasm / Proxy-Wasm support for FilterHeadersStatus::StopIteration](https://docs.google.com/document/d/1Whd1C0k-H2NHrPOmlAqqauFz6ObSTP017juJIYyciB0/edit?usp=sharing). This PR is one part of implementing [Option B: WasmFilter config knob](https://docs.google.com/document/d/1Whd1C0k-H2NHrPOmlAqqauFz6ObSTP017juJIYyciB0/edit?tab=t.0#bookmark=id.5wxldlapsp54).

Note that default behavior of proxy-wasm-cpp-host and ContextBase is unchanged.

---------

Signed-off-by: Michael Warres <mpw@google.com>
mpwarres added 3 commits July 13, 2025 04:41
Signed-off-by: Michael Warres <mpw@google.com>
Signed-off-by: Michael Warres <mpw@google.com>
Signed-off-by: Michael Warres <mpw@google.com>
Signed-off-by: Michael Warres <mpw@google.com>
kyessenov
kyessenov previously approved these changes Jul 14, 2025
Copy link
Contributor

@kyessenov kyessenov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please hide this field since it's going to be deprecated shortly. I think this should be in the release if possible.

For 0.3.0 onwards, do we need to worry about breaking the host somehow? The state machine becomes quite complicated once you allow stop-headers, continue-body.

Signed-off-by: Michael Warres <mpw@google.com>
Copy link
Member

@phlax phlax left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm deps

@repokitteh-read-only repokitteh-read-only bot removed the deps Approval required for changes to Envoy's external dependencies label Jul 14, 2025
Copy link
Member

@wbpcode wbpcode left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm Thanks for the contribution.

@repokitteh-read-only
Copy link

please specify a single label can be specified

🐱

Caused by: a #40213 (review) was submitted by @wbpcode.

see: more, trace.

@mpwarres
Copy link
Contributor Author

Thanks for the reviews!

@phlax phlax merged commit 274d68f into envoyproxy:main Jul 15, 2025
26 checks passed
Jing-ze added a commit to Jing-ze/proxy-wasm-cpp-host that referenced this pull request Jan 23, 2026
… behavior (proxy-wasm#434)

Add protected ContextBase::allow_on_headers_stop_iteration_ field that can be used by host implementations to control whether or not ContextBase propagates FilterHeaderStatus::StopIteration returned by onRequestHeaders() or onResponseHeaders() without modification.

Follow-on envoyproxy/envoy#40213 adds an option in Envoy WasmFilter PluginConfig that sets the value of this field.

For details, see [Envoy Wasm / Proxy-Wasm support for FilterHeadersStatus::StopIteration](https://docs.google.com/document/d/1Whd1C0k-H2NHrPOmlAqqauFz6ObSTP017juJIYyciB0/edit?usp=sharing). This PR is one part of implementing [Option B: WasmFilter config knob](https://docs.google.com/document/d/1Whd1C0k-H2NHrPOmlAqqauFz6ObSTP017juJIYyciB0/edit?tab=t.0#bookmark=id.5wxldlapsp54).

Note that default behavior of proxy-wasm-cpp-host and ContextBase is unchanged.

---------

Change-Id: I3dfe6cb850ec8e28ff69c0e07474affa4f80005c
Co-developed-by: Cursor <noreply@cursor.com>
Signed-off-by: Michael Warres <mpw@google.com>
johnlanni pushed a commit to higress-group/proxy-wasm-cpp-host that referenced this pull request Jan 26, 2026
… behavior (proxy-wasm#434) (#11)

* fix: CI branch name master -> main (proxy-wasm#398)

Signed-off-by: Martijn Stevenson <mstevenson@google.com>

* fix: Bump Abseil to fix Linux build issues (proxy-wasm#400)

Bump Abseil to fix Linux build issues

Pick up this fix: abseil/abseil-cpp#1187

Bump past Envoy to pick up another fix found in fuzz tests:
proxy-wasm#399 (comment)

Signed-off-by: Martijn Stevenson <mstevenson@google.com>

* fix: Update cargo-raze -> crate_universe (proxy-wasm#399)

- Updated platforms for crate_universe compatibility
- Supports upgrade to wasmsign2
- Includes workaround for Windows path length issue

Signed-off-by: Martijn Stevenson <mstevenson@google.com>

* fix: Move from unavailable macos-11 to macos-13 (proxy-wasm#401)

See: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources

This does not fix proxy-wasm#384, but does resurface those errors.

Signed-off-by: Martijn Stevenson <mstevenson@google.com>

* chore: bump Bazel from 5.2.0 to 6.5.0 (proxy-wasm#402)

Bump Bazel from 5.2.0 to 6.5.0

This breaks the s390x build which relied on an external Docker image. I made some strides in fixing s390x, but it's not yet working. Deferred to proxy-wasm#405.

Signed-off-by: Martijn Stevenson <mstevenson@google.com>

* chore: bump rules_python and rules_fuzzing (proxy-wasm#404)

Upgrade rules_python (0.34.0) and rules_fuzzing (0.5.2)

This requires extracting WORKSPACE phases into more phases:
- dependencies -- py_repositories() and toolchains
- dependencies_python() -- pip_parse module loading
- dependencies_import() -- python/fuzzing/other deps

The new structure roughly matches Envoy WORKSPACE:
- envoy_dependencies()
- envoy_dependencies_extra() -- not needed here
- envoy_python_dependencies()
- envoy_dependency_imports()

Signed-off-by: Martijn Stevenson <mstevenson@google.com>

* Update CI to use Ubuntu 22.04 / clang 14 (proxy-wasm#408)

Signed-off-by: Martijn Stevenson <mstevenson@google.com>

* Update rules_rust to v0.42.1 (with Rust v1.77.2). (proxy-wasm#410)

* Update rules_rust
* Update rust and vendor
* rust_oom -> rg_oom
* Change rust version

---------

Signed-off-by: Keith Mattix II <keithmattix@microsoft.com>

* Update wasmtime (v24.0.0) (proxy-wasm#406)

Removes Wasmtime + Windows CI because rules_rust has recently dropped Windows: https://github.com/bazelbuild/rules_rust/blob/main/docs/index.md#supported-platforms

Signed-off-by: Keith Mattix II <keithmattix@microsoft.com>

* fix: Upgrade deprecated artifact upload/download handlers (proxy-wasm#415)

Seen on proxy-wasm#380 CI:

Error: This request has been automatically failed because it uses a deprecated version of `actions/upload-artifact: v2`. Learn more: https://github.blog/changelog/2024-02-13-deprecation-notice-v1-and-v2-of-the-artifact-actions/

Signed-off-by: Martijn Stevenson <mstevenson@google.com>

* bump wamr to 2.1.1 and able to consume precompiled content (proxy-wasm#380)

- skip leading paddings in .aot section

Signed-off-by: liang.he@intel.com <liang.he@intel.com>

* compdb add the compdb support to the proxy_wasm_cpp_host (proxy-wasm#419)

* compdb add the compdb support to the proxy_wasm_cpp_host

Signed-off-by: wangbaiping <wbphub@gmail.com>

* Fix references to prefix_wasm_api (proxy-wasm#420)

Signed-off-by: Keith Mattix II <keithmattix@microsoft.com>

* feat(go-sdk): add wasi hostcalls used by the Go SDK (proxy-wasm#427)

The full Go sdk imports hostcalls not currently exported to the wasm
module, making the wasm module fail on instantiation. Per discussion
with the Go core maintainers, these functions do not need to be
implemented, but they must be present.

Signed-off-by: Matt Leon <mattleon@google.com>

* chore: workflow runner fixes (proxy-wasm#436)

Assorted changes to get workflows working again:

- Update format workflows to use ubuntu-22.04
- Update windows-2019 to windows-2022 and add a missing <string> include needed to
  build with that
- Enable manual triggering of workflows

Fixes proxy-wasm#435

---------

Signed-off-by: Michael Warres <mpw@google.com>

* feat: add knob to customise on{Request,Response}Headers StopIteration behavior (proxy-wasm#434)

Add protected ContextBase::allow_on_headers_stop_iteration_ field that can be used by host implementations to control whether or not ContextBase propagates FilterHeaderStatus::StopIteration returned by onRequestHeaders() or onResponseHeaders() without modification.

Follow-on envoyproxy/envoy#40213 adds an option in Envoy WasmFilter PluginConfig that sets the value of this field.

For details, see [Envoy Wasm / Proxy-Wasm support for FilterHeadersStatus::StopIteration](https://docs.google.com/document/d/1Whd1C0k-H2NHrPOmlAqqauFz6ObSTP017juJIYyciB0/edit?usp=sharing). This PR is one part of implementing [Option B: WasmFilter config knob](https://docs.google.com/document/d/1Whd1C0k-H2NHrPOmlAqqauFz6ObSTP017juJIYyciB0/edit?tab=t.0#bookmark=id.5wxldlapsp54).

Note that default behavior of proxy-wasm-cpp-host and ContextBase is unchanged.

---------

Signed-off-by: Michael Warres <mpw@google.com>

---------

Signed-off-by: Martijn Stevenson <mstevenson@google.com>
Signed-off-by: Keith Mattix II <keithmattix@microsoft.com>
Signed-off-by: liang.he@intel.com <liang.he@intel.com>
Signed-off-by: wangbaiping <wbphub@gmail.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Michael Warres <mpw@google.com>
Co-authored-by: martijneken <mstevenson@google.com>
Co-authored-by: Keith Mattix II <keithmattix2@gmail.com>
Co-authored-by: Keith Mattix II <keithmattix@microsoft.com>
Co-authored-by: liang.he <liang.he@intel.com>
Co-authored-by: code <wbphub@gmail.com>
Co-authored-by: Matt Leon <ml@mattleon.com>
Co-authored-by: Michael Warres <mpw@google.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants