diff --git a/src/share/ob_ddl_common.cpp b/src/share/ob_ddl_common.cpp index c966ce5b0f..91c11a2b84 100644 --- a/src/share/ob_ddl_common.cpp +++ b/src/share/ob_ddl_common.cpp @@ -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; +} diff --git a/src/share/ob_ddl_common.h b/src/share/ob_ddl_common.h index 3890d1684b..f588704c7b 100644 --- a/src/share/ob_ddl_common.h +++ b/src/share/ob_ddl_common.h @@ -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( diff --git a/src/storage/ddl/ob_ddl_redo_log_writer.cpp b/src/storage/ddl/ob_ddl_redo_log_writer.cpp index 8dc57039c0..902db216ef 100644 --- a/src/storage/ddl/ob_ddl_redo_log_writer.cpp +++ b/src/storage/ddl/ob_ddl_redo_log_writer.cpp @@ -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; diff --git a/src/storage/ddl/ob_ddl_redo_log_writer.h b/src/storage/ddl/ob_ddl_redo_log_writer.h index f1781e0eb1..421013993c 100644 --- a/src/storage/ddl/ob_ddl_redo_log_writer.h +++ b/src/storage/ddl/ob_ddl_redo_log_writer.h @@ -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_;