diff --git a/src/rootserver/backup/ob_tenant_backup_data_clean_mgr.cpp b/src/rootserver/backup/ob_tenant_backup_data_clean_mgr.cpp index 2abd9ded9cf9cb05a80564e708153c2f5485062c..8f914f80d5b10ed72f4ee0398efd3e7c893a142c 100644 --- a/src/rootserver/backup/ob_tenant_backup_data_clean_mgr.cpp +++ b/src/rootserver/backup/ob_tenant_backup_data_clean_mgr.cpp @@ -1909,8 +1909,10 @@ int ObTenantBackupClogDataCleanTask::generate_backup_piece_pg_tasks( int hash_ret = sys_tenant_deleted_backup_piece.exist_refactored(simple_piece_key); if (OB_HASH_EXIST == hash_ret) { delete_clog_mode.mode_ = ObBackupDeleteClogMode::DELETE_BACKUP_PIECE; + LOG_INFO("backup piece will be deleted", K(simple_piece_key)); } else if (OB_HASH_NOT_EXIST == hash_ret) { delete_clog_mode.mode_ = ObBackupDeleteClogMode::NONE; + LOG_INFO("backup piece will not be deleted", K(simple_piece_key)); } else { ret = OB_SUCCESS == hash_ret ? OB_ERR_UNEXPECTED : hash_ret; LOG_WARN("failed to check backup piece exist", K(ret), K(hash_ret), K(simple_piece_key)); diff --git a/src/rootserver/ob_backup_data_clean.cpp b/src/rootserver/ob_backup_data_clean.cpp index 999c104c239a5e648ea64f93f610a8e2a4791cd0..b63a0eead77fee2930e4185f6a0c3120c3529150 100644 --- a/src/rootserver/ob_backup_data_clean.cpp +++ b/src/rootserver/ob_backup_data_clean.cpp @@ -3017,19 +3017,8 @@ int ObBackupDataClean::get_need_delete_clog_round_and_piece(const share::ObBacku ret = OB_NOT_INIT; LOG_WARN("backup data clean do not init", K(ret)); } else if (clean_info.is_delete_backup_piece()) { - ObBackupPieceInfoKey piece_key; - if (clean_element.log_archive_round_array_.empty() || clean_element.log_archive_round_array_.count() > 1) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("delete backup piece get unexpected round infos", K(ret), K(clean_element)); - } else { - piece_key.backup_piece_id_ = clean_info.backup_piece_id_; - piece_key.copy_id_ = clean_element.log_archive_round_array_.at(0).copy_id_; - piece_key.incarnation_ = clean_element.incarnation_; - piece_key.round_id_ = clean_element.log_archive_round_array_.at(0).log_archive_round_; - piece_key.tenant_id_ = clean_info.tenant_id_; - if (OB_FAIL(backup_piece_keys.push_back(piece_key))) { - LOG_WARN("failed to push backup piece key into array", K(ret), K(piece_key)); - } + if (OB_FAIL(get_tenant_delete_piece(clean_info, clean_element, backup_piece_keys))) { + LOG_WARN("failed to get tenant delete piece", K(ret), K(clean_info), K(clean_element)); } } else if (OB_SYS_TENANT_ID == clean_info.tenant_id_) { if (OB_FAIL(get_sys_tenant_delete_clog_round_and_piece( @@ -6862,6 +6851,45 @@ int ObBackupDataClean::remove_delete_expired_data_snapshot_(const ObSimpleBackup return ret; } +int ObBackupDataClean::get_tenant_delete_piece(const share::ObBackupCleanInfo &clean_info, + const ObBackupDataCleanElement &clean_element, common::ObIArray &backup_piece_keys) +{ + int ret = OB_SUCCESS; + ObBackupPieceInfoKey piece_key; + + if (!is_inited_) { + ret = OB_NOT_INIT; + LOG_WARN("backup data clean do not init", K(ret)); + } else if (clean_element.log_archive_round_array_.empty() || clean_element.log_archive_round_array_.count() > 1) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("delete backup piece get unexpected round infos", K(ret), K(clean_element)); + } else { + piece_key.backup_piece_id_ = clean_info.backup_piece_id_; + piece_key.copy_id_ = clean_element.log_archive_round_array_.at(0).copy_id_; + piece_key.incarnation_ = clean_element.incarnation_; + piece_key.round_id_ = clean_element.log_archive_round_array_.at(0).log_archive_round_; + piece_key.tenant_id_ = clean_info.tenant_id_; + if (OB_FAIL(backup_piece_keys.push_back(piece_key))) { + LOG_WARN("failed to push backup piece key into array", K(ret), K(piece_key)); + } + + if (OB_SUCC(ret)) { + if (OB_SYS_TENANT_ID == clean_info.tenant_id_) { + const bool overwrite_key = true; + ObSimplePieceKey simple_piece_key; + simple_piece_key.backup_piece_id_ = piece_key.backup_piece_id_; + simple_piece_key.copy_id_ = piece_key.copy_id_; + simple_piece_key.incarnation_ = piece_key.incarnation_; + simple_piece_key.round_id_ = piece_key.round_id_; + if (OB_FAIL(sys_tenant_deleted_backup_piece_.set_refactored_1(simple_piece_key, overwrite_key))) { + LOG_WARN("failed to set simple piece key", K(ret), K(simple_piece_key), K(piece_key)); + } + } + } + } + return ret; +} + int ObBackupDataClean::set_comment(ObBackupCleanInfo::Comment &comment) { int ret = OB_SUCCESS; diff --git a/src/rootserver/ob_backup_data_clean.h b/src/rootserver/ob_backup_data_clean.h index 6916d261f75efdb9f45ebc7fa5e1b67b13cc247e..b8f78a6d451377497d6376c0835a5057a0107d7b 100644 --- a/src/rootserver/ob_backup_data_clean.h +++ b/src/rootserver/ob_backup_data_clean.h @@ -220,6 +220,8 @@ private: const ObBackupDataCleanElement &clean_element, common::ObIArray &log_archive_rounds, common::ObIArray &backup_piece_keys); + int get_tenant_delete_piece(const share::ObBackupCleanInfo &clean_info, const ObBackupDataCleanElement &clean_element, + common::ObIArray &backup_piece_keys); int delete_tenant_backup_meta_data( const share::ObBackupCleanInfo &clean_info, const ObBackupDataCleanTenant &clean_tenant);