From 95ae348f7b2ea556c2609081155dec5aaaab172b Mon Sep 17 00:00:00 2001 From: zhangdi Date: Wed, 18 Jun 2025 21:50:20 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=AB=AF=E5=85=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AF=BB=E5=8F=96=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangdi --- .../include/metadata/meta_data_manager.h | 3 +++ .../framework/metadata/meta_data_manager.cpp | 26 +++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/services/distributeddataservice/framework/include/metadata/meta_data_manager.h b/services/distributeddataservice/framework/include/metadata/meta_data_manager.h index 3a01dbdc1..987addd96 100644 --- a/services/distributeddataservice/framework/include/metadata/meta_data_manager.h +++ b/services/distributeddataservice/framework/include/metadata/meta_data_manager.h @@ -21,6 +21,7 @@ #include "concurrent_map.h" #include "serializable/serializable.h" +#include "lru_bucket.h" namespace DistributedDB { class KvStoreNbDelegate; } @@ -91,6 +92,7 @@ private: ~MetaDataManager(); API_EXPORT bool GetEntries(const std::string &prefix, std::vector &entries, bool isLocal); + API_EXPORT void DelCacheMeta(const std::string &key, bool isLocal); void StopSA(); bool inited_ = false; @@ -101,6 +103,7 @@ private: Syncer syncer_; CloudSyncer cloudSyncer_; std::string storeId_; + LRUBucket localdata_ {64}; }; } // namespace OHOS::DistributedData #endif // OHOS_DISTRIBUTED_DATA_SERVICES_FRAMEWORK_METADATA_META_DATA_MANAGER_H \ No newline at end of file diff --git a/services/distributeddataservice/framework/metadata/meta_data_manager.cpp b/services/distributeddataservice/framework/metadata/meta_data_manager.cpp index 50453bfb6..d041cc4f8 100644 --- a/services/distributeddataservice/framework/metadata/meta_data_manager.cpp +++ b/services/distributeddataservice/framework/metadata/meta_data_manager.cpp @@ -187,6 +187,17 @@ void MetaDataManager::SetCloudSyncer(const CloudSyncer &cloudSyncer) cloudSyncer_ = cloudSyncer; } +void MetaDataManager::DelCacheMeta(const std::string &key, bool isLocal) +{ + if (!isLocal) { + return; + } + std::string data; + if (localdata_.Get(key, data) && !localdata_.Delete(key)) { + ZLOGE("DelCacheMeta fail when update meta, %{public}s.", key.c_str()); + } +} + bool MetaDataManager::SaveMeta(const std::string &key, const Serializable &value, bool isLocal) { if (!inited_) { @@ -213,6 +224,7 @@ bool MetaDataManager::SaveMeta(const std::string &key, const Serializable &value ZLOGE("failed! status:%{public}d isLocal:%{public}d, key:%{public}s", status, isLocal, Anonymous::Change(key).c_str()); } + DelCacheMeta(key, isLocal); return status == DistributedDB::DBStatus::OK; } @@ -228,6 +240,7 @@ bool MetaDataManager::SaveMeta(const std::vector &values, bool isLocal) entries.reserve(values.size()); for (const auto &[key, value] : values) { entries.push_back({ { key.begin(), key.end() }, { value.begin(), value.end() } }); + DelCacheMeta(key, isLocal); } auto status = isLocal ? metaStore_->PutLocalBatch(entries) : metaStore_->PutBatch(entries); if (status == DistributedDB::DBStatus::INVALID_PASSWD_OR_CORRUPTED_DB) { @@ -253,7 +266,11 @@ bool MetaDataManager::LoadMeta(const std::string &key, Serializable &value, bool if (!inited_) { return false; } - + std::string valueData; + if (isLocal && localdata_.Get(key, valueData)) { + Serializable::Unmarshall(valueData, value); + return true; + } DistributedDB::Value data; auto status = isLocal ? metaStore_->GetLocal({ key.begin(), key.end() }, data) : metaStore_->Get({ key.begin(), key.end() }, data); @@ -267,6 +284,10 @@ bool MetaDataManager::LoadMeta(const std::string &key, Serializable &value, bool if (status != DistributedDB::DBStatus::OK) { return false; } + if (isLocal) { + std::string value(data.begin(), data.end()); + localdata_.Set(key, value); + } Serializable::Unmarshall({ data.begin(), data.end() }, value); if (isLocal) { data.assign(data.size(), 0); @@ -302,7 +323,7 @@ bool MetaDataManager::DelMeta(const std::string &key, bool isLocal) if (!inited_) { return false; } - + DelCacheMeta(key, isLocal); auto status = isLocal ? metaStore_->DeleteLocal({ key.begin(), key.end() }) : metaStore_->Delete({ key.begin(), key.end() }); if (status == DistributedDB::DBStatus::INVALID_PASSWD_OR_CORRUPTED_DB) { @@ -333,6 +354,7 @@ bool MetaDataManager::DelMeta(const std::vector &keys, bool isLocal dbKeys.reserve(keys.size()); for (auto &key : keys) { dbKeys.emplace_back(key.begin(), key.end()); + DelCacheMeta(key, isLocal); } auto status = isLocal ? metaStore_->DeleteLocalBatch(dbKeys) : metaStore_->DeleteBatch(dbKeys); if (status == DistributedDB::DBStatus::INVALID_PASSWD_OR_CORRUPTED_DB) { -- Gitee From e82e57b748f8cc4d8359ed054b46f102ff96a145 Mon Sep 17 00:00:00 2001 From: zhangdi Date: Thu, 19 Jun 2025 22:21:14 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=AB=AF=E5=85=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AF=BB=E5=8F=96=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangdi --- .../include/metadata/meta_data_manager.h | 35 +++++++++++++++++-- .../framework/metadata/meta_data_manager.cpp | 20 ++--------- 2 files changed, 35 insertions(+), 20 deletions(-) diff --git a/services/distributeddataservice/framework/include/metadata/meta_data_manager.h b/services/distributeddataservice/framework/include/metadata/meta_data_manager.h index 987addd96..e15b606c1 100644 --- a/services/distributeddataservice/framework/include/metadata/meta_data_manager.h +++ b/services/distributeddataservice/framework/include/metadata/meta_data_manager.h @@ -92,7 +92,38 @@ private: ~MetaDataManager(); API_EXPORT bool GetEntries(const std::string &prefix, std::vector &entries, bool isLocal); - API_EXPORT void DelCacheMeta(const std::string &key, bool isLocal); + + void DelCacheMeta(const std::string &key, bool isLocal) + { + if (!isLocal) { + return; + } + localdata_.Delete(key); + } + + bool LoadCacheMeta(const std::string &key, Serializable &value, bool isLocal) + { + if (!isLocal) { + return false; + } + std::string data; + if (!localdata_.Get(key, data)) { + return false; + } + Serializable::Unmarshall(data, value); + return true; + } + + void SaveCacheMeta(const std::string &key, const std::string &data, bool isLocal) + { + if (!isLocal) { + return; + } + + std::string value(data.begin(), data.end()); + localdata_.Set(key, value); + } + void StopSA(); bool inited_ = false; @@ -106,4 +137,4 @@ private: LRUBucket localdata_ {64}; }; } // namespace OHOS::DistributedData -#endif // OHOS_DISTRIBUTED_DATA_SERVICES_FRAMEWORK_METADATA_META_DATA_MANAGER_H \ No newline at end of file +#endif // OHOS_DISTRIBUTED_DATA_SERVICES_FRAMEWORK_METADATA_META_DATA_MANAGER_H diff --git a/services/distributeddataservice/framework/metadata/meta_data_manager.cpp b/services/distributeddataservice/framework/metadata/meta_data_manager.cpp index d041cc4f8..fed8b7be6 100644 --- a/services/distributeddataservice/framework/metadata/meta_data_manager.cpp +++ b/services/distributeddataservice/framework/metadata/meta_data_manager.cpp @@ -187,17 +187,6 @@ void MetaDataManager::SetCloudSyncer(const CloudSyncer &cloudSyncer) cloudSyncer_ = cloudSyncer; } -void MetaDataManager::DelCacheMeta(const std::string &key, bool isLocal) -{ - if (!isLocal) { - return; - } - std::string data; - if (localdata_.Get(key, data) && !localdata_.Delete(key)) { - ZLOGE("DelCacheMeta fail when update meta, %{public}s.", key.c_str()); - } -} - bool MetaDataManager::SaveMeta(const std::string &key, const Serializable &value, bool isLocal) { if (!inited_) { @@ -266,9 +255,7 @@ bool MetaDataManager::LoadMeta(const std::string &key, Serializable &value, bool if (!inited_) { return false; } - std::string valueData; - if (isLocal && localdata_.Get(key, valueData)) { - Serializable::Unmarshall(valueData, value); + if (LoadCacheMeta(key, value, isLocal)) { return true; } DistributedDB::Value data; @@ -284,10 +271,7 @@ bool MetaDataManager::LoadMeta(const std::string &key, Serializable &value, bool if (status != DistributedDB::DBStatus::OK) { return false; } - if (isLocal) { - std::string value(data.begin(), data.end()); - localdata_.Set(key, value); - } + SaveCacheMeta(key, { data.begin(), data.end() }, isLocal); Serializable::Unmarshall({ data.begin(), data.end() }, value); if (isLocal) { data.assign(data.size(), 0); -- Gitee From d536b9c236b094e0505918fabce26daded3c18ab Mon Sep 17 00:00:00 2001 From: zhangdi Date: Fri, 20 Jun 2025 11:38:47 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=AB=AF=E5=85=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AF=BB=E5=8F=96=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangdi --- .../framework/include/metadata/meta_data_manager.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/distributeddataservice/framework/include/metadata/meta_data_manager.h b/services/distributeddataservice/framework/include/metadata/meta_data_manager.h index e15b606c1..b8c74db74 100644 --- a/services/distributeddataservice/framework/include/metadata/meta_data_manager.h +++ b/services/distributeddataservice/framework/include/metadata/meta_data_manager.h @@ -120,8 +120,7 @@ private: return; } - std::string value(data.begin(), data.end()); - localdata_.Set(key, value); + localdata_.Set(key, data); } void StopSA(); -- Gitee From e3d9a2ac8c39803665430e8a137eb09fe2001954 Mon Sep 17 00:00:00 2001 From: zhangdi Date: Fri, 20 Jun 2025 12:05:19 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=AB=AF=E5=85=83?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AF=BB=E5=8F=96=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zhangdi --- .../framework/include/metadata/meta_data_manager.h | 1 - .../framework/metadata/meta_data_manager.cpp | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/distributeddataservice/framework/include/metadata/meta_data_manager.h b/services/distributeddataservice/framework/include/metadata/meta_data_manager.h index b8c74db74..fb8dc79c1 100644 --- a/services/distributeddataservice/framework/include/metadata/meta_data_manager.h +++ b/services/distributeddataservice/framework/include/metadata/meta_data_manager.h @@ -119,7 +119,6 @@ private: if (!isLocal) { return; } - localdata_.Set(key, data); } diff --git a/services/distributeddataservice/framework/metadata/meta_data_manager.cpp b/services/distributeddataservice/framework/metadata/meta_data_manager.cpp index fed8b7be6..09bd5c240 100644 --- a/services/distributeddataservice/framework/metadata/meta_data_manager.cpp +++ b/services/distributeddataservice/framework/metadata/meta_data_manager.cpp @@ -271,8 +271,9 @@ bool MetaDataManager::LoadMeta(const std::string &key, Serializable &value, bool if (status != DistributedDB::DBStatus::OK) { return false; } - SaveCacheMeta(key, { data.begin(), data.end() }, isLocal); - Serializable::Unmarshall({ data.begin(), data.end() }, value); + std::string tempdata(data.begin(), data.end()); + SaveCacheMeta(key, tempdata, isLocal); + Serializable::Unmarshall(tempdata, value); if (isLocal) { data.assign(data.size(), 0); } -- Gitee