提交 04e378d7 编写于 作者: O obdev 提交者: wangzelin.wzl

[FIX] Incorrect defensive when set filled_tx_log_ts

上级 7ffa8665
......@@ -265,28 +265,26 @@ int ObTabletMergeInfo::record_start_tx_scn_for_tx_data(const ObTabletMergeCtx &c
param.filled_tx_log_ts_ = tx_data_memtable->get_start_log_ts();
}
} else if (ctx.param_.is_minor_merge()) {
// when this merege is MINOR_MERGE or MINI_MINOR_MERGE, use max_filtered_end_scn in filter if filtered some tx data
ObTransStatusFilter *compaction_filter_ = (ObTransStatusFilter*)ctx.compaction_filter_;
ObSSTable *oldest_tx_data_sstable = static_cast<ObSSTable *>(ctx.tables_handle_.get_table(0));
if (OB_ISNULL(oldest_tx_data_sstable)) {
ret = OB_ERR_UNEXPECTED;
LOG_ERROR("tx data sstable is unexpected nullptr", KR(ret));
} else if (OB_ISNULL(compaction_filter_)) {
// This minor merge do not filter any tx data
param.filled_tx_log_ts_ = oldest_tx_data_sstable->get_filled_tx_scn();
} else if (compaction_filter_->get_max_filtered_end_scn() > 0) {
param.filled_tx_log_ts_ = compaction_filter_->get_max_filtered_end_scn();
} else {
param.filled_tx_log_ts_ = compaction_filter_->get_recycle_scn();
}
param.filled_tx_log_ts_ = oldest_tx_data_sstable->get_filled_tx_scn();
if (OB_SUCC(ret) && param.filled_tx_log_ts_ < oldest_tx_data_sstable->get_filled_tx_scn()) {
ret = OB_ERR_UNEXPECTED;
LOG_ERROR("invliad filled tx log ts",
KR(ret),
K(param),
K(oldest_tx_data_sstable->get_filled_tx_scn()),
KPC(oldest_tx_data_sstable));
if (OB_NOT_NULL(compaction_filter_)) {
// if compaction_filter is valid, update filled_tx_log_ts if recycled some tx data
int64_t recycled_ts = 1;
if (compaction_filter_->get_max_filtered_end_scn() > 0) {
recycled_ts = compaction_filter_->get_max_filtered_end_scn();
} else {
recycled_ts = compaction_filter_->get_recycle_scn();
}
if (recycled_ts > param.filled_tx_log_ts_) {
param.filled_tx_log_ts_ = recycled_ts;
}
}
}
} else {
ret = OB_ERR_UNEXPECTED;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册