From eae43d53e3f0892814947b6affe19bcf64a30a14 Mon Sep 17 00:00:00 2001 From: moonheart Date: Fri, 29 Jul 2022 18:27:39 +0800 Subject: [PATCH 1/3] export remove_shared_data --- include/proxy-wasm/exports.h | 1 + include/proxy-wasm/wasm_api_impl.h | 4 ++++ src/exports.cc | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/include/proxy-wasm/exports.h b/include/proxy-wasm/exports.h index 2b3d0db74..173a61a1e 100644 --- a/include/proxy-wasm/exports.h +++ b/include/proxy-wasm/exports.h @@ -112,6 +112,7 @@ Word clear_route_cache(); Word get_shared_data(Word key_ptr, Word key_size, Word value_ptr_ptr, Word value_size_ptr, Word cas_ptr); Word set_shared_data(Word key_ptr, Word key_size, Word value_ptr, Word value_size, Word cas); +Word remove_shared_data(Word key_ptr, Word key_size, Word cas); Word register_shared_queue(Word queue_name_ptr, Word queue_name_size, Word token_ptr); Word resolve_shared_queue(Word vm_id_ptr, Word vm_id_size, Word queue_name_ptr, Word queue_name_size, Word token_ptr); diff --git a/include/proxy-wasm/wasm_api_impl.h b/include/proxy-wasm/wasm_api_impl.h index 8bd9626ff..d98b975ba 100644 --- a/include/proxy-wasm/wasm_api_impl.h +++ b/include/proxy-wasm/wasm_api_impl.h @@ -122,6 +122,10 @@ inline WasmResult proxy_set_shared_data(const char *key_ptr, size_t key_size, co return wordToWasmResult( exports::set_shared_data(WR(key_ptr), WS(key_size), WR(value_ptr), WS(value_size), WS(cas))); } +inline WasmResult proxy_remove_shared_data(const char *key_ptr, size_t key_size, uint64_t cas){ + return wordToWasmResult( + exports::remove_shared_data(WR(key_ptr), WS(key_size), WS(cas))); +} // SharedQueue // Note: Registering the same queue_name will overwrite the old registration while preseving any diff --git a/src/exports.cc b/src/exports.cc index c203946b8..8ed5c4b07 100644 --- a/src/exports.cc +++ b/src/exports.cc @@ -302,6 +302,12 @@ Word set_shared_data(Word key_ptr, Word key_size, Word value_ptr, Word value_siz return context->setSharedData(key.value(), value.value(), cas); } +Word remove_shared_data(Word key_ptr, Word key_size, Word cas) { + auto *context = contextOrEffectiveContext(); + auto key = context->wasmVm()->getMemory(key_ptr, key_size); + return context->removeSharedDataKey(key.value(), cas, nullptr); +} + Word register_shared_queue(Word queue_name_ptr, Word queue_name_size, Word token_ptr) { auto *context = contextOrEffectiveContext(); auto queue_name = context->wasmVm()->getMemory(queue_name_ptr, queue_name_size); From e247b399ad8ced576e70b7e4e60aa46e98b2f3d7 Mon Sep 17 00:00:00 2001 From: moonheart Date: Thu, 4 Aug 2022 11:25:24 +0800 Subject: [PATCH 2/3] test --- include/proxy-wasm/wasm_api_impl.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/include/proxy-wasm/wasm_api_impl.h b/include/proxy-wasm/wasm_api_impl.h index d98b975ba..8fa8d5766 100644 --- a/include/proxy-wasm/wasm_api_impl.h +++ b/include/proxy-wasm/wasm_api_impl.h @@ -117,11 +117,11 @@ inline WasmResult proxy_get_shared_data(const char *key_ptr, size_t key_size, } // If cas != 0 and cas != the current cas for 'key' return false, otherwise set the value and // return true. -inline WasmResult proxy_set_shared_data(const char *key_ptr, size_t key_size, const char *value_ptr, - size_t value_size, uint64_t cas) { - return wordToWasmResult( - exports::set_shared_data(WR(key_ptr), WS(key_size), WR(value_ptr), WS(value_size), WS(cas))); -} +// inline WasmResult proxy_set_shared_data(const char *key_ptr, size_t key_size, const char *value_ptr, +// size_t value_size, uint64_t cas) { +// return wordToWasmResult( +// exports::set_shared_data(WR(key_ptr), WS(key_size), WR(value_ptr), WS(value_size), WS(cas))); +// } inline WasmResult proxy_remove_shared_data(const char *key_ptr, size_t key_size, uint64_t cas){ return wordToWasmResult( exports::remove_shared_data(WR(key_ptr), WS(key_size), WS(cas))); From 0e973f6b7e8d2ec9a33b5913b9492e6e36480812 Mon Sep 17 00:00:00 2001 From: moonheart Date: Thu, 4 Aug 2022 21:40:39 +0800 Subject: [PATCH 3/3] export remove_shared_data --- bazel/repositories.bzl | 6 +++--- include/proxy-wasm/exports.h | 2 +- include/proxy-wasm/wasm_api_impl.h | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bazel/repositories.bzl b/bazel/repositories.bzl index 0267a858d..02915ca2d 100644 --- a/bazel/repositories.bzl +++ b/bazel/repositories.bzl @@ -88,9 +88,9 @@ def proxy_wasm_cpp_host_repositories(): maybe( http_archive, name = "proxy_wasm_cpp_sdk", - sha256 = "c57de2425b5c61d7f630c5061e319b4557ae1f1c7526e5a51c33dc1299471b08", - strip_prefix = "proxy-wasm-cpp-sdk-fd0be8405db25de0264bdb78fae3a82668c03782", - urls = ["https://github.com/proxy-wasm/proxy-wasm-cpp-sdk/archive/fd0be8405db25de0264bdb78fae3a82668c03782.tar.gz"], + sha256 = "9799129467a5bd98e1a1b4ffba1131ee091f240a275d4dbb9d7d7353dbc5cfce", + strip_prefix = "proxy-wasm-cpp-sdk-38a308d002a4be515c7483b7cc986ab34e40001f", + urls = ["https://github.com/moonheart/proxy-wasm-cpp-sdk/archive/38a308d002a4be515c7483b7cc986ab34e40001f.tar.gz"], ) # Test dependencies. diff --git a/include/proxy-wasm/exports.h b/include/proxy-wasm/exports.h index 173a61a1e..c31ab3790 100644 --- a/include/proxy-wasm/exports.h +++ b/include/proxy-wasm/exports.h @@ -183,7 +183,7 @@ Word pthread_equal(Word left, Word right); #define FOR_ALL_HOST_FUNCTIONS(_f) \ _f(log) _f(get_status) _f(set_property) _f(get_property) _f(send_local_response) \ - _f(get_shared_data) _f(set_shared_data) _f(register_shared_queue) _f(resolve_shared_queue) \ + _f(get_shared_data) _f(set_shared_data) _f(remove_shared_data) _f(register_shared_queue) _f(resolve_shared_queue) \ _f(dequeue_shared_queue) _f(enqueue_shared_queue) _f(get_header_map_value) \ _f(add_header_map_value) _f(replace_header_map_value) _f(remove_header_map_value) \ _f(get_header_map_pairs) _f(set_header_map_pairs) _f(get_header_map_size) \ diff --git a/include/proxy-wasm/wasm_api_impl.h b/include/proxy-wasm/wasm_api_impl.h index 8fa8d5766..d98b975ba 100644 --- a/include/proxy-wasm/wasm_api_impl.h +++ b/include/proxy-wasm/wasm_api_impl.h @@ -117,11 +117,11 @@ inline WasmResult proxy_get_shared_data(const char *key_ptr, size_t key_size, } // If cas != 0 and cas != the current cas for 'key' return false, otherwise set the value and // return true. -// inline WasmResult proxy_set_shared_data(const char *key_ptr, size_t key_size, const char *value_ptr, -// size_t value_size, uint64_t cas) { -// return wordToWasmResult( -// exports::set_shared_data(WR(key_ptr), WS(key_size), WR(value_ptr), WS(value_size), WS(cas))); -// } +inline WasmResult proxy_set_shared_data(const char *key_ptr, size_t key_size, const char *value_ptr, + size_t value_size, uint64_t cas) { + return wordToWasmResult( + exports::set_shared_data(WR(key_ptr), WS(key_size), WR(value_ptr), WS(value_size), WS(cas))); +} inline WasmResult proxy_remove_shared_data(const char *key_ptr, size_t key_size, uint64_t cas){ return wordToWasmResult( exports::remove_shared_data(WR(key_ptr), WS(key_size), WS(cas)));