From 82c85c5f0b4adcfe2193e1c9324626545eb40e7a Mon Sep 17 00:00:00 2001 From: yangqise7en <877793735@qq.com> Date: Fri, 25 Aug 2023 07:10:34 +0000 Subject: [PATCH] fix defense when add flag in scheduler & use accurate start time to fill merge_info --- src/storage/compaction/ob_tablet_merge_ctx.cpp | 3 ++- src/storage/compaction/ob_tablet_merge_ctx.h | 2 +- src/storage/compaction/ob_tablet_merge_task.cpp | 2 ++ src/storage/compaction/ob_tenant_tablet_scheduler.cpp | 3 +++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/storage/compaction/ob_tablet_merge_ctx.cpp b/src/storage/compaction/ob_tablet_merge_ctx.cpp index 2712e565d9..0103cb05bb 100755 --- a/src/storage/compaction/ob_tablet_merge_ctx.cpp +++ b/src/storage/compaction/ob_tablet_merge_ctx.cpp @@ -125,7 +125,7 @@ void ObTabletMergeInfo::build_sstable_merge_info(const ObTabletMergeCtx &ctx) sstable_merge_info_.ls_id_ = ctx.param_.ls_id_; sstable_merge_info_.tablet_id_ = ctx.param_.tablet_id_; sstable_merge_info_.compaction_scn_ = ctx.get_compaction_scn(); - sstable_merge_info_.merge_start_time_ = ObTimeUtility::fast_current_time(); + sstable_merge_info_.merge_start_time_ = ctx.start_time_; sstable_merge_info_.merge_type_ = ctx.is_tenant_major_merge_ ? ObMergeType::MAJOR_MERGE : ctx.param_.merge_type_; sstable_merge_info_.progressive_merge_round_ = ctx.progressive_merge_round_; sstable_merge_info_.progressive_merge_num_ = ctx.progressive_merge_num_; @@ -518,6 +518,7 @@ ObTabletMergeCtx::ObTabletMergeCtx( ls_handle_(), tablet_handle_(), sstable_logic_seq_(0), + start_time_(0), progressive_merge_num_(0), progressive_merge_round_(0), progressive_merge_step_(0), diff --git a/src/storage/compaction/ob_tablet_merge_ctx.h b/src/storage/compaction/ob_tablet_merge_ctx.h index 7aea8e62fb..49078734d5 100755 --- a/src/storage/compaction/ob_tablet_merge_ctx.h +++ b/src/storage/compaction/ob_tablet_merge_ctx.h @@ -222,7 +222,7 @@ struct ObTabletMergeCtx ObTabletHandle tablet_handle_; int16_t sstable_logic_seq_; - + int64_t start_time_; int64_t progressive_merge_num_; int64_t progressive_merge_round_; int64_t progressive_merge_step_; diff --git a/src/storage/compaction/ob_tablet_merge_task.cpp b/src/storage/compaction/ob_tablet_merge_task.cpp index 1730ab7b4c..22c2cfcc70 100755 --- a/src/storage/compaction/ob_tablet_merge_task.cpp +++ b/src/storage/compaction/ob_tablet_merge_task.cpp @@ -724,6 +724,7 @@ int ObTabletMergeExecutePrepareTask::process() } else if (OB_ISNULL(ctx_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("ctx is unexpected null", K(ret), K(ctx_)); + } else if (FALSE_IT(ctx_->start_time_ = ObTimeUtility::fast_current_time())) { } else if (OB_FAIL(get_tablet_and_result())) { LOG_WARN("failed to get tablet and result", K(ret)); } else if (OB_FAIL(ctx_->get_schema_and_gene_from_result(result_))) { @@ -943,6 +944,7 @@ int ObTabletMergePrepareTask::process() } else if (OB_ISNULL(ctx = merge_dag_->get_ctx())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("ctx is unexpected null", K(ret), KP(ctx), KPC(merge_dag_)); + } else if (FALSE_IT(ctx->start_time_ = ObTimeUtility::fast_current_time())) { } else if (OB_UNLIKELY(is_major_merge_type(ctx->param_.merge_type_) && !MTL(ObTenantTabletScheduler *)->could_major_merge_start())) { ret = OB_CANCELED; diff --git a/src/storage/compaction/ob_tenant_tablet_scheduler.cpp b/src/storage/compaction/ob_tenant_tablet_scheduler.cpp index 8d62046143..db36782938 100755 --- a/src/storage/compaction/ob_tenant_tablet_scheduler.cpp +++ b/src/storage/compaction/ob_tenant_tablet_scheduler.cpp @@ -695,6 +695,9 @@ int ObProhibitScheduleMediumMap::add_flag(const ObLSID &ls_id, const ProhibitFla } else if (tmp_flag != input_flag) { ret = OB_EAGAIN; LOG_TRACE("flag in conflict", K(ret), K(ls_id), K(tmp_flag), K(input_flag)); + } else { // tmp_flag == input_flag + ret = OB_ERR_UNEXPECTED; + LOG_TRACE("flag in already exist", K(ret), K(ls_id), K(tmp_flag), K(input_flag)); } } return ret;