提交 3c012972 编写于 作者: G godyangfight 提交者: LINGuanRen

Fix delete backuppiece can not delete files bug

上级 d5a5ed42
......@@ -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));
......
......@@ -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<ObBackupPieceInfoKey> &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;
......
......@@ -220,6 +220,8 @@ private:
const ObBackupDataCleanElement &clean_element,
common::ObIArray<ObLogArchiveRound> &log_archive_rounds,
common::ObIArray<ObBackupPieceInfoKey> &backup_piece_keys);
int get_tenant_delete_piece(const share::ObBackupCleanInfo &clean_info, const ObBackupDataCleanElement &clean_element,
common::ObIArray<ObBackupPieceInfoKey> &backup_piece_keys);
int delete_tenant_backup_meta_data(
const share::ObBackupCleanInfo &clean_info, const ObBackupDataCleanTenant &clean_tenant);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册