Fix physical backup clean backup piece bug
This commit is contained in:
committed by
LINxiansheng
parent
320605c68a
commit
bd92507437
@ -1366,7 +1366,8 @@ int ObTenantBackupClogDataCleanTask::do_clean()
|
||||
"cost",
|
||||
ObTimeUtil::current_time() - start_ts,
|
||||
K(ret),
|
||||
K(clean_tenant_.simple_clean_tenant_));
|
||||
K(clean_tenant_.simple_clean_tenant_),
|
||||
K(start_replay_log_ts));
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -1873,7 +1874,21 @@ int ObTenantBackupClogDataCleanTask::generate_backup_piece_pg_tasks(
|
||||
} else if (start_replay_log_ts < log_archive_round.checkpoint_ts_) {
|
||||
delete_clog_mode.mode_ = ObBackupDeleteClogMode::DELETE_ARCHIVE_LOG;
|
||||
} else {
|
||||
delete_clog_mode.mode_ = ObBackupDeleteClogMode::DELETE_BACKUP_PIECE;
|
||||
const hash::ObHashSet<ObSimpleArchiveRound> &sys_tenant_deleted_backup_round =
|
||||
data_clean_->get_sys_tenant_deleted_backup_round();
|
||||
ObSimpleArchiveRound simple_archive_round;
|
||||
simple_archive_round.copy_id_ = log_archive_round.copy_id_;
|
||||
simple_archive_round.incarnation_ = clean_element.incarnation_;
|
||||
simple_archive_round.round_id_ = log_archive_round.log_archive_round_;
|
||||
int hash_ret = sys_tenant_deleted_backup_round.exist_refactored(simple_archive_round);
|
||||
if (OB_HASH_EXIST == hash_ret) {
|
||||
delete_clog_mode.mode_ = ObBackupDeleteClogMode::DELETE_BACKUP_PIECE;
|
||||
} else if (OB_HASH_NOT_EXIST == hash_ret) {
|
||||
delete_clog_mode.mode_ = ObBackupDeleteClogMode::DELETE_ARCHIVE_LOG;
|
||||
} else {
|
||||
ret = OB_SUCCESS == hash_ret ? OB_ERR_UNEXPECTED : hash_ret;
|
||||
LOG_WARN("failed to check archive round exist", K(ret), K(hash_ret), K(simple_archive_round));
|
||||
}
|
||||
}
|
||||
} else if ((ObLogArchiveStatus::DOING == log_archive_round.log_archive_status_ ||
|
||||
ObLogArchiveStatus::INTERRUPTED == log_archive_round.log_archive_status_) &&
|
||||
@ -1883,22 +1898,34 @@ int ObTenantBackupClogDataCleanTask::generate_backup_piece_pg_tasks(
|
||||
} else {
|
||||
delete_clog_mode.mode_ = ObBackupDeleteClogMode::NONE;
|
||||
}
|
||||
} else if (ObBackupPieceStatus::BACKUP_PIECE_FROZEN == backup_piece_info.status_) {
|
||||
if (ObBackupFileStatus::BACKUP_FILE_DELETED == backup_piece_info.file_status_) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("backup file status is unexpected", K(ret), K(backup_piece_info));
|
||||
} else if (ObBackupFileStatus::BACKUP_FILE_COPYING == backup_piece_info.file_status_) {
|
||||
delete_clog_mode.mode_ = ObBackupDeleteClogMode::NONE;
|
||||
} else if (backup_piece_info.max_ts_ > start_replay_log_ts || backup_piece_info.copies_num_ < backup_copies) {
|
||||
} else {
|
||||
const hash::ObHashSet<ObSimplePieceKey> &sys_tenant_deleted_backup_piece =
|
||||
data_clean_->get_sys_tenant_deleted_backup_piece();
|
||||
ObSimplePieceKey simple_piece_key;
|
||||
simple_piece_key.backup_piece_id_ = backup_piece_info.backup_piece_id_;
|
||||
simple_piece_key.copy_id_ = log_archive_round.copy_id_;
|
||||
simple_piece_key.incarnation_ = clean_element.incarnation_;
|
||||
simple_piece_key.round_id_ = backup_piece_info.round_id_;
|
||||
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;
|
||||
} else if (OB_HASH_NOT_EXIST == hash_ret) {
|
||||
delete_clog_mode.mode_ = ObBackupDeleteClogMode::NONE;
|
||||
} else {
|
||||
delete_clog_mode.mode_ = ObBackupDeleteClogMode::DELETE_BACKUP_PIECE;
|
||||
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));
|
||||
}
|
||||
} else {
|
||||
delete_clog_mode.mode_ = ObBackupDeleteClogMode::NONE;
|
||||
}
|
||||
|
||||
if (OB_SUCC(ret)) {
|
||||
LOG_INFO("start handle backup piece",
|
||||
K(delete_clog_mode),
|
||||
"backup dest option",
|
||||
clean_element.backup_dest_option_,
|
||||
K(start_replay_log_ts),
|
||||
K(backup_piece_info),
|
||||
K(log_archive_round));
|
||||
|
||||
if ((ObBackupDeleteClogMode::DELETE_BACKUP_PIECE == delete_clog_mode.mode_ &&
|
||||
clean_element.backup_dest_option_.auto_touch_reserved_backup_) ||
|
||||
(ObBackupDeleteClogMode::NONE == delete_clog_mode.mode_ &&
|
||||
@ -1979,12 +2006,12 @@ int ObTenantBackupClogDataCleanTask::generate_backup_piece_pg_delete_task(
|
||||
is_backup_backup,
|
||||
*data_clean_))) {
|
||||
LOG_WARN("failed to init clog data clean mgr", K(ret), K(cluster_backup_dest), K(log_archive_round), K(pg_key));
|
||||
} else if (clean_element.backup_dest_option_.auto_delete_obsolete_backup_) {
|
||||
if (OB_FAIL(partition_clog_data_clean_mgr.clean_clog_backup_data())) {
|
||||
LOG_WARN("failed to clean clog backup data", K(ret), K(pg_key), K(cluster_backup_dest));
|
||||
} else if (clean_element.backup_dest_option_.auto_touch_reserved_backup_) {
|
||||
if (OB_FAIL(partition_clog_data_clean_mgr.touch_clog_backup_data())) {
|
||||
LOG_WARN("failed to touch clog backup data", K(ret), K(pg_key), K(cluster_backup_dest));
|
||||
}
|
||||
} else {
|
||||
if (OB_FAIL(partition_clog_data_clean_mgr.touch_clog_backup_data())) {
|
||||
if (OB_FAIL(partition_clog_data_clean_mgr.clean_clog_backup_data())) {
|
||||
LOG_WARN("failed to clean clog backup data", K(ret), K(pg_key), K(cluster_backup_dest));
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,6 +90,14 @@ public:
|
||||
{
|
||||
return backup_backup_dest_;
|
||||
}
|
||||
const hash::ObHashSet<ObSimplePieceKey> &get_sys_tenant_deleted_backup_piece()
|
||||
{
|
||||
return sys_tenant_deleted_backup_piece_;
|
||||
}
|
||||
const hash::ObHashSet<ObSimpleArchiveRound> &get_sys_tenant_deleted_backup_round()
|
||||
{
|
||||
return sys_tenant_deleted_backup_round_;
|
||||
}
|
||||
|
||||
private:
|
||||
int get_need_clean_tenants(common::ObIArray<ObBackupDataCleanTenant> &clean_tenants);
|
||||
|
||||
Reference in New Issue
Block a user