From b65499aa64f02b3fcc0ae3808d3ab007fb9fe83c Mon Sep 17 00:00:00 2001 From: BrainL Date: Tue, 18 Mar 2025 21:11:27 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=A2=9E=E9=87=8F=E5=A4=87=E4=BB=BDSA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- .../backup_sa/include/module_ipc/service.h | 9 ++++ services/backup_sa/src/module_ipc/service.cpp | 44 +++++++++++++++++-- .../service_incremental_reverse_proxy.cpp | 10 ++++- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/services/backup_sa/include/module_ipc/service.h b/services/backup_sa/include/module_ipc/service.h index 34a0fb99a..08d94e188 100644 --- a/services/backup_sa/include/module_ipc/service.h +++ b/services/backup_sa/include/module_ipc/service.h @@ -499,6 +499,15 @@ private: */ ErrCode BackupSA(std::string bundleName); + /** + * @brief SA增量备份恢复入口 + * + * @param bundleName SAID + * + * @return ErrCode OK if backup sa, otherwise backup sa failed. + */ + ErrCode IncrementalBackupSA(std::string bundleName); + /** * @brief 执行通知调用方 * diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 65a225c97..e0218f2b7 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -988,6 +988,7 @@ ErrCode Service::SAResultReport(const std::string bundleName, const std::string session_->GetServiceReverseProxy()->BackupOnBundleFinished(errCode, bundleName); } else if (sennario == BackupRestoreScenario::INCREMENTAL_BACKUP) { session_->GetServiceReverseProxy()->IncrementalBackupOnResultReport(restoreRetInfo, bundleName); + session_->GetServiceReverseProxy()->IncrementalBackupOnBundleFinished(errCode, bundleName); } OnAllBundlesFinished(BError(BError::Codes::OK)); if (sennario == BackupRestoreScenario::FULL_RESTORE || sennario == BackupRestoreScenario::INCREMENTAL_RESTORE) { @@ -1113,7 +1114,11 @@ void Service::ExtStart(const string &bundleName) try { HILOGE("begin ExtStart, bundle name:%{public}s", bundleName.data()); if (SAUtils::IsSABundleName(bundleName)) { - BackupSA(bundleName); + if (session_->GetIsIncrementalBackup()) { + IncrementalBackupSA(bundleName); + } else { + BackupSA(bundleName); + } return; } if (IncrementalBackup(bundleName)) { @@ -1842,15 +1847,48 @@ ErrCode Service::BackupSA(std::string bundleName) return BError(BError::Codes::OK); } +ErrCode Service::IncrementalBackupSA(std::string bundleName) +{ + HILOGI("IncrementalBackupSA begin %{public}s", bundleName.c_str()); + IServiceReverse::Scenario scenario = session_->GetScenario(); + auto backUpConnection = session_->GetSAExtConnection(bundleName); + std::shared_ptr saConnection = backUpConnection.lock(); + if (saConnection == nullptr) { + HILOGE("lock sa connection ptr is nullptr"); + return BError(BError::Codes::SA_INVAL_ARG); + } + if (scenario == IServiceReverse::Scenario::BACKUP) { + auto ret = saConnection->CallBackupSA(); + session_->GetServiceReverseProxy()->IncrementalBackupOnBundleStarted(ret, bundleName); + BundleBeginRadarReport(bundleName, ret, scenario); + if (ret) { + HILOGI("IncrementalBackupSA ret is %{public}d", ret); + ClearSessionAndSchedInfo(bundleName); + NoticeClientFinish(bundleName, BError(BError::Codes::EXT_ABILITY_DIED)); + return BError(ret); + } + } else if (scenario == IServiceReverse::Scenario::RESTORE) { + session_->GetServiceReverseProxy()->IncrementalRestoreOnBundleStarted(BError(BError::Codes::OK), bundleName); + } + return BError(BError::Codes::OK); +} + void Service::OnSABackup(const std::string &bundleName, const int &fd, const std::string &result, const ErrCode &errCode) { auto task = [bundleName, fd, result, errCode, this]() { HILOGI("OnSABackup bundleName: %{public}s, fd: %{public}d, result: %{public}s, err: %{public}d", bundleName.c_str(), fd, result.c_str(), errCode); - session_->GetServiceReverseProxy()->BackupOnFileReady(bundleName, "", move(fd), errCode); + BackupRestoreScenario scenario = FULL_BACKUP; + if (session_->GetIsIncrementalBackup()) { + scenario = INCREMENTAL_BACKUP; + session_->GetServiceReverseProxy()->IncrementalBackupOnFileReady(bundleName, "", move(fd), -1, errCode); + } else { + scenario = FULL_BACKUP; + session_->GetServiceReverseProxy()->BackupOnFileReady(bundleName, "", move(fd), errCode); + } FileReadyRadarReport(bundleName, "", errCode, IServiceReverse::Scenario::BACKUP); - SAResultReport(bundleName, result, errCode, BackupRestoreScenario::FULL_BACKUP); + SAResultReport(bundleName, result, errCode, scenario); }; threadPool_.AddTask([task]() { try { diff --git a/services/backup_sa/src/module_ipc/service_incremental_reverse_proxy.cpp b/services/backup_sa/src/module_ipc/service_incremental_reverse_proxy.cpp index 57e412c92..8aecf1ee6 100644 --- a/services/backup_sa/src/module_ipc/service_incremental_reverse_proxy.cpp +++ b/services/backup_sa/src/module_ipc/service_incremental_reverse_proxy.cpp @@ -19,6 +19,7 @@ #include "b_error/b_excep_utils.h" #include "filemgmt_libhilog.h" #include "module_app_gallery/app_gallery_dispose_proxy.h" +#include "b_sa/b_sa_utils.h" namespace OHOS::FileManagement::Backup { using namespace std; @@ -28,13 +29,18 @@ void ServiceReverseProxy::IncrementalBackupOnFileReady(string bundleName, string { BExcepUltils::BAssert(Remote(), BError::Codes::SDK_INVAL_ARG, "Remote is nullptr"); MessageParcel data; + bool appFlag = true; + if (SAUtils::IsSABundleName(bundleName)) { + appFlag = false; + } + bool fdFlag = true; - if (fd < 0 || manifestFd < 0) { + if (fd < 0 || (appFlag && manifestFd < 0)) { fdFlag = false; } if (!data.WriteInterfaceToken(GetDescriptor()) || !data.WriteString(bundleName) || !data.WriteString(fileName) || !data.WriteBool(fdFlag) || - (fdFlag == true && (!data.WriteFileDescriptor(fd) || !data.WriteFileDescriptor(manifestFd))) || + (fdFlag == true && (!data.WriteFileDescriptor(fd) || (!data.WriteFileDescriptor(manifestFd) && appFlag))) || !data.WriteInt32(errCode)) { throw BError(BError::Codes::SA_BROKEN_IPC); } -- Gitee From 87fa89f89afbfd9424e858594cab4e908259b6bc Mon Sep 17 00:00:00 2001 From: BrainL Date: Fri, 21 Mar 2025 15:04:10 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E4=BF=AE=E6=AD=A3UT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- tests/unittests/backup_sa/module_ipc/sub_service_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp index 6e3a6b114..30616147b 100644 --- a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp @@ -153,6 +153,7 @@ HWTEST_F(ServiceTest, SUB_Service_SAResultReport_0000, TestSize.Level1) EXPECT_CALL(*session, GetServiceReverseProxy()).WillOnce(Return(srProxy)); EXPECT_CALL(*srProxy, IncrementalBackupOnResultReport(_, _)).WillOnce(Return()); + EXPECT_CALL(*srProxy, IncrementalBackupOnBundleFinished(_, _)).WillOnce(Return()); EXPECT_CALL(*session, OnBundleFileReady(_, _)).WillOnce(Return(false)); EXPECT_CALL(*session, IsOnAllBundlesFinished()).WillOnce(Return(false)); ret = service->SAResultReport("", "", 0, BackupRestoreScenario::INCREMENTAL_BACKUP); -- Gitee From d8a8e91ad5f9ac118afe3ea95447353cae658d40 Mon Sep 17 00:00:00 2001 From: BrainL Date: Fri, 21 Mar 2025 19:22:05 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E4=BF=AE=E6=AD=A3UT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- tests/unittests/backup_sa/module_ipc/sub_service_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp index 30616147b..5e4e17dd7 100644 --- a/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/sub_service_test.cpp @@ -151,7 +151,7 @@ HWTEST_F(ServiceTest, SUB_Service_SAResultReport_0000, TestSize.Level1) ret = service->SAResultReport("", "", 0, BackupRestoreScenario::FULL_BACKUP); EXPECT_EQ(ret, BError(BError::Codes::OK).GetCode()); - EXPECT_CALL(*session, GetServiceReverseProxy()).WillOnce(Return(srProxy)); + EXPECT_CALL(*session, GetServiceReverseProxy()).WillOnce(Return(srProxy)).WillOnce(Return(srProxy)); EXPECT_CALL(*srProxy, IncrementalBackupOnResultReport(_, _)).WillOnce(Return()); EXPECT_CALL(*srProxy, IncrementalBackupOnBundleFinished(_, _)).WillOnce(Return()); EXPECT_CALL(*session, OnBundleFileReady(_, _)).WillOnce(Return(false)); -- Gitee From 6c6c29d82f22a1d2db6745f4e0eaac1b77c143ef Mon Sep 17 00:00:00 2001 From: BrainL Date: Thu, 27 Mar 2025 16:18:35 +0800 Subject: [PATCH 04/10] code review Signed-off-by: BrainL --- services/backup_sa/src/module_ipc/service.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index e0218f2b7..290c5dea9 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -72,6 +72,7 @@ namespace OHOS::FileManagement::Backup { using namespace std; +const int INVALID_FD = -1; REGISTER_SYSTEM_ABILITY_BY_ID(Service, FILEMANAGEMENT_BACKUP_SERVICE_SA_ID, false); namespace { @@ -1862,7 +1863,7 @@ ErrCode Service::IncrementalBackupSA(std::string bundleName) session_->GetServiceReverseProxy()->IncrementalBackupOnBundleStarted(ret, bundleName); BundleBeginRadarReport(bundleName, ret, scenario); if (ret) { - HILOGI("IncrementalBackupSA ret is %{public}d", ret); + HILOGE("IncrementalBackupSA ret is %{public}d", ret); ClearSessionAndSchedInfo(bundleName); NoticeClientFinish(bundleName, BError(BError::Codes::EXT_ABILITY_DIED)); return BError(ret); @@ -1882,7 +1883,8 @@ void Service::OnSABackup(const std::string &bundleName, const int &fd, const std BackupRestoreScenario scenario = FULL_BACKUP; if (session_->GetIsIncrementalBackup()) { scenario = INCREMENTAL_BACKUP; - session_->GetServiceReverseProxy()->IncrementalBackupOnFileReady(bundleName, "", move(fd), -1, errCode); + session_->GetServiceReverseProxy()->IncrementalBackupOnFileReady(bundleName,"", + move(fd), INVALID_FD, errCode); } else { scenario = FULL_BACKUP; session_->GetServiceReverseProxy()->BackupOnFileReady(bundleName, "", move(fd), errCode); -- Gitee From 3b71e5a2042e7dc2b71ec407e7a4b37f77d7e59e Mon Sep 17 00:00:00 2001 From: BrainL Date: Thu, 27 Mar 2025 17:01:20 +0800 Subject: [PATCH 05/10] code format Signed-off-by: BrainL --- services/backup_sa/src/module_ipc/service.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 290c5dea9..d208e3279 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1883,8 +1883,8 @@ void Service::OnSABackup(const std::string &bundleName, const int &fd, const std BackupRestoreScenario scenario = FULL_BACKUP; if (session_->GetIsIncrementalBackup()) { scenario = INCREMENTAL_BACKUP; - session_->GetServiceReverseProxy()->IncrementalBackupOnFileReady(bundleName,"", - move(fd), INVALID_FD, errCode); + session_->GetServiceReverseProxy()->IncrementalBackupOnFileReady(bundleName, "", move(fd), INVALID_FD, + errCode); } else { scenario = FULL_BACKUP; session_->GetServiceReverseProxy()->BackupOnFileReady(bundleName, "", move(fd), errCode); -- Gitee From 8a711c93460bf431ef1d1b812de303b82a2dc970 Mon Sep 17 00:00:00 2001 From: BrainL Date: Thu, 27 Mar 2025 19:13:15 +0800 Subject: [PATCH 06/10] code check Signed-off-by: BrainL --- .../src/module_ipc/service_incremental.cpp | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/services/backup_sa/src/module_ipc/service_incremental.cpp b/services/backup_sa/src/module_ipc/service_incremental.cpp index 2f78c020c..3e8e48716 100644 --- a/services/backup_sa/src/module_ipc/service_incremental.cpp +++ b/services/backup_sa/src/module_ipc/service_incremental.cpp @@ -791,6 +791,32 @@ bool Service::IncrementalBackup(const string &bundleName) return false; } +ErrCode Service::IncrementalBackupSA(std::string bundleName) +{ + HILOGI("IncrementalBackupSA begin %{public}s", bundleName.c_str()); + IServiceReverse::Scenario scenario = session_->GetScenario(); + auto backUpConnection = session_->GetSAExtConnection(bundleName); + std::shared_ptr saConnection = backUpConnection.lock(); + if (saConnection == nullptr) { + HILOGE("lock sa connection ptr is nullptr"); + return BError(BError::Codes::SA_INVAL_ARG); + } + if (scenario == IServiceReverse::Scenario::BACKUP) { + auto ret = saConnection->CallBackupSA(); + session_->GetServiceReverseProxy()->IncrementalBackupOnBundleStarted(ret, bundleName); + BundleBeginRadarReport(bundleName, ret, scenario); + if (ret) { + HILOGE("IncrementalBackupSA ret is %{public}d", ret); + ClearSessionAndSchedInfo(bundleName); + NoticeClientFinish(bundleName, BError(BError::Codes::EXT_ABILITY_DIED)); + return BError(ret); + } + } else if (scenario == IServiceReverse::Scenario::RESTORE) { + session_->GetServiceReverseProxy()->IncrementalRestoreOnBundleStarted(BError(BError::Codes::OK), bundleName); + } + return BError(BError::Codes::OK); +} + void Service::NotifyCallerCurAppIncrementDone(ErrCode errCode, const std::string &callerName) { IServiceReverse::Scenario scenario = session_->GetScenario(); -- Gitee From 041dffd78c3d0fb28c2c01c1c0f82bffdacc59b9 Mon Sep 17 00:00:00 2001 From: BrainL Date: Fri, 28 Mar 2025 09:33:35 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E6=8F=90=E5=8F=96=E8=B6=85=E5=A4=A7?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- services/backup_sa/src/module_ipc/service.cpp | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index 62b5ca05f..eb01c8623 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1881,32 +1881,6 @@ ErrCode Service::BackupSA(std::string bundleName) return BError(BError::Codes::OK); } -ErrCode Service::IncrementalBackupSA(std::string bundleName) -{ - HILOGI("IncrementalBackupSA begin %{public}s", bundleName.c_str()); - IServiceReverse::Scenario scenario = session_->GetScenario(); - auto backUpConnection = session_->GetSAExtConnection(bundleName); - std::shared_ptr saConnection = backUpConnection.lock(); - if (saConnection == nullptr) { - HILOGE("lock sa connection ptr is nullptr"); - return BError(BError::Codes::SA_INVAL_ARG); - } - if (scenario == IServiceReverse::Scenario::BACKUP) { - auto ret = saConnection->CallBackupSA(); - session_->GetServiceReverseProxy()->IncrementalBackupOnBundleStarted(ret, bundleName); - BundleBeginRadarReport(bundleName, ret, scenario); - if (ret) { - HILOGE("IncrementalBackupSA ret is %{public}d", ret); - ClearSessionAndSchedInfo(bundleName); - NoticeClientFinish(bundleName, BError(BError::Codes::EXT_ABILITY_DIED)); - return BError(ret); - } - } else if (scenario == IServiceReverse::Scenario::RESTORE) { - session_->GetServiceReverseProxy()->IncrementalRestoreOnBundleStarted(BError(BError::Codes::OK), bundleName); - } - return BError(BError::Codes::OK); -} - void Service::OnSABackup(const std::string &bundleName, const int &fd, const std::string &result, const ErrCode &errCode) { -- Gitee From b9aebd5f8ff81c3a079a6da15bcd5334dd9adbf4 Mon Sep 17 00:00:00 2001 From: BrainL Date: Fri, 28 Mar 2025 10:31:55 +0800 Subject: [PATCH 08/10] code check Signed-off-by: BrainL --- services/backup_sa/src/module_ipc/service.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index eb01c8623..a38876a1c 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -1887,13 +1887,13 @@ void Service::OnSABackup(const std::string &bundleName, const int &fd, const std auto task = [bundleName, fd, result, errCode, this]() { HILOGI("OnSABackup bundleName: %{public}s, fd: %{public}d, result: %{public}s, err: %{public}d", bundleName.c_str(), fd, result.c_str(), errCode); - BackupRestoreScenario scenario = FULL_BACKUP; + BackupRestoreScenario scenario = BackupRestoreScenario::FULL_BACKUP; if (session_->GetIsIncrementalBackup()) { - scenario = INCREMENTAL_BACKUP; + scenario = BackupRestoreScenario::INCREMENTAL_BACKUP; session_->GetServiceReverseProxy()->IncrementalBackupOnFileReady(bundleName, "", move(fd), INVALID_FD, errCode); } else { - scenario = FULL_BACKUP; + scenario = BackupRestoreScenario::FULL_BACKUP; session_->GetServiceReverseProxy()->BackupOnFileReady(bundleName, "", move(fd), errCode); } FileReadyRadarReport(bundleName, "", errCode, IServiceReverse::Scenario::BACKUP); -- Gitee From 771a5daff4d0f117b80e7d27c26c91d2e5758cd1 Mon Sep 17 00:00:00 2001 From: BrainL Date: Fri, 28 Mar 2025 10:34:34 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E5=B8=B8=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: BrainL --- services/backup_sa/src/module_ipc/service.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/services/backup_sa/src/module_ipc/service.cpp b/services/backup_sa/src/module_ipc/service.cpp index a38876a1c..12f7ce461 100644 --- a/services/backup_sa/src/module_ipc/service.cpp +++ b/services/backup_sa/src/module_ipc/service.cpp @@ -72,7 +72,6 @@ namespace OHOS::FileManagement::Backup { using namespace std; -const int INVALID_FD = -1; REGISTER_SYSTEM_ABILITY_BY_ID(Service, FILEMANAGEMENT_BACKUP_SERVICE_SA_ID, false); namespace { -- Gitee From cd2473ec9857c0ce2429dace7e13b1d1101a6177 Mon Sep 17 00:00:00 2001 From: BrainL Date: Fri, 28 Mar 2025 14:28:17 +0800 Subject: [PATCH 10/10] update UT test Signed-off-by: BrainL --- tests/unittests/backup_sa/module_ipc/service_other_test.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp index ed65c4e39..6bd257715 100644 --- a/tests/unittests/backup_sa/module_ipc/service_other_test.cpp +++ b/tests/unittests/backup_sa/module_ipc/service_other_test.cpp @@ -137,6 +137,11 @@ bool Service::IncrementalBackup(const string&) return false; } +ErrCode Service::IncrementalBackupSA(std::string bundleName) +{ + return BError(BError::Codes::OK); +} + void Service::NotifyCallerCurAppIncrementDone(ErrCode, const std::string&) {} void Service::SendUserIdToApp(string&, int32_t) {} -- Gitee