From 5036950f6ee5b9b1bf79cf257327adcdeb4757c4 Mon Sep 17 00:00:00 2001 From: WDY Date: Tue, 17 Jun 2025 15:12:23 +0800 Subject: [PATCH 1/2] Solve restore renamed_file fail Signed-off-by: WDY --- .../clouddisk_database/src/clouddisk_rdbstore.cpp | 3 ++- .../mock/meta_file_clouddisk_mock.cpp | 6 +++--- .../dentry/dentry_meta_file_clouddisk_test.cpp | 3 ++- utils/dentry/include/meta_file.h | 2 +- utils/dentry/src/meta_file_clouddisk.cpp | 14 +++++++------- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/services/clouddisk_database/src/clouddisk_rdbstore.cpp b/services/clouddisk_database/src/clouddisk_rdbstore.cpp index 571f95b20..9b663091e 100644 --- a/services/clouddisk_database/src/clouddisk_rdbstore.cpp +++ b/services/clouddisk_database/src/clouddisk_rdbstore.cpp @@ -1060,7 +1060,8 @@ int32_t CloudDiskRdbStore::HandleRecycleXattr(const string &name, const string & LOGE("set xAttr location fail, ret %{public}d", ret); return E_RDB; } - ret = MetaFileMgr::GetInstance().MoveIntoRecycleDentryfile(userId_, bundleName_, name, parentCloudId, rowId); + struct RestoreInfo restoreInfo = {name, parentCloudId, name, rowId}; + ret = MetaFileMgr::GetInstance().MoveIntoRecycleDentryfile(userId_, bundleName_, restoreInfo); if (ret != E_OK) { LOGE("recycle set dentryfile failed, ret = %{public}d", ret); return ret; diff --git a/test/unittests/clouddisk_database/mock/meta_file_clouddisk_mock.cpp b/test/unittests/clouddisk_database/mock/meta_file_clouddisk_mock.cpp index 8d18ad39a..07ee29295 100644 --- a/test/unittests/clouddisk_database/mock/meta_file_clouddisk_mock.cpp +++ b/test/unittests/clouddisk_database/mock/meta_file_clouddisk_mock.cpp @@ -553,10 +553,10 @@ int32_t MetaFileMgr::CreateRecycleDentry(uint32_t userId, const std::string &bun return E_OK; } -int32_t MetaFileMgr::MoveIntoRecycleDentryfile(uint32_t userId, const std::string &bundleName, const std::string &name, - const std::string &parentCloudId, int64_t rowId) +int32_t MetaFileMgr::MoveIntoRecycleDentryfile(uint32_t userId, const std::string &bundleName, + const struct RestoreInfo &restoreInfo) { - if (parentCloudId == "mock") { + if (restoreInfo.parentCloudId == "mock") { return E_RDB; } return E_OK; diff --git a/test/unittests/cloudsync_sa/dentry/dentry_meta_file_clouddisk_test.cpp b/test/unittests/cloudsync_sa/dentry/dentry_meta_file_clouddisk_test.cpp index 7df2f1a46..eaeb78fb4 100644 --- a/test/unittests/cloudsync_sa/dentry/dentry_meta_file_clouddisk_test.cpp +++ b/test/unittests/cloudsync_sa/dentry/dentry_meta_file_clouddisk_test.cpp @@ -284,8 +284,9 @@ HWTEST_F(CloudDiskDentryMetaFileTest, MoveIntoRecycleDentryfileTest001, TestSize string name = ".trash"; string parentCloudId = "rootId"; int64_t rowId = 0; + struct RestoreInfo restoreInfo = {name, parentCloudId, name, rowId}; int32_t ret = MetaFileMgr::GetInstance().MoveIntoRecycleDentryfile(userId, bundleName, - name, parentCloudId, rowId); + restoreInfo); EXPECT_EQ(ret, 0); MetaFileMgr::GetInstance().CloudDiskClearAll(); } catch (...) { diff --git a/utils/dentry/include/meta_file.h b/utils/dentry/include/meta_file.h index efad14bc0..f1476dfb6 100644 --- a/utils/dentry/include/meta_file.h +++ b/utils/dentry/include/meta_file.h @@ -145,7 +145,7 @@ public: void Clear(uint32_t userId, const std::string &bundleName, const std::string &cloudId); int32_t CreateRecycleDentry(uint32_t userId, const std::string &bundleName); int32_t MoveIntoRecycleDentryfile(uint32_t userId, const std::string &bundleName, - const std::string &name, const std::string &parentCloudId, int64_t rowId); + const struct RestoreInfo &restoreInfo); int32_t RemoveFromRecycleDentryfile(uint32_t userId, const std::string &bundleName, const struct RestoreInfo &restoreinfo); int32_t GetNewName(std::shared_ptr metaFile, diff --git a/utils/dentry/src/meta_file_clouddisk.cpp b/utils/dentry/src/meta_file_clouddisk.cpp index 6381662c5..f17c3c86e 100644 --- a/utils/dentry/src/meta_file_clouddisk.cpp +++ b/utils/dentry/src/meta_file_clouddisk.cpp @@ -750,13 +750,13 @@ int32_t MetaFileMgr::CreateRecycleDentry(uint32_t userId, const std::string &bun return 0; } -int32_t MetaFileMgr::MoveIntoRecycleDentryfile(uint32_t userId, const std::string &bundleName, const std::string &name, - const std::string &parentCloudId, int64_t rowId) +int32_t MetaFileMgr::MoveIntoRecycleDentryfile(uint32_t userId, const std::string &bundleName, + const struct RestoreInfo &restoreInfo) { - MetaBase metaBase(name); - auto srcMetaFile = MetaFileMgr::GetInstance().GetCloudDiskMetaFile(userId, bundleName, parentCloudId); + MetaBase metaBase(restoreInfo.oldName); + auto srcMetaFile = MetaFileMgr::GetInstance().GetCloudDiskMetaFile(userId, bundleName, restoreInfo.parentCloudId); auto dstMetaFile = MetaFileMgr::GetInstance().GetCloudDiskMetaFile(userId, bundleName, RECYCLE_CLOUD_ID); - std::string uniqueName = name + "_" + std::to_string(rowId); + std::string uniqueName = restoreInfo.newName + "_" + std::to_string(restoreInfo.rowId); int32_t ret = srcMetaFile->DoLookup(metaBase); if (ret != E_OK) { LOGE("lookup src metafile failed, ret = %{public}d", ret); @@ -768,7 +768,7 @@ int32_t MetaFileMgr::MoveIntoRecycleDentryfile(uint32_t userId, const std::strin LOGE("lookup and remove dentry failed, ret = %{public}d", ret); return ret; } - metaBase.name = name; + metaBase.name = restoreInfo.oldName; ret = srcMetaFile->DoLookupAndRemove(metaBase); if (ret != E_OK) { LOGE("lookup and remove dentry failed, ret = %{public}d", ret); @@ -794,7 +794,7 @@ int32_t MetaFileMgr::RemoveFromRecycleDentryfile(uint32_t userId, const std::str metaBase.name = restoreInfo.newName; ret = dstMetaFile->DoCreate(metaBase); if (ret != E_OK) { - LOGE("lookup and remove dentry failed, ret = %{public}d", ret); + LOGE("DoCreate failed, ret = %{public}d", ret); return ret; } metaBase.name = uniqueName; -- Gitee From 9e299231ab40fe1d07bc40cebb6e835bc7630323 Mon Sep 17 00:00:00 2001 From: WDY Date: Mon, 23 Jun 2025 12:55:52 +0000 Subject: [PATCH 2/2] update utils/dentry/src/meta_file_clouddisk.cpp. Signed-off-by: WDY --- utils/dentry/src/meta_file_clouddisk.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/dentry/src/meta_file_clouddisk.cpp b/utils/dentry/src/meta_file_clouddisk.cpp index f17c3c86e..19a4109f2 100644 --- a/utils/dentry/src/meta_file_clouddisk.cpp +++ b/utils/dentry/src/meta_file_clouddisk.cpp @@ -765,7 +765,7 @@ int32_t MetaFileMgr::MoveIntoRecycleDentryfile(uint32_t userId, const std::strin metaBase.name = uniqueName; ret = dstMetaFile->DoCreate(metaBase); if (ret != E_OK) { - LOGE("lookup and remove dentry failed, ret = %{public}d", ret); + LOGE("DoCreate dst metafile failed, ret = %{public}d", ret); return ret; } metaBase.name = restoreInfo.oldName; @@ -794,7 +794,7 @@ int32_t MetaFileMgr::RemoveFromRecycleDentryfile(uint32_t userId, const std::str metaBase.name = restoreInfo.newName; ret = dstMetaFile->DoCreate(metaBase); if (ret != E_OK) { - LOGE("DoCreate failed, ret = %{public}d", ret); + LOGE("DoCreate dst metafile failed, ret = %{public}d", ret); return ret; } metaBase.name = uniqueName; -- Gitee