From b5bf5ed1b9008ce8c27866a15709c05962c85d4b Mon Sep 17 00:00:00 2001 From: godyangfight Date: Thu, 19 Sep 2024 07:50:23 +0000 Subject: [PATCH] Fix master transfer relative optimization --- src/storage/high_availability/ob_tablet_backfill_tx.cpp | 8 ++++++++ src/storage/high_availability/ob_transfer_backfill_tx.cpp | 8 +++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/storage/high_availability/ob_tablet_backfill_tx.cpp b/src/storage/high_availability/ob_tablet_backfill_tx.cpp index dd7e0dbde3..8223400ed4 100644 --- a/src/storage/high_availability/ob_tablet_backfill_tx.cpp +++ b/src/storage/high_availability/ob_tablet_backfill_tx.cpp @@ -713,6 +713,14 @@ int ObTabletBackfillTXTask::get_backfill_tx_memtables_( ret = OB_EAGAIN; LOG_WARN("memtable start log ts is bigger than log sync scn but not empty, need retry", K(ret), KPC(memtable), KPC_(backfill_tx_ctx)); } + } else if (table->get_end_scn() > backfill_tx_ctx_->backfill_scn_) { + if (tablet_info_.is_committed_) { + ret = OB_ERR_UNEXPECTED; + LOG_ERROR("memtable end log ts is bigger than log sync", K(ret), KPC(memtable), KPC_(backfill_tx_ctx)); + } else { + ret = OB_EAGAIN; + LOG_WARN("memtable end log ts is bigger than log sync scn, need retry", K(ret), KPC(memtable), KPC_(backfill_tx_ctx)); + } } else { memtable_end_scn = memtable->get_end_scn(); } diff --git a/src/storage/high_availability/ob_transfer_backfill_tx.cpp b/src/storage/high_availability/ob_transfer_backfill_tx.cpp index 3f1234c0a6..d3cefa5a4e 100644 --- a/src/storage/high_availability/ob_transfer_backfill_tx.cpp +++ b/src/storage/high_availability/ob_transfer_backfill_tx.cpp @@ -687,6 +687,7 @@ int ObTransferBackfillTXDagNet::start_running_for_backfill_() int tmp_ret = OB_SUCCESS; ObStartTransferBackfillTXDag *backfill_tx_dag = nullptr; share::ObTenantDagScheduler *scheduler = nullptr; + const bool emergency = true; if (IS_NOT_INIT) { ret = OB_NOT_INIT; @@ -702,7 +703,7 @@ int ObTransferBackfillTXDagNet::start_running_for_backfill_() LOG_WARN("failed to add transfer backfill tx dag into dag net", K(ret)); } else if (OB_FAIL(backfill_tx_dag->create_first_task())) { LOG_WARN("failed to create transfer backfill tx first task", K(ret)); - } else if (OB_FAIL(scheduler->add_dag(backfill_tx_dag))) { + } else if (OB_FAIL(scheduler->add_dag(backfill_tx_dag, emergency))) { LOG_WARN("failed to add backfill dag", K(ret), K(*backfill_tx_dag)); if (OB_SIZE_OVERFLOW != ret && OB_EAGAIN != ret) { LOG_WARN("Fail to add task", K(ret)); @@ -1061,6 +1062,7 @@ int ObStartTransferBackfillTXTask::generate_transfer_backfill_tx_dags_() ObBackfillTXCtx *backfill_tx_ctx = nullptr; storage::ObTabletBackfillInfo tablet_info; ObStartTransferBackfillTXDag *backfill_tx_dag = nullptr; + const bool emergency = true; if (IS_NOT_INIT) { ret = OB_NOT_INIT; @@ -1107,7 +1109,7 @@ int ObStartTransferBackfillTXTask::generate_transfer_backfill_tx_dags_() LOG_WARN("failed to add child dag", K(ret), K(*ctx_)); } else if (OB_FAIL(finish_backfill_tx_dag->create_first_task())) { LOG_WARN("failed to create first task", K(ret)); - } else if (OB_FAIL(scheduler->add_dag(tablet_backfill_tx_dag))) { + } else if (OB_FAIL(scheduler->add_dag(tablet_backfill_tx_dag, emergency))) { LOG_WARN("failed to add tablet backfill tx dag", K(ret), K(*tablet_backfill_tx_dag)); if (OB_SIZE_OVERFLOW != ret && OB_EAGAIN != ret) { LOG_WARN("Fail to add task", K(ret)); @@ -1117,7 +1119,7 @@ int ObStartTransferBackfillTXTask::generate_transfer_backfill_tx_dags_() } if (OB_FAIL(ret)) { - } else if (OB_FAIL(scheduler->add_dag(finish_backfill_tx_dag))) { + } else if (OB_FAIL(scheduler->add_dag(finish_backfill_tx_dag, emergency))) { LOG_WARN("failed to add finish backfill tx dag", K(ret), K(*finish_backfill_tx_dag)); if (OB_SIZE_OVERFLOW != ret && OB_EAGAIN != ret) { LOG_WARN("Fail to add task", K(ret));