revert skip base version
This commit is contained in:
@ -1549,7 +1549,7 @@ int ObIndexTreeMultiPassPrefetcher<DATA_PREFETCH_DEPTH, INDEX_PREFETCH_DEPTH>::O
|
|||||||
&& OB_FAIL(sstable_index_filter->check_range(prefetcher.iter_param_->read_info_, index_info,
|
&& OB_FAIL(sstable_index_filter->check_range(prefetcher.iter_param_->read_info_, index_info,
|
||||||
*(prefetcher.access_ctx_->allocator_)))) {
|
*(prefetcher.access_ctx_->allocator_)))) {
|
||||||
LOG_WARN("Fail to check if can skip prefetch", K(ret), K(index_info));
|
LOG_WARN("Fail to check if can skip prefetch", K(ret), K(index_info));
|
||||||
} else if (index_info.is_filter_always_false() || prefetcher.skip_index_block(index_info)) {
|
} else if (index_info.is_filter_always_false()) {
|
||||||
} else if (nullptr != prefetcher.agg_row_store_ && prefetcher.agg_row_store_->can_agg_index_info(index_info)) {
|
} else if (nullptr != prefetcher.agg_row_store_ && prefetcher.agg_row_store_->can_agg_index_info(index_info)) {
|
||||||
if (OB_FAIL(prefetcher.agg_row_store_->fill_index_info(index_info))) {
|
if (OB_FAIL(prefetcher.agg_row_store_->fill_index_info(index_info))) {
|
||||||
LOG_WARN("Fail to agg index info", K(ret), KPC(this));
|
LOG_WARN("Fail to agg index info", K(ret), KPC(this));
|
||||||
|
@ -173,10 +173,6 @@ protected:
|
|||||||
ObSSTable &sstable,
|
ObSSTable &sstable,
|
||||||
const ObTableIterParam &iter_param,
|
const ObTableIterParam &iter_param,
|
||||||
ObTableAccessContext &access_ctx);
|
ObTableAccessContext &access_ctx);
|
||||||
OB_INLINE bool skip_index_block(const ObMicroIndexInfo &index_block_info)
|
|
||||||
{
|
|
||||||
return sstable_->is_multi_version_minor_sstable() && !index_block_info.contain_uncommitted_row() && index_block_info.get_max_merged_trans_version() <= access_ctx_->trans_version_range_.base_version_;
|
|
||||||
}
|
|
||||||
private:
|
private:
|
||||||
ObMicroBlockDataHandle &get_read_handle(const int64_t level)
|
ObMicroBlockDataHandle &get_read_handle(const int64_t level)
|
||||||
{
|
{
|
||||||
|
@ -1154,8 +1154,6 @@ void ObMultiVersionMicroBlockRowScanner::reuse()
|
|||||||
finish_scanning_cur_rowkey_ = true;
|
finish_scanning_cur_rowkey_ = true;
|
||||||
is_last_multi_version_row_ = true;
|
is_last_multi_version_row_ = true;
|
||||||
read_row_direct_flag_ = false;
|
read_row_direct_flag_ = false;
|
||||||
ignore_shadow_row_ = false;
|
|
||||||
use_pre_micro_row_ = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObMultiVersionMicroBlockRowScanner::inner_reset()
|
void ObMultiVersionMicroBlockRowScanner::inner_reset()
|
||||||
@ -1244,7 +1242,6 @@ int ObMultiVersionMicroBlockRowScanner::open(
|
|||||||
} else if (OB_FAIL(set_base_scan_param(is_left_border, is_right_border))) {
|
} else if (OB_FAIL(set_base_scan_param(is_left_border, is_right_border))) {
|
||||||
LOG_WARN("failed to set base scan param", K(ret), K(is_left_border), K(is_right_border));
|
LOG_WARN("failed to set base scan param", K(ret), K(is_left_border), K(is_right_border));
|
||||||
} else {
|
} else {
|
||||||
use_pre_micro_row_ = false;
|
|
||||||
int64_t column_number = block_data.get_micro_header()->column_count_;
|
int64_t column_number = block_data.get_micro_header()->column_count_;
|
||||||
int64_t max_col_count = MAX(read_info_->get_request_count(), column_number);
|
int64_t max_col_count = MAX(read_info_->get_request_count(), column_number);
|
||||||
if (OB_FAIL(tmp_row_.reserve(max_col_count))) {
|
if (OB_FAIL(tmp_row_.reserve(max_col_count))) {
|
||||||
@ -1252,23 +1249,6 @@ int ObMultiVersionMicroBlockRowScanner::open(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OB_SUCC(ret) && ObIMicroBlockReaderInfo::INVALID_ROW_INDEX != current_) {
|
|
||||||
if (OB_UNLIKELY(!reverse_scan_ && !is_last_multi_version_row_)) {
|
|
||||||
const ObRowHeader *row_header = nullptr;
|
|
||||||
if (OB_FAIL(reader_->get_row_header(current_, row_header))) {
|
|
||||||
LOG_WARN("failed to get row header", K(ret), K(current_), K_(macro_id));
|
|
||||||
} else {
|
|
||||||
ObMultiVersionRowFlag row_flag;
|
|
||||||
row_flag.flag_ = row_header->get_mvcc_row_flag();
|
|
||||||
if (row_flag.is_first_multi_version_row()) {
|
|
||||||
use_pre_micro_row_ = !finish_scanning_cur_rowkey_;
|
|
||||||
finish_scanning_cur_rowkey_ = true;
|
|
||||||
is_last_multi_version_row_ = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
if (reverse_scan_) {
|
if (reverse_scan_) {
|
||||||
reserved_pos_ = current_;
|
reserved_pos_ = current_;
|
||||||
@ -1303,10 +1283,7 @@ int ObMultiVersionMicroBlockRowScanner::inner_get_next_row(const ObDatumRow *&ro
|
|||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
// TODO(yuanzhe) refactor blockscan opt of multi version sstable
|
// TODO(yuanzhe) refactor blockscan opt of multi version sstable
|
||||||
if (OB_UNLIKELY(use_pre_micro_row_)) {
|
if (can_ignore_multi_version_) {
|
||||||
row = &prev_micro_row_;
|
|
||||||
use_pre_micro_row_ = false;
|
|
||||||
} else if (can_ignore_multi_version_) {
|
|
||||||
if (OB_FAIL(ObIMicroBlockRowScanner::inner_get_next_row(row))) {
|
if (OB_FAIL(ObIMicroBlockRowScanner::inner_get_next_row(row))) {
|
||||||
if (OB_UNLIKELY(OB_ITER_END != ret)) {
|
if (OB_UNLIKELY(OB_ITER_END != ret)) {
|
||||||
LOG_WARN("Failed to inner get next row", K(ret), K_(start), K_(last), K_(current));
|
LOG_WARN("Failed to inner get next row", K(ret), K_(start), K_(last), K_(current));
|
||||||
@ -1377,17 +1354,6 @@ int ObMultiVersionMicroBlockRowScanner::inner_get_next_row_impl(const ObDatumRow
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OB_SUCC(ret) && version_fit && ignore_shadow_row_) {
|
|
||||||
if (OB_ISNULL(multi_version_row)) {
|
|
||||||
ret = OB_ERR_UNEXPECTED;
|
|
||||||
STORAGE_LOG(WARN, "unexpected null multi_version_row", K(ret), K(read_row_direct_flag_));
|
|
||||||
} else if (multi_version_row->is_shadow_row()) {
|
|
||||||
if (multi_version_row == &row_) { //ptr equal only when the previous row_ is empty, reset the row to be empty for skip shadow row
|
|
||||||
row_.row_flag_.set_flag(ObDmlFlag::DF_NOT_EXIST);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (OB_SUCC(ret)) {
|
if (OB_SUCC(ret)) {
|
||||||
if (!version_fit) {
|
if (!version_fit) {
|
||||||
// do nothing
|
// do nothing
|
||||||
@ -1518,16 +1484,10 @@ int ObMultiVersionMicroBlockRowScanner::locate_cursor_to_read(bool &found_first_
|
|||||||
} else {
|
} else {
|
||||||
row_flag.flag_ = row_header->get_mvcc_row_flag();
|
row_flag.flag_ = row_header->get_mvcc_row_flag();
|
||||||
if (row_flag.is_last_multi_version_row()) {
|
if (row_flag.is_last_multi_version_row()) {
|
||||||
|
finish_scanning_cur_rowkey_ = false;
|
||||||
|
found_first_row = true;
|
||||||
reserved_pos_ = current_;
|
reserved_pos_ = current_;
|
||||||
current_ = current_ + 1;
|
current_ = current_ + 1;
|
||||||
if (!reverse_scan_ && OB_FAIL(end_of_block())) {
|
|
||||||
if (OB_UNLIKELY(OB_ITER_END != ret)) {
|
|
||||||
LOG_WARN("failed to judge end of block or not", K(ret), K_(macro_id));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
finish_scanning_cur_rowkey_ = false;
|
|
||||||
found_first_row = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
current_ = reverse_scan_ ? current_ - 1 : current_ + 1;
|
current_ = reverse_scan_ ? current_ - 1 : current_ + 1;
|
||||||
|
@ -276,9 +276,7 @@ public:
|
|||||||
trans_version_col_idx_(-1),
|
trans_version_col_idx_(-1),
|
||||||
sql_sequence_col_idx_(-1),
|
sql_sequence_col_idx_(-1),
|
||||||
cell_cnt_(0),
|
cell_cnt_(0),
|
||||||
read_row_direct_flag_(false),
|
read_row_direct_flag_(false)
|
||||||
ignore_shadow_row_(false),
|
|
||||||
use_pre_micro_row_(false)
|
|
||||||
{}
|
{}
|
||||||
virtual ~ObMultiVersionMicroBlockRowScanner() {}
|
virtual ~ObMultiVersionMicroBlockRowScanner() {}
|
||||||
void reuse() override;
|
void reuse() override;
|
||||||
@ -295,8 +293,7 @@ public:
|
|||||||
const ObMicroBlockData &block_data,
|
const ObMicroBlockData &block_data,
|
||||||
const bool is_left_border,
|
const bool is_left_border,
|
||||||
const bool is_right_border) override final;
|
const bool is_right_border) override final;
|
||||||
virtual int set_ignore_shadow_row() override final { ignore_shadow_row_ = true; return OB_SUCCESS; }
|
INHERIT_TO_STRING_KV("ObMultiVersionMicroBlockRowScanner", ObIMicroBlockRowScanner, K_(read_row_direct_flag), K_(version_range), K_(is_last_multi_version_row), K_(finish_scanning_cur_rowkey));
|
||||||
INHERIT_TO_STRING_KV("ObMultiVersionMicroBlockRowScanner", ObIMicroBlockRowScanner, K_(read_row_direct_flag), K_(ignore_shadow_row), K_(version_range), K_(is_last_multi_version_row), K_(finish_scanning_cur_rowkey), K_(use_pre_micro_row));
|
|
||||||
protected:
|
protected:
|
||||||
virtual int inner_get_next_row(const ObDatumRow *&row) override;
|
virtual int inner_get_next_row(const ObDatumRow *&row) override;
|
||||||
virtual void inner_reset();
|
virtual void inner_reset();
|
||||||
@ -343,8 +340,6 @@ private:
|
|||||||
transaction::ObTransID trans_id_;
|
transaction::ObTransID trans_id_;
|
||||||
common::ObVersionRange version_range_;
|
common::ObVersionRange version_range_;
|
||||||
bool read_row_direct_flag_;
|
bool read_row_direct_flag_;
|
||||||
bool ignore_shadow_row_;
|
|
||||||
bool use_pre_micro_row_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// multi version sstable micro block scanner for minor merge
|
// multi version sstable micro block scanner for minor merge
|
||||||
|
Reference in New Issue
Block a user