diff --git a/api/wasm/cpp/proxy_wasm_api.h b/api/wasm/cpp/proxy_wasm_api.h index 2a21f7266e..95c3c76d7c 100644 --- a/api/wasm/cpp/proxy_wasm_api.h +++ b/api/wasm/cpp/proxy_wasm_api.h @@ -303,7 +303,6 @@ class RootContext : public ContextBase { // Low level HTTP/gRPC interface. virtual void onHttpCallResponse(uint32_t token, uint32_t headers, size_t body_size, uint32_t trailers); - virtual void onGrpcCreateInitialMetadata(uint32_t token, uint32_t headers); virtual void onGrpcReceiveInitialMetadata(uint32_t token, uint32_t headers); virtual void onGrpcReceiveTrailingMetadata(uint32_t token, uint32_t trailers); virtual void onGrpcReceive(uint32_t token, size_t body_size); @@ -1251,23 +1250,6 @@ inline void GrpcStreamHandlerBase::send(StringView message, bool end_of_stream) } } -inline void RootContext::onGrpcCreateInitialMetadata(uint32_t token, uint32_t headers) { - { - auto it = grpc_calls_.find(token); - if (it != grpc_calls_.end()) { - it->second->onCreateInitialMetadata(headers); - return; - } - } - { - auto it = grpc_streams_.find(token); - if (it != grpc_streams_.end()) { - it->second->onCreateInitialMetadata(headers); - return; - } - } -} - inline void RootContext::onGrpcReceiveInitialMetadata(uint32_t token, uint32_t headers) { { auto it = grpc_streams_.find(token); diff --git a/api/wasm/cpp/proxy_wasm_common.h b/api/wasm/cpp/proxy_wasm_common.h index 2f77f628ea..7a67c05489 100644 --- a/api/wasm/cpp/proxy_wasm_common.h +++ b/api/wasm/cpp/proxy_wasm_common.h @@ -59,12 +59,11 @@ enum class HeaderMapType : int32_t { RequestTrailers = 1, // During the onLog callback these are immutable ResponseHeaders = 2, // During the onLog callback these are immutable ResponseTrailers = 3, // During the onLog callback these are immutable - GrpcCreateInitialMetadata = 4, - GrpcReceiveInitialMetadata = 5, // Immutable - GrpcReceiveTrailingMetadata = 6, // Immutable - HttpCallResponseHeaders = 7, // Immutable - HttpCallResponseTrailers = 8, // Immutable - MAX = 8, + GrpcReceiveInitialMetadata = 4, // Immutable + GrpcReceiveTrailingMetadata = 5, // Immutable + HttpCallResponseHeaders = 6, // Immutable + HttpCallResponseTrailers = 7, // Immutable + MAX = 7, }; enum class BufferType : int32_t { HttpRequestBody = 0, // During the onLog callback these are immutable diff --git a/api/wasm/cpp/proxy_wasm_externs.h b/api/wasm/cpp/proxy_wasm_externs.h index aabb64ce07..b1faee9c1d 100644 --- a/api/wasm/cpp/proxy_wasm_externs.h +++ b/api/wasm/cpp/proxy_wasm_externs.h @@ -157,8 +157,6 @@ extern "C" FilterMetadataStatus proxy_on_response_metadata(uint32_t context_id, // HTTP/gRPC. extern "C" void proxy_on_http_call_response(uint32_t context_id, uint32_t token, uint32_t headers, uint32_t body_size, uint32_t trailers); -extern "C" void proxy_on_grpc_create_initial_metadata(uint32_t context_id, uint32_t token, - uint32_t headers); extern "C" void proxy_on_grpc_receive_initial_metadata(uint32_t context_id, uint32_t token, uint32_t headers); extern "C" void proxy_on_grpc_trailing_metadata(uint32_t context_id, uint32_t token, diff --git a/api/wasm/cpp/proxy_wasm_intrinsics.cc b/api/wasm/cpp/proxy_wasm_intrinsics.cc index 4f8fe53019..dbf7684749 100644 --- a/api/wasm/cpp/proxy_wasm_intrinsics.cc +++ b/api/wasm/cpp/proxy_wasm_intrinsics.cc @@ -228,11 +228,6 @@ extern "C" PROXY_WASM_KEEPALIVE void proxy_on_http_call_response(uint32_t contex ->onHttpCallResponse(token, headers, static_cast(body_size), trailers); } -extern "C" PROXY_WASM_KEEPALIVE void -proxy_on_grpc_create_initial_metadata(uint32_t context_id, uint32_t token, uint32_t headers) { - getRootContext(context_id)->onGrpcCreateInitialMetadata(token, headers); -} - extern "C" PROXY_WASM_KEEPALIVE void proxy_on_grpc_receive_initial_metadata(uint32_t context_id, uint32_t token, uint32_t headers) { getRootContext(context_id)->onGrpcReceiveInitialMetadata(token, headers); diff --git a/examples/wasm/envoy_filter_http_wasm_example.wasm b/examples/wasm/envoy_filter_http_wasm_example.wasm index 1f282df4a1..65504f426b 100644 Binary files a/examples/wasm/envoy_filter_http_wasm_example.wasm and b/examples/wasm/envoy_filter_http_wasm_example.wasm differ diff --git a/source/extensions/common/wasm/context.cc b/source/extensions/common/wasm/context.cc index bfb953abcc..bce34d5259 100644 --- a/source/extensions/common/wasm/context.cc +++ b/source/extensions/common/wasm/context.cc @@ -661,8 +661,6 @@ Http::HeaderMap* Context::getMap(HeaderMapType type) { return response_headers_; case HeaderMapType::ResponseTrailers: return response_trailers_; - case HeaderMapType::GrpcCreateInitialMetadata: - return grpc_create_initial_metadata_; default: return nullptr; } @@ -690,8 +688,6 @@ const Http::HeaderMap* Context::getConstMap(HeaderMapType type) { return access_log_response_trailers_; } return response_trailers_; - case HeaderMapType::GrpcCreateInitialMetadata: - return rootContext()->grpc_create_initial_metadata_; case HeaderMapType::GrpcReceiveInitialMetadata: return rootContext()->grpc_receive_initial_metadata_.get(); case HeaderMapType::GrpcReceiveTrailingMetadata: @@ -967,9 +963,6 @@ WasmResult Context::grpcCall(const GrpcService& grpc_service, absl::string_view hash_policy.Add()->mutable_header()->set_header_name(Http::Headers::get().Host.get()); options.setHashPolicy(hash_policy); - // NB: this call causes the onCreateInitialMetadata callback to occur inline *before* this call - // returns. Consequently the grpc_request is not available. Attempting to close or reset from - // that callback will fail. auto grpc_request = grpc_client->sendRaw(service_name, method_name, std::make_unique(request), handler, Tracing::NullSpan::instance(), options); @@ -1014,9 +1007,6 @@ WasmResult Context::grpcStream(const GrpcService& grpc_service, absl::string_vie hash_policy.Add()->mutable_header()->set_header_name(Http::Headers::get().Host.get()); options.setHashPolicy(hash_policy); - // NB: this call causes the onCreateInitialMetadata callback to occur inline *before* this call - // returns. Consequently the grpc_stream is not available. Attempting to close or reset from - // that callback will fail. auto grpc_stream = grpc_client->startRaw(service_name, method_name, handler, options); if (!grpc_stream) { grpc_stream_.erase(token); @@ -1392,17 +1382,6 @@ void Context::onQueueReady(uint32_t token) { } } -void Context::onGrpcCreateInitialMetadata(uint32_t token, Http::HeaderMap& metadata) { - if (!wasm_->on_grpc_create_initial_metadata_) { - return; - } - DeferAfterCallActions actions(this); - grpc_create_initial_metadata_ = &metadata; - wasm_->on_grpc_create_initial_metadata_(this, id_, token, - headerSize(grpc_create_initial_metadata_)); - grpc_create_initial_metadata_ = nullptr; -} - void Context::onGrpcReceiveInitialMetadata(uint32_t token, Http::HeaderMapPtr&& metadata) { if (!wasm_->on_grpc_receive_initial_metadata_) { return; diff --git a/source/extensions/common/wasm/context.h b/source/extensions/common/wasm/context.h index 2a3c72c4bf..0031e7236c 100644 --- a/source/extensions/common/wasm/context.h +++ b/source/extensions/common/wasm/context.h @@ -350,9 +350,7 @@ class Context : public Logger::Loggable, struct GrpcCallClientHandler : public Grpc::RawAsyncRequestCallbacks { // Grpc::AsyncRequestCallbacks - void onCreateInitialMetadata(Http::RequestHeaderMap& metadata) override { - context_->onGrpcCreateInitialMetadata(token_, metadata); - } + void onCreateInitialMetadata(Http::RequestHeaderMap&) override {} void onSuccessRaw(Buffer::InstancePtr&& response, Tracing::Span& /* span */) override { context_->onGrpcReceive(token_, std::move(response)); } @@ -369,9 +367,7 @@ class Context : public Logger::Loggable, struct GrpcStreamClientHandler : public Grpc::RawAsyncStreamCallbacks { // Grpc::AsyncStreamCallbacks - void onCreateInitialMetadata(Http::RequestHeaderMap& metadata) override { - context_->onGrpcCreateInitialMetadata(token_, metadata); - } + void onCreateInitialMetadata(Http::RequestHeaderMap&) override {} void onReceiveInitialMetadata(Http::ResponseHeaderMapPtr&& metadata) override { context_->onGrpcReceiveInitialMetadata(token_, std::move(metadata)); } @@ -398,8 +394,6 @@ class Context : public Logger::Loggable, void onHttpCallSuccess(uint32_t token, Envoy::Http::ResponseMessagePtr& response); void onHttpCallFailure(uint32_t token, Http::AsyncClient::FailureReason reason); - virtual void onGrpcCreateInitialMetadata(uint32_t token, - Http::HeaderMap& metadata); // For both Call and Stream. virtual void onGrpcReceive(uint32_t token, Buffer::InstancePtr response); // Call (implies OK close) and Stream. virtual void onGrpcClose(uint32_t token, const Grpc::Status::GrpcStatus& status, @@ -463,7 +457,6 @@ class Context : public Logger::Loggable, // Only available during onHttpCallResponse. Envoy::Http::ResponseMessagePtr* http_call_response_{}; - Http::HeaderMap* grpc_create_initial_metadata_{}; Http::HeaderMapPtr grpc_receive_initial_metadata_{}; Http::HeaderMapPtr grpc_receive_trailing_metadata_{}; diff --git a/source/extensions/common/wasm/null/null_plugin.cc b/source/extensions/common/wasm/null/null_plugin.cc index c4ff630911..cefdb421db 100644 --- a/source/extensions/common/wasm/null/null_plugin.cc +++ b/source/extensions/common/wasm/null/null_plugin.cc @@ -102,11 +102,6 @@ void NullPlugin::getFunction(absl::string_view function_name, WasmCallVoid<3>* f SaveRestoreContext saved_context(context); plugin->onGrpcReceive(context_id.u64_, token.u64_, body_size.u64_); }; - } else if (function_name == "proxy_on_grpc_create_initial_metadata") { - *f = [plugin](Common::Wasm::Context* context, Word context_id, Word token, Word headers) { - SaveRestoreContext saved_context(context); - plugin->onGrpcCreateInitialMetadata(context_id.u64_, token.u64_, headers.u64_); - }; } else if (function_name == "proxy_on_grpc_receive_initial_metadata") { *f = [plugin](Common::Wasm::Context* context, Word context_id, Word token, Word headers) { SaveRestoreContext saved_context(context); @@ -431,11 +426,6 @@ void NullPlugin::onGrpcClose(uint64_t context_id, uint64_t token, uint64_t statu getRootContext(context_id)->onGrpcClose(token, static_cast(status_code)); } -void NullPlugin::onGrpcCreateInitialMetadata(uint64_t context_id, uint64_t token, - uint64_t headers) { - getRootContext(context_id)->onGrpcCreateInitialMetadata(token, headers); -} - void NullPlugin::onGrpcReceiveInitialMetadata(uint64_t context_id, uint64_t token, uint64_t headers) { getRootContext(context_id)->onGrpcReceiveInitialMetadata(token, headers); diff --git a/source/extensions/common/wasm/null/null_plugin.h b/source/extensions/common/wasm/null/null_plugin.h index 4c30cb068d..54f5e7d287 100644 --- a/source/extensions/common/wasm/null/null_plugin.h +++ b/source/extensions/common/wasm/null/null_plugin.h @@ -103,7 +103,6 @@ class NullPlugin : public NullVmPlugin { void onGrpcReceive(uint64_t context_id, uint64_t token, size_t body_size); void onGrpcClose(uint64_t context_id, uint64_t token, uint64_t status_code); - void onGrpcCreateInitialMetadata(uint64_t context_id, uint64_t token, uint64_t headers); void onGrpcReceiveInitialMetadata(uint64_t context_id, uint64_t token, uint64_t headers); void onGrpcReceiveTrailingMetadata(uint64_t context_id, uint64_t token, uint64_t trailers); diff --git a/source/extensions/common/wasm/wasm.cc b/source/extensions/common/wasm/wasm.cc index 7d788bbe80..5041806e44 100644 --- a/source/extensions/common/wasm/wasm.cc +++ b/source/extensions/common/wasm/wasm.cc @@ -252,7 +252,6 @@ void Wasm::getFunctions() { _GET_PROXY(on_http_call_response); _GET_PROXY(on_grpc_receive); _GET_PROXY(on_grpc_close); - _GET_PROXY(on_grpc_create_initial_metadata); _GET_PROXY(on_grpc_receive_initial_metadata); _GET_PROXY(on_grpc_receive_trailing_metadata); _GET_PROXY(on_queue_ready); diff --git a/source/extensions/common/wasm/wasm.h b/source/extensions/common/wasm/wasm.h index a815e0a425..faf6e1fa4c 100644 --- a/source/extensions/common/wasm/wasm.h +++ b/source/extensions/common/wasm/wasm.h @@ -236,7 +236,6 @@ class Wasm : public Logger::Loggable, public std::enable_share WasmCallVoid<3> on_grpc_receive_; WasmCallVoid<3> on_grpc_close_; - WasmCallVoid<3> on_grpc_create_initial_metadata_; WasmCallVoid<3> on_grpc_receive_initial_metadata_; WasmCallVoid<3> on_grpc_receive_trailing_metadata_; diff --git a/test/extensions/access_loggers/wasm/test_data/logging.wasm b/test/extensions/access_loggers/wasm/test_data/logging.wasm index 045900c28a..d1a001dc25 100644 Binary files a/test/extensions/access_loggers/wasm/test_data/logging.wasm and b/test/extensions/access_loggers/wasm/test_data/logging.wasm differ diff --git a/test/extensions/filters/http/wasm/test_data/async_call_cpp.wasm b/test/extensions/filters/http/wasm/test_data/async_call_cpp.wasm index 663721acc6..4c1b409236 100644 Binary files a/test/extensions/filters/http/wasm/test_data/async_call_cpp.wasm and b/test/extensions/filters/http/wasm/test_data/async_call_cpp.wasm differ diff --git a/test/extensions/filters/http/wasm/test_data/grpc_call_cpp.cc b/test/extensions/filters/http/wasm/test_data/grpc_call_cpp.cc index 2c88706da8..8c8f6cafb4 100644 --- a/test/extensions/filters/http/wasm/test_data/grpc_call_cpp.cc +++ b/test/extensions/filters/http/wasm/test_data/grpc_call_cpp.cc @@ -18,7 +18,6 @@ static RegisterContextFactory register_ExampleContext(CONTEXT_FACTORY(ExampleCon class MyGrpcCallHandler : public GrpcCallHandler { public: MyGrpcCallHandler() : GrpcCallHandler() {} - void onCreateInitialMetadata(uint32_t) override {} void onSuccess(size_t body_size) override { auto response = getBufferBytes(BufferType::GrpcReceiveBuffer, 0, body_size); logDebug(response->proto().string_value()); @@ -35,11 +34,6 @@ class MyGrpcStreamHandler : public GrpcStreamHandler { public: MyGrpcStreamHandler() : GrpcStreamHandler() {} - void onCreateInitialMetadata(uint32_t) override { - google::protobuf::Value value; - value.set_string_value("request"); - send(value, false); - } void onReceiveInitialMetadata(uint32_t) override {} void onReceiveTrailingMetadata(uint32_t) override {} void onReceive(size_t body_size) override { diff --git a/test/extensions/filters/http/wasm/test_data/grpc_call_cpp.wasm b/test/extensions/filters/http/wasm/test_data/grpc_call_cpp.wasm index d1ace7c506..96d13e304e 100644 Binary files a/test/extensions/filters/http/wasm/test_data/grpc_call_cpp.wasm and b/test/extensions/filters/http/wasm/test_data/grpc_call_cpp.wasm differ diff --git a/test/extensions/filters/http/wasm/test_data/headers_cpp.wasm b/test/extensions/filters/http/wasm/test_data/headers_cpp.wasm index 84f03e37f8..9e36de79bb 100644 Binary files a/test/extensions/filters/http/wasm/test_data/headers_cpp.wasm and b/test/extensions/filters/http/wasm/test_data/headers_cpp.wasm differ diff --git a/test/extensions/filters/http/wasm/test_data/metadata_cpp.wasm b/test/extensions/filters/http/wasm/test_data/metadata_cpp.wasm index badf023368..d8d9e35a9f 100644 Binary files a/test/extensions/filters/http/wasm/test_data/metadata_cpp.wasm and b/test/extensions/filters/http/wasm/test_data/metadata_cpp.wasm differ diff --git a/test/extensions/filters/http/wasm/test_data/queue_cpp.wasm b/test/extensions/filters/http/wasm/test_data/queue_cpp.wasm index 52ac03b6f9..b127a21460 100644 Binary files a/test/extensions/filters/http/wasm/test_data/queue_cpp.wasm and b/test/extensions/filters/http/wasm/test_data/queue_cpp.wasm differ diff --git a/test/extensions/filters/http/wasm/test_data/shared_cpp.wasm b/test/extensions/filters/http/wasm/test_data/shared_cpp.wasm index d5133eac66..f12a221018 100644 Binary files a/test/extensions/filters/http/wasm/test_data/shared_cpp.wasm and b/test/extensions/filters/http/wasm/test_data/shared_cpp.wasm differ diff --git a/test/extensions/wasm/test_data/asm2wasm_cpp.wasm b/test/extensions/wasm/test_data/asm2wasm_cpp.wasm index 557f8ae5b1..3de951b3b1 100644 Binary files a/test/extensions/wasm/test_data/asm2wasm_cpp.wasm and b/test/extensions/wasm/test_data/asm2wasm_cpp.wasm differ diff --git a/test/extensions/wasm/test_data/bad_signature_cpp.wasm b/test/extensions/wasm/test_data/bad_signature_cpp.wasm index 145e4410e3..3b2d7913e7 100644 Binary files a/test/extensions/wasm/test_data/bad_signature_cpp.wasm and b/test/extensions/wasm/test_data/bad_signature_cpp.wasm differ diff --git a/test/extensions/wasm/test_data/emscripten_cpp.wasm b/test/extensions/wasm/test_data/emscripten_cpp.wasm index eef3c31e82..6c3457bbde 100644 Binary files a/test/extensions/wasm/test_data/emscripten_cpp.wasm and b/test/extensions/wasm/test_data/emscripten_cpp.wasm differ diff --git a/test/extensions/wasm/test_data/logging_cpp.wasm b/test/extensions/wasm/test_data/logging_cpp.wasm index 1ec3f93962..f81622bb97 100644 Binary files a/test/extensions/wasm/test_data/logging_cpp.wasm and b/test/extensions/wasm/test_data/logging_cpp.wasm differ diff --git a/test/extensions/wasm/test_data/missing_cpp.wasm b/test/extensions/wasm/test_data/missing_cpp.wasm index 34599decf4..1251c7217e 100644 Binary files a/test/extensions/wasm/test_data/missing_cpp.wasm and b/test/extensions/wasm/test_data/missing_cpp.wasm differ diff --git a/test/extensions/wasm/test_data/segv_cpp.wasm b/test/extensions/wasm/test_data/segv_cpp.wasm index fe7d9139b0..ab79e04520 100644 Binary files a/test/extensions/wasm/test_data/segv_cpp.wasm and b/test/extensions/wasm/test_data/segv_cpp.wasm differ diff --git a/test/extensions/wasm/test_data/speed_cpp.wasm b/test/extensions/wasm/test_data/speed_cpp.wasm index d4baba2698..6d967e7e00 100644 Binary files a/test/extensions/wasm/test_data/speed_cpp.wasm and b/test/extensions/wasm/test_data/speed_cpp.wasm differ diff --git a/test/extensions/wasm/test_data/stats_cpp.wasm b/test/extensions/wasm/test_data/stats_cpp.wasm index 2ad0cc807f..6866215b91 100644 Binary files a/test/extensions/wasm/test_data/stats_cpp.wasm and b/test/extensions/wasm/test_data/stats_cpp.wasm differ