From 9e16764f2340382b52e27f2a2461412c41cbf485 Mon Sep 17 00:00:00 2001 From: Pengyuan Bian Date: Thu, 4 Apr 2019 14:31:04 -0700 Subject: [PATCH] revise tick --- api/wasm/cpp/proxy_wasm_intrinsics.cc | 2 ++ api/wasm/cpp/proxy_wasm_intrinsics.h | 1 + api/wasm/cpp/proxy_wasm_intrinsics.js | 1 + source/extensions/common/wasm/wasm.cc | 8 ++++---- source/extensions/common/wasm/wasm.h | 3 +-- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/api/wasm/cpp/proxy_wasm_intrinsics.cc b/api/wasm/cpp/proxy_wasm_intrinsics.cc index 1d7e4959371a..4db453c706f7 100644 --- a/api/wasm/cpp/proxy_wasm_intrinsics.cc +++ b/api/wasm/cpp/proxy_wasm_intrinsics.cc @@ -27,6 +27,8 @@ extern "C" EMSCRIPTEN_KEEPALIVE void proxy_onCreate(uint32_t context_id) { ensureContext(context_id)->onCreate(); } +extern "C" EMSCRIPTEN_KEEPALIVE void proxy_onTick() { ensureContext(0)->onTick(); } + extern "C" EMSCRIPTEN_KEEPALIVE FilterHeadersStatus proxy_onRequestHeaders(uint32_t context_id) { auto c = getContext(context_id); if (!c) diff --git a/api/wasm/cpp/proxy_wasm_intrinsics.h b/api/wasm/cpp/proxy_wasm_intrinsics.h index 84fbb3768760..c8ab93884fc5 100644 --- a/api/wasm/cpp/proxy_wasm_intrinsics.h +++ b/api/wasm/cpp/proxy_wasm_intrinsics.h @@ -227,6 +227,7 @@ class Context { virtual void onDone() {} virtual void onLog() {} virtual void onDelete() {} + virtual void onTick() {} virtual void onHttpCallResponse(uint32_t token, std::unique_ptr header_pairs, std::unique_ptr body, diff --git a/api/wasm/cpp/proxy_wasm_intrinsics.js b/api/wasm/cpp/proxy_wasm_intrinsics.js index 333c28f82c70..0c8ea9c7d175 100644 --- a/api/wasm/cpp/proxy_wasm_intrinsics.js +++ b/api/wasm/cpp/proxy_wasm_intrinsics.js @@ -1,5 +1,6 @@ mergeInto(LibraryManager.library, { proxy_log: function () {}, + proxy_setTickPeriodMilliseconds: function () {}, proxy_getRequestMetadata: function () {}, proxy_setRequestMetadata: function () {}, proxy_getRequestMetadataPairs: function () {}, diff --git a/source/extensions/common/wasm/wasm.cc b/source/extensions/common/wasm/wasm.cc index aa0a475390c6..100f15dddccc 100644 --- a/source/extensions/common/wasm/wasm.cc +++ b/source/extensions/common/wasm/wasm.cc @@ -1054,9 +1054,9 @@ void Wasm::getFunctions() { } } -Wasm::Wasm(const Wasm& wasm) +Wasm::Wasm(const Wasm& wasm, Event::Dispatcher& dispatcher) : std::enable_shared_from_this(wasm), cluster_manager_(wasm.cluster_manager_), - dispatcher_(wasm.dispatcher_) { + dispatcher_(dispatcher) { wasm_vm_ = wasm.wasmVm()->clone(); general_context_ = createContext(); getFunctions(); @@ -1107,7 +1107,7 @@ void Wasm::start() { general_context_->onStart(); } void Wasm::setTickPeriod(std::chrono::milliseconds tick_period) { bool was_running = timer_ && tick_period_.count() > 0; tick_period_ = tick_period; - if (tick_ && tick_period_.count() > 0 && !was_running) { + if (tick_period_.count() > 0 && !was_running) { timer_ = dispatcher_.createTimer([weak = std::weak_ptr(shared_from_this())]() { auto shared = weak.lock(); if (shared) @@ -1301,7 +1301,7 @@ std::shared_ptr createThreadLocalWasm(Wasm& base_wasm, absl::string_view c Event::Dispatcher& dispatcher) { std::shared_ptr wasm; if (base_wasm.wasmVm()->clonable()) { - wasm = std::make_shared(base_wasm); + wasm = std::make_shared(base_wasm, dispatcher); } else { wasm = std::make_shared(base_wasm.wasmVm()->vm(), base_wasm.id(), base_wasm.initial_configuration(), base_wasm.clusterManager(), diff --git a/source/extensions/common/wasm/wasm.h b/source/extensions/common/wasm/wasm.h index ed01d79c90fd..d81d959a428a 100644 --- a/source/extensions/common/wasm/wasm.h +++ b/source/extensions/common/wasm/wasm.h @@ -277,7 +277,7 @@ class Wasm : public Envoy::Server::Wasm, public: Wasm(absl::string_view vm, absl::string_view id, absl::string_view initial_configuration, Upstream::ClusterManager& cluster_manager, Event::Dispatcher& dispatcher); - Wasm(const Wasm& other); + Wasm(const Wasm& other, Event::Dispatcher& dispatcher); ~Wasm() {} bool initialize(const std::string& code, absl::string_view name, bool allow_precompiled); @@ -355,7 +355,6 @@ class Wasm : public Envoy::Server::Wasm, uint32_t next_context_id_ = 0; std::unique_ptr wasm_vm_; std::shared_ptr general_context_; // Context unrelated to any specific stream. - std::function tick_; std::chrono::milliseconds tick_period_; Event::TimerPtr timer_;