From: ilho kim Date: Wed, 8 Feb 2023 06:37:28 +0000 (+0900) Subject: Delay Creation of cache if backup database is exist X-Git-Tag: accepted/tizen/unified/20230310.062643~8 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git;a=commitdiff_plain;h=4bf9cff685617becd750141dd39c684fedf3c440 Delay Creation of cache if backup database is exist If the backup database created during pkg_upgrade remains due to power off the backup database will be restored in the next pkg_upgrade In this case, the package information of the database and cache may be different Change-Id: I3b17a659cdaeccd3fc2c01224336f771b4bd7f5f Signed-off-by: ilho kim --- diff --git a/src/server/database/cache_db_handler.cc b/src/server/database/cache_db_handler.cc index af61c81..ae4e366 100644 --- a/src/server/database/cache_db_handler.cc +++ b/src/server/database/cache_db_handler.cc @@ -31,11 +31,30 @@ CacheDBHandler::CacheDBHandler(uid_t uid, int pid) CacheDBHandler::~CacheDBHandler() {} +bool CacheDBHandler::IsBackupDBExist() { + auto dbpath_list = GetDBPath(); + for (const auto& [path, uid] : dbpath_list) { + auto backup_db_path = path + ".bck"; + + if (access(backup_db_path.c_str(), F_OK) == 0) { + LOG(WARNING) << "Backup database[" << backup_db_path + << "] created during pkg_upgrade remain, Try to delay cache creation"; + return true; + } + } + + return false; +} + int CacheDBHandler::Execute() { - std::shared_lock s(lock_); SetOpType(pkgmgr_common::DBOperationType::OPERATION_TYPE_READ); SetDBType(pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB); + while (IsBackupDBExist()) + sleep(1); + + std::shared_lock s(lock_); + if (!Connect()) { CacheFlag::SetStatus(CacheFlag::Status::UNPREPARED); return PMINFO_R_ERROR; diff --git a/src/server/database/cache_db_handler.hh b/src/server/database/cache_db_handler.hh index 0e73b0b..6a2450b 100644 --- a/src/server/database/cache_db_handler.hh +++ b/src/server/database/cache_db_handler.hh @@ -42,6 +42,9 @@ class EXPORT_API CacheDBHandler : public AbstractDBHandler { pkgmgrinfo_filter_x* filter_ = nullptr; std::vector> handle_list_; uid_t uid_; + + private: + bool IsBackupDBExist(); }; } // namespace database