diff --git a/services/distributedhardwarefwkservice/include/utils/dh_context.h b/services/distributedhardwarefwkservice/include/utils/dh_context.h index 8df0adcb86f31d26fdb8c27a80ec94b7bee53dc9..6ba458223bea21d414360bf30afb90d2bebaf847 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 31a79ce8a1208125f570fb27549a8480efa1f41d..172b1931f16f361ea30ee0a9e36255dbb70a65c3 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 5c17e80af6272df7b24d93abad31cd5a21c4bbff..0f6cd79f752ffd513b867be5ad9d0a789cb4f554 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 733a2e20b1e02ea0e538dfc0f0490c9ba49fc795..2f8fadd83bd5d6874927fe02591eaa02b5065450 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 708aa47baa7e7ad717662354cea1351d2c61691b..960c9d668f109b8d4222ee456ac10c9903fcccb8 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 866591f98091af0357efcd073b39bccf721f901a..3f7d646580d8c2a95aa5c7eabcd2dc2dbdc2a9ff 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 8a60817f99480d296cad8f10e0728bfc9ff3da54..145fea41d44b5baaa73ecbd271a8bbcb5c7c2cad 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); } /**