From 7dc4fa331be35cd183890d8c367515d9e4ae83a1 Mon Sep 17 00:00:00 2001 From: jiangminsen Date: Mon, 3 Jun 2024 16:18:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=B8=83=E5=BC=8Fdb=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jiangminsen --- .../dbms/include/distributed_data_storage.h | 6 +- .../dbms/src/distributed_data_storage.cpp | 66 ++++++++----------- 2 files changed, 30 insertions(+), 42 deletions(-) diff --git a/services/dbms/include/distributed_data_storage.h b/services/dbms/include/distributed_data_storage.h index 083a80c..0e18d5d 100644 --- a/services/dbms/include/distributed_data_storage.h +++ b/services/dbms/include/distributed_data_storage.h @@ -57,10 +57,7 @@ private: std::map GetAllOldDistributionBundleInfo( const std::vector &bundleNames); static std::string AnonymizeUdid(const std::string& udid); - void GetEntries(const std::string &networkId, const OHOS::DistributedKv::Key &allEntryKeyPrefix, - std::promise &resultStatusSignal, - std::vector &allEntries); - OHOS::DistributedKv::Status GetResultSatus(std::promise &resultStatusSignal); + void Sync(const std::string &udid); private: static std::mutex mutex_; static std::shared_ptr instance_; @@ -70,7 +67,6 @@ private: DistributedKv::DistributedKvDataManager dataManager_; std::shared_ptr kvStorePtr_; mutable std::mutex kvStorePtrMutex_; - int32_t waittingTime_ = 180; // 3 mins }; } // namespace AppExecFwk } // namespace OHOS diff --git a/services/dbms/src/distributed_data_storage.cpp b/services/dbms/src/distributed_data_storage.cpp index 0dc4890..8189880 100644 --- a/services/dbms/src/distributed_data_storage.cpp +++ b/services/dbms/src/distributed_data_storage.cpp @@ -180,22 +180,17 @@ bool DistributedDataStorage::GetStorageDistributeInfo(const std::string &network APP_LOGI("can not get udid by networkId error:%{public}d", ret); return false; } + Sync(udid); std::string keyOfData = DeviceAndNameToKey(udid, bundleName); APP_LOGI("keyOfData: [%{public}s]", AnonymizeUdid(keyOfData).c_str()); Key key(keyOfData); Value value; - std::promise resultStatusSignal; - kvStorePtr_->Get(key, networkId, - [&value, &resultStatusSignal](Status innerStatus, Value innerValue) { - APP_LOGI("distribute database Get, result = %{public}d", innerStatus); - if (innerStatus == Status::SUCCESS) { - value = innerValue; - } - resultStatusSignal.set_value(innerStatus); - }); - Status status = GetResultSatus(resultStatusSignal); + Status status = kvStorePtr_->Get(key, value); + if (status == Status::IPC_ERROR) { + status = kvStorePtr_->Get(key, value); + APP_LOGW("distribute database ipc error and try to call again, result = %{public}d", status); + } if (status == Status::SUCCESS) { - APP_LOGI("distribute database Get, result = %{public}d", status); if (!info.FromJsonString(value.ToString())) { APP_LOGE("it's an error value"); kvStorePtr_->Delete(key); @@ -207,29 +202,6 @@ bool DistributedDataStorage::GetStorageDistributeInfo(const std::string &network return false; } -Status DistributedDataStorage::GetResultSatus(std::promise &resultStatusSignal) -{ - auto future = resultStatusSignal.get_future(); - if (future.wait_for(std::chrono::seconds(waittingTime_)) == std::future_status::ready) { - Status status = future.get(); - return status; - } - return Status::ERROR; -} - -void DistributedDataStorage::GetEntries(const std::string &networkId, const Key &allEntryKeyPrefix, - std::promise &resultStatusSignal, std::vector &allEntries) -{ - kvStorePtr_->GetEntries(allEntryKeyPrefix, networkId, - [&resultStatusSignal, &allEntries](Status innerStatus, std::vector innerAllEntries) { - APP_LOGI("distribute database GetEntries, result = %{public}d", innerStatus); - if (innerStatus == Status::SUCCESS) { - std::copy(innerAllEntries.begin(), innerAllEntries.end(), std::back_inserter(allEntries)); - } - resultStatusSignal.set_value(innerStatus); - }); -} - int32_t DistributedDataStorage::GetDistributedBundleName(const std::string &networkId, uint32_t accessTokenId, std::string &bundleName) { @@ -250,11 +222,10 @@ int32_t DistributedDataStorage::GetDistributedBundleName(const std::string &netw APP_LOGE("get udid is Empty"); return ERR_BUNDLE_MANAGER_INTERNAL_ERROR; } + Sync(udid); Key allEntryKeyPrefix(""); std::vector allEntries; - std::promise resultStatusSignal; - GetEntries(networkId, allEntryKeyPrefix, resultStatusSignal, allEntries); - Status status = GetResultSatus(resultStatusSignal); + Status status = kvStorePtr_->GetEntries(allEntryKeyPrefix, allEntries); if (status != Status::SUCCESS) { APP_LOGE("dataManager_ GetEntries error: %{public}d", status); return ERR_BUNDLE_MANAGER_INTERNAL_ERROR; @@ -318,6 +289,27 @@ bool DistributedDataStorage::CheckKvStore() return kvStorePtr_ != nullptr; } +void DistributedDataStorage::Sync(const std::string &udid) +{ + std::string localUdid; + bool ret = GetLocalUdid(localUdid); + if (!ret) { + APP_LOGE("GetLocalUdid error"); + return; + } + if (udid == localUdid) { + APP_LOGE("query db of local udid"); + return; + } + std::vector networkIdList = {udid}; + Status status = kvStorePtr_->Sync(networkIdList, DistributedKv::SyncMode::PUSH_PULL); + if (status != Status::SUCCESS) { + APP_LOGE("distribute database start sync data: %{public}d", status); + return ; + } + APP_LOGI("distribute database start sync data success"); +} + Status DistributedDataStorage::GetKvStore() { Options options = { -- Gitee