diff --git a/deps/oblib/src/lib/utility/ob_tracepoint.h b/deps/oblib/src/lib/utility/ob_tracepoint.h index bdc80b25d..56deaf9f9 100644 --- a/deps/oblib/src/lib/utility/ob_tracepoint.h +++ b/deps/oblib/src/lib/utility/ob_tracepoint.h @@ -613,6 +613,7 @@ class EventTable EN_LS_REBUILD_PREPARE_FAILED = 917, EN_TABLET_GC_TASK_FAILED = 918, EN_UPDATE_TABLET_HA_STATUS_FAILED = 919, + EN_GENERATE_REBUILD_TASK_FAILED = 920, // Log Archive and Restore 1001 - 1100 EN_START_ARCHIVE_LOG_GAP = 1001, diff --git a/src/storage/high_availability/ob_ls_migration_handler.cpp b/src/storage/high_availability/ob_ls_migration_handler.cpp index cc1c5c346..58b66e7c3 100644 --- a/src/storage/high_availability/ob_ls_migration_handler.cpp +++ b/src/storage/high_availability/ob_ls_migration_handler.cpp @@ -545,6 +545,7 @@ int ObLSMigrationHandler::do_init_status_() int tmp_ret = OB_SUCCESS; ObMigrationStatus migration_status = ObMigrationStatus::OB_MIGRATION_STATUS_MAX; bool is_empty = false; + bool can_switch_next_stage = true; ObLSMigrationHandlerStatus new_status = ObLSMigrationHandlerStatus::MAX_STATUS; if (!is_inited_) { @@ -578,6 +579,7 @@ int ObLSMigrationHandler::do_init_status_() } else { if (OB_FAIL(build_rebuild_task_())) { LOG_WARN("failed to build rebuild task", K(ret), KPC(ls_)); + can_switch_next_stage = false; reuse_(); } else { is_empty = false; @@ -591,26 +593,22 @@ int ObLSMigrationHandler::do_init_status_() } if (OB_SUCC(ret)) { - if (!is_empty && OB_FAIL(check_before_do_task_())) { + ObLSMigrationTask task; + if (OB_FAIL(check_before_do_task_())) { LOG_WARN("failed to check before do task", K(ret), KPC(ls_)); } else if (OB_FAIL(change_status_(new_status))) { LOG_WARN("failed to change status", K(ret), K(new_status), KPC(ls_)); + } else if (OB_FAIL(get_ls_migration_task_(task))) { + LOG_WARN("failed to get ls migration task", K(ret), KPC(ls_)); } else { - if (!is_empty) { - ObLSMigrationTask task; - if (OB_FAIL(get_ls_migration_task_(task))) { - LOG_WARN("failed to get ls migration task", K(ret), KPC(ls_)); - } else { - SERVER_EVENT_ADD("storage_ha", "ls_ha_start", - "tenant_id", ls_->get_tenant_id(), - "ls_id", ls_->get_ls_id().id(), - "src", task.arg_.data_src_.get_server(), - "dst", task.arg_.dst_.get_server(), - "task_id", task.task_id_, - "is_failed", OB_SUCCESS, - ObMigrationOpType::get_str(task.arg_.type_)); - } - } + SERVER_EVENT_ADD("storage_ha", "ls_ha_start", + "tenant_id", ls_->get_tenant_id(), + "ls_id", ls_->get_ls_id().id(), + "src", task.arg_.data_src_.get_server(), + "dst", task.arg_.dst_.get_server(), + "task_id", task.task_id_, + "is_failed", OB_SUCCESS, + ObMigrationOpType::get_str(task.arg_.type_)); wakeup_(); } } @@ -618,7 +616,9 @@ int ObLSMigrationHandler::do_init_status_() } if (OB_FAIL(ret)) { - if (OB_SUCCESS != (tmp_ret = switch_next_stage(ret))) { + if (!can_switch_next_stage) { + //do nothing + } else if (OB_SUCCESS != (tmp_ret = switch_next_stage(ret))) { LOG_WARN("failed to report result", K(ret), K(tmp_ret)); } } @@ -999,10 +999,11 @@ int ObLSMigrationHandler::check_can_skip_prepare_status_(bool &can_skip) if (!is_inited_) { ret = OB_NOT_INIT; LOG_WARN("ls migration handler do not init", K(ret)); - } else if (OB_FAIL(get_ls_migration_task_(task))) { - LOG_WARN("failed to get ls migration task", K(ret), KPC(ls_)); - } else if (ObMigrationOpType::REBUILD_LS_OP == task.arg_.type_) { - can_skip = false; + //} else if (OB_FAIL(get_ls_migration_task_(task))) { + // LOG_WARN("failed to get ls migration task", K(ret), KPC(ls_)); + //} else if (ObMigrationOpType::REBUILD_LS_OP == task.arg_.type_) { + // can_skip = false; + // TODO(muwei.ym) Open IT in 4.1 and the condition should change to migration status rebuild flag setted. } else { can_skip = true; } @@ -1106,6 +1107,15 @@ int ObLSMigrationHandler::build_rebuild_task_() } } +#ifdef ERRSIM + if (OB_SUCC(ret)) { + ret = E(EventTable::EN_GENERATE_REBUILD_TASK_FAILED) OB_SUCCESS; + if (OB_FAIL(ret)) { + STORAGE_LOG(ERROR, "fake EN_GENERATE_REBUILD_TASK_FAILED", K(ret)); + } + } +#endif + if (OB_FAIL(ret)) { } else { ObTaskId task_id;