From 94a13f5548786dd9e9c07acca86b8a982df8cd52 Mon Sep 17 00:00:00 2001 From: li-tiangang4 Date: Tue, 24 Sep 2024 13:56:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93crash=E5=9C=BA?= =?UTF-8?q?=E6=99=AF=E4=B8=8B=E5=8F=AA=E6=81=A2=E5=A4=8D=E4=B8=8A=E7=BA=BF?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=95=B0=E6=8D=AE=EF=BC=8C=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E7=9E=AC=E6=97=B6=E5=86=85=E5=AD=98=E8=B6=85=E5=A4=A7=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E5=9B=9E=E5=90=885.0.1-release?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: li-tiangang4 --- .../include/utils/dh_context.h | 2 + .../capability_info_manager.cpp | 44 +++++++++--------- .../src/resourcemanager/db_adapter.cpp | 5 +- .../src/resourcemanager/meta_info_manager.cpp | 46 +++++++++---------- .../resourcemanager/version_info_manager.cpp | 41 ++++++++--------- .../src/utils/dh_context.cpp | 22 ++++++++- .../src/version_info_manager_test.cpp | 6 ++- 7 files changed, 93 insertions(+), 73 deletions(-) diff --git a/services/distributedhardwarefwkservice/include/utils/dh_context.h b/services/distributedhardwarefwkservice/include/utils/dh_context.h index 8df0adcb..6ba45822 100644 --- a/services/distributedhardwarefwkservice/include/utils/dh_context.h +++ b/services/distributedhardwarefwkservice/include/utils/dh_context.h @@ -84,6 +84,8 @@ public: void AddRealTimeOnlineDeviceNetworkId(const std::string &networkId); void DeleteRealTimeOnlineDeviceNetworkId(const std::string &networkId); size_t GetRealTimeOnlineDeviceCount(); + void GetOnlineDeviceUdidHash(std::vector &udidHashVec); + void GetOnlineDeviceDeviceId(std::vector &deviceIdVec); /* DeviceId is which is hashed by sha256 */ std::string GetUUIDByDeviceId(const std::string &deviceId); /** diff --git a/services/distributedhardwarefwkservice/src/resourcemanager/capability_info_manager.cpp b/services/distributedhardwarefwkservice/src/resourcemanager/capability_info_manager.cpp index 31a79ce8..172b1931 100644 --- a/services/distributedhardwarefwkservice/src/resourcemanager/capability_info_manager.cpp +++ b/services/distributedhardwarefwkservice/src/resourcemanager/capability_info_manager.cpp @@ -129,7 +129,7 @@ int32_t CapabilityInfoManager::SyncDeviceInfoFromDB(const std::string &deviceId) return ERR_DH_FWK_RESOURCE_DB_ADAPTER_OPERATION_FAIL; } if (dataVector.size() == 0 || dataVector.size() > MAX_DB_RECORD_SIZE) { - DHLOGE("DataVector size is invalid!"); + DHLOGE("dataVector size: %{public}zu is invalid, maybe empty or too large.", dataVector.size()); return ERR_DH_FWK_RESOURCE_RES_DB_DATA_INVALID; } for (const auto &data : dataVector) { @@ -151,32 +151,32 @@ int32_t CapabilityInfoManager::SyncRemoteCapabilityInfos() DHLOGE("dbAdapterPtr_ is null"); return ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL; } - std::vector dataVector; - if (dbAdapterPtr_->GetDataByKeyPrefix("", dataVector) != DH_FWK_SUCCESS) { - DHLOGE("Query all data from DB failed"); - return ERR_DH_FWK_RESOURCE_DB_ADAPTER_OPERATION_FAIL; - } - if (dataVector.size() == 0 || dataVector.size() > MAX_DB_RECORD_SIZE) { - DHLOGE("DataVector size is invalid!"); - return ERR_DH_FWK_RESOURCE_RES_DB_DATA_INVALID; - } - for (const auto &data : dataVector) { - std::shared_ptr capabilityInfo; - if (GetCapabilityByValue(data, capabilityInfo) != DH_FWK_SUCCESS) { - DHLOGE("Get capability ptr by value failed"); + std::vector deviceIdVec; + DHContext::GetInstance().GetOnlineDeviceDeviceId(deviceIdVec); + for (const auto &deviceId : deviceIdVec) { + std::vector dataVector; + if (dbAdapterPtr_->GetDataByKeyPrefix(deviceId, dataVector) != DH_FWK_SUCCESS) { + DHLOGE("Query the deviceId: %{public}s data from DB failed", GetAnonyString(deviceId).c_str()); continue; } - const std::string &deviceId = capabilityInfo->GetDeviceId(); - const std::string &localDeviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; - if (deviceId.compare(localDeviceId) == 0) { - DHLOGE("local device info not need sync from db"); + if (dataVector.empty() || dataVector.size() > MAX_DB_RECORD_SIZE) { + DHLOGE("dataVector size: %{public}zu is invalid, maybe empty or too large.", dataVector.size()); continue; } - if (!DHContext::GetInstance().IsDeviceOnline(DHContext::GetInstance().GetUUIDByDeviceId(deviceId))) { - DHLOGE("offline device, no need sync to memory, deviceId : %{public}s ", GetAnonyString(deviceId).c_str()); - continue; + for (const auto &data : dataVector) { + std::shared_ptr capabilityInfo; + if (GetCapabilityByValue(data, capabilityInfo) != DH_FWK_SUCCESS) { + DHLOGE("Get capability ptr by value failed"); + continue; + } + const std::string &deviceId = capabilityInfo->GetDeviceId(); + const std::string &localDeviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; + if (deviceId.compare(localDeviceId) == 0) { + DHLOGE("local device info not need sync from db"); + continue; + } + globalCapInfoMap_[capabilityInfo->GetKey()] = capabilityInfo; } - globalCapInfoMap_[capabilityInfo->GetKey()] = capabilityInfo; } return DH_FWK_SUCCESS; } diff --git a/services/distributedhardwarefwkservice/src/resourcemanager/db_adapter.cpp b/services/distributedhardwarefwkservice/src/resourcemanager/db_adapter.cpp index 5c17e80a..0f6cd79f 100644 --- a/services/distributedhardwarefwkservice/src/resourcemanager/db_adapter.cpp +++ b/services/distributedhardwarefwkservice/src/resourcemanager/db_adapter.cpp @@ -284,12 +284,11 @@ int32_t DBAdapter::GetDataByKeyPrefix(const std::string &keyPrefix, std::vector< #endif } if (status != DistributedKv::Status::SUCCESS) { - DHLOGE("Query data by keyPrefix failed, prefix: %{public}s", - GetAnonyString(keyPrefix).c_str()); + DHLOGE("Query data by keyPrefix failed, prefix: %{public}s", GetAnonyString(keyPrefix).c_str()); return ERR_DH_FWK_RESOURCE_KV_STORAGE_OPERATION_FAIL; } if (allEntries.size() == 0 || allEntries.size() > MAX_DB_RECORD_SIZE) { - DHLOGE("AllEntries size is invalid!"); + DHLOGE("AllEntries size: %{public}zu is invalid, maybe empty or too large.", allEntries.size()); return ERR_DH_FWK_PARA_INVALID; } for (const auto& item : allEntries) { diff --git a/services/distributedhardwarefwkservice/src/resourcemanager/meta_info_manager.cpp b/services/distributedhardwarefwkservice/src/resourcemanager/meta_info_manager.cpp index 733a2e20..2f8fadd8 100644 --- a/services/distributedhardwarefwkservice/src/resourcemanager/meta_info_manager.cpp +++ b/services/distributedhardwarefwkservice/src/resourcemanager/meta_info_manager.cpp @@ -165,7 +165,7 @@ int32_t MetaInfoManager::SyncMetaInfoFromDB(const std::string &udidHash) return ERR_DH_FWK_RESOURCE_DB_ADAPTER_OPERATION_FAIL; } if (dataVector.size() == 0 || dataVector.size() > MAX_DB_RECORD_SIZE) { - DHLOGE("DataVector size is invalid!"); + DHLOGE("dataVector size: %{public}zu is invalid, maybe empty or too large.", dataVector.size()); return ERR_DH_FWK_RESOURCE_RES_DB_DATA_INVALID; } for (const auto &data : dataVector) { @@ -187,34 +187,32 @@ int32_t MetaInfoManager::SyncRemoteMetaInfos() DHLOGE("dbAdapterPtr_ is null"); return ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL; } - std::vector dataVector; - if (dbAdapterPtr_->GetDataByKeyPrefix("", dataVector) != DH_FWK_SUCCESS) { - DHLOGE("Query all Metadata from DB failed"); - return ERR_DH_FWK_RESOURCE_DB_ADAPTER_OPERATION_FAIL; - } - if (dataVector.size() == 0 || dataVector.size() > MAX_DB_RECORD_SIZE) { - DHLOGE("DataVector size is invalid!"); - return ERR_DH_FWK_RESOURCE_RES_DB_DATA_INVALID; - } - for (const auto &data : dataVector) { - std::shared_ptr metaCapInfo; - if (GetMetaCapByValue(data, metaCapInfo) != DH_FWK_SUCCESS) { - DHLOGE("Get Metainfo ptr by value failed"); + std::vector udidHashVec; + DHContext::GetInstance().GetOnlineDeviceUdidHash(udidHashVec); + for (const auto &udidHash : udidHashVec) { + std::vector dataVector; + if (dbAdapterPtr_->GetDataByKeyPrefix(udidHash, dataVector) != DH_FWK_SUCCESS) { + DHLOGE("Query the udidHash: %{public}s data from DB failed", GetAnonyString(udidHash).c_str()); continue; } - const std::string &udidHash = metaCapInfo->GetUdidHash(); - const std::string &localUdidHash = DHContext::GetInstance().GetDeviceInfo().udidHash; - if (udidHash.compare(localUdidHash) == 0) { - DHLOGE("device MetaInfo not need sync from db"); + if (dataVector.empty() || dataVector.size() > MAX_DB_RECORD_SIZE) { + DHLOGE("dataVector size: %{public}zu is invalid, maybe empty or too large.", dataVector.size()); continue; } - if (!DHContext::GetInstance().IsDeviceOnline( - DHContext::GetInstance().GetUUIDByDeviceId(metaCapInfo->GetDeviceId()))) { - DHLOGE("offline device, no need sync to memory, udidHash : %{public}s", - GetAnonyString(metaCapInfo->GetUdidHash()).c_str()); - continue; + for (const auto &data : dataVector) { + std::shared_ptr metaCapInfo; + if (GetMetaCapByValue(data, metaCapInfo) != DH_FWK_SUCCESS) { + DHLOGE("Get Metainfo ptr by value failed"); + continue; + } + const std::string &udidHash = metaCapInfo->GetUdidHash(); + const std::string &localUdidHash = DHContext::GetInstance().GetDeviceInfo().udidHash; + if (udidHash.compare(localUdidHash) == 0) { + DHLOGE("device MetaInfo not need sync from db"); + continue; + } + globalMetaInfoMap_[metaCapInfo->GetKey()] = metaCapInfo; } - globalMetaInfoMap_[metaCapInfo->GetKey()] = metaCapInfo; } return DH_FWK_SUCCESS; } diff --git a/services/distributedhardwarefwkservice/src/resourcemanager/version_info_manager.cpp b/services/distributedhardwarefwkservice/src/resourcemanager/version_info_manager.cpp index 708aa47b..960c9d66 100644 --- a/services/distributedhardwarefwkservice/src/resourcemanager/version_info_manager.cpp +++ b/services/distributedhardwarefwkservice/src/resourcemanager/version_info_manager.cpp @@ -218,32 +218,31 @@ int32_t VersionInfoManager::SyncRemoteVersionInfos() DHLOGE("dbAdapterPtr_ is null"); return ERR_DH_FWK_RESOURCE_DB_ADAPTER_POINTER_NULL; } - std::vector dataVector; - if (dbAdapterPtr_->GetDataByKeyPrefix("", dataVector) != DH_FWK_SUCCESS) { - DHLOGE("Query all data from DB failed"); - return ERR_DH_FWK_RESOURCE_DB_ADAPTER_OPERATION_FAIL; - } - if (dataVector.size() == 0 || dataVector.size() > MAX_DB_RECORD_SIZE) { - DHLOGE("DataVector Size is invalid!"); - return ERR_DH_FWK_RESOURCE_RES_DB_DATA_INVALID; - } - for (const auto &data : dataVector) { - VersionInfo versionInfo; - if (versionInfo.FromJsonString(data) != DH_FWK_SUCCESS) { + std::vector deviceIdVec; + DHContext::GetInstance().GetOnlineDeviceDeviceId(deviceIdVec); + for (const auto &deviceId : deviceIdVec) { + std::vector dataVector; + if (dbAdapterPtr_->GetDataByKeyPrefix(deviceId, dataVector) != DH_FWK_SUCCESS) { + DHLOGE("Query the deviceId: %{public}s data from DB failed", GetAnonyString(deviceId).c_str()); continue; } - const std::string &deviceId = versionInfo.deviceId; - const std::string &localDeviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; - if (deviceId.compare(localDeviceId) == 0) { - DHLOGE("Local device info not need sync from db"); + if (dataVector.empty() || dataVector.size() > MAX_DB_RECORD_SIZE) { + DHLOGE("dataVector size: %{public}zu is invalid, maybe empty or too large.", dataVector.size()); continue; } - if (!DHContext::GetInstance().IsDeviceOnline(deviceId)) { - DHLOGE("Offline device, no need sync to memory, deviceId : %{public}s ", - GetAnonyString(deviceId).c_str()); - continue; + for (const auto &data : dataVector) { + VersionInfo versionInfo; + if (versionInfo.FromJsonString(data) != DH_FWK_SUCCESS) { + continue; + } + const std::string &deviceId = versionInfo.deviceId; + const std::string &localDeviceId = DHContext::GetInstance().GetDeviceInfo().deviceId; + if (deviceId.compare(localDeviceId) == 0) { + DHLOGE("Local device info not need sync from db"); + continue; + } + UpdateVersionCache(versionInfo); } - UpdateVersionCache(versionInfo); } return DH_FWK_SUCCESS; } diff --git a/services/distributedhardwarefwkservice/src/utils/dh_context.cpp b/services/distributedhardwarefwkservice/src/utils/dh_context.cpp index 866591f9..3f7d6465 100644 --- a/services/distributedhardwarefwkservice/src/utils/dh_context.cpp +++ b/services/distributedhardwarefwkservice/src/utils/dh_context.cpp @@ -13,12 +13,14 @@ * limitations under the License. */ +#include "dh_context.h" + #include -#include "anonymous_string.h" #include "cJSON.h" + +#include "anonymous_string.h" #include "constants.h" -#include "dh_context.h" #include "dh_utils_tool.h" #include "distributed_hardware_errno.h" #include "distributed_hardware_log.h" @@ -259,6 +261,22 @@ std::string DHContext::GetNetworkIdByDeviceId(const std::string &deviceId) return networkId; } +void DHContext::GetOnlineDeviceUdidHash(std::vector &udidHashVec) +{ + std::unique_lock lock(onlineDevMutex_); + for (auto iter = devIdEntrySet_.begin(); iter != devIdEntrySet_.end(); iter++) { + udidHashVec.push_back(iter->udidHash); + } +} + +void DHContext::GetOnlineDeviceDeviceId(std::vector &deviceIdVec) +{ + std::unique_lock lock(onlineDevMutex_); + for (auto iter = devIdEntrySet_.begin(); iter != devIdEntrySet_.end(); iter++) { + deviceIdVec.push_back(iter->deviceId); + } +} + std::string DHContext::GetDeviceIdByDBGetPrefix(const std::string &prefix) { std::string id = ""; diff --git a/services/distributedhardwarefwkservice/test/unittest/common/versioninfomanager/versioninfomanager/src/version_info_manager_test.cpp b/services/distributedhardwarefwkservice/test/unittest/common/versioninfomanager/versioninfomanager/src/version_info_manager_test.cpp index 8a60817f..145fea41 100644 --- a/services/distributedhardwarefwkservice/test/unittest/common/versioninfomanager/versioninfomanager/src/version_info_manager_test.cpp +++ b/services/distributedhardwarefwkservice/test/unittest/common/versioninfomanager/versioninfomanager/src/version_info_manager_test.cpp @@ -308,12 +308,16 @@ HWTEST_F(VersionInfoManagerTest, SyncRemoteVersionInfos_001, TestSize.Level0) */ HWTEST_F(VersionInfoManagerTest, SyncRemoteVersionInfos_002, TestSize.Level0) { + std::string udid = "udid_123456"; + std::string uuid = "uuid_123456"; + std::string networkId = "networkId_123456"; + DHContext::GetInstance().AddOnlineDevice(udid, uuid, networkId); std::string appId; std::string storeId; std::shared_ptr changeListener = nullptr; VersionInfoManager::GetInstance()->dbAdapterPtr_ = std::make_shared(appId, storeId, changeListener); int32_t ret = VersionInfoManager::GetInstance()->SyncRemoteVersionInfos(); - EXPECT_EQ(ERR_DH_FWK_RESOURCE_DB_ADAPTER_OPERATION_FAIL, ret); + EXPECT_EQ(DH_FWK_SUCCESS, ret); } /** -- Gitee