From 6f642129f082c5a8b3dedb87c9154582c897a7c5 Mon Sep 17 00:00:00 2001 From: g00613291 Date: Wed, 28 Aug 2024 17:05:36 +0800 Subject: [PATCH] fix catch exception Signed-off-by: g00613291 --- .../native/backup_ext/include/ext_extension.h | 3 + .../native/backup_ext/src/ext_backup_js.cpp | 23 +++- .../native/backup_ext/src/ext_extension.cpp | 97 ++++++++----- .../backup_ext/src/sub_ext_extension.cpp | 128 ++++++++++++------ .../backup_kit_inner/src/service_proxy.cpp | 4 +- .../js/backup/session_backup_n_exporter.cpp | 55 ++++++-- .../session_incremental_backup_n_exporter.cpp | 58 +++++--- .../js/backup/session_restore_n_exporter.cpp | 67 +++++---- services/backup_sa/src/module_ipc/service.cpp | 15 +- .../src/module_ipc/service_incremental.cpp | 4 + .../backup_ext/ext_backup_js_test.cpp | 26 +++- .../b_jsonutil/b_jsonutil_test.cpp | 14 +- utils/include/b_error/b_error.h | 41 ++++++ utils/include/b_jsonutil/b_jsonutil.h | 4 +- utils/include/b_radar/b_radar.h | 10 ++ utils/src/b_error/b_error.cpp | 19 +++ utils/src/b_jsonutil/b_jsonutil.cpp | 4 +- utils/src/b_radar/b_radar.cpp | 6 +- 18 files changed, 420 insertions(+), 158 deletions(-) diff --git a/frameworks/native/backup_ext/include/ext_extension.h b/frameworks/native/backup_ext/include/ext_extension.h index 6f7f66cda..83939d169 100644 --- a/frameworks/native/backup_ext/include/ext_extension.h +++ b/frameworks/native/backup_ext/include/ext_extension.h @@ -27,6 +27,7 @@ #include "b_json/b_json_entity_extension_config.h" #include "b_json/b_json_entity_ext_manage.h" #include "b_json/b_report_entity.h" +#include "b_radar/b_radar.h" #include "ext_backup_js.h" #include "ext_extension_stub.h" #include "i_service.h" @@ -168,6 +169,7 @@ private: void AsyncTaskDoIncrementalBackup(UniqueFd incrementalFd, UniqueFd manifestFd); void AsyncTaskOnIncrementalBackup(); + int DoIncrementalBackupTask(UniqueFd incrementalFd, UniqueFd manifestFd); ErrCode IncrementalBigFileReady(const TarMap &pkgInfo, const vector &bigInfos, sptr proxy); ErrCode BigFileReady(const TarMap &bigFileInfo, sptr proxy); @@ -290,6 +292,7 @@ private: std::atomic onProcessTimeout_ {false}; std::chrono::time_point g_onStart; std::mutex onStartTimeLock_; + AppRadar::DoRestoreInfo radarRestoreInfo_ { 0 }; }; } // namespace OHOS::FileManagement::Backup diff --git a/frameworks/native/backup_ext/src/ext_backup_js.cpp b/frameworks/native/backup_ext/src/ext_backup_js.cpp index 5caa1a8cb..0695c6dd6 100644 --- a/frameworks/native/backup_ext/src/ext_backup_js.cpp +++ b/frameworks/native/backup_ext/src/ext_backup_js.cpp @@ -662,6 +662,16 @@ ErrCode ExtBackupJs::GetBackupInfo(std::function bool { if (!CheckPromise(env, result)) { + bool isExceptionPending; + napi_is_exception_pending(env, &isExceptionPending); + HILOGI("napi exception pending = %{public}d.", isExceptionPending); + if (isExceptionPending) { + string str; + napi_value exception; + DealNapiException(env, exception, str); + callBackInfo->callbackParam(BError(BError::Codes::EXT_THROW_EXCEPTION), str); + return false; + } size_t strLen = 0; napi_status status = napi_get_value_string_utf8(env, result, nullptr, -1, &strLen); if (status != napi_ok) { @@ -866,8 +876,17 @@ ErrCode ExtBackupJs::OnProcess(std::function c auto retParser = [jsRuntime {&jsRuntime_}, callBackInfo {onProcessCallback_}](napi_env env, napi_value result) -> bool { string processStr; - DealNapiStrValue(env, result, processStr); - callBackInfo->onProcessCallback(BError(BError::Codes::OK), processStr); + bool isExceptionPending; + napi_is_exception_pending(env, &isExceptionPending); + HILOGI("napi exception pending = %{public}d.", isExceptionPending); + if (isExceptionPending) { + napi_value exception; + napi_get_and_clear_last_exception(env, &exception); + callBackInfo->onProcessCallback(BError(BError::Codes::EXT_THROW_EXCEPTION), processStr); + } else { + DealNapiStrValue(env, result, processStr); + callBackInfo->onProcessCallback(BError(BError::Codes::OK), processStr); + } return true; }; auto errCode = CallJsMethod("onProcess", jsRuntime_, jsObj_.get(), {}, retParser); diff --git a/frameworks/native/backup_ext/src/ext_extension.cpp b/frameworks/native/backup_ext/src/ext_extension.cpp index c1531e322..8ee2fcbb0 100644 --- a/frameworks/native/backup_ext/src/ext_extension.cpp +++ b/frameworks/native/backup_ext/src/ext_extension.cpp @@ -47,7 +47,6 @@ #include "b_json/b_json_cached_entity.h" #include "b_jsonutil/b_jsonutil.h" #include "b_ohos/startup/backup_para.h" -#include "b_radar/b_radar.h" #include "b_tarball/b_tarball_factory.h" #include "filemgmt_libhilog.h" #include "hitrace_meter.h" @@ -70,6 +69,25 @@ const string MEDIA_LIBRARY_BUNDLE_NAME = "com.ohos.medialibrary.medialibrarydata const string FILE_MANAGER_BUNDLE_NAME = "com.ohos.filepicker"; using namespace std; +static void RecordDoRestoreRes(const std::string &bundleName, const std::string &func, + AppRadar::DoRestoreInfo &restoreInfo) +{ + std::stringstream ss; + ss << "\"bigFileNums\": " << restoreInfo.bigFileNum << ", "; + ss << "\"bigFileSize\": " << restoreInfo.bigFileSize << ", "; + ss << "\"RestoreBigFileTime\": " << restoreInfo.bigFileSpendTime << ", "; + ss << "\"unTarFileNums\": " << restoreInfo.tarFileNum << ", "; + ss << "\"unTarFileSize\": " << restoreInfo.tarFileSize << ", "; + ss << "\"unTarTime\": " << restoreInfo.tarFileSpendTime << ", "; + ss << "\"totalFileNum\": " << restoreInfo.bigFileNum + restoreInfo.tarFileNum << ", "; + ss << "\"totalFileSize\": " << restoreInfo.bigFileSize + restoreInfo.tarFileSize << ", "; + ss << "\"restoreAllFileTime\": " << restoreInfo.totalFileSpendTime; + int32_t err = static_cast(BError::Codes::OK); + AppRadar::Info info (bundleName, "", ss.str()); + AppRadar::GetInstance().RecordRestoreFuncRes(info, func, AppRadar::GetInstance().GetUserId(), + BizStageRestore::BIZ_STAGE_DO_RESTORE, err); +} + static string GetIndexFileRestorePath(const string &bundleName) { if (BFile::EndsWith(bundleName, BConstants::BUNDLE_FILE_MANAGER) && bundleName.size() == BConstants::FM_LEN) { @@ -132,17 +150,17 @@ void BackupExtExtension::VerifyCaller() AppRadar::Info info(bundleName_, "", "{\"reason\":\"Calling tokenType error\"}"); AppRadar::GetInstance().RecordDefaultFuncRes( info, "BackupExtExtension::VerifyCaller", AppRadar::GetInstance().GetUserId(), - BizStageBackup::BIZ_STAGE_PERMISSION_CHECK_FAIL, BError(BError::Codes::OK).GetCode()); + BizStageBackup::BIZ_STAGE_PERMISSION_CHECK_FAIL, BError(BError::Codes::EXT_BROKEN_IPC).GetCode()); throw BError(BError::Codes::EXT_BROKEN_IPC, - string("Calling tokenType is error, token type is ").append(to_string(tokenType))); + string("Calling tokenType is error, token type is ").append(to_string(tokenType))); } if (IPCSkeleton::GetCallingUid() != BConstants::BACKUP_UID) { AppRadar::Info info(bundleName_, "", "{\"reason\":\"Calling uid invalid\"}"); AppRadar::GetInstance().RecordDefaultFuncRes( info, "BackupExtExtension::VerifyCaller", AppRadar::GetInstance().GetUserId(), - BizStageBackup::BIZ_STAGE_PERMISSION_CHECK_FAIL, BError(BError::Codes::OK).GetCode()); + BizStageBackup::BIZ_STAGE_PERMISSION_CHECK_FAIL, BError(BError::Codes::EXT_BROKEN_IPC).GetCode()); throw BError(BError::Codes::EXT_BROKEN_IPC, - string("Calling uid is invalid, calling uid is ").append(to_string(IPCSkeleton::GetCallingUid()))); + string("Calling uid is invalid, calling uid is ").append(to_string(IPCSkeleton::GetCallingUid()))); } } @@ -246,7 +264,6 @@ static string GetReportFileName(const string &fileName) static ErrCode GetIncreFileHandleForSpecialVersion(const string &fileName) { - HILOGI("extension:GetIncreFileHandleForSpecialVersion, filename:%{public}s", fileName.c_str()); ErrCode errCode = ERR_OK; UniqueFd fd = GetFileHandleForSpecialCloneCloud(fileName); if (fd < 0) { @@ -792,12 +809,15 @@ int BackupExtExtension::DoIncrementalRestore() auto extManageInfo = GetExtManageInfo(); std::tuple unPacketRes; ErrCode err = ERR_OK; + auto startTime = std::chrono::system_clock::now(); for (auto item : fileSet) { // 处理要解压的tar文件 off_t tarFileSize = 0; if (ExtractFileExt(item) == "tar" && !IsUserTar(item, extManageInfo, tarFileSize)) { if (extension_->GetExtensionAction() != BConstants::ExtensionAction::RESTORE) { return EPERM; } + radarRestoreInfo_.tarFileNum++; + radarRestoreInfo_.tarFileSize += static_cast(tarFileSize); // REM: 给定version // REM: 解压启动Extension时即挂载好的备份目录中的数据 string path = GetRestoreTempPath(bundleName_); @@ -817,6 +837,9 @@ int BackupExtExtension::DoIncrementalRestore() HILOGI("Application recovered successfully, package path is %{public}s", tarName.c_str()); } } + auto endTime = std::chrono::system_clock::now(); + radarRestoreInfo_.tarFileSpendTime = + std::chrono::duration_cast(endTime - startTime).count(); return err; } @@ -841,7 +864,7 @@ void BackupExtExtension::AsyncTaskBackup(const string config) auto ret = ptr->DoBackup(cache); auto end = std::chrono::system_clock::now(); auto cost = to_string(std::chrono::duration_cast(end - start).count()); - AppRadar::Info info(ptr->bundleName_, "", string("{\"spend_time\":").append(cost).append(string("ms\"}"))); + AppRadar::Info info(ptr->bundleName_, "", string("\"spend_time\":").append(cost).append(string("ms\""))); AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::AsyncTaskBackup", AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_DO_BACKUP, static_cast(ret)); // REM: 处理返回结果 ret @@ -911,6 +934,8 @@ ErrCode BackupExtExtension::RestoreTarForSpecialCloneCloud(const ExtManageInfo & if (untarPath.back() != BConstants::FILE_SEPARATOR_CHAR) { untarPath += BConstants::FILE_SEPARATOR_CHAR; } + HILOGI("Start to untar file = %{public}s, untarPath = %{public}s", GetAnonyPath(item.hashName).c_str(), + GetAnonyPath(untarPath).c_str()); auto [err, fileInfos, errInfos] = UntarFile::GetInstance().UnPacket(tarName, untarPath); if (isDebug_) { endFileInfos_.merge(fileInfos); @@ -939,6 +964,7 @@ ErrCode BackupExtExtension::RestoreFilesForSpecialCloneCloud() auto cache = cachedEntity.Structuralize(); auto info = cache.GetExtManageInfo(); HILOGI("Start do restore for SpecialCloneCloud."); + auto startTime = std::chrono::system_clock::now(); for (auto &item : info) { if (item.hashName.empty()) { HILOGE("Hash name empty"); @@ -946,9 +972,13 @@ ErrCode BackupExtExtension::RestoreFilesForSpecialCloneCloud() } if (item.isUserTar || item.isBigFile) { // 大文件处理 + radarRestoreInfo_.bigFileNum++; + radarRestoreInfo_.bigFileSize += static_cast(item.sta.st_size); RestoreBigFilesForSpecialCloneCloud(item); } else { // 待解压tar文件处理 + radarRestoreInfo_.tarFileNum++; + radarRestoreInfo_.tarFileSize += static_cast(item.sta.st_size); int ret = RestoreTarForSpecialCloneCloud(item); if (isDebug_ && ret != ERR_OK) { errFileInfos_[item.hashName].push_back(ret); @@ -963,6 +993,10 @@ ErrCode BackupExtExtension::RestoreFilesForSpecialCloneCloud() if (!RemoveFile(INDEX_FILE_RESTORE)) { HILOGE("Failed to delete the backup index %{public}s", INDEX_FILE_RESTORE.c_str()); } + auto endTime = std::chrono::system_clock::now(); + radarRestoreInfo_.totalFileSpendTime = + std::chrono::duration_cast(endTime - startTime).count(); + RecordDoRestoreRes(bundleName_, "BackupExtExtension::RestoreFilesForSpecialCloneCloud", radarRestoreInfo_); HILOGI("End do restore for SpecialCloneCloud."); return ERR_OK; } @@ -1023,11 +1057,13 @@ void BackupExtExtension::RestoreBigFiles(bool appendTargetPath) auto cache = cachedEntity.Structuralize(); auto info = cache.GetExtManageInfo(); HILOGI("Start Restore Big Files"); + auto start = std::chrono::system_clock::now(); for (auto &item : info) { if (item.hashName.empty() || (!item.isUserTar && !item.isBigFile)) { continue; } - + radarRestoreInfo_.bigFileNum++; + radarRestoreInfo_.bigFileSize += static_cast(item.sta.st_size); string itemHashName = item.hashName; string itemFileName = item.fileName; // check if item.hasName and fileName need decode by report item attribute @@ -1059,6 +1095,8 @@ void BackupExtExtension::RestoreBigFiles(bool appendTargetPath) RestoreBigFileAfter(filePath, item.sta); } + auto end = std::chrono::system_clock::now(); + radarRestoreInfo_.bigFileSpendTime = std::chrono::duration_cast(end - start).count(); HILOGI("End Restore Big Files"); } @@ -1167,16 +1205,6 @@ void BackupExtExtension::HandleSpecialVersionRestore() } } -void RecordDoRestoreRes(const std::string &bundleName, const std::string &func, int32_t ms) -{ - std::stringstream ss; - ss << "\"spend_time\": \"" << ms << "ms\""; - int32_t err = static_cast(BError::Codes::OK); - AppRadar::Info info (bundleName, "", ss.str()); - AppRadar::GetInstance().RecordRestoreFuncRes(info, func, AppRadar::GetInstance().GetUserId(), - BizStageRestore::BIZ_STAGE_DO_RESTORE, err); -} - void BackupExtExtension::AsyncTaskRestore(std::set fileSet, const std::vector extManageInfo) { @@ -1191,7 +1219,6 @@ void BackupExtExtension::AsyncTaskRestore(std::set fileSet, return; } // 解压 - auto startTime = std::chrono::system_clock::now(); for (auto item : fileSet) { // 处理要解压的tar文件 off_t tarFileSize = 0; if (ExtractFileExt(item) == "tar" && !IsUserTar(item, extManageInfo, tarFileSize)) { @@ -1204,10 +1231,6 @@ void BackupExtExtension::AsyncTaskRestore(std::set fileSet, ptr->extension_->UseFullBackupOnly() && !ptr->extension_->SpecialVersionForCloneAndCloud(); ptr->RestoreBigFiles(appendTargetPath); ptr->DeleteBackupTars(); - auto endTime = std::chrono::system_clock::now(); - auto spendTime = std::chrono::duration_cast(endTime-startTime).count(); - RecordDoRestoreRes(ptr->bundleName_, "BackupExtExtension::AsyncTaskRestore", - static_cast(spendTime)); if (ret == ERR_OK) { ptr->AsyncTaskRestoreForUpgrade(); } else { @@ -1254,16 +1277,16 @@ void BackupExtExtension::AsyncTaskIncrementalRestore() bool appendTargetPath = ptr->extension_->UseFullBackupOnly() && !ptr->extension_->SpecialVersionForCloneAndCloud(); ptr->RestoreBigFiles(appendTargetPath); - // delete 1.tar/manage.json ptr->DeleteBackupIncrementalTars(); if (ptr != nullptr && ptr->isDebug_) { ptr->CheckRestoreFileInfos(); } auto endTime = std::chrono::system_clock::now(); - auto spendTime = std::chrono::duration_cast(endTime-startTime).count(); + ptr->radarRestoreInfo_.totalFileSpendTime = + std::chrono::duration_cast(endTime - startTime).count(); RecordDoRestoreRes(ptr->bundleName_, "BackupExtExtension::AsyncTaskIncrementalRestore", - static_cast(spendTime)); + ptr->radarRestoreInfo_); if (ret == ERR_OK) { HILOGI("after extra, do incremental restore."); ptr->AsyncTaskIncrementalRestoreForUpgrade(); @@ -1875,6 +1898,22 @@ ErrCode BackupExtExtension::IncrementalBigFileReady(const TarMap &pkgInfo, return ret; } +int BackupExtExtension::DoIncrementalBackupTask(UniqueFd incrementalFd, UniqueFd manifestFd) +{ + auto start = std::chrono::system_clock::now(); + vector allFiles; + vector smallFiles; + vector bigFiles; + CompareFiles(move(incrementalFd), move(manifestFd), allFiles, smallFiles, bigFiles); + auto ret = DoIncrementalBackup(allFiles, smallFiles, bigFiles); + auto end = std::chrono::system_clock::now(); + auto cost = to_string(std::chrono::duration_cast(end - start).count()); + AppRadar::Info info(bundleName_, "", string("\"spend_time\":").append(cost).append(string("ms\""))); + AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::AsyncTaskDoIncrementalBackup", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_DO_BACKUP, static_cast(ret)); + return ret; +} + void BackupExtExtension::AsyncTaskDoIncrementalBackup(UniqueFd incrementalFd, UniqueFd manifestFd) { HILOGI("Do IncrementalBackup, start fwk timer begin."); @@ -1901,11 +1940,7 @@ void BackupExtExtension::AsyncTaskDoIncrementalBackup(UniqueFd incrementalFd, Un } close(incrementalFdDup); close(manifestFdDup); - vector allFiles; - vector smallFiles; - vector bigFiles; - ptr->CompareFiles(move(incrementalDupFd), move(manifestDupFd), allFiles, smallFiles, bigFiles); - auto ret = ptr->DoIncrementalBackup(allFiles, smallFiles, bigFiles); + auto ret = ptr->DoIncrementalBackupTask(move(incrementalDupFd), move(manifestDupFd)); ptr->AppIncrementalDone(ret); HILOGI("Incremental backup app done %{public}d", ret); } catch (const BError &e) { diff --git a/frameworks/native/backup_ext/src/sub_ext_extension.cpp b/frameworks/native/backup_ext/src/sub_ext_extension.cpp index 062b667c2..6ed9796af 100644 --- a/frameworks/native/backup_ext/src/sub_ext_extension.cpp +++ b/frameworks/native/backup_ext/src/sub_ext_extension.cpp @@ -220,8 +220,10 @@ ErrCode BackupExtExtension::GetBackupInfo(std::string &result) HILOGE("Failed to get ext extension."); return; } - HILOGI("GetBackupInfo callBackup start. result = %{public}s", result.c_str()); - ptr->backupInfo_ = result; + HILOGI("GetBackupInfo callBackup start. errCode = %{public}d, result = %{public}s", errCode, result.c_str()); + if (errCode == ERR_OK) { + ptr->backupInfo_ = result; + } }; auto ret = ptr->extension_->GetBackupInfo(callBackup); if (ret != ERR_OK) { @@ -267,7 +269,7 @@ std::function BackupExtExtension::OnRestoreCallback( auto spendTime = extensionPtr->GetOnStartTimeCost(); std::stringstream ss; ss << "\"spend_time\": \"" << spendTime << "ms\""; - AppRadar::Info info (extensionPtr->bundleName_, ss.str(), ""); + AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::OnRestoreCallback", AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); } @@ -276,7 +278,7 @@ std::function BackupExtExtension::OnRestoreCallback( extensionPtr->AppDone(errCode); } else { std::string errInfo; - BJsonUtil::BuildRestoreErrInfo(errInfo, errCode, errMsg); + BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, errMsg); extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::FULL_RESTORE, errCode); } extensionPtr->DoClear(); @@ -300,7 +302,7 @@ std::function BackupExtExtension::OnRestoreExCallbac auto spendTime = extensionPtr->GetOnStartTimeCost(); std::stringstream ss; ss << "\"spend_time\": \"" << spendTime << "ms\""; - AppRadar::Info info (extensionPtr->bundleName_, ss.str(), ""); + AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::OnRestoreExCallback", AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); } @@ -318,7 +320,7 @@ std::function BackupExtExtension::OnRestoreExCallbac extensionPtr->DoClear(); } else { std::string errInfo; - BJsonUtil::BuildRestoreErrInfo(errInfo, errCode, restoreRetInfo); + BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, restoreRetInfo); extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::FULL_RESTORE, errCode); extensionPtr->DoClear(); } @@ -376,7 +378,7 @@ std::function BackupExtExtension::IncreOnRestoreExCa extensionPtr->DoClear(); } else { std::string errInfo; - BJsonUtil::BuildRestoreErrInfo(errInfo, errCode, restoreRetInfo); + BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, restoreRetInfo); extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::INCREMENTAL_RESTORE, errCode); extensionPtr->DoClear(); } @@ -396,7 +398,7 @@ std::function BackupExtExtension::IncreOnRestoreCall auto spendTime = extensionPtr->GetOnStartTimeCost(); std::stringstream ss; ss << "\"spend_time\": \"" << spendTime << "ms\""; - AppRadar::Info info (extensionPtr->bundleName_, ss.str(), ""); + AppRadar::Info info (extensionPtr->bundleName_, "", ss.str()); AppRadar::GetInstance().RecordRestoreFuncRes(info, "BackupExtExtension::IncreOnRestoreCallback", AppRadar::GetInstance().GetUserId(), BizStageRestore::BIZ_STAGE_ON_RESTORE, ERR_OK); } @@ -405,7 +407,7 @@ std::function BackupExtExtension::IncreOnRestoreCall extensionPtr->AppIncrementalDone(errCode); } else { std::string errInfo; - BJsonUtil::BuildRestoreErrInfo(errInfo, errCode, errMsg); + BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, errMsg); extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::INCREMENTAL_RESTORE, errCode); } extensionPtr->DoClear(); @@ -434,16 +436,25 @@ std::function BackupExtExtension::OnBackupCall HILOGE("Extension handle have been released"); return; } + extensionPtr->FinishOnProcessTask(); if (errCode == ERR_OK) { auto spendTime = extensionPtr->GetOnStartTimeCost(); - AppRadar::Info info(extensionPtr->bundleName_, "", string("{\"spend_time\":\" "). - append(to_string(spendTime)).append(string("ms\"}"))); + AppRadar::Info info(extensionPtr->bundleName_, "", string("\"spend_time\":\" "). + append(to_string(spendTime)).append(string("ms\""))); AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::OnBackupCallback", AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, static_cast(ERR_OK)); + extensionPtr->AsyncTaskBackup(extensionPtr->extension_->GetUsrConfig()); + return; } - extensionPtr->FinishOnProcessTask(); - extensionPtr->AsyncTaskBackup(extensionPtr->extension_->GetUsrConfig()); + HILOGE("Call extension onBackup failed, errInfo = %{public}s", errMsg.c_str()); + if (!errMsg.empty()) { + std::string errInfo; + BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, errMsg); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::FULL_BACKUP, errCode); + } + extensionPtr->AppDone(errCode); + extensionPtr->DoClear(); }; } @@ -461,21 +472,31 @@ std::function BackupExtExtension::OnBackupExCa HILOGE("Extension handle have been released"); return; } - if (errCode == ERR_OK && !backupExRetInfo.empty()) { - auto spendTime = extensionPtr->GetOnStartTimeCost(); - AppRadar::Info info(extensionPtr->bundleName_, "", string("{\"spend_time\":\" "). - append(to_string(spendTime)).append(string("ms\"}"))); - AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::OnBackupExCallback", - AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, - static_cast(ERR_OK)); - } extensionPtr->extension_->InvokeAppExtMethod(errCode, backupExRetInfo); - if (backupExRetInfo.size()) { - HILOGI("Will notify backup result report"); - extensionPtr->FinishOnProcessTask(); - extensionPtr->AsyncTaskBackup(extensionPtr->extension_->GetUsrConfig()); - extensionPtr->AppResultReport(backupExRetInfo, BackupRestoreScenario::FULL_BACKUP); + if (errCode == ERR_OK) { + if (backupExRetInfo.size()) { + auto spendTime = extensionPtr->GetOnStartTimeCost(); + AppRadar::Info info(extensionPtr->bundleName_, "", string("\"spend_time\":\" "). + append(to_string(spendTime)).append(string("ms\""))); + AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::OnBackupExCallback", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, + static_cast(ERR_OK)); + HILOGI("Will notify backup result report"); + extensionPtr->FinishOnProcessTask(); + extensionPtr->AsyncTaskBackup(extensionPtr->extension_->GetUsrConfig()); + extensionPtr->AppResultReport(backupExRetInfo, BackupRestoreScenario::FULL_BACKUP); + } + return; + } + HILOGE("Call extension onBackupEx failed, errInfo = %{public}s", backupExRetInfo.c_str()); + extensionPtr->FinishOnProcessTask(); + if (!backupExRetInfo.empty()) { + std::string errInfo; + BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, backupExRetInfo); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::FULL_BACKUP, errCode); } + extensionPtr->AppDone(errCode); + extensionPtr->DoClear(); }; } @@ -494,16 +515,25 @@ std::function BackupExtExtension::IncOnBackupC return; } HILOGI("Start GetAppLocalListAndDoIncrementalBackup"); + extPtr->FinishOnProcessTask(); if (errCode == ERR_OK) { auto spendTime = extPtr->GetOnStartTimeCost(); - AppRadar::Info info(extPtr->bundleName_, "", string("{\"spend_time\":\" "). - append(to_string(spendTime)).append(string("ms\"}"))); + AppRadar::Info info(extPtr->bundleName_, "", string("\"spend_time\":\" "). + append(to_string(spendTime)).append(string("ms\""))); AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::IncOnBackupCallback", AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, static_cast(ERR_OK)); + proxy->GetAppLocalListAndDoIncrementalBackup(); + return; } - extPtr->FinishOnProcessTask(); - proxy->GetAppLocalListAndDoIncrementalBackup(); + HILOGE("Call extension IncOnBackup failed, errInfo = %{public}s", errMsg.c_str()); + if (!errMsg.empty()) { + std::string errInfo; + BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, errMsg); + extPtr->AppResultReport(errInfo, BackupRestoreScenario::INCREMENTAL_BACKUP, errCode); + } + extPtr->AppIncrementalDone(errCode); + extPtr->DoClear(); }; } @@ -524,22 +554,32 @@ std::function BackupExtExtension::IncOnBackupE HILOGE("Extension handle have been released"); return; } - if (errCode == ERR_OK && !backupExRetInfo.empty()) { - auto spendTime = extensionPtr->GetOnStartTimeCost(); - AppRadar::Info info(extensionPtr->bundleName_, "", string("{\"spend_time\":\" "). - append(to_string(spendTime)).append(string("ms\"}"))); - AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::IncOnBackupExCallback", - AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, - static_cast(ERR_OK)); - } extensionPtr->extension_->InvokeAppExtMethod(errCode, backupExRetInfo); - if (backupExRetInfo.size()) { - HILOGI("Start GetAppLocalListAndDoIncrementalBackup"); - extensionPtr->FinishOnProcessTask(); - proxy->GetAppLocalListAndDoIncrementalBackup(); - HILOGI("Will notify backup result report"); - extensionPtr->AppResultReport(backupExRetInfo, BackupRestoreScenario::INCREMENTAL_BACKUP); + if (errCode == ERR_OK) { + if (backupExRetInfo.size()) { + auto spendTime = extensionPtr->GetOnStartTimeCost(); + AppRadar::Info info(extensionPtr->bundleName_, "", string("\"spend_time\":\" "). + append(to_string(spendTime)).append(string("ms\""))); + AppRadar::GetInstance().RecordBackupFuncRes(info, "BackupExtExtension::IncOnBackupExCallback", + AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_ON_BACKUP, + static_cast(ERR_OK)); + HILOGI("Start GetAppLocalListAndDoIncrementalBackup"); + extensionPtr->FinishOnProcessTask(); + proxy->GetAppLocalListAndDoIncrementalBackup(); + HILOGI("Will notify backup result report"); + extensionPtr->AppResultReport(backupExRetInfo, BackupRestoreScenario::INCREMENTAL_BACKUP); + } + return; } + HILOGE("Call extension IncOnBackupEx failed, errInfo = %{public}s", backupExRetInfo.c_str()); + extensionPtr->FinishOnProcessTask(); + if (!backupExRetInfo.empty()) { + std::string errInfo; + BJsonUtil::BuildExtensionErrInfo(errInfo, errCode, backupExRetInfo); + extensionPtr->AppResultReport(errInfo, BackupRestoreScenario::INCREMENTAL_BACKUP, errCode); + } + extensionPtr->AppIncrementalDone(errCode); + extensionPtr->DoClear(); }; } diff --git a/frameworks/native/backup_kit_inner/src/service_proxy.cpp b/frameworks/native/backup_kit_inner/src/service_proxy.cpp index 8d7be32ab..5a33890cd 100644 --- a/frameworks/native/backup_kit_inner/src/service_proxy.cpp +++ b/frameworks/native/backup_kit_inner/src/service_proxy.cpp @@ -470,7 +470,7 @@ sptr ServiceProxy::GetInstance() [loadCallback]() { return loadCallback->isLoadSuccess_.load(); }); if (!waitStatus) { HILOGE("Load backup sa timeout"); - AppRadar::Info info("", "", "{\"reason\":\"Load backup sa timeout\"}"); + AppRadar::Info info("", "", "\"reason\":\"Load backup sa timeout\""); AppRadar::GetInstance().RecordBackupFuncRes(info, "ServiceProxy::GetInstance", AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_BOOT_BACKUP_SA_FAIL, static_cast(BError::Codes::SA_INVAL_ARG)); @@ -530,7 +530,7 @@ void ServiceProxy::ServiceProxyLoadCallback::OnLoadSystemAbilityFail(int32_t sys unique_lock lock(proxyMutex_); serviceProxy_ = nullptr; isLoadSuccess_.store(false); - AppRadar::Info info("", "", "{\"reason\":\"Load backup sa fail\"}"); + AppRadar::Info info("", "", "\"reason\":\"Load backup sa fail\""); AppRadar::GetInstance().RecordBackupFuncRes(info, "ServiceProxyLoadCallback::OnLoadSystemAbilityFail", AppRadar::GetInstance().GetUserId(), BizStageBackup::BIZ_STAGE_BOOT_BACKUP_SA_FAIL, static_cast(BError::Codes::SA_INVAL_ARG)); diff --git a/interfaces/kits/js/backup/session_backup_n_exporter.cpp b/interfaces/kits/js/backup/session_backup_n_exporter.cpp index 3be58f19d..7976c8fdb 100644 --- a/interfaces/kits/js/backup/session_backup_n_exporter.cpp +++ b/interfaces/kits/js/backup/session_backup_n_exporter.cpp @@ -68,13 +68,20 @@ static void OnFileReady(weak_ptr pCallbacks, const BFileInfo & }; if (std::get<0>(errInfo) != 0) { obj = NVal {env, NError(errorParam).GetNapiErr(env)}; + napi_status status = napi_set_named_property(env, obj.val_, FILEIO_TAG_ERR_DATA.c_str(), + NVal::CreateUTF8String(env, bundleName).val_); + if (status != napi_ok) { + HILOGE("Failed to set data property, status %{public}d, bundleName %{public}s", + status, bundleName.c_str()); + } } else { obj = NVal::CreateObject(env); + obj.AddProp({ + NVal::DeclareNapiProperty(BConstants::BUNDLE_NAME.c_str(), + NVal::CreateUTF8String(env, bundleName).val_), + NVal::DeclareNapiProperty(BConstants::URI.c_str(), NVal::CreateUTF8String(env, fileName).val_), + NVal::DeclareNapiProperty(BConstants::FD.c_str(), NVal::CreateInt32(env, fd->Release()).val_)}); } - obj.AddProp({ - NVal::DeclareNapiProperty(BConstants::BUNDLE_NAME.c_str(), NVal::CreateUTF8String(env, bundleName).val_), - NVal::DeclareNapiProperty(BConstants::URI.c_str(), NVal::CreateUTF8String(env, fileName).val_), - NVal::DeclareNapiProperty(BConstants::FD.c_str(), NVal::CreateInt32(env, fd->Release()).val_)}); return {obj}; }; @@ -83,7 +90,7 @@ static void OnFileReady(weak_ptr pCallbacks, const BFileInfo & static void onBundleBegin(weak_ptr pCallbacks, ErrCode err, const BundleName name) { - HILOGI("Callback onBundleBegin, bundleName=%{public}s", name.c_str()); + HILOGI("Callback onBundleBegin, bundleName=%{public}s, errCode=%{public}d", name.c_str(), err); if (pCallbacks.expired()) { HILOGI("callbacks is unbound"); return; @@ -98,17 +105,23 @@ static void onBundleBegin(weak_ptr pCallbacks, ErrCode err, co return; } - auto cbCompl = [name {name}, errCode {err}](napi_env env, NError err) -> NVal { + ErrCode errCode = BError::GetBackupCodeByErrno(err); + std::string errMsg = BError::GetBackupMsgByErrno(errCode) + ", origin errno: " + to_string(err); + std::tuple errInfo = std::make_tuple(errCode, errMsg); + + auto cbCompl = [name {name}, errCode {err}, errInfo](napi_env env, NError err) -> NVal { NVal bundleName = NVal::CreateUTF8String(env, name); if (!err && errCode == 0) { return bundleName; } - + ErrParam errorParam = [ errInfo ]() { + return errInfo; + }; NVal res; if (err) { res = NVal {env, err.GetNapiErr(env)}; } else { - res = NVal {env, NError(errCode).GetNapiErr(env)}; + res = NVal {env, NError(errorParam).GetNapiErr(env)}; } napi_status status = napi_set_named_property(env, res.val_, FILEIO_TAG_ERR_DATA.c_str(), bundleName.val_); if (status != napi_ok) { @@ -123,7 +136,7 @@ static void onBundleBegin(weak_ptr pCallbacks, ErrCode err, co static void onBundleEnd(weak_ptr pCallbacks, ErrCode err, const BundleName name) { - HILOGI("Callback onBundleEnd, bundleName=%{public}s", name.c_str()); + HILOGI("Callback onBundleEnd, bundleName=%{public}s, errCode=%{public}d", name.c_str(), err); if (pCallbacks.expired()) { HILOGI("callbacks is unbound"); return; @@ -138,17 +151,23 @@ static void onBundleEnd(weak_ptr pCallbacks, ErrCode err, cons return; } - auto cbCompl = [name {name}, errCode {err}](napi_env env, NError err) -> NVal { + ErrCode errCode = BError::GetBackupCodeByErrno(err); + std::string errMsg = BError::GetBackupMsgByErrno(errCode) + ", origin errno: " + to_string(err); + std::tuple errInfo = std::make_tuple(errCode, errMsg); + + auto cbCompl = [name {name}, errCode {err}, errInfo](napi_env env, NError err) -> NVal { NVal bundleName = NVal::CreateUTF8String(env, name); if (!err && errCode == 0) { return bundleName; } - + ErrParam errorParam = [ errInfo ]() { + return errInfo; + }; NVal res; if (err) { res = NVal {env, err.GetNapiErr(env)}; } else { - res = NVal {env, NError(errCode).GetNapiErr(env)}; + res = NVal {env, NError(errorParam).GetNapiErr(env)}; } napi_status status = napi_set_named_property(env, res.val_, FILEIO_TAG_ERR_DATA.c_str(), bundleName.val_); if (status != napi_ok) { @@ -177,16 +196,22 @@ static void onAllBundlesEnd(weak_ptr pCallbacks, ErrCode err) return; } - auto cbCompl = [errCode {err}](napi_env env, NError err) -> NVal { + ErrCode errCode = BError::GetBackupCodeByErrno(err); + std::string errMsg = BError::GetBackupMsgByErrno(errCode) + ", origin errno: " + to_string(err); + std::tuple errInfo = std::make_tuple(errCode, errMsg); + + auto cbCompl = [errCode {err}, errInfo](napi_env env, NError err) -> NVal { if (!err && errCode == 0) { return NVal::CreateUndefined(env); } - + ErrParam errorParam = [ errInfo ]() { + return errInfo; + }; NVal res; if (err) { res = NVal {env, err.GetNapiErr(env)}; } else { - res = NVal {env, NError(errCode).GetNapiErr(env)}; + res = NVal {env, NError(errorParam).GetNapiErr(env)}; } return res; diff --git a/interfaces/kits/js/backup/session_incremental_backup_n_exporter.cpp b/interfaces/kits/js/backup/session_incremental_backup_n_exporter.cpp index 59d974579..1a3d9bd95 100644 --- a/interfaces/kits/js/backup/session_incremental_backup_n_exporter.cpp +++ b/interfaces/kits/js/backup/session_incremental_backup_n_exporter.cpp @@ -73,15 +73,21 @@ static void OnFileReady(weak_ptr pCallbacks, const BFileInfo & }; if (std::get<0>(errInfo) != 0) { obj = NVal {env, NError(errorParam).GetNapiErr(env)}; + napi_status status = napi_set_named_property(env, obj.val_, FILEIO_TAG_ERR_DATA.c_str(), + NVal::CreateUTF8String(env, bundleName).val_); + if (status != napi_ok) { + HILOGE("Failed to set data, status %{public}d, bundleName %{public}s", status, bundleName.c_str()); + } } else { obj = NVal::CreateObject(env); + obj.AddProp({ + NVal::DeclareNapiProperty(BConstants::BUNDLE_NAME.c_str(), + NVal::CreateUTF8String(env, bundleName).val_), + NVal::DeclareNapiProperty(BConstants::URI.c_str(), NVal::CreateUTF8String(env, fileName).val_), + NVal::DeclareNapiProperty(BConstants::FD.c_str(), NVal::CreateInt32(env, fd->Release()).val_), + NVal::DeclareNapiProperty(BConstants::MANIFEST_FD.c_str(), + NVal::CreateInt32(env, manifestFd->Release()).val_)}); } - obj.AddProp({ - NVal::DeclareNapiProperty(BConstants::BUNDLE_NAME.c_str(), NVal::CreateUTF8String(env, bundleName).val_), - NVal::DeclareNapiProperty(BConstants::URI.c_str(), NVal::CreateUTF8String(env, fileName).val_), - NVal::DeclareNapiProperty(BConstants::FD.c_str(), NVal::CreateInt32(env, fd->Release()).val_), - NVal::DeclareNapiProperty(BConstants::MANIFEST_FD.c_str(), - NVal::CreateInt32(env, manifestFd->Release()).val_)}); return {obj}; }; @@ -90,7 +96,7 @@ static void OnFileReady(weak_ptr pCallbacks, const BFileInfo & static void onBundleBegin(weak_ptr pCallbacks, ErrCode err, const BundleName name) { - HILOGI("Callback onBundleBegin, bundleName=%{public}s", name.c_str()); + HILOGI("Callback onBundleBegin, bundleName=%{public}s, errCode=%{public}d", name.c_str(), err); if (pCallbacks.expired()) { HILOGI("callbacks is unbound"); return; @@ -105,17 +111,23 @@ static void onBundleBegin(weak_ptr pCallbacks, ErrCode err, co return; } - auto cbCompl = [name {name}, errCode {err}](napi_env env, NError err) -> NVal { + ErrCode errCode = BError::GetBackupCodeByErrno(err); + std::string errMsg = BError::GetBackupMsgByErrno(errCode) + ", origin errno: " + to_string(err); + std::tuple errInfo = std::make_tuple(errCode, errMsg); + + auto cbCompl = [name {name}, errCode {err}, errInfo](napi_env env, NError err) -> NVal { NVal bundleName = NVal::CreateUTF8String(env, name); if (!err && errCode == 0) { return bundleName; } - + ErrParam errorParam = [ errInfo ]() { + return errInfo; + }; NVal res; if (err) { res = NVal {env, err.GetNapiErr(env)}; } else { - res = NVal {env, NError(errCode).GetNapiErr(env)}; + res = NVal {env, NError(errorParam).GetNapiErr(env)}; } napi_status status = napi_set_named_property(env, res.val_, FILEIO_TAG_ERR_DATA.c_str(), bundleName.val_); if (status != napi_ok) { @@ -130,7 +142,7 @@ static void onBundleBegin(weak_ptr pCallbacks, ErrCode err, co static void onBundleEnd(weak_ptr pCallbacks, ErrCode err, const BundleName name) { - HILOGI("Callback onBundleEnd, bundleName=%{public}s", name.c_str()); + HILOGI("Callback onBundleEnd, bundleName=%{public}s, errCode=%{public}d", name.c_str(), err); if (pCallbacks.expired()) { HILOGI("callbacks is unbound"); return; @@ -145,17 +157,23 @@ static void onBundleEnd(weak_ptr pCallbacks, ErrCode err, cons return; } - auto cbCompl = [name {name}, errCode {err}](napi_env env, NError err) -> NVal { + ErrCode errCode = BError::GetBackupCodeByErrno(err); + std::string errMsg = BError::GetBackupMsgByErrno(errCode) + ", origin errno: " + to_string(err); + std::tuple errInfo = std::make_tuple(errCode, errMsg); + + auto cbCompl = [name {name}, errCode {err}, errInfo](napi_env env, NError err) -> NVal { NVal bundleName = NVal::CreateUTF8String(env, name); if (!err && errCode == 0) { return bundleName; } - + ErrParam errorParam = [ errInfo ]() { + return errInfo; + }; NVal res; if (err) { res = NVal {env, err.GetNapiErr(env)}; } else { - res = NVal {env, NError(errCode).GetNapiErr(env)}; + res = NVal {env, NError(errorParam).GetNapiErr(env)}; } napi_status status = napi_set_named_property(env, res.val_, FILEIO_TAG_ERR_DATA.c_str(), bundleName.val_); if (status != napi_ok) { @@ -184,16 +202,22 @@ static void onAllBundlesEnd(weak_ptr pCallbacks, ErrCode err) return; } - auto cbCompl = [errCode {err}](napi_env env, NError err) -> NVal { + ErrCode errCode = BError::GetBackupCodeByErrno(err); + std::string errMsg = BError::GetBackupMsgByErrno(errCode) + ", origin errno: " + to_string(err); + std::tuple errInfo = std::make_tuple(errCode, errMsg); + + auto cbCompl = [errCode {err}, errInfo](napi_env env, NError err) -> NVal { if (!err && errCode == 0) { return NVal::CreateUndefined(env); } - + ErrParam errorParam = [ errInfo ]() { + return errInfo; + }; NVal res; if (err) { res = NVal {env, err.GetNapiErr(env)}; } else { - res = NVal {env, NError(errCode).GetNapiErr(env)}; + res = NVal {env, NError(errorParam).GetNapiErr(env)}; } return res; diff --git a/interfaces/kits/js/backup/session_restore_n_exporter.cpp b/interfaces/kits/js/backup/session_restore_n_exporter.cpp index d71f6f9ea..52cdcf98d 100644 --- a/interfaces/kits/js/backup/session_restore_n_exporter.cpp +++ b/interfaces/kits/js/backup/session_restore_n_exporter.cpp @@ -41,10 +41,8 @@ struct RestoreEntity { shared_ptr callbacks; }; -static void OnFileReadySheet(weak_ptr pCallbacks, - const BFileInfo &fileInfo, - UniqueFd fd, - UniqueFd manifestFd, int32_t sysErrno) +static void OnFileReadySheet(weak_ptr pCallbacks, const BFileInfo &fileInfo, + UniqueFd fd, UniqueFd manifestFd, int32_t sysErrno) { if (pCallbacks.expired()) { HILOGI("callbacks is unbound"); @@ -63,8 +61,7 @@ static void OnFileReadySheet(weak_ptr pCallbacks, std::string errMsg = "system errno: " + to_string(sysErrno); std::tuple errInfo = std::make_tuple(errCode, errMsg); - auto cbCompl = [bundleName {fileInfo.owner}, - fileName {fileInfo.fileName}, + auto cbCompl = [bundleName {fileInfo.owner}, fileName {fileInfo.fileName}, fd {make_shared(fd.Release())}, manifestFd {make_shared(manifestFd.Release())}, errInfo](napi_env env, NError err) -> NVal { @@ -78,15 +75,21 @@ static void OnFileReadySheet(weak_ptr pCallbacks, }; if (std::get<0>(errInfo) != 0) { obj = NVal {env, NError(errorParam).GetNapiErr(env)}; + napi_status status = napi_set_named_property(env, obj.val_, FILEIO_TAG_ERR_DATA.c_str(), + NVal::CreateUTF8String(env, bundleName).val_); + if (status != napi_ok) { + HILOGE("Failed to set data, status %{public}d, bundleName %{public}s", status, bundleName.c_str()); + } } else { obj = NVal::CreateObject(env); + obj.AddProp({ + NVal::DeclareNapiProperty(BConstants::BUNDLE_NAME.c_str(), + NVal::CreateUTF8String(env, bundleName).val_), + NVal::DeclareNapiProperty(BConstants::URI.c_str(), NVal::CreateUTF8String(env, fileName).val_), + NVal::DeclareNapiProperty(BConstants::FD.c_str(), NVal::CreateInt32(env, fd->Release()).val_), + NVal::DeclareNapiProperty(BConstants::MANIFEST_FD.c_str(), + NVal::CreateInt32(env, manifestFd->Release()).val_)}); } - obj.AddProp({ - NVal::DeclareNapiProperty(BConstants::BUNDLE_NAME.c_str(), NVal::CreateUTF8String(env, bundleName).val_), - NVal::DeclareNapiProperty(BConstants::URI.c_str(), NVal::CreateUTF8String(env, fileName).val_), - NVal::DeclareNapiProperty(BConstants::FD.c_str(), NVal::CreateInt32(env, fd->Release()).val_), - NVal::DeclareNapiProperty(BConstants::MANIFEST_FD.c_str(), - NVal::CreateInt32(env, manifestFd->Release()).val_)}); return {obj}; }; @@ -95,7 +98,7 @@ static void OnFileReadySheet(weak_ptr pCallbacks, static void onBundleBegin(weak_ptr pCallbacks, ErrCode err, const BundleName name) { - HILOGI("Callback onBundleBegin, bundleName=%{public}s", name.c_str()); + HILOGI("Callback onBundleBegin, bundleName=%{public}s, errCode=%{public}d", name.c_str(), err); if (pCallbacks.expired()) { HILOGI("callbacks is unbound"); return; @@ -110,17 +113,23 @@ static void onBundleBegin(weak_ptr pCallbacks, ErrCode err, co return; } - auto cbCompl = [name {name}, errCode {err}](napi_env env, NError err) -> NVal { + ErrCode errCode = BError::GetBackupCodeByErrno(err); + std::string errMsg = BError::GetBackupMsgByErrno(errCode) + ", origin errno: " + to_string(err); + std::tuple errInfo = std::make_tuple(errCode, errMsg); + + auto cbCompl = [name {name}, errCode {err}, errInfo](napi_env env, NError err) -> NVal { NVal bundleName = NVal::CreateUTF8String(env, name); if (!err && errCode == 0) { return bundleName; } - + ErrParam errorParam = [ errInfo ]() { + return errInfo; + }; NVal res; if (err) { res = NVal {env, err.GetNapiErr(env)}; } else { - res = NVal {env, NError(errCode).GetNapiErr(env)}; + res = NVal {env, NError(errorParam).GetNapiErr(env)}; } napi_status status = napi_set_named_property(env, res.val_, FILEIO_TAG_ERR_DATA.c_str(), bundleName.val_); if (status != napi_ok) { @@ -135,7 +144,7 @@ static void onBundleBegin(weak_ptr pCallbacks, ErrCode err, co static void onBundleEnd(weak_ptr pCallbacks, ErrCode err, const BundleName name) { - HILOGI("Callback onBundleEnd, bundleName=%{public}s", name.c_str()); + HILOGI("Callback onBundleEnd, bundleName=%{public}s, errCode=%{public}d", name.c_str(), err); if (pCallbacks.expired()) { HILOGI("callbacks is unbound"); return; @@ -150,17 +159,23 @@ static void onBundleEnd(weak_ptr pCallbacks, ErrCode err, cons return; } - auto cbCompl = [name {name}, errCode {err}](napi_env env, NError err) -> NVal { + ErrCode errCode = BError::GetBackupCodeByErrno(err); + std::string errMsg = BError::GetBackupMsgByErrno(errCode) + ", origin errno: " + to_string(err); + std::tuple errInfo = std::make_tuple(errCode, errMsg); + + auto cbCompl = [name {name}, errCode {err}, errInfo](napi_env env, NError err) -> NVal { NVal bundleName = NVal::CreateUTF8String(env, name); if (!err && errCode == 0) { return bundleName; } - + ErrParam errorParam = [ errInfo ]() { + return errInfo; + }; NVal res; if (err) { res = NVal {env, err.GetNapiErr(env)}; } else { - res = NVal {env, NError(errCode).GetNapiErr(env)}; + res = NVal {env, NError(errorParam).GetNapiErr(env)}; } napi_status status = napi_set_named_property(env, res.val_, FILEIO_TAG_ERR_DATA.c_str(), bundleName.val_); if (status != napi_ok) { @@ -189,16 +204,22 @@ static void onAllBundlesEnd(weak_ptr pCallbacks, ErrCode err) return; } - auto cbCompl = [errCode {err}](napi_env env, NError err) -> NVal { + ErrCode errCode = BError::GetBackupCodeByErrno(err); + std::string errMsg = BError::GetBackupMsgByErrno(errCode) + ", origin errno: " + to_string(err); + std::tuple errInfo = std::make_tuple(errCode, errMsg); + + auto cbCompl = [errCode {err}, errInfo](napi_env env, NError err) -> NVal { if (!err && errCode == 0) { return NVal::CreateUndefined(env); } - + ErrParam errorParam = [ errInfo ]() { + return errInfo; + }; NVal res; if (err) { res = NVal {env, err.GetNapiErr(env)}; } else { - res = NVal {env, NError(errCode).GetNapiErr(env)}; + res = NVal {env, NError(errorParam).GetNapiErr(env)}; } return res; diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 52a3482b1..206c9647d 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1034,23 +1034,20 @@ ErrCode Service::GetFileHandle(const string &bundleName, const string &fileName) auto backUpConnection = session_->GetExtConnection(bundleName); if (backUpConnection == nullptr) { HILOGE("GetFileHandle error, backUpConnection is empty"); - AppRadar::Info info (bundleName, "", "backUpConnection is empty"); - int32_t err = BError(BError::Codes::SA_INVAL_ARG).GetCode(); - AppRadar::GetInstance().RecordRestoreFuncRes(info, "Service::GetFileHandle", GetUserIdDefault(), - BizStageRestore::BIZ_STAGE_GET_FILE_HANDLE_FAIL, err); return BError(BError::Codes::SA_INVAL_ARG); } auto proxy = backUpConnection->GetBackupExtProxy(); if (!proxy) { HILOGE("GetFileHandle error, Extension backup Proxy is empty"); - AppRadar::Info info (bundleName, "", "Extension backup Proxy is empty"); - int32_t err = BError(BError::Codes::SA_INVAL_ARG).GetCode(); - AppRadar::GetInstance().RecordRestoreFuncRes(info, "Service::GetFileHandle", GetUserIdDefault(), - BizStageRestore::BIZ_STAGE_GET_FILE_HANDLE_FAIL, err); return BError(BError::Codes::SA_INVAL_ARG); } int32_t errCode = 0; UniqueFd fd = proxy->GetFileHandle(fileName, errCode); + if (errCode != ERR_OK) { + AppRadar::Info info (bundleName, "", ""); + AppRadar::GetInstance().RecordRestoreFuncRes(info, "Service::GetFileHandle", GetUserIdDefault(), + BizStageRestore::BIZ_STAGE_GET_FILE_HANDLE_FAIL, errCode); + } session_->GetServiceReverseProxy()->RestoreOnFileReady(bundleName, fileName, move(fd), errCode); } else { session_->SetExtFileNameRequest(bundleName, fileName); @@ -1449,7 +1446,7 @@ void Service::SendErrAppGalleryNotify() HILOGI("EndRestore, code=%{public}d, bundleName=%{public}s", disposeErr, bundleName.c_str()); if (disposeErr != DisposeErr::OK) { - HILOGE("Error,disposal will be clear in the end"); + HILOGE("Error, disposal will be clear in the end"); return ; } if (!disposal_->DeleteFromDisposalConfigFile(bundleName)) { diff --git a/services/backup_sa/src/module_ipc/service_incremental.cpp b/services/backup_sa/src/module_ipc/service_incremental.cpp index 3165e4ef2..49f7570c5 100644 --- a/services/backup_sa/src/module_ipc/service_incremental.cpp +++ b/services/backup_sa/src/module_ipc/service_incremental.cpp @@ -38,6 +38,7 @@ #include "b_json/b_json_entity_caps.h" #include "b_ohos/startup/backup_para.h" #include "b_process/b_multiuser.h" +#include "b_radar/b_radar.h" #include "b_resources/b_constants.h" #include "b_sa/b_sa_utils.h" #include "filemgmt_libhilog.h" @@ -494,6 +495,9 @@ ErrCode Service::GetIncrementalFileHandle(const std::string &bundleName, const s int res = proxy->GetIncrementalFileHandle(fileName); if (res) { HILOGE("Failed to extension file handle"); + AppRadar::Info info (bundleName, "", ""); + AppRadar::GetInstance().RecordRestoreFuncRes(info, "Service::GetIncrementalFileHandle", + GetUserIdDefault(), BizStageRestore::BIZ_STAGE_GET_FILE_HANDLE_FAIL, res); } } else { SvcRestoreDepsManager::GetInstance().UpdateToRestoreBundleMap(bundleName, fileName); diff --git a/tests/unittests/backup_ext/ext_backup_js_test.cpp b/tests/unittests/backup_ext/ext_backup_js_test.cpp index 59069bc2c..aa453316a 100644 --- a/tests/unittests/backup_ext/ext_backup_js_test.cpp +++ b/tests/unittests/backup_ext/ext_backup_js_test.cpp @@ -1383,11 +1383,13 @@ HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_GetBackupInfo_0100, testing::ext::Te GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_GetBackupInfo_0100"; try { extBackupJs->jsObj_ = make_unique(); + EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok)); EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)); EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_invalid_arg)); auto ret = extBackupJs->GetBackupInfo([](ErrCode, std::string){}); EXPECT_EQ(ret, EINVAL); + EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok)); EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)); EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_invalid_arg)); @@ -1398,7 +1400,28 @@ HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_GetBackupInfo_0100, testing::ext::Te }))); ret = extBackupJs->GetBackupInfo([](ErrCode, std::string){}); EXPECT_EQ(ret, EINVAL); + } catch (...) { + EXPECT_TRUE(false); + GTEST_LOG_(INFO) << "ExtBackupJsTest-an exception occurred by GetBackupInfo."; + } + GTEST_LOG_(INFO) << "ExtBackupJsTest-end SUB_backup_ext_js_GetBackupInfo_0100"; +} +/** + * @tc.number: SUB_backup_ext_js_GetBackupInfo_0200 + * @tc.name: SUB_backup_ext_js_GetBackupInfo_0200 + * @tc.desc: 测试 GetBackupInfo 各个分支成功与失败 + * @tc.size: MEDIUM + * @tc.type: FUNC + * @tc.level Level 1 + * @tc.require: issuesIAFBOS + */ +HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_GetBackupInfo_0200, testing::ext::TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ExtBackupJsTest-begin SUB_backup_ext_js_GetBackupInfo_0200"; + try { + extBackupJs->jsObj_ = make_unique(); + EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok)); EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)); EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); EXPECT_CALL(*napiMock, napi_get_value_string_utf8(_, _, _, _, _)).WillOnce(Return(napi_ok)) @@ -1408,9 +1431,10 @@ HWTEST_F(ExtBackupJsTest, SUB_backup_ext_js_GetBackupInfo_0100, testing::ext::Te param->retParser(nullptr, nullptr); return -1; }))); - ret = extBackupJs->GetBackupInfo([](ErrCode, std::string){}); + auto ret = extBackupJs->GetBackupInfo([](ErrCode, std::string){}); EXPECT_EQ(ret, EINVAL); + EXPECT_CALL(*napiMock, napi_is_exception_pending(_, _)).WillOnce(Return(napi_ok)); EXPECT_CALL(*extBackupMock, GetNapiEnv()).WillOnce(Return(nullptr)).WillOnce(Return(nullptr)); EXPECT_CALL(*napiMock, napi_get_uv_event_loop(_, _)).WillOnce(Return(napi_ok)); EXPECT_CALL(*napiMock, napi_is_promise(_, _, _)) diff --git a/tests/unittests/backup_utils/b_jsonutil/b_jsonutil_test.cpp b/tests/unittests/backup_utils/b_jsonutil/b_jsonutil_test.cpp index f1536a851..4c81465b1 100644 --- a/tests/unittests/backup_utils/b_jsonutil/b_jsonutil_test.cpp +++ b/tests/unittests/backup_utils/b_jsonutil/b_jsonutil_test.cpp @@ -545,23 +545,23 @@ HWTEST_F(BJsonUtilTest, b_jsonutil_FindBundleInfoByName_0300, testing::ext::Test } /** - * @tc.number: b_jsonutil_BuildRestoreErrInfo_0100 - * @tc.name: b_jsonutil_BuildRestoreErrInfo_0100 - * @tc.desc: Test function of BuildRestoreErrInfo interface for SUCCESS. + * @tc.number: b_jsonutil_BuildExtensionErrInfo_0100 + * @tc.name: b_jsonutil_BuildExtensionErrInfo_0100 + * @tc.desc: Test function of BuildExtensionErrInfo interface for SUCCESS. * @tc.size: MEDIUM * @tc.type: FUNC * @tc.level Level 0 * @tc.require: I6F3GV */ -HWTEST_F(BJsonUtilTest, b_jsonutil_BuildRestoreErrInfo_0100, testing::ext::TestSize.Level0) +HWTEST_F(BJsonUtilTest, b_jsonutil_BuildExtensionErrInfo_0100, testing::ext::TestSize.Level0) { - GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildRestoreErrInfo_0100"; + GTEST_LOG_(INFO) << "BJsonUtilTest-begin BuildExtensionErrInfo_0100"; try { std::string jsonStr; int errCode = 1; std::string errMsg = "error"; - bool result = BJsonUtil::BuildRestoreErrInfo(jsonStr, errCode, errMsg); + bool result = BJsonUtil::BuildExtensionErrInfo(jsonStr, errCode, errMsg); EXPECT_EQ(true, result); EXPECT_NE(jsonStr.find("errorCode"), std::string::npos); EXPECT_NE(jsonStr.find("errorInfo"), std::string::npos); @@ -570,6 +570,6 @@ HWTEST_F(BJsonUtilTest, b_jsonutil_BuildRestoreErrInfo_0100, testing::ext::TestS EXPECT_TRUE(false); GTEST_LOG_(INFO) << "BJsonUtilTest-an exception occurred."; } - GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildRestoreErrInfo_0100"; + GTEST_LOG_(INFO) << "BJsonUtilTest-end BuildExtensionErrInfo_0100"; } } // namespace OHOS::FileManagement::Backup \ No newline at end of file diff --git a/utils/include/b_error/b_error.h b/utils/include/b_error/b_error.h index 8e84877d2..4cded015b 100644 --- a/utils/include/b_error/b_error.h +++ b/utils/include/b_error/b_error.h @@ -153,6 +153,19 @@ public: return msg_.c_str(); } + /** + * @brief 归一返回备份恢复错误码 + * + * @return ErrCode 备份恢复错误码 + */ + static ErrCode GetBackupCodeByErrno(ErrCode err); + + /** + * @brief 归一返回备份恢复错误信息 + * + * @return string 备份恢复错误信息 + */ + static std::string GetBackupMsgByErrno(ErrCode err); public: /** * @brief 重载bool操作符,判断当前错误是否是错误 @@ -245,8 +258,12 @@ private: {Codes::EXT_ABILITY_DIED, "Extension process died"}, {Codes::EXT_FORBID_BACKUP_RESTORE, "forbid backup or restore"}, {Codes::EXT_BACKUP_PACKET_ERROR, "Backup packet error"}, + {Codes::EXT_METHOD_NOT_EXIST, "Extension method not exist"}, {Codes::EXT_THROW_EXCEPTION, "Extension throw exception"}, {Codes::EXT_BACKUP_UNPACKET_ERROR, "Backup unpacket error"}, + {Codes::SA_EXT_ERR_CALL, "SA Extension received invalid arguments"}, + {Codes::SA_EXT_ERR_SAMGR, "SA Extension get samgr failed"}, + {Codes::SA_EXT_RELOAD_FAIL, "SA Extension reload failed"}, }; static inline const std::map errCodeTable_ { @@ -276,8 +293,12 @@ private: {static_cast(Codes::EXT_ABILITY_TIMEOUT), BackupErrorCode::E_ETO}, {static_cast(Codes::EXT_FORBID_BACKUP_RESTORE), BackupErrorCode::E_FORBID}, {static_cast(Codes::EXT_BACKUP_PACKET_ERROR), BackupErrorCode::E_PACKET}, + {static_cast(Codes::EXT_METHOD_NOT_EXIST), BackupErrorCode::E_INVAL}, {static_cast(Codes::EXT_THROW_EXCEPTION), BackupErrorCode::E_EXCEPTION}, {static_cast(Codes::EXT_BACKUP_UNPACKET_ERROR), BackupErrorCode::E_UNPACKET}, + {static_cast(Codes::SA_EXT_ERR_CALL), BackupErrorCode::E_INVAL}, + {static_cast(Codes::SA_EXT_ERR_SAMGR), BackupErrorCode::E_IPCSS}, + {static_cast(Codes::SA_EXT_RELOAD_FAIL), BackupErrorCode::E_BEF}, {BackupErrorCode::E_IPCSS, BackupErrorCode::E_IPCSS}, {BackupErrorCode::E_INVAL, BackupErrorCode::E_INVAL}, {BackupErrorCode::E_NOTEXIST, BackupErrorCode::E_NOTEXIST}, @@ -312,6 +333,26 @@ private: {ENOSPC, BackupErrorCode::E_NOSPC}, }; + static inline const std::map backupErrorMsgTable_ { + {BackupErrorCode::E_IPCSS, "IPC error"}, + {BackupErrorCode::E_INVAL, "Invalid argument"}, + {BackupErrorCode::E_NOTEXIST, "Method not exist"}, + {BackupErrorCode::E_UKERR, "Unknown error"}, + {BackupErrorCode::E_PERM, "Operation not permitted"}, + {BackupErrorCode::E_NOMEM, "Out of memory"}, + {BackupErrorCode::E_NOSPC, "No space left on device"}, + {BackupErrorCode::E_IO, "I/O error"}, + {BackupErrorCode::E_FORBID, "Not support backup/restore"}, + {BackupErrorCode::E_BTO, "SA boot extension timeout"}, + {BackupErrorCode::E_ETO, "Extension process timeout"}, + {BackupErrorCode::E_DIED, "Extension process died"}, + {BackupErrorCode::E_EMPTY, "SA the bundle info for backup/restore is empty"}, + {BackupErrorCode::E_PACKET, "Tar failed"}, + {BackupErrorCode::E_EXCEPTION, "Extension throw exception"}, + {BackupErrorCode::E_UNPACKET, "Untar failed"}, + {BackupErrorCode::E_BEF, "SA failed to boot application extension"}, + }; + private: Codes code_ {Codes::OK}; std::string msg_; diff --git a/utils/include/b_jsonutil/b_jsonutil.h b/utils/include/b_jsonutil/b_jsonutil.h index 0613f8de2..c1d3e76bf 100644 --- a/utils/include/b_jsonutil/b_jsonutil.h +++ b/utils/include/b_jsonutil/b_jsonutil.h @@ -93,7 +93,7 @@ public: * @return 是否组建成功 * */ - static bool BuildRestoreErrInfo(std::string &jsonStr, int errCode, std::string errMsg); + static bool BuildExtensionErrInfo(std::string &jsonStr, int errCode, std::string errMsg); /** * @brief 拼接包名和分身对应的索引 @@ -114,7 +114,7 @@ public: * @return 是否组建成功 * */ - static bool BuildRestoreErrInfo(std::string &jsonStr, std::map> errFileInfo); + static bool BuildExtensionErrInfo(std::string &jsonStr, std::map> errFileInfo); /** * @brief 组建App进度返回的信息 diff --git a/utils/include/b_radar/b_radar.h b/utils/include/b_radar/b_radar.h index b386a57c9..87fd5ac4e 100644 --- a/utils/include/b_radar/b_radar.h +++ b/utils/include/b_radar/b_radar.h @@ -73,6 +73,16 @@ public: : bundleName(bundleName), status(status), resInfo(resInfo) {} }; + struct DoRestoreInfo { + uint32_t bigFileNum; + uint64_t bigFileSize; + uint32_t bigFileSpendTime; + uint32_t tarFileNum; + uint64_t tarFileSize; + uint32_t tarFileSpendTime; + uint32_t totalFileSpendTime; + }; + public: int32_t GetUserId(); void RecordDefaultFuncRes(Info &info, const std::string &func, int32_t userId, diff --git a/utils/src/b_error/b_error.cpp b/utils/src/b_error/b_error.cpp index 5d13b4ec6..7026b6a9e 100644 --- a/utils/src/b_error/b_error.cpp +++ b/utils/src/b_error/b_error.cpp @@ -74,4 +74,23 @@ int BError::GetCodeByErrno(int32_t errnoSys) } return BackupErrorCode::E_UKERR; } + +ErrCode BError::GetBackupCodeByErrno(ErrCode err) +{ + if (err == 0) { + return 0; + } + if (errCodeTable_.find(err) != errCodeTable_.end()) { + return errCodeTable_.at(err); + } + return BackupErrorCode::E_UKERR; +} + +string BError::GetBackupMsgByErrno(ErrCode err) +{ + if (backupErrorMsgTable_.find(err) != backupErrorMsgTable_.end()) { + return backupErrorMsgTable_.at(err); + } + return backupErrorMsgTable_.at(BackupErrorCode::E_UKERR); +} } // namespace OHOS::FileManagement::Backup \ No newline at end of file diff --git a/utils/src/b_jsonutil/b_jsonutil.cpp b/utils/src/b_jsonutil/b_jsonutil.cpp index 9db4e907a..492a6ea92 100644 --- a/utils/src/b_jsonutil/b_jsonutil.cpp +++ b/utils/src/b_jsonutil/b_jsonutil.cpp @@ -166,7 +166,7 @@ bool BJsonUtil::FindBundleInfoByName(std::map> errFileInfo) +bool BJsonUtil::BuildExtensionErrInfo(std::string &jsonStr, std::map> errFileInfo) { cJSON *errJson = cJSON_CreateObject(); if (errJson == nullptr) { diff --git a/utils/src/b_radar/b_radar.cpp b/utils/src/b_radar/b_radar.cpp index 0b91ae576..31ef80f3d 100644 --- a/utils/src/b_radar/b_radar.cpp +++ b/utils/src/b_radar/b_radar.cpp @@ -39,7 +39,7 @@ void AppRadar::RecordDefaultFuncRes(Info &info, const std::string &func, int32_t enum BizStageBackup bizStage, int32_t resultCode) { std::stringstream ss; - ss << "\"result_info\": {" << info.resInfo << "}"; + ss << "{\"result_info\": {" << info.resInfo << "}}"; HiSysEventWrite( OHOS::HiviewDFX::HiSysEvent::Domain::FILEMANAGEMENT, BConstants::FILE_BACKUP_RESTORE_EVENTS, @@ -60,7 +60,7 @@ void AppRadar::RecordBackupFuncRes(Info &info, const std::string &func, int32_t enum BizStageBackup bizStage, int32_t resultCode) { std::stringstream ss; - ss << "\"result_info\": {" << info.resInfo << "}"; + ss << "{\"result_info\": {" << info.resInfo << "}}"; HiSysEventWrite( OHOS::HiviewDFX::HiSysEvent::Domain::FILEMANAGEMENT, BConstants::FILE_BACKUP_RESTORE_EVENTS, @@ -81,7 +81,7 @@ void AppRadar::RecordRestoreFuncRes(Info &info, const std::string &func, int32_t enum BizStageRestore bizStage, int32_t resultCode) { std::stringstream ss; - ss << "\"result_info\": {" << info.resInfo << "}"; + ss << "{\"result_info\": {" << info.resInfo << "}}"; HiSysEventWrite( OHOS::HiviewDFX::HiSysEvent::Domain::FILEMANAGEMENT, BConstants::FILE_BACKUP_RESTORE_EVENTS, -- Gitee