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

Merged
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk
Dec 19, 2024
Merged

feat(go-sdk): add wasi hostcalls used by the Go SDK#427
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk

Conversation

@leonm1

Copy link
Copy Markdown
Contributor

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.

@leonm1
leonm1force-pushed the feat/go-sdk branch 4 times, most recently from b9b4a5e to 1af87ceCompareDecember 13, 2024 19:48
Comment threadsrc/exports.cc Outdated
Comment threadinclude/proxy-wasm/exports.h Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for working on this!

Two high-level comments:

  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls? For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?
  2. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
@leonm1

Copy link
Copy Markdown
ContributorAuthor
  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls?

Answered elsewhere as well, but I was mistaken about some of the filesystem syscalls. This PR now represents the full minimal set of added hostcalls for a helloworld go plugin to initialize.

For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?

Yield should be fine due to the linked behavior. For polling, I do wonder about that — technically we could support some of the subscription types, but I'm not sure how much value they add in a single-threaded environment anyway, since we only support FDs 1 and 2, which never get "closed" and wouldn't "block" from the wasm modules perspective.

  1. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

I tested the CPP host with all of service extensions' cpp and rust plugins. Since these are added hostcalls, they should not affect currently-working wasm modules. I attempted to add explicit calls to each of sched_yield, poll, and fdstat_set_flags (which corresponds to posix's fcntl), and confirmed each translated the libc call to the corresponding wasi hostcall and none complained about the ENOSYS (or ESUCCESS, in sched_yield's case).

Comment threadsrc/wasm.cc Outdated
@PiotrSikora

Copy link
Copy Markdown
Member

Since these are added hostcalls, they should not affect currently-working wasm modules.

Right, this won't break any of the existing plugins. My point was mostly that with those changes (well, the earlier version of this PR) plugins that attempt to open files would load successfully, but could break at runtime.

Comment threadsrc/wasm.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

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>

@martijnekenmartijneken left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@mpwarresmpwarres left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@martijneken
martijneken merged commit c4d7bb0 into proxy-wasm:mainDec 19, 2024
johnlanni pushed a commit to higress-group/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Oct 23, 2025
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>
Signed-off-by: zty98751 <zty98751@alibaba-inc.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 fixproxy-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
Fixesproxy-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>
leonm1 added a commit that referenced this pull request Apr 6, 2026
In #427, a portion
of the wasi hostcalls was added, but not all. Now, all the wasi
hostcalls have been included, and their stability has been verified in
our multiple go 1.24 compiled wasm plugins
---------
Signed-off-by: zty98751 <zty98751@alibaba-inc.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Co-authored-by: zty98751 <zty98751@alibaba-inc.com>
Sign up for freeto 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

@leonm1@PiotrSikora@mpwarres@martijneken
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

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

Merged
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk
Dec 19, 2024
Merged

feat(go-sdk): add wasi hostcalls used by the Go SDK#427
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk

Conversation

@leonm1

Copy link
Copy Markdown
Contributor

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.

@leonm1
leonm1force-pushed the feat/go-sdk branch 4 times, most recently from b9b4a5e to 1af87ceCompareDecember 13, 2024 19:48
Comment threadsrc/exports.cc Outdated
Comment threadinclude/proxy-wasm/exports.h Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for working on this!

Two high-level comments:

  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls? For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?
  2. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
@leonm1

Copy link
Copy Markdown
ContributorAuthor
  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls?

Answered elsewhere as well, but I was mistaken about some of the filesystem syscalls. This PR now represents the full minimal set of added hostcalls for a helloworld go plugin to initialize.

For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?

Yield should be fine due to the linked behavior. For polling, I do wonder about that — technically we could support some of the subscription types, but I'm not sure how much value they add in a single-threaded environment anyway, since we only support FDs 1 and 2, which never get "closed" and wouldn't "block" from the wasm modules perspective.

  1. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

I tested the CPP host with all of service extensions' cpp and rust plugins. Since these are added hostcalls, they should not affect currently-working wasm modules. I attempted to add explicit calls to each of sched_yield, poll, and fdstat_set_flags (which corresponds to posix's fcntl), and confirmed each translated the libc call to the corresponding wasi hostcall and none complained about the ENOSYS (or ESUCCESS, in sched_yield's case).

Comment threadsrc/wasm.cc Outdated
@PiotrSikora

Copy link
Copy Markdown
Member

Since these are added hostcalls, they should not affect currently-working wasm modules.

Right, this won't break any of the existing plugins. My point was mostly that with those changes (well, the earlier version of this PR) plugins that attempt to open files would load successfully, but could break at runtime.

Comment threadsrc/wasm.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

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>

@martijnekenmartijneken left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@mpwarresmpwarres left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@martijneken
martijneken merged commit c4d7bb0 into proxy-wasm:mainDec 19, 2024
johnlanni pushed a commit to higress-group/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Oct 23, 2025
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>
Signed-off-by: zty98751 <zty98751@alibaba-inc.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 fixproxy-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
Fixesproxy-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>
leonm1 added a commit that referenced this pull request Apr 6, 2026
In #427, a portion
of the wasi hostcalls was added, but not all. Now, all the wasi
hostcalls have been included, and their stability has been verified in
our multiple go 1.24 compiled wasm plugins
---------
Signed-off-by: zty98751 <zty98751@alibaba-inc.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Co-authored-by: zty98751 <zty98751@alibaba-inc.com>
Sign up for freeto 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

@leonm1@PiotrSikora@mpwarres@martijneken
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Merged
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk
Dec 19, 2024
Merged

feat(go-sdk): add wasi hostcalls used by the Go SDK#427
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk

Conversation

@leonm1

Copy link
Copy Markdown
Contributor

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.

@leonm1
leonm1force-pushed the feat/go-sdk branch 4 times, most recently from b9b4a5e to 1af87ceCompareDecember 13, 2024 19:48
Comment threadsrc/exports.cc Outdated
Comment threadinclude/proxy-wasm/exports.h Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for working on this!

Two high-level comments:

  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls? For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?
  2. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
@leonm1

Copy link
Copy Markdown
ContributorAuthor
  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls?

Answered elsewhere as well, but I was mistaken about some of the filesystem syscalls. This PR now represents the full minimal set of added hostcalls for a helloworld go plugin to initialize.

For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?

Yield should be fine due to the linked behavior. For polling, I do wonder about that — technically we could support some of the subscription types, but I'm not sure how much value they add in a single-threaded environment anyway, since we only support FDs 1 and 2, which never get "closed" and wouldn't "block" from the wasm modules perspective.

  1. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

I tested the CPP host with all of service extensions' cpp and rust plugins. Since these are added hostcalls, they should not affect currently-working wasm modules. I attempted to add explicit calls to each of sched_yield, poll, and fdstat_set_flags (which corresponds to posix's fcntl), and confirmed each translated the libc call to the corresponding wasi hostcall and none complained about the ENOSYS (or ESUCCESS, in sched_yield's case).

Comment threadsrc/wasm.cc Outdated
@PiotrSikora

Copy link
Copy Markdown
Member

Since these are added hostcalls, they should not affect currently-working wasm modules.

Right, this won't break any of the existing plugins. My point was mostly that with those changes (well, the earlier version of this PR) plugins that attempt to open files would load successfully, but could break at runtime.

Comment threadsrc/wasm.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

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>

@martijnekenmartijneken left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@mpwarresmpwarres left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@martijneken
martijneken merged commit c4d7bb0 into proxy-wasm:mainDec 19, 2024
johnlanni pushed a commit to higress-group/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Oct 23, 2025
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>
Signed-off-by: zty98751 <zty98751@alibaba-inc.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 fixproxy-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
Fixesproxy-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>
leonm1 added a commit that referenced this pull request Apr 6, 2026
In #427, a portion
of the wasi hostcalls was added, but not all. Now, all the wasi
hostcalls have been included, and their stability has been verified in
our multiple go 1.24 compiled wasm plugins
---------
Signed-off-by: zty98751 <zty98751@alibaba-inc.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Co-authored-by: zty98751 <zty98751@alibaba-inc.com>
Sign up for freeto 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

@leonm1@PiotrSikora@mpwarres@martijneken
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Merged
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk
Dec 19, 2024
Merged

feat(go-sdk): add wasi hostcalls used by the Go SDK#427
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk

Conversation

@leonm1

Copy link
Copy Markdown
Contributor

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.

@leonm1
leonm1force-pushed the feat/go-sdk branch 4 times, most recently from b9b4a5e to 1af87ceCompareDecember 13, 2024 19:48
Comment threadsrc/exports.cc Outdated
Comment threadinclude/proxy-wasm/exports.h Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for working on this!

Two high-level comments:

  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls? For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?
  2. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
@leonm1

Copy link
Copy Markdown
ContributorAuthor
  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls?

Answered elsewhere as well, but I was mistaken about some of the filesystem syscalls. This PR now represents the full minimal set of added hostcalls for a helloworld go plugin to initialize.

For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?

Yield should be fine due to the linked behavior. For polling, I do wonder about that — technically we could support some of the subscription types, but I'm not sure how much value they add in a single-threaded environment anyway, since we only support FDs 1 and 2, which never get "closed" and wouldn't "block" from the wasm modules perspective.

  1. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

I tested the CPP host with all of service extensions' cpp and rust plugins. Since these are added hostcalls, they should not affect currently-working wasm modules. I attempted to add explicit calls to each of sched_yield, poll, and fdstat_set_flags (which corresponds to posix's fcntl), and confirmed each translated the libc call to the corresponding wasi hostcall and none complained about the ENOSYS (or ESUCCESS, in sched_yield's case).

Comment threadsrc/wasm.cc Outdated
@PiotrSikora

Copy link
Copy Markdown
Member

Since these are added hostcalls, they should not affect currently-working wasm modules.

Right, this won't break any of the existing plugins. My point was mostly that with those changes (well, the earlier version of this PR) plugins that attempt to open files would load successfully, but could break at runtime.

Comment threadsrc/wasm.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

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>

@martijnekenmartijneken left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@mpwarresmpwarres left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@martijneken
martijneken merged commit c4d7bb0 into proxy-wasm:mainDec 19, 2024
johnlanni pushed a commit to higress-group/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Oct 23, 2025
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>
Signed-off-by: zty98751 <zty98751@alibaba-inc.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 fixproxy-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
Fixesproxy-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>
leonm1 added a commit that referenced this pull request Apr 6, 2026
In #427, a portion
of the wasi hostcalls was added, but not all. Now, all the wasi
hostcalls have been included, and their stability has been verified in
our multiple go 1.24 compiled wasm plugins
---------
Signed-off-by: zty98751 <zty98751@alibaba-inc.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Co-authored-by: zty98751 <zty98751@alibaba-inc.com>
Sign up for freeto 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

@leonm1@PiotrSikora@mpwarres@martijneken
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

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

Merged
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk
Dec 19, 2024
Merged

feat(go-sdk): add wasi hostcalls used by the Go SDK#427
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk

Conversation

@leonm1

Copy link
Copy Markdown
Contributor

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.

@leonm1
leonm1force-pushed the feat/go-sdk branch 4 times, most recently from b9b4a5e to 1af87ceCompareDecember 13, 2024 19:48
Comment threadsrc/exports.cc Outdated
Comment threadinclude/proxy-wasm/exports.h Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for working on this!

Two high-level comments:

  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls? For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?
  2. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
@leonm1

Copy link
Copy Markdown
ContributorAuthor
  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls?

Answered elsewhere as well, but I was mistaken about some of the filesystem syscalls. This PR now represents the full minimal set of added hostcalls for a helloworld go plugin to initialize.

For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?

Yield should be fine due to the linked behavior. For polling, I do wonder about that — technically we could support some of the subscription types, but I'm not sure how much value they add in a single-threaded environment anyway, since we only support FDs 1 and 2, which never get "closed" and wouldn't "block" from the wasm modules perspective.

  1. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

I tested the CPP host with all of service extensions' cpp and rust plugins. Since these are added hostcalls, they should not affect currently-working wasm modules. I attempted to add explicit calls to each of sched_yield, poll, and fdstat_set_flags (which corresponds to posix's fcntl), and confirmed each translated the libc call to the corresponding wasi hostcall and none complained about the ENOSYS (or ESUCCESS, in sched_yield's case).

Comment threadsrc/wasm.cc Outdated
@PiotrSikora

Copy link
Copy Markdown
Member

Since these are added hostcalls, they should not affect currently-working wasm modules.

Right, this won't break any of the existing plugins. My point was mostly that with those changes (well, the earlier version of this PR) plugins that attempt to open files would load successfully, but could break at runtime.

Comment threadsrc/wasm.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

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>

@martijnekenmartijneken left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@mpwarresmpwarres left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@martijneken
martijneken merged commit c4d7bb0 into proxy-wasm:mainDec 19, 2024
johnlanni pushed a commit to higress-group/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Oct 23, 2025
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>
Signed-off-by: zty98751 <zty98751@alibaba-inc.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 fixproxy-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
Fixesproxy-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>
leonm1 added a commit that referenced this pull request Apr 6, 2026
In #427, a portion
of the wasi hostcalls was added, but not all. Now, all the wasi
hostcalls have been included, and their stability has been verified in
our multiple go 1.24 compiled wasm plugins
---------
Signed-off-by: zty98751 <zty98751@alibaba-inc.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Co-authored-by: zty98751 <zty98751@alibaba-inc.com>
Sign up for freeto 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

@leonm1@PiotrSikora@mpwarres@martijneken
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Merged
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk
Dec 19, 2024
Merged

feat(go-sdk): add wasi hostcalls used by the Go SDK#427
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk

Conversation

@leonm1

Copy link
Copy Markdown
Contributor

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.

@leonm1
leonm1force-pushed the feat/go-sdk branch 4 times, most recently from b9b4a5e to 1af87ceCompareDecember 13, 2024 19:48
Comment threadsrc/exports.cc Outdated
Comment threadinclude/proxy-wasm/exports.h Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for working on this!

Two high-level comments:

  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls? For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?
  2. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
@leonm1

Copy link
Copy Markdown
ContributorAuthor
  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls?

Answered elsewhere as well, but I was mistaken about some of the filesystem syscalls. This PR now represents the full minimal set of added hostcalls for a helloworld go plugin to initialize.

For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?

Yield should be fine due to the linked behavior. For polling, I do wonder about that — technically we could support some of the subscription types, but I'm not sure how much value they add in a single-threaded environment anyway, since we only support FDs 1 and 2, which never get "closed" and wouldn't "block" from the wasm modules perspective.

  1. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

I tested the CPP host with all of service extensions' cpp and rust plugins. Since these are added hostcalls, they should not affect currently-working wasm modules. I attempted to add explicit calls to each of sched_yield, poll, and fdstat_set_flags (which corresponds to posix's fcntl), and confirmed each translated the libc call to the corresponding wasi hostcall and none complained about the ENOSYS (or ESUCCESS, in sched_yield's case).

Comment threadsrc/wasm.cc Outdated
@PiotrSikora

Copy link
Copy Markdown
Member

Since these are added hostcalls, they should not affect currently-working wasm modules.

Right, this won't break any of the existing plugins. My point was mostly that with those changes (well, the earlier version of this PR) plugins that attempt to open files would load successfully, but could break at runtime.

Comment threadsrc/wasm.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

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>

@martijnekenmartijneken left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@mpwarresmpwarres left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@martijneken
martijneken merged commit c4d7bb0 into proxy-wasm:mainDec 19, 2024
johnlanni pushed a commit to higress-group/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Oct 23, 2025
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>
Signed-off-by: zty98751 <zty98751@alibaba-inc.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 fixproxy-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
Fixesproxy-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>
leonm1 added a commit that referenced this pull request Apr 6, 2026
In #427, a portion
of the wasi hostcalls was added, but not all. Now, all the wasi
hostcalls have been included, and their stability has been verified in
our multiple go 1.24 compiled wasm plugins
---------
Signed-off-by: zty98751 <zty98751@alibaba-inc.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Co-authored-by: zty98751 <zty98751@alibaba-inc.com>
Sign up for freeto 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

@leonm1@PiotrSikora@mpwarres@martijneken
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

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

Merged
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk
Dec 19, 2024
Merged

feat(go-sdk): add wasi hostcalls used by the Go SDK#427
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk

Conversation

@leonm1

Copy link
Copy Markdown
Contributor

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.

@leonm1
leonm1force-pushed the feat/go-sdk branch 4 times, most recently from b9b4a5e to 1af87ceCompareDecember 13, 2024 19:48
Comment threadsrc/exports.cc Outdated
Comment threadinclude/proxy-wasm/exports.h Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for working on this!

Two high-level comments:

  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls? For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?
  2. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
@leonm1

Copy link
Copy Markdown
ContributorAuthor
  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls?

Answered elsewhere as well, but I was mistaken about some of the filesystem syscalls. This PR now represents the full minimal set of added hostcalls for a helloworld go plugin to initialize.

For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?

Yield should be fine due to the linked behavior. For polling, I do wonder about that — technically we could support some of the subscription types, but I'm not sure how much value they add in a single-threaded environment anyway, since we only support FDs 1 and 2, which never get "closed" and wouldn't "block" from the wasm modules perspective.

  1. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

I tested the CPP host with all of service extensions' cpp and rust plugins. Since these are added hostcalls, they should not affect currently-working wasm modules. I attempted to add explicit calls to each of sched_yield, poll, and fdstat_set_flags (which corresponds to posix's fcntl), and confirmed each translated the libc call to the corresponding wasi hostcall and none complained about the ENOSYS (or ESUCCESS, in sched_yield's case).

Comment threadsrc/wasm.cc Outdated
@PiotrSikora

Copy link
Copy Markdown
Member

Since these are added hostcalls, they should not affect currently-working wasm modules.

Right, this won't break any of the existing plugins. My point was mostly that with those changes (well, the earlier version of this PR) plugins that attempt to open files would load successfully, but could break at runtime.

Comment threadsrc/wasm.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

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>

@martijnekenmartijneken left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@mpwarresmpwarres left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@martijneken
martijneken merged commit c4d7bb0 into proxy-wasm:mainDec 19, 2024
johnlanni pushed a commit to higress-group/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Oct 23, 2025
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>
Signed-off-by: zty98751 <zty98751@alibaba-inc.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 fixproxy-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
Fixesproxy-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>
leonm1 added a commit that referenced this pull request Apr 6, 2026
In #427, a portion
of the wasi hostcalls was added, but not all. Now, all the wasi
hostcalls have been included, and their stability has been verified in
our multiple go 1.24 compiled wasm plugins
---------
Signed-off-by: zty98751 <zty98751@alibaba-inc.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Co-authored-by: zty98751 <zty98751@alibaba-inc.com>
Sign up for freeto 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

@leonm1@PiotrSikora@mpwarres@martijneken
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

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

Merged
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk
Dec 19, 2024
Merged

feat(go-sdk): add wasi hostcalls used by the Go SDK#427
martijneken merged 1 commit into
proxy-wasm:mainfrom
leonm1:feat/go-sdk

Conversation

@leonm1

Copy link
Copy Markdown
Contributor

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.

@leonm1
leonm1force-pushed the feat/go-sdk branch 4 times, most recently from b9b4a5e to 1af87ceCompareDecember 13, 2024 19:48
Comment threadsrc/exports.cc Outdated
Comment threadinclude/proxy-wasm/exports.h Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks for working on this!

Two high-level comments:

  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls? For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?
  2. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
Comment threadsrc/exports.cc Outdated
@leonm1

Copy link
Copy Markdown
ContributorAuthor
  1. It would be good to understand why Go SDK wants to import (and use?) those hostcalls. For filesystem calls - does it try to access some files on startup, and why it doesn't use preopen hostcalls?

Answered elsewhere as well, but I was mistaken about some of the filesystem syscalls. This PR now represents the full minimal set of added hostcalls for a helloworld go plugin to initialize.

For yield and polling - does it actually work without making progress or are non-trivial plugins going to deadlock?

Yield should be fine due to the linked behavior. For polling, I do wonder about that — technically we could support some of the subscription types, but I'm not sure how much value they add in a single-threaded environment anyway, since we only support FDs 1 and 2, which never get "closed" and wouldn't "block" from the wasm modules perspective.

  1. Since we're exposing those hostcalls globally, how does it affect other the SDKs? If you try to open files in Rust or C++ files, will they gracefully return user errors (i.e. file not found or similar) or crash due to a missing code path for ENOSYS?

I tested the CPP host with all of service extensions' cpp and rust plugins. Since these are added hostcalls, they should not affect currently-working wasm modules. I attempted to add explicit calls to each of sched_yield, poll, and fdstat_set_flags (which corresponds to posix's fcntl), and confirmed each translated the libc call to the corresponding wasi hostcall and none complained about the ENOSYS (or ESUCCESS, in sched_yield's case).

Comment threadsrc/wasm.cc Outdated
@PiotrSikora

Copy link
Copy Markdown
Member

Since these are added hostcalls, they should not affect currently-working wasm modules.

Right, this won't break any of the existing plugins. My point was mostly that with those changes (well, the earlier version of this PR) plugins that attempt to open files would load successfully, but could break at runtime.

Comment threadsrc/wasm.cc Outdated

@PiotrSikoraPiotrSikora left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks!

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>

@martijnekenmartijneken left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@mpwarresmpwarres left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, thanks!

@martijneken
martijneken merged commit c4d7bb0 into proxy-wasm:mainDec 19, 2024
johnlanni pushed a commit to higress-group/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Mar 25, 2025
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>
johnlanni pushed a commit to johnlanni/proxy-wasm-cpp-host that referenced this pull request Oct 23, 2025
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>
Signed-off-by: zty98751 <zty98751@alibaba-inc.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 fixproxy-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
Fixesproxy-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>
leonm1 added a commit that referenced this pull request Apr 6, 2026
In #427, a portion
of the wasi hostcalls was added, but not all. Now, all the wasi
hostcalls have been included, and their stability has been verified in
our multiple go 1.24 compiled wasm plugins
---------
Signed-off-by: zty98751 <zty98751@alibaba-inc.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Co-authored-by: zty98751 <zty98751@alibaba-inc.com>
Sign up for freeto 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

@leonm1@PiotrSikora@mpwarres@martijneken