From 74810a0f90df5e0167e0a9a37874b57390d32a19 Mon Sep 17 00:00:00 2001 From: Hollokin Date: Wed, 23 Mar 2022 11:28:48 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=80=A7=E8=83=BD=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=83=A8=E5=88=86?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hollokin --- .../src/kvstore_sync_callback_client.cpp | 2 + .../src/single_kvstore_client.cpp | 4 ++ .../communicator/src/app_device_handler.cpp | 5 ++ .../communicator/src/app_device_handler.h | 1 + .../src/ark_communication_provider.cpp | 8 +++ .../src/ark_communication_provider.h | 2 + .../src/communication_provider_impl.cpp | 5 ++ .../src/communication_provider_impl.h | 3 + .../src/process_communicator_impl.cpp | 13 ++-- .../communicator/src/softbus_adapter.h | 3 +- .../src/softbus_adapter_standard.cpp | 69 ++++++++++++++----- .../include/communicator/commu_types.h | 7 ++ .../communicator/communication_provider.h | 3 + .../include/communicator/idevice_query.h | 2 + .../app/src/kvstore_data_service.cpp | 10 ++- .../app/src/kvstore_meta_manager.cpp | 48 +++++++++++++ .../app/src/kvstore_meta_manager.h | 4 ++ 17 files changed, 158 insertions(+), 31 deletions(-) diff --git a/frameworks/innerkitsimpl/distributeddatafwk/src/kvstore_sync_callback_client.cpp b/frameworks/innerkitsimpl/distributeddatafwk/src/kvstore_sync_callback_client.cpp index 049f8ff69..5402033d6 100644 --- a/frameworks/innerkitsimpl/distributeddatafwk/src/kvstore_sync_callback_client.cpp +++ b/frameworks/innerkitsimpl/distributeddatafwk/src/kvstore_sync_callback_client.cpp @@ -18,6 +18,7 @@ #include "kvstore_sync_callback_client.h" #include #include +#include "dds_trace.h" #include "log_print.h" namespace OHOS { @@ -29,6 +30,7 @@ KvStoreSyncCallbackClient::~KvStoreSyncCallbackClient() void KvStoreSyncCallbackClient::SyncCompleted(const std::map &results, uint64_t sequenceId) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); auto finded = syncCallbackInfo_.Find(sequenceId); if (finded.first) { finded.second->SyncCompleted(results); diff --git a/frameworks/innerkitsimpl/distributeddatafwk/src/single_kvstore_client.cpp b/frameworks/innerkitsimpl/distributeddatafwk/src/single_kvstore_client.cpp index e7b763fea..5d846af64 100644 --- a/frameworks/innerkitsimpl/distributeddatafwk/src/single_kvstore_client.cpp +++ b/frameworks/innerkitsimpl/distributeddatafwk/src/single_kvstore_client.cpp @@ -309,6 +309,7 @@ Status SingleKvStoreClient::UnSubscribeKvStore(SubscribeType subscribeType, std: Status SingleKvStoreClient::RegisterSyncCallback(std::shared_ptr callback) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); ZLOGI("begin."); if (callback == nullptr) { ZLOGW("return INVALID_ARGUMENT."); @@ -476,6 +477,7 @@ Status SingleKvStoreClient::GetSecurityLevel(SecurityLevel &securityLevel) const Status SingleKvStoreClient::SyncWithCondition(const std::vector &deviceIds, SyncMode mode, const DataQuery &query, std::shared_ptr callback) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); if (kvStoreProxy_ == nullptr) { ZLOGE("singleKvstore proxy is nullptr."); return Status::SERVER_UNAVAILABLE; @@ -496,6 +498,7 @@ Status SingleKvStoreClient::SyncWithCondition(const std::vector &de Status SingleKvStoreClient::SubscribeWithQuery(const std::vector &deviceIds, const DataQuery &query) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); if (kvStoreProxy_ == nullptr) { ZLOGE("singleKvstore proxy is nullptr."); return Status::SERVER_UNAVAILABLE; @@ -512,6 +515,7 @@ Status SingleKvStoreClient::SubscribeWithQuery(const std::vector &d Status SingleKvStoreClient::UnsubscribeWithQuery(const std::vector &deviceIds, const DataQuery &query) { + DdsTrace trace(std::string(LOG_TAG "::") + std::string(__FUNCTION__), true); if (kvStoreProxy_ == nullptr) { ZLOGE("singleKvstore proxy is nullptr."); return Status::SERVER_UNAVAILABLE; diff --git a/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp b/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp index 9f4c7cb34..8e6575416 100644 --- a/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp +++ b/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp @@ -54,6 +54,11 @@ std::vector AppDeviceHandler::GetDeviceList() const return softbusAdapter_->GetDeviceList(); } +std::string AppDeviceHandler::GetDeviceInfo(const std::string &networkId) const +{ + return softbusAdapter_->GetDeviceInfo(networkId); +} + DeviceInfo AppDeviceHandler::GetLocalDevice() { return softbusAdapter_->GetLocalDevice(); diff --git a/services/distributeddataservice/adapter/communicator/src/app_device_handler.h b/services/distributeddataservice/adapter/communicator/src/app_device_handler.h index 57735b932..12920e2a5 100644 --- a/services/distributeddataservice/adapter/communicator/src/app_device_handler.h +++ b/services/distributeddataservice/adapter/communicator/src/app_device_handler.h @@ -32,6 +32,7 @@ public: DeviceInfo GetLocalDevice(); std::vector GetDeviceList() const; + std::string GetDeviceInfo(const std::string &networkId) const; std::string GetUuidByNodeId(const std::string &nodeId) const; std::string GetUdidByNodeId(const std::string &nodeId) const; diff --git a/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.cpp b/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.cpp index b2ce805c5..bdd23f615 100644 --- a/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.cpp +++ b/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.cpp @@ -57,6 +57,14 @@ std::vector ArkCommunicationProvider::GetDeviceList() const return deviceQuery_->GetDeviceList(); } +std::string ArkCommunicationProvider::GetDeviceInfo(const std::string &networkId) const +{ + if (deviceQuery_ == nullptr) { + return CommunicationProviderImpl::GetDeviceInfo(networkId); + } + return deviceQuery_->GetDeviceInfo(networkId); +} + void ArkCommunicationProvider::SetDeviceQuery(std::shared_ptr deviceQuery) { ZLOGI("set device query"); diff --git a/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.h b/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.h index 7c1e42802..48d23d29f 100644 --- a/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.h +++ b/services/distributeddataservice/adapter/communicator/src/ark_communication_provider.h @@ -30,6 +30,8 @@ public: void SetDeviceQuery(std::shared_ptr deviceQuery) override; // Get online deviceList std::vector GetDeviceList() const override; + // Get deviceType by networkId + std::string GetDeviceInfo(const std::string &networkId) const override; // Get local device information DeviceInfo GetLocalDevice() const override; diff --git a/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.cpp b/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.cpp index f4d4c4dee..bfcf94bd2 100644 --- a/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.cpp +++ b/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.cpp @@ -60,6 +60,11 @@ std::vector CommunicationProviderImpl::GetDeviceList() const return appDeviceHandler_.GetDeviceList(); } +std::string CommunicationProviderImpl::GetDeviceInfo(const std::string &networkId) const +{ + return appDeviceHandler_.GetDeviceInfo(networkId); +} + Status CommunicationProviderImpl::StartWatchDataChange(const AppDataChangeListener *observer, const PipeInfo &pipeInfo) { return appPipeMgr_.StartWatchDataChange(observer, pipeInfo); diff --git a/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.h b/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.h index 38c3adff8..ab86a1585 100644 --- a/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.h +++ b/services/distributeddataservice/adapter/communicator/src/communication_provider_impl.h @@ -48,6 +48,9 @@ public: // Get online deviceList std::vector GetDeviceList() const override; + // Get deviceType by networkId + std::string GetDeviceInfo(const std::string &networkId) const override; + // Get local device information DeviceInfo GetLocalDevice() const override; diff --git a/services/distributeddataservice/adapter/communicator/src/process_communicator_impl.cpp b/services/distributeddataservice/adapter/communicator/src/process_communicator_impl.cpp index 1dd5690b0..154707e07 100644 --- a/services/distributeddataservice/adapter/communicator/src/process_communicator_impl.cpp +++ b/services/distributeddataservice/adapter/communicator/src/process_communicator_impl.cpp @@ -131,13 +131,12 @@ uint32_t ProcessCommunicatorImpl::GetMtuSize() uint32_t ProcessCommunicatorImpl::GetMtuSize(const DeviceInfos &devInfo) { ZLOGI("GetMtuSize start"); - std::vector devInfos = CommunicationProvider::GetInstance().GetDeviceList(); - for (auto const &entry : devInfos) { - ZLOGI("GetMtuSize deviceType: %{public}s", entry.deviceType.c_str()); - bool isWatch = (entry.deviceType == SMART_WATCH_TYPE || entry.deviceType == CHILDREN_WATCH_TYPE); - if (entry.deviceId == devInfo.identifier && isWatch) { - return MTU_SIZE_WATCH; - } + const auto &comm = CommunicationProvider::GetInstance(); + std::string networkId = comm.ToNodeId(devInfo.identifier); + std::string deviceType = comm.GetDeviceInfo(networkId); + if (deviceType == SMART_WATCH_TYPE || deviceType == CHILDREN_WATCH_TYPE) { + ZLOGI("GetMtuSize deviceType: %{public}s", deviceType.c_str()); + return MTU_SIZE_WATCH; } return MTU_SIZE; } diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h b/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h index fb8652509..c7dd50406 100644 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h @@ -87,6 +87,7 @@ public: void NotifyAll(const DeviceInfo &deviceInfo, const DeviceChangeType &type); DeviceInfo GetLocalDevice(); std::vector GetDeviceList() const; + std::string GetDeviceInfo(const std::string &networkId); std::string GetUuidByNodeId(const std::string &nodeId) const; std::string GetUdidByNodeId(const std::string &nodeId) const; // get local device node information; @@ -141,7 +142,7 @@ public: private: std::shared_ptr> GetSemaphore(int32_t sessinId); mutable std::mutex networkMutex_ {}; - mutable std::map> networkId2UuidUdid_ {}; + mutable std::map networkId2DeviceInfo_ {}; DeviceInfo localInfo_ {}; static std::shared_ptr instance_; std::mutex deviceChangeMutex_; diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp index ee6ebcb3a..9b2d6c6d4 100644 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp @@ -271,6 +271,31 @@ std::vector SoftBusAdapter::GetDeviceList() const return dis; } +std::string SoftBusAdapter::GetDeviceInfo(const std::string &networkId) +{ + auto info = networkId2DeviceInfo_.find(networkId); + if (info != networkId2DeviceInfo_.end()) { + return info->second.deviceType; + } + std::vector devices = GetDeviceList(); + for (const auto &df : devices) { + if (networkId == df.deviceId) { + auto udid = GetUdidByNodeId(networkId); + auto uuid = GetUuidByNodeId(networkId); + DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(df.deviceName), std::string(df.deviceType)}; + std::pair value = {networkId, dfs}; + auto res = this->networkId2DeviceInfo_.insert(std::move(value)); + if (!res.second) { + ZLOGW("insert failed."); + break; + } + return df.deviceType; + } + } + ZLOGE("Get deviceType failed."); + return ""; +} + DeviceInfo SoftBusAdapter::GetLocalDevice() { if (!localInfo_.deviceId.empty()) { @@ -362,17 +387,25 @@ void SoftBusAdapter::UpdateRelationship(const std::string &networkid, const Devi lock_guard lock(networkMutex_); switch (type) { case DeviceChangeType::DEVICE_OFFLINE: { - auto size = this->networkId2UuidUdid_.erase(networkid); + auto size = this->networkId2DeviceInfo_.erase(networkid); if (size == 0) { ZLOGW("not found id:%{public}s.", SoftBusAdapter::ToBeAnonymous(networkid).c_str()); } break; } case DeviceChangeType::DEVICE_ONLINE: { - std::pair> value = {networkid, {uuid, udid}}; - auto res = this->networkId2UuidUdid_.insert(std::move(value)); - if (!res.second) { - ZLOGW("insert failed."); + std::vector deviceList = GetDeviceList(); + for (const auto& deviceInfo : deviceList) { + auto deviceUuid = GetUuidByNodeId(deviceInfo.deviceId); + if (deviceUuid == uuid) { + DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(deviceInfo.deviceName), std::string(deviceInfo.deviceType)}; + std::pair value = {networkid, dfs}; + auto res = this->networkId2DeviceInfo_.insert(std::move(value)); + if (!res.second) { + ZLOGW("insert failed."); + } + break; + } } break; } @@ -386,18 +419,18 @@ void SoftBusAdapter::UpdateRelationship(const std::string &networkid, const Devi std::string SoftBusAdapter::ToUUID(const std::string& id) const { lock_guard lock(networkMutex_); - auto res = networkId2UuidUdid_.find(id); - if (res != networkId2UuidUdid_.end()) { // id is networkid - return std::get<0>(res->second); + auto res = networkId2DeviceInfo_.find(id); + if (res != networkId2DeviceInfo_.end()) { // id is networkid + return res->second.uuid; } - for (auto const &e : networkId2UuidUdid_) { + for (auto const &e : networkId2DeviceInfo_) { auto tup = e.second; - if (id == (std::get<0>(tup))) { // id is uuid + if (id == tup.uuid) { // id is uuid return id; } - if (id == (std::get<1>(tup))) { // id is udid - return std::get<0>(tup); + if (id == tup.udid) { // id is udid + return tup.uuid; } } ZLOGW("unknown id."); @@ -409,12 +442,12 @@ std::string SoftBusAdapter::ToNodeID(const std::string& id, const std::string &n { { lock_guard lock(networkMutex_); - for (auto const &e : networkId2UuidUdid_) { + for (auto const &e : networkId2DeviceInfo_) { auto tup = e.second; - if (nodeId == (std::get<0>(tup))) { // id is uuid + if (nodeId == tup.uuid) { // id is uuid return e.first; } - if (nodeId == (std::get<1>(tup))) { // id is udid + if (nodeId == tup.udid) { // id is udid return e.first; } } @@ -429,12 +462,14 @@ std::string SoftBusAdapter::ToNodeID(const std::string& id, const std::string &n if (ret == SOFTBUS_OK) { lock_guard lock(networkMutex_); for (int i = 0; i < infoNum; i++) { - if (networkId2UuidUdid_.find(info[i].networkId) != networkId2UuidUdid_.end()) { + if (networkId2DeviceInfo_.find(info[i].networkId) != networkId2DeviceInfo_.end()) { continue; } auto uuid = GetUuidByNodeId(std::string(info[i].networkId)); auto udid = GetUdidByNodeId(std::string(info[i].networkId)); - networkId2UuidUdid_.insert({info[i].networkId, {uuid, udid}}); + DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(info[i].deviceName), + std::to_string(info[i].deviceTypeId)}; + networkId2DeviceInfo_.insert({info[i].networkId, dfs}); if (uuid == nodeId || udid == nodeId) { networkId = info[i].networkId; } diff --git a/services/distributeddataservice/adapter/include/communicator/commu_types.h b/services/distributeddataservice/adapter/include/communicator/commu_types.h index 490b4d1c4..7a1d7d7c9 100644 --- a/services/distributeddataservice/adapter/include/communicator/commu_types.h +++ b/services/distributeddataservice/adapter/include/communicator/commu_types.h @@ -26,6 +26,13 @@ struct API_EXPORT DeviceInfo { std::string deviceType; }; +struct API_EXPORT DeviceCacheInfos { + std::string uuid; + std::string udid; + std::string deviceName; + std::string deviceType; +}; + struct API_EXPORT PipeInfo { std::string pipeId; std::string userId; diff --git a/services/distributeddataservice/adapter/include/communicator/communication_provider.h b/services/distributeddataservice/adapter/include/communicator/communication_provider.h index d2dbd5a87..484ff12ad 100644 --- a/services/distributeddataservice/adapter/include/communicator/communication_provider.h +++ b/services/distributeddataservice/adapter/include/communicator/communication_provider.h @@ -54,6 +54,9 @@ public: // Get online deviceList virtual std::vector GetDeviceList() const = 0; + // Get deviceType by networkId + virtual std::string GetDeviceInfo(const std::string &networkId) const = 0; + // Get local device information virtual DeviceInfo GetLocalDevice() const = 0; diff --git a/services/distributeddataservice/adapter/include/communicator/idevice_query.h b/services/distributeddataservice/adapter/include/communicator/idevice_query.h index 97214a9e6..f0f7866a9 100644 --- a/services/distributeddataservice/adapter/include/communicator/idevice_query.h +++ b/services/distributeddataservice/adapter/include/communicator/idevice_query.h @@ -28,6 +28,8 @@ public: // Get local device information virtual DeviceInfo GetLocalDevice() const = 0; + // Get deviceType by networkId + virtual std::string GetDeviceInfo(const std::string &networkId) const = 0; }; } // namespace AppDistributedKv } // namespace OHOS diff --git a/services/distributeddataservice/app/src/kvstore_data_service.cpp b/services/distributeddataservice/app/src/kvstore_data_service.cpp index 56d28ebdc..86637a886 100644 --- a/services/distributeddataservice/app/src/kvstore_data_service.cpp +++ b/services/distributeddataservice/app/src/kvstore_data_service.cpp @@ -1049,14 +1049,12 @@ bool KvStoreDataService::CheckPermissions(const std::string &userId, const std:: auto &instance = KvStoreMetaManager::GetInstance(); KvStoreMetaData metaData; auto localDevId = DeviceKvStoreImpl::GetLocalDeviceId(); - auto qstatus = instance.QueryKvStoreMetaDataByDeviceIdAndAppId(localDevId, appId, metaData); + auto qstatus = instance.QueryKvStoreLocalMetaDataByAppId(localDevId, appId, metaData); if (qstatus != Status::SUCCESS) { - qstatus = instance.QueryKvStoreMetaDataByDeviceIdAndAppId("", appId, metaData); // local device id maybe null - if (qstatus != Status::SUCCESS) { - ZLOGW("query appId failed."); - return false; - } + ZLOGW("query appId failed."); + return false; } + if (metaData.appType.compare("default") == 0) { ZLOGD("default, don't check sync permission."); return true; diff --git a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp index 920c5cfb9..629267e03 100644 --- a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp +++ b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp @@ -1048,6 +1048,54 @@ Status KvStoreMetaManager::QueryKvStoreMetaDataByDeviceIdAndAppId(const std::str return Status::ERROR; } +Status KvStoreMetaManager::QueryKvStoreLocalMetaDataByAppId(const std::string &devId, const std::string &appId, + KvStoreMetaData &val) +{ + ZLOGD("query local meta start."); + { + std::lock_guard lock(metaMutex_); + auto it = metaData_.find(appId); + if (it != metaData_.end()) { + val = it->second; + return Status::SUCCESS; + } + } + + std::string dbPrefixKey; + std::string prefix = KvStoreMetaRow::KEY_PREFIX; + ConcatWithSharps({prefix, devId}, dbPrefixKey); + static std::once_flag onceFlag; + std::call_once(onceFlag, [&] { + SubscribeMeta(dbPrefixKey,[this](const std::vector &key, + const std::vector &value, CHANGE_FLAG flag) { + KvStoreMetaData metaData; + std::string str(value.begin(), value.end()); + json j = Serializable::ToJson(str); + metaData.Unmarshal(j); + ZLOGD("flag:%{public}d, value:%{public}.10s", flag, metaData.deviceId.c_str()); + for (auto meta : metaData_) { + if (meta.first == metaData.appId) { + meta.second = metaData; + } + } + }); + }); + + auto &metaDelegate = GetMetaKvStore(); + if (metaDelegate == nullptr) { + ZLOGW("get delegate error."); + return Status::ERROR; + } + auto status = QueryKvStoreMetaDataByDeviceIdAndAppId(devId, appId, val); + if (status == Status::SUCCESS) { + std::lock_guard lock(metaMutex_); + metaData_.insert({appId, val}); + return Status::SUCCESS; + } + + return Status::ERROR; +} + Status KvStoreMetaManager::GetKvStoreMeta(const std::vector &metaKey, KvStoreMetaData &metaData) { ZLOGD("begin."); diff --git a/services/distributeddataservice/app/src/kvstore_meta_manager.h b/services/distributeddataservice/app/src/kvstore_meta_manager.h index dc7cdcd8a..a3ccb5996 100644 --- a/services/distributeddataservice/app/src/kvstore_meta_manager.h +++ b/services/distributeddataservice/app/src/kvstore_meta_manager.h @@ -233,6 +233,8 @@ public: Status QueryKvStoreMetaDataByDeviceIdAndAppId(const std::string &devId, const std::string &appId, KvStoreMetaData &val); + Status QueryKvStoreLocalMetaDataByAppId(const std::string &devId, const std::string &appId, KvStoreMetaData &val); + Status GetKvStoreMeta(const std::vector &metaKey, KvStoreMetaData &kvStoreMetaData); bool GetKvStoreMetaDataByBundleName(const std::string &bundleName, KvStoreMetaData &metaData); @@ -293,6 +295,8 @@ private: static MetaDeviceChangeListenerImpl listener_; KvStoreMetaObserver metaObserver_; std::recursive_mutex mutex_; + std::map metaData_; + std::mutex metaMutex_; }; } // namespace DistributedKv } // namespace OHOS -- Gitee From b705a637e6962e6fa6f58bc4e619b6598146f941 Mon Sep 17 00:00:00 2001 From: Hollokin Date: Wed, 23 Mar 2022 15:04:27 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hollokin --- .../adapter/communicator/src/softbus_adapter_standard.cpp | 8 +++++--- .../app/src/kvstore_meta_manager.cpp | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp index 9b2d6c6d4..c6f9e4bc7 100644 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp @@ -282,7 +282,8 @@ std::string SoftBusAdapter::GetDeviceInfo(const std::string &networkId) if (networkId == df.deviceId) { auto udid = GetUdidByNodeId(networkId); auto uuid = GetUuidByNodeId(networkId); - DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(df.deviceName), std::string(df.deviceType)}; + DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(df.deviceName), + std::string(df.deviceType)}; std::pair value = {networkId, dfs}; auto res = this->networkId2DeviceInfo_.insert(std::move(value)); if (!res.second) { @@ -398,7 +399,8 @@ void SoftBusAdapter::UpdateRelationship(const std::string &networkid, const Devi for (const auto& deviceInfo : deviceList) { auto deviceUuid = GetUuidByNodeId(deviceInfo.deviceId); if (deviceUuid == uuid) { - DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(deviceInfo.deviceName), std::string(deviceInfo.deviceType)}; + DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(deviceInfo.deviceName), + std::string(deviceInfo.deviceType)}; std::pair value = {networkid, dfs}; auto res = this->networkId2DeviceInfo_.insert(std::move(value)); if (!res.second) { @@ -469,7 +471,7 @@ std::string SoftBusAdapter::ToNodeID(const std::string& id, const std::string &n auto udid = GetUdidByNodeId(std::string(info[i].networkId)); DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(info[i].deviceName), std::to_string(info[i].deviceTypeId)}; - networkId2DeviceInfo_.insert({info[i].networkId, dfs}); + networkId2DeviceInfo_.insert({ info[i].networkId, dfs }); if (uuid == nodeId || udid == nodeId) { networkId = info[i].networkId; } diff --git a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp index 629267e03..25e02cf55 100644 --- a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp +++ b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp @@ -1063,10 +1063,10 @@ Status KvStoreMetaManager::QueryKvStoreLocalMetaDataByAppId(const std::string &d std::string dbPrefixKey; std::string prefix = KvStoreMetaRow::KEY_PREFIX; - ConcatWithSharps({prefix, devId}, dbPrefixKey); + ConcatWithSharps({ prefix, devId }, dbPrefixKey); static std::once_flag onceFlag; std::call_once(onceFlag, [&] { - SubscribeMeta(dbPrefixKey,[this](const std::vector &key, + SubscribeMeta(dbPrefixKey, [this](const std::vector &key, const std::vector &value, CHANGE_FLAG flag) { KvStoreMetaData metaData; std::string str(value.begin(), value.end()); @@ -1089,7 +1089,7 @@ Status KvStoreMetaManager::QueryKvStoreLocalMetaDataByAppId(const std::string &d auto status = QueryKvStoreMetaDataByDeviceIdAndAppId(devId, appId, val); if (status == Status::SUCCESS) { std::lock_guard lock(metaMutex_); - metaData_.insert({appId, val}); + metaData_.insert({ appId, val }); return Status::SUCCESS; } -- Gitee From 88db438ff21df6917dddfd7635b2334bf115562a Mon Sep 17 00:00:00 2001 From: Hollokin Date: Thu, 24 Mar 2022 09:24:20 +0800 Subject: [PATCH 3/4] modify something about performance Signed-off-by: Hollokin --- .../adapter/communicator/src/softbus_adapter_standard.cpp | 2 +- .../distributeddataservice/app/src/kvstore_meta_manager.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp index c6f9e4bc7..65fb251cc 100644 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp @@ -471,7 +471,7 @@ std::string SoftBusAdapter::ToNodeID(const std::string& id, const std::string &n auto udid = GetUdidByNodeId(std::string(info[i].networkId)); DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(info[i].deviceName), std::to_string(info[i].deviceTypeId)}; - networkId2DeviceInfo_.insert({ info[i].networkId, dfs }); + networkId2DeviceInfo_.insert( { info[i].networkId, dfs } ); if (uuid == nodeId || udid == nodeId) { networkId = info[i].networkId; } diff --git a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp index 25e02cf55..b0c80d1bb 100644 --- a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp +++ b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp @@ -1063,7 +1063,7 @@ Status KvStoreMetaManager::QueryKvStoreLocalMetaDataByAppId(const std::string &d std::string dbPrefixKey; std::string prefix = KvStoreMetaRow::KEY_PREFIX; - ConcatWithSharps({ prefix, devId }, dbPrefixKey); + ConcatWithSharps( { prefix, devId }, dbPrefixKey); static std::once_flag onceFlag; std::call_once(onceFlag, [&] { SubscribeMeta(dbPrefixKey, [this](const std::vector &key, @@ -1089,7 +1089,7 @@ Status KvStoreMetaManager::QueryKvStoreLocalMetaDataByAppId(const std::string &d auto status = QueryKvStoreMetaDataByDeviceIdAndAppId(devId, appId, val); if (status == Status::SUCCESS) { std::lock_guard lock(metaMutex_); - metaData_.insert({ appId, val }); + metaData_.insert( { appId, val } ); return Status::SUCCESS; } -- Gitee From 820331c09cb0610455a7f32dfa23d6e78a47bdb2 Mon Sep 17 00:00:00 2001 From: Hollokin Date: Fri, 25 Mar 2022 14:08:59 +0800 Subject: [PATCH 4/4] modify cache Signed-off-by: Hollokin --- .../communicator/src/app_device_handler.cpp | 4 +- .../communicator/src/app_device_handler.h | 2 +- .../communicator/src/softbus_adapter.h | 5 +- .../src/softbus_adapter_standard.cpp | 64 ++++++++----------- .../include/communicator/commu_types.h | 2 +- .../app/src/kvstore_meta_manager.cpp | 13 ++-- 6 files changed, 43 insertions(+), 47 deletions(-) diff --git a/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp b/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp index 8e6575416..0c84fcb56 100644 --- a/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp +++ b/services/distributeddataservice/adapter/communicator/src/app_device_handler.cpp @@ -84,9 +84,9 @@ std::string AppDeviceHandler::GetUdidByNodeId(const std::string &nodeId) const return softbusAdapter_->GetUdidByNodeId(nodeId); } -void AppDeviceHandler::UpdateRelationship(const std::string &networkid, const DeviceChangeType &type) +void AppDeviceHandler::UpdateRelationship(const DeviceInfo &deviceInfo, const DeviceChangeType &type) { - return softbusAdapter_->UpdateRelationship(networkid, type); + return softbusAdapter_->UpdateRelationship(deviceInfo, type); } std::string AppDeviceHandler::ToUUID(const std::string& id) const diff --git a/services/distributeddataservice/adapter/communicator/src/app_device_handler.h b/services/distributeddataservice/adapter/communicator/src/app_device_handler.h index 12920e2a5..d9f07b9bd 100644 --- a/services/distributeddataservice/adapter/communicator/src/app_device_handler.h +++ b/services/distributeddataservice/adapter/communicator/src/app_device_handler.h @@ -54,7 +54,7 @@ public: static std::string ToBeAnonymous(const std::string &name); private: - void UpdateRelationship(const std::string &networkid, const DeviceChangeType &type); + void UpdateRelationship(const DeviceInfo &deviceInfo, const DeviceChangeType &type); std::shared_ptr softbusAdapter_ {}; }; } // namespace AppDistributedKv diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h b/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h index c7dd50406..5fe96638d 100644 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h @@ -124,7 +124,7 @@ public: int RemoveSessionServerAdapter(const std::string &sessionName) const; - void UpdateRelationship(const std::string &networkid, const DeviceChangeType &type); + void UpdateRelationship(const DeviceInfo &deviceInfo, const DeviceChangeType &type); void InsertSession(const std::string &sessionName); @@ -142,7 +142,7 @@ public: private: std::shared_ptr> GetSemaphore(int32_t sessinId); mutable std::mutex networkMutex_ {}; - mutable std::map networkId2DeviceInfo_ {}; + mutable std::map networkId2DeviceInfo_ {}; DeviceInfo localInfo_ {}; static std::shared_ptr instance_; std::mutex deviceChangeMutex_; @@ -156,6 +156,7 @@ private: ISessionListener sessionListener_ {}; std::mutex statusMutex_ {}; std::map>> sessionsStatus_; + std::mutex deviceCacheMutex_; }; } // namespace AppDistributedKv } // namespace OHOS diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp index 65fb251cc..3169accef 100644 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp @@ -210,7 +210,7 @@ void SoftBusAdapter::NotifyAll(const DeviceInfo &deviceInfo, const DeviceChangeT ZLOGD("high"); std::string uuid = GetUuidByNodeId(deviceInfo.deviceId); ZLOGD("[Notify] to DB from: %{public}s, type:%{public}d", ToBeAnonymous(uuid).c_str(), type); - UpdateRelationship(deviceInfo.deviceId, type); + UpdateRelationship(deviceInfo, type); for (const auto &device : listeners) { if (device == nullptr) { continue; @@ -273,24 +273,23 @@ std::vector SoftBusAdapter::GetDeviceList() const std::string SoftBusAdapter::GetDeviceInfo(const std::string &networkId) { - auto info = networkId2DeviceInfo_.find(networkId); - if (info != networkId2DeviceInfo_.end()) { - return info->second.deviceType; + { + std::lock_guard lock(deviceCacheMutex_); + auto info = networkId2DeviceInfo_.find(networkId); + if (info != networkId2DeviceInfo_.end()) { + return info->second.deviceType; + } } std::vector devices = GetDeviceList(); - for (const auto &df : devices) { - if (networkId == df.deviceId) { + for (const auto &device : devices) { + if (networkId == device.deviceId) { auto udid = GetUdidByNodeId(networkId); auto uuid = GetUuidByNodeId(networkId); - DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(df.deviceName), - std::string(df.deviceType)}; - std::pair value = {networkId, dfs}; - auto res = this->networkId2DeviceInfo_.insert(std::move(value)); - if (!res.second) { - ZLOGW("insert failed."); - break; - } - return df.deviceType; + DeviceCacheInfo cacheInfo = {uuid, udid, device.deviceName, device.deviceType}; + std::pair value = {networkId, cacheInfo}; + std::lock_guard lock(deviceCacheMutex_); + networkId2DeviceInfo_.insert(std::move(value)); + return device.deviceType; } } ZLOGE("Get deviceType failed."); @@ -381,33 +380,27 @@ std::vector SoftBusAdapter::GetRemoteNodesBasicInfo() const return dis; } -void SoftBusAdapter::UpdateRelationship(const std::string &networkid, const DeviceChangeType &type) +void SoftBusAdapter::UpdateRelationship(const DeviceInfo &deviceInfo, const DeviceChangeType &type) { - auto uuid = GetUuidByNodeId(networkid); - auto udid = GetUdidByNodeId(networkid); + auto uuid = GetUuidByNodeId(deviceInfo.deviceId); + auto udid = GetUdidByNodeId(deviceInfo.deviceId); + auto networkId = ToNodeID("", deviceInfo.deviceId); lock_guard lock(networkMutex_); switch (type) { case DeviceChangeType::DEVICE_OFFLINE: { - auto size = this->networkId2DeviceInfo_.erase(networkid); + std::lock_guard lock(deviceCacheMutex_); + auto size = this->networkId2DeviceInfo_.erase(networkId); if (size == 0) { - ZLOGW("not found id:%{public}s.", SoftBusAdapter::ToBeAnonymous(networkid).c_str()); + ZLOGW("not found id:%{public}s.", SoftBusAdapter::ToBeAnonymous(networkId).c_str()); } break; } case DeviceChangeType::DEVICE_ONLINE: { - std::vector deviceList = GetDeviceList(); - for (const auto& deviceInfo : deviceList) { - auto deviceUuid = GetUuidByNodeId(deviceInfo.deviceId); - if (deviceUuid == uuid) { - DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(deviceInfo.deviceName), - std::string(deviceInfo.deviceType)}; - std::pair value = {networkid, dfs}; - auto res = this->networkId2DeviceInfo_.insert(std::move(value)); - if (!res.second) { - ZLOGW("insert failed."); - } - break; - } + DeviceCacheInfo cacheInfo = {uuid, udid, deviceInfo.deviceName, deviceInfo.deviceType}; + { + std::lock_guard lock(deviceCacheMutex_); + std::pair value = {networkId, cacheInfo}; + this->networkId2DeviceInfo_.insert(std::move(value)); } break; } @@ -469,9 +462,8 @@ std::string SoftBusAdapter::ToNodeID(const std::string& id, const std::string &n } auto uuid = GetUuidByNodeId(std::string(info[i].networkId)); auto udid = GetUdidByNodeId(std::string(info[i].networkId)); - DeviceCacheInfos dfs = {std::string(uuid), std::string(udid), std::string(info[i].deviceName), - std::to_string(info[i].deviceTypeId)}; - networkId2DeviceInfo_.insert( { info[i].networkId, dfs } ); + DeviceCacheInfo cacheInfo = {uuid, udid, info[i].deviceName, std::to_string(info[i].deviceTypeId)}; + networkId2DeviceInfo_.insert({ info[i].networkId, cacheInfo }); if (uuid == nodeId || udid == nodeId) { networkId = info[i].networkId; } diff --git a/services/distributeddataservice/adapter/include/communicator/commu_types.h b/services/distributeddataservice/adapter/include/communicator/commu_types.h index 7a1d7d7c9..3b694a96a 100644 --- a/services/distributeddataservice/adapter/include/communicator/commu_types.h +++ b/services/distributeddataservice/adapter/include/communicator/commu_types.h @@ -26,7 +26,7 @@ struct API_EXPORT DeviceInfo { std::string deviceType; }; -struct API_EXPORT DeviceCacheInfos { +struct API_EXPORT DeviceCacheInfo { std::string uuid; std::string udid; std::string deviceName; diff --git a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp index b0c80d1bb..95a907fdc 100644 --- a/services/distributeddataservice/app/src/kvstore_meta_manager.cpp +++ b/services/distributeddataservice/app/src/kvstore_meta_manager.cpp @@ -864,9 +864,9 @@ Status KvStoreMetaManager::CheckSyncPermission(const std::string &userId, const return Status::ERROR; } KvStoreMetaData localMeta; - auto queryStatus = QueryKvStoreMetaDataByDeviceIdAndAppId(localId, appId, localMeta); + auto queryStatus = QueryKvStoreLocalMetaDataByAppId(localId, appId, localMeta); if (queryStatus != Status::SUCCESS) { - ZLOGE("get kvstore by deviceId and appId empty."); + ZLOGE("get kvstore by appId empty."); return Status::ERROR; } @@ -1063,7 +1063,7 @@ Status KvStoreMetaManager::QueryKvStoreLocalMetaDataByAppId(const std::string &d std::string dbPrefixKey; std::string prefix = KvStoreMetaRow::KEY_PREFIX; - ConcatWithSharps( { prefix, devId }, dbPrefixKey); + ConcatWithSharps({ prefix, devId }, dbPrefixKey); static std::once_flag onceFlag; std::call_once(onceFlag, [&] { SubscribeMeta(dbPrefixKey, [this](const std::vector &key, @@ -1075,7 +1075,10 @@ Status KvStoreMetaManager::QueryKvStoreLocalMetaDataByAppId(const std::string &d ZLOGD("flag:%{public}d, value:%{public}.10s", flag, metaData.deviceId.c_str()); for (auto meta : metaData_) { if (meta.first == metaData.appId) { - meta.second = metaData; + { + std::lock_guard lock(metaMutex_); + meta.second = metaData; + } } } }); @@ -1089,7 +1092,7 @@ Status KvStoreMetaManager::QueryKvStoreLocalMetaDataByAppId(const std::string &d auto status = QueryKvStoreMetaDataByDeviceIdAndAppId(devId, appId, val); if (status == Status::SUCCESS) { std::lock_guard lock(metaMutex_); - metaData_.insert( { appId, val } ); + metaData_.insert({ appId, val }); return Status::SUCCESS; } -- Gitee