From 1d9847ad1945c74d7d8d2aeda3ff3d208098db3a Mon Sep 17 00:00:00 2001 From: tangfan Date: Mon, 4 Jul 2022 21:11:12 +0800 Subject: [PATCH 1/2] Remove non-exist data in DB when init Signed-off-by: tangfan --- .../local_hardware_manager.h | 1 + .../local_hardware_manager.cpp | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/local_hardware_manager.h b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/local_hardware_manager.h index 1d75f085..d55077bd 100644 --- a/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/local_hardware_manager.h +++ b/services/distributedhardwarefwkserviceimpl/include/localhardwaremanager/local_hardware_manager.h @@ -43,6 +43,7 @@ public: private: void QueryLocalHardware(const DHType dhType, IHardwareHandler *hardwareHandler); void AddLocalCapabilityInfo(const std::vector &dhItems, const DHType dhType); + void RemoveNonExistCapabilityInfo(); private: std::map compToolFuncsMap_; diff --git a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp index 1eaec6e6..a9a1f0bd 100644 --- a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp @@ -64,6 +64,9 @@ void LocalHardwareManager::Init() hardwareHandler->RegisterPluginListener(listener); } } + + // Remove the non-exist data in database when device restart or other exception situation + RemoveNonExistCapabilityInfo(); } void LocalHardwareManager::UnInit() @@ -106,5 +109,31 @@ void LocalHardwareManager::AddLocalCapabilityInfo(const std::vector &dhI } CapabilityInfoManager::GetInstance()->AddCapability(capabilityInfos); } + +void LocalHardwareManager::RemoveNonExistCapabilityInfo() +{ + DHLOGI("start"); + CapabilityInfoMap allCapabilityInfoMap; + CapabilityInfoManager::GetInstance()->GetDataByKeyPrefix("", allCapabilityInfoMap); + if (allCapabilityInfoMap.empty()) { + DHLOGE("allDataMap from DB is empty"); + return; + } + for (auto capabilityInfo : allCapabilityInfoMap) { + std::shared_ptr capabilityValue = capabilityInfo.second; + DHLOGI("The key in allCapabilityInfoMap is %s", capabilityValue->GetAnonymousKey().c_str()); + if (capabilityValue == nullptr) { + DHLOGE("capabilityInfo value is nullptr, key: %s", capabilityValue->GetAnonymousKey().c_str()); + return; + } + if (!CapabilityInfoManager::GetInstance()->HasCapability(capabilityValue->GetDeviceId(), + capabilityValue->GetDHId())) { + DHLOGI("AllCapabilityInfoMap is not found this key, so it is previous data. It should be removed, key: %s", + capabilityValue->GetAnonymousKey().c_str()); + CapabilityInfoManager::GetInstance()->RemoveCapabilityInfoByKey(capabilityValue->GetKey()); + } + } + DHLOGI("end"); +} } // namespace DistributedHardware } // namespace OHOS -- Gitee From a2a06233b44a7214eda24ec168faf1c826e729dc Mon Sep 17 00:00:00 2001 From: tangfan Date: Mon, 4 Jul 2022 21:18:17 +0800 Subject: [PATCH 2/2] remove non-exist data in DB when init Signed-off-by: tangfan --- .../src/localhardwaremanager/local_hardware_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp index a9a1f0bd..a953f02a 100644 --- a/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp +++ b/services/distributedhardwarefwkserviceimpl/src/localhardwaremanager/local_hardware_manager.cpp @@ -121,11 +121,11 @@ void LocalHardwareManager::RemoveNonExistCapabilityInfo() } for (auto capabilityInfo : allCapabilityInfoMap) { std::shared_ptr capabilityValue = capabilityInfo.second; - DHLOGI("The key in allCapabilityInfoMap is %s", capabilityValue->GetAnonymousKey().c_str()); if (capabilityValue == nullptr) { DHLOGE("capabilityInfo value is nullptr, key: %s", capabilityValue->GetAnonymousKey().c_str()); return; } + DHLOGI("The key in allCapabilityInfoMap is %s", capabilityValue->GetAnonymousKey().c_str()); if (!CapabilityInfoManager::GetInstance()->HasCapability(capabilityValue->GetDeviceId(), capabilityValue->GetDHId())) { DHLOGI("AllCapabilityInfoMap is not found this key, so it is previous data. It should be removed, key: %s", -- Gitee