[CP] fix backup delete task and backup task stuck

This commit is contained in:
WenJinyu
2023-06-26 12:48:27 +00:00
committed by ob-robot
parent a222f4d4c9
commit 9503fc6708
4 changed files with 21 additions and 46 deletions

View File

@ -885,7 +885,7 @@ int ObBackupCleanLSTask::build(const ObBackupCleanTaskAttr &task_attr, const ObB
int ret = OB_SUCCESS;
ObBackupScheduleTaskKey key;
if (!task_attr.is_valid() || !ls_attr.is_valid()) {
ret = OB_SUCCESS;
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), K(task_attr), K(ls_attr));
} else if (OB_FAIL(key.init(ls_attr.tenant_id_, ls_attr.job_id_, ls_attr.task_id_, ls_attr.ls_id_.id(), BackupJobType::BACKUP_CLEAN_JOB))) {
LOG_WARN("failed to init backup schedule task key", K(ret), K(task_attr), K(ls_attr));

View File

@ -308,7 +308,6 @@ int ObBackupCleanJobOperator::do_parse_job_result_(
{
int ret = OB_SUCCESS;
int64_t real_length = 0;
char backup_path[OB_MAX_BACKUP_DEST_LENGTH] = "";
char status_str[OB_DEFAULT_STATUS_LENTH] = "";
char clean_type_str[OB_DEFAULT_STATUS_LENTH] = "";
char job_level[OB_SYS_TASK_TYPE_LENGTH] = "";
@ -333,8 +332,6 @@ int ObBackupCleanJobOperator::do_parse_job_result_(
if (OB_FAIL(ret)) {
} else if (OB_FAIL(parse_int_(parameter_str, parameter))) {
LOG_WARN("failed to parse parameter", K(ret), K(parameter_str));
} else if (OB_FAIL(job.backup_path_.assign(backup_path))) {
LOG_WARN("failed to set backup path", K(ret), K(backup_path));
} else if (OB_FAIL(job.status_.set_status(status_str))) {
LOG_WARN("failed to set status", K(ret), K(status_str));
} else if (FALSE_IT(job.clean_type_ = ObNewBackupCleanType::get_type(clean_type_str))) {
@ -772,6 +769,7 @@ int ObBackupCleanTaskOperator::do_parse_task_result_(
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_RESULT, task_attr.result_, int);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_TOTAL_LS_COUNT, task_attr.total_ls_count_, int);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_FINISH_LS_COUNT, task_attr.finish_ls_count_, int);
EXTRACT_STRBUF_FIELD_MYSQL(result, OB_STR_BACKUP_PATH, backup_path, OB_MAX_BACKUP_DEST_LENGTH, real_length);
if (OB_FAIL(ret)) {
} else if (OB_FAIL(task_attr.backup_path_.assign(backup_path))) {
LOG_WARN("failed to set backup path", K(ret), K(backup_path));
@ -1057,9 +1055,9 @@ int ObBackupCleanLSTaskOperator::get_ls_tasks_from_task_id(
} else {
HEAP_VAR(ObMySQLProxy::ReadResult, res) {
ObMySQLResult *result = NULL;
if (OB_FAIL(fill_select_ls_task_sql_(sql))) {
LOG_WARN("failed to fill select ls task sql", K(ret));
} else if (OB_FAIL(sql.append_fmt(" where %s=%ld order by end_ts", OB_STR_TASK_ID, task_id))) {
if (OB_FAIL(sql.assign_fmt("select * from %s where %s=%ld order by end_ts",
OB_ALL_BACKUP_DELETE_LS_TASK_TNAME, OB_STR_TASK_ID, task_id))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (need_lock && OB_FAIL(sql.append_fmt(" for update"))) {
LOG_WARN("failed to append sql", K(ret));
} else if (OB_FAIL(proxy.read(res, gen_meta_tenant_id(tenant_id), sql.ptr()))) {
@ -1093,10 +1091,8 @@ int ObBackupCleanLSTaskOperator::get_ls_task(
} else {
HEAP_VAR(ObMySQLProxy::ReadResult, res) {
ObMySQLResult *result = NULL;
if (OB_FAIL(fill_select_ls_task_sql_(sql))) {
LOG_WARN("failed to fill select ls task sql", K(ret));
} else if (OB_FAIL(sql.append_fmt(" where %s=%ld and %s=%ld and %s=%ld",
OB_STR_TASK_ID, task_id, OB_STR_LS_ID, ls_id.id(), OB_STR_TENANT_ID, tenant_id))) {
if (OB_FAIL(sql.assign_fmt("select * from %s where %s=%ld and %s=%ld and %s=%ld",
OB_ALL_BACKUP_DELETE_LS_TASK_TNAME, OB_STR_TASK_ID, task_id, OB_STR_LS_ID, ls_id.id(), OB_STR_TENANT_ID, tenant_id))) {
LOG_WARN("failed append sql", K(ret),K(sql));
} else if (need_lock && OB_FAIL(sql.append_fmt(" for update"))) {
LOG_WARN("failed to append sql", K(ret));
@ -1119,40 +1115,6 @@ int ObBackupCleanLSTaskOperator::get_ls_task(
}
return ret;
}
int ObBackupCleanLSTaskOperator::fill_select_ls_task_sql_(ObSqlString &sql)
{
int ret = OB_SUCCESS;
if (OB_FAIL(sql.assign_fmt("select %s", OB_STR_TASK_ID))) {
LOG_WARN("failed to assign fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_TENANT_ID))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_LS_ID))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_JOB_ID))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_STATUS))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_TASK_TYPE))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_ID))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_ROUND_ID))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_START_TS))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_END_TS))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_TASK_TRACE_ID))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_RESULT))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(", %s", OB_STR_RETRY_ID))) {
LOG_WARN("failed to append fmt", K(ret));
} else if (OB_FAIL(sql.append_fmt(" from %s", OB_ALL_BACKUP_DELETE_LS_TASK_TNAME))) {
LOG_WARN("failed to append fmt", K(ret));
}
return ret;
}
int ObBackupCleanLSTaskOperator::parse_ls_result_(
sqlclient::ObMySQLResult &result,
@ -1189,6 +1151,8 @@ int ObBackupCleanLSTaskOperator::do_parse_ls_result_(ObMySQLResult &result, ObBa
char status_str[OB_DEFAULT_STATUS_LENTH] = "";
char task_type_str[64] = "";
char trace_id_str[OB_MAX_TRACE_ID_BUFFER_SIZE] = "";
char server_str[OB_MAX_SERVER_ADDR_SIZE] = { 0 };
int64_t port = 0;
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_TASK_ID, ls_attr.task_id_, int64_t);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_JOB_ID, ls_attr.job_id_, int64_t);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_TENANT_ID, ls_attr.tenant_id_, uint64_t);
@ -1200,13 +1164,23 @@ int ObBackupCleanLSTaskOperator::do_parse_ls_result_(ObMySQLResult &result, ObBa
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_END_TS, ls_attr.end_ts_, int64_t);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_RESULT, ls_attr.result_, int);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_RETRY_ID, ls_attr.retry_id_, int64_t);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_TOTAL_BYTES, ls_attr.stats_.total_bytes_, int64_t);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_DELETE_BYTES, ls_attr.stats_.delete_bytes_, int64_t);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_TOTAL_FILES_COUNT, ls_attr.stats_.total_files_count_, int64_t);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_DELETE_FILES_COUNT, ls_attr.stats_.delete_files_count_, int64_t);
EXTRACT_STRBUF_FIELD_MYSQL(result, OB_STR_TASK_TRACE_ID, trace_id_str, OB_MAX_TRACE_ID_BUFFER_SIZE, real_length);
EXTRACT_STRBUF_FIELD_MYSQL(result, OB_STR_SEVER_IP, server_str, OB_MAX_SERVER_ADDR_SIZE, real_length);
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_SERVER_PORT, port, int64_t);
if (OB_FAIL(ret)) {
} else if (OB_FAIL(ls_attr.status_.set_status(status_str))) {
LOG_WARN("failed to set status", K(ret), K(status_str));
} else if (FALSE_IT(ls_attr.task_type_ = ObBackupCleanTaskType::get_type(task_type_str))) {
} else if (strcmp(trace_id_str, "") != 0 && OB_FAIL(ls_attr.task_trace_id_.set(trace_id_str))) {
LOG_WARN("failed to set ls task trace id", K(ret), K(trace_id_str));
} else if (!ls_attr.dst_.set_ip_addr(server_str, static_cast<int32_t>(port))) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("fail to set server ip and port", K(ret), K(server_str), K(port));
} else {
if (ls_attr.is_delete_backup_set_task()) {
EXTRACT_INT_FIELD_MYSQL(result, OB_STR_ID, ls_attr.backup_set_id_, int64_t);

View File

@ -180,7 +180,6 @@ public:
const ObLSID &ls_id, const ObBackupCleanStats &stats);
private:
static int fill_dml_with_ls_task_(const ObBackupCleanLSTaskAttr &ls_attr, ObDMLSqlSplicer &dml);
static int fill_select_ls_task_sql_(ObSqlString &sql);
static int parse_ls_result_(sqlclient::ObMySQLResult &result, ObIArray<ObBackupCleanLSTaskAttr> &ls_attrs);
static int do_parse_ls_result_(sqlclient::ObMySQLResult &result, ObBackupCleanLSTaskAttr &ls_attr);
};

View File

@ -428,6 +428,8 @@ bool ObBackupCleanTaskAttr::is_valid() const
is_valid = false;
} else if (!status_.is_valid()) {
is_valid = false;
} else if (0 == backup_path_.size()) {
is_valid = false;
} else {
is_valid = ObBackupCleanTaskType::is_valid(task_type_)
&& job_id_ >= 0