From b7df475729dd0bc563e06dd4244ae725d1a5a024 Mon Sep 17 00:00:00 2001 From: Adam Wick Date: Mon, 2 Dec 2024 12:42:59 -0800 Subject: [PATCH] Add support for the `on_behalf_of` endpoints (#440) --- crates/adapter/src/fastly/core.rs | 5 +++++ lib/compute-at-edge-abi/cache.witx | 9 +++++++++ lib/compute-at-edge-abi/compute-at-edge.witx | 8 ++++++++ lib/data/viceroy-component-adapter.wasm | Bin 203259 -> 201313 bytes lib/src/component/http_req.rs | 8 ++++++++ lib/src/wiggle_abi/req_impl.rs | 11 +++++++++++ lib/wit/deps/fastly/compute.wit | 5 +++++ 7 files changed, 46 insertions(+) diff --git a/crates/adapter/src/fastly/core.rs b/crates/adapter/src/fastly/core.rs index cb1e1c34..da8f21e0 100644 --- a/crates/adapter/src/fastly/core.rs +++ b/crates/adapter/src/fastly/core.rs @@ -1854,6 +1854,11 @@ pub mod fastly_http_req { res } + + #[export_name = "fastly_http_req#on_behalf_of"] + pub fn on_behalf_of(_: RequestHandle, _: *const u8, _: usize) -> FastlyStatus { + FastlyStatus::UNKNOWN_ERROR + } } pub mod fastly_http_resp { diff --git a/lib/compute-at-edge-abi/cache.witx b/lib/compute-at-edge-abi/cache.witx index 08930d92..fe9d4451 100644 --- a/lib/compute-at-edge-abi/cache.witx +++ b/lib/compute-at-edge-abi/cache.witx @@ -14,6 +14,8 @@ (typename $cache_lookup_options (record (field $request_headers $request_handle) ;; a full request handle, but used only for its headers + (field $service_id (@witx pointer (@witx char8))) + (field $service_id_len u32) ) ) @@ -21,6 +23,7 @@ (flags (@witx repr u32) $reserved $request_headers + $service_id ) ) @@ -29,6 +32,8 @@ (record (field $request_headers $request_handle) ;; a full request handle, but used only for its headers (field $replace_strategy $cache_replace_strategy) + (field $service_id (@witx pointer (@witx char8))) + (field $service_id_len u32) ) ) @@ -37,6 +42,7 @@ $reserved $request_headers $replace_strategy + $service_id ) ) @@ -65,6 +71,8 @@ (field $user_metadata_ptr (@witx pointer u8)) (field $user_metadata_len (@witx usize)) (field $edge_max_age_ns $cache_duration_ns) + (field $service_id (@witx pointer (@witx char8))) + (field $service_id_len u32) ) ) @@ -80,6 +88,7 @@ $user_metadata $sensitive_data $edge_max_age_ns + $service_id ) ) diff --git a/lib/compute-at-edge-abi/compute-at-edge.witx b/lib/compute-at-edge-abi/compute-at-edge.witx index bb3e04e2..b2aba4f7 100644 --- a/lib/compute-at-edge-abi/compute-at-edge.witx +++ b/lib/compute-at-edge-abi/compute-at-edge.witx @@ -577,6 +577,14 @@ (param $buf_len (@witx usize)) (result $err (expected $num_bytes (error $fastly_status))) ) + + ;;; Instead of having this request cache in this service's space, use the + ;;; cache of the named service + (@interface func (export "on_behalf_of") + (param $req $request_handle) + (param $service string) + (result $err (expected (error $fastly_status))) + ) ) (module $fastly_http_resp diff --git a/lib/data/viceroy-component-adapter.wasm b/lib/data/viceroy-component-adapter.wasm index 69946d188369d6b68c90bfb2fe453ef5ec345f78..0d8b44f9a362929ed8f0bd0a46a6de160100cb6c 100755 GIT binary patch delta 35747 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 delta 36081 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 K;t=o5ssA4s_hZ!n diff --git a/lib/src/component/http_req.rs b/lib/src/component/http_req.rs index f67e3d2a..9a48e2bd 100644 --- a/lib/src/component/http_req.rs +++ b/lib/src/component/http_req.rs @@ -901,4 +901,12 @@ impl http_req::Host for ComponentCtx { too_large => Err(types::Error::BufferLen(too_large.unwrap_or(0))), } } + + async fn on_behalf_of( + &mut self, + _: http_req::RequestHandle, + _: Vec, + ) -> Result<(), types::Error> { + Err(types::Error::Unsupported) + } } diff --git a/lib/src/wiggle_abi/req_impl.rs b/lib/src/wiggle_abi/req_impl.rs index 690d1967..5f71b873 100644 --- a/lib/src/wiggle_abi/req_impl.rs +++ b/lib/src/wiggle_abi/req_impl.rs @@ -1095,4 +1095,15 @@ impl FastlyHttpReq for Session { }), } } + + fn on_behalf_of( + &mut self, + _memory: &mut GuestMemory<'_>, + _ds_req: RequestHandle, + _service: GuestPtr, + ) -> Result<(), Error> { + Err(Error::Unsupported { + msg: "on_behalf_of is not supported in Viceroy", + }) + } } diff --git a/lib/wit/deps/fastly/compute.wit b/lib/wit/deps/fastly/compute.wit index a336c344..43c57100 100644 --- a/lib/wit/deps/fastly/compute.wit +++ b/lib/wit/deps/fastly/compute.wit @@ -482,6 +482,11 @@ result; info: inspect-config, max-len: u64 ) -> result; + + on-behalf-of: func( + h: request-handle, + service: list, + ) -> result<_, error>; } /*