From 2ed596b4272fcbc4564e8f3a085d476088d0e22e Mon Sep 17 00:00:00 2001 From: James Mulcahy Date: Thu, 2 Dec 2021 15:52:26 -0800 Subject: [PATCH 1/6] Add keys() and remove() methods to SharedData Signed-off-by: James Mulcahy --- src/shared_data.cc | 36 ++++++++++++++++++++++++++++++++++++ src/shared_data.h | 2 ++ test/shared_data_test.cc | 19 +++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/src/shared_data.cc b/src/shared_data.cc index 73cbb1fe..fb4c19ba 100644 --- a/src/shared_data.cc +++ b/src/shared_data.cc @@ -56,6 +56,42 @@ WasmResult SharedData::get(std::string_view vm_id, const std::string_view key, return WasmResult::NotFound; } +WasmResult SharedData::keys(std::string_view vm_id, const std::string_view key_prefix, std::vector *result) { + std::lock_guard lock(mutex_); + auto map = data_.find(std::string(vm_id)); + if (map == data_.end()) { + return WasmResult::NotFound; + } + + for (auto kv : map->second) { + if (kv.first.rfind(key_prefix, 0) == 0) { + result->push_back(kv.first); + } + } + + return WasmResult::Ok; +} + +WasmResult SharedData::remove(std::string_view vm_id, std::string_view key, uint32_t cas) { + std::lock_guard lock(mutex_); + std::unordered_map> *map; + auto map_it = data_.find(std::string(vm_id)); + if (map_it == data_.end()) { + return WasmResult::Ok; + } else { + map = &map_it->second; + } + + auto it = map->find(std::string(key)); + if (it != map->end()) { + if (cas && cas != it->second.second) { + return WasmResult::CasMismatch; + } + map->erase(it); + } + return WasmResult::Ok; +} + WasmResult SharedData::set(std::string_view vm_id, std::string_view key, std::string_view value, uint32_t cas) { std::lock_guard lock(mutex_); diff --git a/src/shared_data.h b/src/shared_data.h index fec37aac..f88eb3c2 100644 --- a/src/shared_data.h +++ b/src/shared_data.h @@ -25,6 +25,8 @@ class SharedData { SharedData(bool register_vm_id_callback = true); WasmResult get(std::string_view vm_id, const std::string_view key, std::pair *result); + WasmResult keys(std::string_view vm_id, const std::string_view key_prefix, std::vector *result); + WasmResult remove(std::string_view vm_id, const std::string_view key, uint32_t cas); WasmResult set(std::string_view vm_id, std::string_view key, std::string_view value, uint32_t cas); void deleteByVmId(std::string_view vm_id); diff --git a/test/shared_data_test.cc b/test/shared_data_test.cc index 0c3d2dec..5687929d 100644 --- a/test/shared_data_test.cc +++ b/test/shared_data_test.cc @@ -44,6 +44,25 @@ TEST(SharedData, SingleThread) { EXPECT_EQ(WasmResult::Ok, shared_data.get(vm_id, key, &result)); EXPECT_EQ(value, result.first); EXPECT_EQ(result.second, 3); + + std::vector keys; + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "unmatched-prefix", &keys)); + EXPECT_EQ(0, keys.size()); + + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "keyyyyy", &keys)); + EXPECT_EQ(0, keys.size()); + + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "ke", &keys)); + EXPECT_EQ(1, keys.size()); + EXPECT_EQ(key, keys[0]); + + keys.clear(); + EXPECT_EQ(WasmResult::CasMismatch, shared_data.remove(vm_id, key, 911)); + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "ke", &keys)); + EXPECT_EQ(1, keys.size()); + + EXPECT_EQ(WasmResult::Ok, shared_data.remove(vm_id, key, 0)); + EXPECT_EQ(WasmResult::NotFound, shared_data.get(vm_id, key, &result)); } void incrementData(SharedData *shared_data, std::string_view vm_id, std::string_view key) { From cb1b36a88d5d9ce0d426b75595138ad987fd9f80 Mon Sep 17 00:00:00 2001 From: James Mulcahy Date: Wed, 8 Dec 2021 22:02:22 -0800 Subject: [PATCH 2/6] Fix formatting with clang-format Signed-off-by: James Mulcahy --- src/shared_data.cc | 3 ++- src/shared_data.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/shared_data.cc b/src/shared_data.cc index fb4c19ba..f8b718d8 100644 --- a/src/shared_data.cc +++ b/src/shared_data.cc @@ -56,7 +56,8 @@ WasmResult SharedData::get(std::string_view vm_id, const std::string_view key, return WasmResult::NotFound; } -WasmResult SharedData::keys(std::string_view vm_id, const std::string_view key_prefix, std::vector *result) { +WasmResult SharedData::keys(std::string_view vm_id, const std::string_view key_prefix, + std::vector *result) { std::lock_guard lock(mutex_); auto map = data_.find(std::string(vm_id)); if (map == data_.end()) { diff --git a/src/shared_data.h b/src/shared_data.h index f88eb3c2..de6e9a20 100644 --- a/src/shared_data.h +++ b/src/shared_data.h @@ -25,7 +25,8 @@ class SharedData { SharedData(bool register_vm_id_callback = true); WasmResult get(std::string_view vm_id, const std::string_view key, std::pair *result); - WasmResult keys(std::string_view vm_id, const std::string_view key_prefix, std::vector *result); + WasmResult keys(std::string_view vm_id, const std::string_view key_prefix, + std::vector *result); WasmResult remove(std::string_view vm_id, const std::string_view key, uint32_t cas); WasmResult set(std::string_view vm_id, std::string_view key, std::string_view value, uint32_t cas); From 083f606383379919af0d7bdc5db4c6de1490db7b Mon Sep 17 00:00:00 2001 From: James Mulcahy Date: Fri, 14 Jan 2022 22:13:20 -0800 Subject: [PATCH 3/6] Expose SharedData keys & remove methods in Context Signed-off-by: James Mulcahy --- include/proxy-wasm/context.h | 3 +++ include/proxy-wasm/context_interface.h | 15 +++++++++++++++ src/context.cc | 10 ++++++++++ 3 files changed, 28 insertions(+) diff --git a/include/proxy-wasm/context.h b/include/proxy-wasm/context.h index f88b4aaa..889696c5 100644 --- a/include/proxy-wasm/context.h +++ b/include/proxy-wasm/context.h @@ -353,6 +353,9 @@ class ContextBase : public RootInterface, WasmResult getSharedData(std::string_view key, std::pair *data) override; WasmResult setSharedData(std::string_view key, std::string_view value, uint32_t cas) override; + WasmResult getSharedDataKeys(std::string_view key_prefix, std::vector *result) override; + WasmResult removeSharedDataKey(std::string_view key, uint32_t cas) override; + // Shared Queue WasmResult registerSharedQueue(std::string_view queue_name, diff --git a/include/proxy-wasm/context_interface.h b/include/proxy-wasm/context_interface.h index 841dd0e1..82c297c9 100644 --- a/include/proxy-wasm/context_interface.h +++ b/include/proxy-wasm/context_interface.h @@ -621,6 +621,21 @@ struct SharedDataInterface { * @param data is a location to store the returned value. */ virtual WasmResult setSharedData(std::string_view key, std::string_view value, uint32_t cas) = 0; + + /** + * Return all the keys which match the given key_prefix + * @param key_prefix is used to restrict the results to keys matching the given prefix + * @param data is a location to store the returned value. + */ + virtual WasmResult getSharedDataKeys(std::string_view key_prefix, std::vector *result) = 0; + + /** + * Removes the given key from the data shared between VMs. + * @param key is a proxy-wide key mapping to the shared data value. + * @param cas is a compare-and-swap value. If it is zero it is ignored, otherwise it must match + * the cas associated with the value. + */ + virtual WasmResult removeSharedDataKey(std::string_view key, uint32_t cas) = 0; }; // namespace proxy_wasm struct SharedQueueInterface { diff --git a/src/context.cc b/src/context.cc index 8a69aec5..dbf1304b 100644 --- a/src/context.cc +++ b/src/context.cc @@ -192,6 +192,16 @@ WasmResult ContextBase::setSharedData(std::string_view key, std::string_view val return getGlobalSharedData().set(wasm_->vm_id(), key, value, cas); } +WasmResult ContextBase::getSharedDataKeys(std::string_view key_prefix, + std::vector *result) { + return getGlobalSharedData().keys(wasm_->vm_id(), key_prefix, result); +} + +WasmResult ContextBase::removeSharedDataKey(std::string_view key, uint32_t cas) { + return getGlobalSharedData().remove(wasm_->vm_id(), key, cas); +} + + // Shared Queue WasmResult ContextBase::registerSharedQueue(std::string_view queue_name, From eba79a51376da61b27aaa82bd6dce85c2af46cc5 Mon Sep 17 00:00:00 2001 From: James Mulcahy Date: Wed, 26 Jan 2022 12:41:07 -0800 Subject: [PATCH 4/6] Address review comments Signed-off-by: James Mulcahy --- include/proxy-wasm/context.h | 7 +++--- include/proxy-wasm/context_interface.h | 8 ++++-- src/context.cc | 6 ++--- src/shared_data.cc | 32 +++++++++++++++--------- src/shared_data.h | 3 ++- test/shared_data_test.cc | 34 +++++++++++++++++++++++--- 6 files changed, 65 insertions(+), 25 deletions(-) diff --git a/include/proxy-wasm/context.h b/include/proxy-wasm/context.h index 889696c5..66e41b2e 100644 --- a/include/proxy-wasm/context.h +++ b/include/proxy-wasm/context.h @@ -353,9 +353,10 @@ class ContextBase : public RootInterface, WasmResult getSharedData(std::string_view key, std::pair *data) override; WasmResult setSharedData(std::string_view key, std::string_view value, uint32_t cas) override; - WasmResult getSharedDataKeys(std::string_view key_prefix, std::vector *result) override; - WasmResult removeSharedDataKey(std::string_view key, uint32_t cas) override; - + WasmResult getSharedDataKeys(std::string_view key_prefix, + std::vector *result) override; + WasmResult removeSharedDataKey(std::string_view key, uint32_t cas, + std::pair *result) override; // Shared Queue WasmResult registerSharedQueue(std::string_view queue_name, diff --git a/include/proxy-wasm/context_interface.h b/include/proxy-wasm/context_interface.h index 82c297c9..e9d169c1 100644 --- a/include/proxy-wasm/context_interface.h +++ b/include/proxy-wasm/context_interface.h @@ -627,15 +627,19 @@ struct SharedDataInterface { * @param key_prefix is used to restrict the results to keys matching the given prefix * @param data is a location to store the returned value. */ - virtual WasmResult getSharedDataKeys(std::string_view key_prefix, std::vector *result) = 0; + virtual WasmResult getSharedDataKeys(std::string_view key_prefix, + std::vector *result) = 0; /** * Removes the given key from the data shared between VMs. * @param key is a proxy-wide key mapping to the shared data value. * @param cas is a compare-and-swap value. If it is zero it is ignored, otherwise it must match + * @param cas is a location to store value, and cas number, associated with the removed key * the cas associated with the value. */ - virtual WasmResult removeSharedDataKey(std::string_view key, uint32_t cas) = 0; + virtual WasmResult + removeSharedDataKey(std::string_view key, uint32_t cas, + std::pair *result) = 0; }; // namespace proxy_wasm struct SharedQueueInterface { diff --git a/src/context.cc b/src/context.cc index dbf1304b..0aa43a2f 100644 --- a/src/context.cc +++ b/src/context.cc @@ -197,11 +197,11 @@ WasmResult ContextBase::getSharedDataKeys(std::string_view key_prefix, return getGlobalSharedData().keys(wasm_->vm_id(), key_prefix, result); } -WasmResult ContextBase::removeSharedDataKey(std::string_view key, uint32_t cas) { - return getGlobalSharedData().remove(wasm_->vm_id(), key, cas); +WasmResult ContextBase::removeSharedDataKey(std::string_view key, uint32_t cas, + std::pair *result) { + return getGlobalSharedData().remove(wasm_->vm_id(), key, cas, result); } - // Shared Queue WasmResult ContextBase::registerSharedQueue(std::string_view queue_name, diff --git a/src/shared_data.cc b/src/shared_data.cc index f8b718d8..dca16ce1 100644 --- a/src/shared_data.cc +++ b/src/shared_data.cc @@ -58,10 +58,12 @@ WasmResult SharedData::get(std::string_view vm_id, const std::string_view key, WasmResult SharedData::keys(std::string_view vm_id, const std::string_view key_prefix, std::vector *result) { + result->clear(); + std::lock_guard lock(mutex_); auto map = data_.find(std::string(vm_id)); if (map == data_.end()) { - return WasmResult::NotFound; + return WasmResult::Ok; } for (auto kv : map->second) { @@ -73,46 +75,52 @@ WasmResult SharedData::keys(std::string_view vm_id, const std::string_view key_p return WasmResult::Ok; } -WasmResult SharedData::remove(std::string_view vm_id, std::string_view key, uint32_t cas) { +WasmResult SharedData::set(std::string_view vm_id, std::string_view key, std::string_view value, + uint32_t cas) { std::lock_guard lock(mutex_); std::unordered_map> *map; auto map_it = data_.find(std::string(vm_id)); if (map_it == data_.end()) { - return WasmResult::Ok; + map = &data_[std::string(vm_id)]; } else { map = &map_it->second; } - auto it = map->find(std::string(key)); if (it != map->end()) { if (cas && cas != it->second.second) { return WasmResult::CasMismatch; } - map->erase(it); + it->second = std::make_pair(std::string(value), nextCas()); + } else { + map->emplace(key, std::make_pair(std::string(value), nextCas())); } return WasmResult::Ok; } -WasmResult SharedData::set(std::string_view vm_id, std::string_view key, std::string_view value, - uint32_t cas) { +WasmResult SharedData::remove(std::string_view vm_id, std::string_view key, uint32_t cas, + std::pair *result) { std::lock_guard lock(mutex_); std::unordered_map> *map; auto map_it = data_.find(std::string(vm_id)); if (map_it == data_.end()) { - map = &data_[std::string(vm_id)]; + return WasmResult::NotFound; } else { map = &map_it->second; } + auto it = map->find(std::string(key)); if (it != map->end()) { if (cas && cas != it->second.second) { return WasmResult::CasMismatch; } - it->second = std::make_pair(std::string(value), nextCas()); - } else { - map->emplace(key, std::make_pair(std::string(value), nextCas())); + if (result != nullptr) { + // printf("Here w/ %s", it->second.first.c_str()); + *result = it->second; + } + map->erase(it); + return WasmResult::Ok; } - return WasmResult::Ok; + return WasmResult::NotFound; } } // namespace proxy_wasm diff --git a/src/shared_data.h b/src/shared_data.h index de6e9a20..c26dd1d5 100644 --- a/src/shared_data.h +++ b/src/shared_data.h @@ -27,9 +27,10 @@ class SharedData { std::pair *result); WasmResult keys(std::string_view vm_id, const std::string_view key_prefix, std::vector *result); - WasmResult remove(std::string_view vm_id, const std::string_view key, uint32_t cas); WasmResult set(std::string_view vm_id, std::string_view key, std::string_view value, uint32_t cas); + WasmResult remove(std::string_view vm_id, const std::string_view key, uint32_t cas, + std::pair *result); void deleteByVmId(std::string_view vm_id); private: diff --git a/test/shared_data_test.cc b/test/shared_data_test.cc index 5687929d..51079f9a 100644 --- a/test/shared_data_test.cc +++ b/test/shared_data_test.cc @@ -24,10 +24,24 @@ namespace proxy_wasm { TEST(SharedData, SingleThread) { SharedData shared_data(false); + std::string_view vm_id = "id"; + + // Validate we get an 'Ok' response when fetching keys before anything + // is initialized. + std::vector keys; + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "", &keys)); + EXPECT_EQ(0, keys.size()); + + // Validate that we clear the result set + std::vector nonEmptyKeys(2); + nonEmptyKeys[0] = "valueA"; + nonEmptyKeys[1] = "valueB"; + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "", &nonEmptyKeys)); + EXPECT_EQ(0, nonEmptyKeys.size()); + std::pair result; EXPECT_EQ(WasmResult::NotFound, shared_data.get("non-exist", "non-exists", &result)); - std::string_view vm_id = "id"; std::string_view key = "key"; std::string_view value = "1"; EXPECT_EQ(WasmResult::Ok, shared_data.set(vm_id, key, value, 0)); @@ -45,7 +59,6 @@ TEST(SharedData, SingleThread) { EXPECT_EQ(value, result.first); EXPECT_EQ(result.second, 3); - std::vector keys; EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "unmatched-prefix", &keys)); EXPECT_EQ(0, keys.size()); @@ -57,12 +70,25 @@ TEST(SharedData, SingleThread) { EXPECT_EQ(key, keys[0]); keys.clear(); - EXPECT_EQ(WasmResult::CasMismatch, shared_data.remove(vm_id, key, 911)); + EXPECT_EQ(WasmResult::CasMismatch, shared_data.remove(vm_id, key, 911, nullptr)); EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "ke", &keys)); EXPECT_EQ(1, keys.size()); - EXPECT_EQ(WasmResult::Ok, shared_data.remove(vm_id, key, 0)); + EXPECT_EQ(WasmResult::Ok, shared_data.remove(vm_id, key, 0, nullptr)); EXPECT_EQ(WasmResult::NotFound, shared_data.get(vm_id, key, &result)); + + EXPECT_EQ(WasmResult::NotFound, shared_data.remove(vm_id, "non-existent_key", 0, nullptr)); + + EXPECT_EQ(WasmResult::Ok, shared_data.set(vm_id, key, value, 0)); + EXPECT_EQ(WasmResult::Ok, shared_data.set(vm_id, key, value, 0)); + EXPECT_EQ(WasmResult::Ok, shared_data.get(vm_id, key, &result)); + + uint32_t expectedCasValue = result.second; + + std::pair removeResult; + EXPECT_EQ(WasmResult::Ok, shared_data.remove(vm_id, key, 0, &removeResult)); + EXPECT_EQ(value, removeResult.first); + EXPECT_EQ(removeResult.second, expectedCasValue); } void incrementData(SharedData *shared_data, std::string_view vm_id, std::string_view key) { From d9d3c9a52d4d0d0b546b09d6024458e1afe9965e Mon Sep 17 00:00:00 2001 From: James Mulcahy Date: Fri, 28 Jan 2022 07:23:21 -0800 Subject: [PATCH 5/6] Remove debug printf call Signed-off-by: James Mulcahy --- src/shared_data.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/shared_data.cc b/src/shared_data.cc index dca16ce1..6bb5b097 100644 --- a/src/shared_data.cc +++ b/src/shared_data.cc @@ -114,7 +114,6 @@ WasmResult SharedData::remove(std::string_view vm_id, std::string_view key, uint return WasmResult::CasMismatch; } if (result != nullptr) { - // printf("Here w/ %s", it->second.first.c_str()); *result = it->second; } map->erase(it); From dbf12341a422c0807d8777f8166039fc5393da58 Mon Sep 17 00:00:00 2001 From: James Mulcahy Date: Mon, 31 Jan 2022 22:59:36 -0800 Subject: [PATCH 6/6] Remove key_prefix from keys() call Signed-off-by: James Mulcahy --- include/proxy-wasm/context.h | 3 +-- include/proxy-wasm/context_interface.h | 8 +++----- src/context.cc | 5 ++--- src/shared_data.cc | 7 ++----- src/shared_data.h | 3 +-- test/shared_data_test.cc | 14 ++++---------- 6 files changed, 13 insertions(+), 27 deletions(-) diff --git a/include/proxy-wasm/context.h b/include/proxy-wasm/context.h index 66e41b2e..7f66cdbf 100644 --- a/include/proxy-wasm/context.h +++ b/include/proxy-wasm/context.h @@ -353,8 +353,7 @@ class ContextBase : public RootInterface, WasmResult getSharedData(std::string_view key, std::pair *data) override; WasmResult setSharedData(std::string_view key, std::string_view value, uint32_t cas) override; - WasmResult getSharedDataKeys(std::string_view key_prefix, - std::vector *result) override; + WasmResult getSharedDataKeys(std::vector *result) override; WasmResult removeSharedDataKey(std::string_view key, uint32_t cas, std::pair *result) override; diff --git a/include/proxy-wasm/context_interface.h b/include/proxy-wasm/context_interface.h index e9d169c1..85e251a0 100644 --- a/include/proxy-wasm/context_interface.h +++ b/include/proxy-wasm/context_interface.h @@ -596,7 +596,7 @@ struct GeneralInterface { }; /** - * SharedDataInterface is for shaing data between VMs. In general the VMs may be on different + * SharedDataInterface is for sharing data between VMs. In general the VMs may be on different * threads. Keys can have any format, but good practice would use reverse DNS and namespacing * prefixes to avoid conflicts. */ @@ -623,12 +623,10 @@ struct SharedDataInterface { virtual WasmResult setSharedData(std::string_view key, std::string_view value, uint32_t cas) = 0; /** - * Return all the keys which match the given key_prefix - * @param key_prefix is used to restrict the results to keys matching the given prefix + * Return all the keys from the data shraed between VMs * @param data is a location to store the returned value. */ - virtual WasmResult getSharedDataKeys(std::string_view key_prefix, - std::vector *result) = 0; + virtual WasmResult getSharedDataKeys(std::vector *result) = 0; /** * Removes the given key from the data shared between VMs. diff --git a/src/context.cc b/src/context.cc index 0aa43a2f..81633a7b 100644 --- a/src/context.cc +++ b/src/context.cc @@ -192,9 +192,8 @@ WasmResult ContextBase::setSharedData(std::string_view key, std::string_view val return getGlobalSharedData().set(wasm_->vm_id(), key, value, cas); } -WasmResult ContextBase::getSharedDataKeys(std::string_view key_prefix, - std::vector *result) { - return getGlobalSharedData().keys(wasm_->vm_id(), key_prefix, result); +WasmResult ContextBase::getSharedDataKeys(std::vector *result) { + return getGlobalSharedData().keys(wasm_->vm_id(), result); } WasmResult ContextBase::removeSharedDataKey(std::string_view key, uint32_t cas, diff --git a/src/shared_data.cc b/src/shared_data.cc index 6bb5b097..d4306ada 100644 --- a/src/shared_data.cc +++ b/src/shared_data.cc @@ -56,8 +56,7 @@ WasmResult SharedData::get(std::string_view vm_id, const std::string_view key, return WasmResult::NotFound; } -WasmResult SharedData::keys(std::string_view vm_id, const std::string_view key_prefix, - std::vector *result) { +WasmResult SharedData::keys(std::string_view vm_id, std::vector *result) { result->clear(); std::lock_guard lock(mutex_); @@ -67,9 +66,7 @@ WasmResult SharedData::keys(std::string_view vm_id, const std::string_view key_p } for (auto kv : map->second) { - if (kv.first.rfind(key_prefix, 0) == 0) { - result->push_back(kv.first); - } + result->push_back(kv.first); } return WasmResult::Ok; diff --git a/src/shared_data.h b/src/shared_data.h index c26dd1d5..cbc76fb1 100644 --- a/src/shared_data.h +++ b/src/shared_data.h @@ -25,8 +25,7 @@ class SharedData { SharedData(bool register_vm_id_callback = true); WasmResult get(std::string_view vm_id, const std::string_view key, std::pair *result); - WasmResult keys(std::string_view vm_id, const std::string_view key_prefix, - std::vector *result); + WasmResult keys(std::string_view vm_id, std::vector *result); WasmResult set(std::string_view vm_id, std::string_view key, std::string_view value, uint32_t cas); WasmResult remove(std::string_view vm_id, const std::string_view key, uint32_t cas, diff --git a/test/shared_data_test.cc b/test/shared_data_test.cc index 51079f9a..062625f8 100644 --- a/test/shared_data_test.cc +++ b/test/shared_data_test.cc @@ -29,14 +29,14 @@ TEST(SharedData, SingleThread) { // Validate we get an 'Ok' response when fetching keys before anything // is initialized. std::vector keys; - EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "", &keys)); + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, &keys)); EXPECT_EQ(0, keys.size()); // Validate that we clear the result set std::vector nonEmptyKeys(2); nonEmptyKeys[0] = "valueA"; nonEmptyKeys[1] = "valueB"; - EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "", &nonEmptyKeys)); + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, &nonEmptyKeys)); EXPECT_EQ(0, nonEmptyKeys.size()); std::pair result; @@ -59,19 +59,13 @@ TEST(SharedData, SingleThread) { EXPECT_EQ(value, result.first); EXPECT_EQ(result.second, 3); - EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "unmatched-prefix", &keys)); - EXPECT_EQ(0, keys.size()); - - EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "keyyyyy", &keys)); - EXPECT_EQ(0, keys.size()); - - EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "ke", &keys)); + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, &keys)); EXPECT_EQ(1, keys.size()); EXPECT_EQ(key, keys[0]); keys.clear(); EXPECT_EQ(WasmResult::CasMismatch, shared_data.remove(vm_id, key, 911, nullptr)); - EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, "ke", &keys)); + EXPECT_EQ(WasmResult::Ok, shared_data.keys(vm_id, &keys)); EXPECT_EQ(1, keys.size()); EXPECT_EQ(WasmResult::Ok, shared_data.remove(vm_id, key, 0, nullptr));