[FIX] Incorrect defensive when set filled_tx_log_ts
This commit is contained in:
parent
7ffa86657d
commit
04e378d7e4
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user