fix clog return code retry

This commit is contained in:
Charles0429
2022-11-22 08:35:57 +00:00
committed by wangzelin.wzl
parent 3772f41232
commit f72d873722
4 changed files with 16 additions and 11 deletions

View File

@ -771,3 +771,11 @@ int ObDDLUtil::ddl_get_tablet(
}
return ret;
}
bool ObDDLUtil::need_remote_write(const int ret_code)
{
return OB_NOT_MASTER == ret_code
|| OB_NOT_RUNNING == ret_code
|| OB_LS_LOCATION_LEADER_NOT_EXIST == ret_code
|| OB_EAGAIN == ret_code;
}

View File

@ -274,6 +274,7 @@ public:
return OB_TRY_LOCK_ROW_CONFLICT == ret || OB_NOT_MASTER == ret || OB_TIMEOUT == ret
|| OB_EAGAIN == ret || OB_LS_LOCATION_LEADER_NOT_EXIST == ret;
}
static bool need_remote_write(const int ret_code);
private:
static int generate_column_name_str(

View File

@ -656,6 +656,10 @@ int ObDDLRedoLogWriter::write_ddl_start_log(ObDDLKvMgrHandle &ddl_kv_mgr_handle,
lsn,
log_ts))) {
LOG_WARN("fail to submit ddl start log", K(ret), K(buffer_size));
if (ObDDLUtil::need_remote_write(ret)) {
ret = OB_NOT_MASTER;
LOG_INFO("overwrite return to OB_NOT_MASTER");
}
} else {
ObDDLClogCb *tmp_cb = cb;
cb = nullptr;
@ -996,7 +1000,7 @@ int ObDDLSSTableRedoWriter::write_redo_log(const ObDDLMacroBlockRedoInfo &redo_i
LOG_WARN("allocate memory failed", K(ret), K(BUF_SIZE));
} else if (!remote_write_) {
if (OB_FAIL(ObDDLMacroBlockRedoWriter::write_macro_redo(redo_info, ls->get_ls_id(), ls->get_log_handler(), macro_block_id, buffer_, ddl_redo_handle_))) {
if (need_remote_write(ret)) {
if (ObDDLUtil::need_remote_write(ret)) {
if (OB_FAIL(switch_to_remote_write())) {
LOG_WARN("fail to switch to remote write", K(ret));
}
@ -1073,7 +1077,7 @@ int ObDDLSSTableRedoWriter::write_prepare_log(const ObITable::TableKey &table_ke
LOG_ERROR("ls should not be null", K(ret), K(table_key));
} else if (!remote_write_) {
if (OB_FAIL(ObDDLRedoLogWriter::get_instance().write_ddl_finish_log(log, ObDDLClogType::DDL_PREPARE_LOG, ls->get_log_handler(), handle))) {
if (need_remote_write(ret)) {
if (ObDDLUtil::need_remote_write(ret)) {
if (OB_FAIL(switch_to_remote_write())) {
LOG_WARN("fail to switch to remote write", K(ret), K(table_key));
}
@ -1127,7 +1131,7 @@ int ObDDLSSTableRedoWriter::write_commit_log(const ObITable::TableKey &table_key
LOG_ERROR("ls should not be null", K(ret), K(table_key));
} else if (!remote_write_) {
if (OB_FAIL(ObDDLRedoLogWriter::get_instance().write_ddl_finish_log(log, ObDDLClogType::DDL_COMMIT_LOG, ls->get_log_handler(), handle))) {
if (need_remote_write(ret)) {
if (ObDDLUtil::need_remote_write(ret)) {
if (OB_FAIL(switch_to_remote_write())) {
LOG_WARN("fail to switch to remote write", K(ret), K(table_key));
}
@ -1154,13 +1158,6 @@ int ObDDLSSTableRedoWriter::write_commit_log(const ObITable::TableKey &table_key
return ret;
}
bool ObDDLSSTableRedoWriter::need_remote_write(int ret_code)
{
return OB_NOT_MASTER == ret_code
|| OB_NOT_RUNNING == ret_code
|| OB_LS_LOCATION_LEADER_NOT_EXIST == ret_code;
}
int ObDDLSSTableRedoWriter::switch_to_remote_write()
{
int ret = OB_SUCCESS;

View File

@ -259,7 +259,6 @@ public:
OB_INLINE void set_start_log_ts(const int64_t start_log_ts) { ATOMIC_SET(&start_log_ts_, start_log_ts); }
OB_INLINE int64_t get_start_log_ts() const { return ATOMIC_LOAD(&start_log_ts_); }
private:
bool need_remote_write(int ret_code);
int switch_to_remote_write();
private:
bool is_inited_;