fix defense when add flag in scheduler & use accurate start time to fill merge_info
This commit is contained in:
@ -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_.ls_id_ = ctx.param_.ls_id_;
|
||||||
sstable_merge_info_.tablet_id_ = ctx.param_.tablet_id_;
|
sstable_merge_info_.tablet_id_ = ctx.param_.tablet_id_;
|
||||||
sstable_merge_info_.compaction_scn_ = ctx.get_compaction_scn();
|
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_.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_round_ = ctx.progressive_merge_round_;
|
||||||
sstable_merge_info_.progressive_merge_num_ = ctx.progressive_merge_num_;
|
sstable_merge_info_.progressive_merge_num_ = ctx.progressive_merge_num_;
|
||||||
@ -518,6 +518,7 @@ ObTabletMergeCtx::ObTabletMergeCtx(
|
|||||||
ls_handle_(),
|
ls_handle_(),
|
||||||
tablet_handle_(),
|
tablet_handle_(),
|
||||||
sstable_logic_seq_(0),
|
sstable_logic_seq_(0),
|
||||||
|
start_time_(0),
|
||||||
progressive_merge_num_(0),
|
progressive_merge_num_(0),
|
||||||
progressive_merge_round_(0),
|
progressive_merge_round_(0),
|
||||||
progressive_merge_step_(0),
|
progressive_merge_step_(0),
|
||||||
|
@ -222,7 +222,7 @@ struct ObTabletMergeCtx
|
|||||||
ObTabletHandle tablet_handle_;
|
ObTabletHandle tablet_handle_;
|
||||||
|
|
||||||
int16_t sstable_logic_seq_;
|
int16_t sstable_logic_seq_;
|
||||||
|
int64_t start_time_;
|
||||||
int64_t progressive_merge_num_;
|
int64_t progressive_merge_num_;
|
||||||
int64_t progressive_merge_round_;
|
int64_t progressive_merge_round_;
|
||||||
int64_t progressive_merge_step_;
|
int64_t progressive_merge_step_;
|
||||||
|
@ -724,6 +724,7 @@ int ObTabletMergeExecutePrepareTask::process()
|
|||||||
} else if (OB_ISNULL(ctx_)) {
|
} else if (OB_ISNULL(ctx_)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("ctx is unexpected null", K(ret), K(ctx_));
|
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())) {
|
} else if (OB_FAIL(get_tablet_and_result())) {
|
||||||
LOG_WARN("failed to get tablet and result", K(ret));
|
LOG_WARN("failed to get tablet and result", K(ret));
|
||||||
} else if (OB_FAIL(ctx_->get_schema_and_gene_from_result(result_))) {
|
} 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())) {
|
} else if (OB_ISNULL(ctx = merge_dag_->get_ctx())) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("ctx is unexpected null", K(ret), KP(ctx), KPC(merge_dag_));
|
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_)
|
} else if (OB_UNLIKELY(is_major_merge_type(ctx->param_.merge_type_)
|
||||||
&& !MTL(ObTenantTabletScheduler *)->could_major_merge_start())) {
|
&& !MTL(ObTenantTabletScheduler *)->could_major_merge_start())) {
|
||||||
ret = OB_CANCELED;
|
ret = OB_CANCELED;
|
||||||
|
@ -695,6 +695,9 @@ int ObProhibitScheduleMediumMap::add_flag(const ObLSID &ls_id, const ProhibitFla
|
|||||||
} else if (tmp_flag != input_flag) {
|
} else if (tmp_flag != input_flag) {
|
||||||
ret = OB_EAGAIN;
|
ret = OB_EAGAIN;
|
||||||
LOG_TRACE("flag in conflict", K(ret), K(ls_id), K(tmp_flag), K(input_flag));
|
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;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user