Fix endkey in block scanner

This commit is contained in:
DengzhiLiu
2023-02-16 09:47:29 +00:00
committed by ob-robot
parent a0ae58bf15
commit eb075c6fb4
4 changed files with 21 additions and 22 deletions

View File

@ -356,6 +356,7 @@ int ObIndexBlockRowScanner::open(
int ObIndexBlockRowScanner::get_next(ObMicroIndexInfo &idx_block_row)
{
idx_block_row.reset();
const ObDatumRowkey *endkey = nullptr;
const ObIndexBlockRowHeader *idx_row_header = nullptr;
const ObIndexBlockRowMinorMetaInfo *idx_minor_info = nullptr;
const char *idx_data_buf = nullptr;
@ -365,22 +366,21 @@ int ObIndexBlockRowScanner::get_next(ObMicroIndexInfo &idx_block_row)
LOG_WARN("Not inited", K(ret));
} else if (end_of_block()) {
ret = OB_ITER_END;
} else if (OB_FAIL(read_curr_idx_row(idx_row_header))) {
} else if (OB_FAIL(read_curr_idx_row(idx_row_header, endkey))) {
LOG_WARN("Fail to read currend index row", K(ret), K_(index_format), K_(current));
} else {
if (OB_ISNULL(idx_row_header)) {
} else if (OB_UNLIKELY(nullptr == idx_row_header || nullptr == endkey)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("Unexpected null index block row header", K(ret), K(index_format_));
LOG_WARN("Unexpected null index block row header/endkey", K(ret),
K(index_format_), KP(idx_row_header), KP(endkey));
} else if (idx_row_header->is_data_index() && !idx_row_header->is_major_node()) {
if (OB_FAIL(idx_row_parser_.get_minor_meta(idx_minor_info))) {
LOG_WARN("Fail to get minor meta info", K(ret));
}
}
}
if (OB_SUCC(ret)) {
idx_block_row.flag_ = 0;
idx_block_row.endkey_ = &endkey_;
idx_block_row.endkey_ = endkey;
idx_block_row.row_header_ = idx_row_header;
idx_block_row.minor_meta_info_ = idx_minor_info;
idx_block_row.is_get_ = is_get_;
@ -693,7 +693,7 @@ int ObIndexBlockRowScanner::init_datum_row()
return ret;
}
int ObIndexBlockRowScanner::read_curr_idx_row(const ObIndexBlockRowHeader *&idx_row_header)
int ObIndexBlockRowScanner::read_curr_idx_row(const ObIndexBlockRowHeader *&idx_row_header, const ObDatumRowkey *&endkey)
{
int ret = OB_SUCCESS;
idx_row_header = nullptr;
@ -707,9 +707,10 @@ int ObIndexBlockRowScanner::read_curr_idx_row(const ObIndexBlockRowHeader *&idx_
} else if (OB_FAIL(idx_row_parser_.get_header(idx_row_header))) {
LOG_WARN("Fail to get index block row header", K(ret));
} else {
endkey_ = idx_data_header_->rowkey_array_[current_];
endkey = &idx_data_header_->rowkey_array_[current_];
}
} else if (IndexFormat::RAW_DATA == index_format_) {
endkey_.reset();
if (OB_ISNULL(datum_row_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("Unexpected null pointer to index row", K(ret));
@ -721,12 +722,14 @@ int ObIndexBlockRowScanner::read_curr_idx_row(const ObIndexBlockRowHeader *&idx_
LOG_WARN("Fail to get index block row header", K(ret));
} else if (OB_FAIL(endkey_.assign(datum_row_->storage_datums_, rowkey_column_count))) {
LOG_WARN("Fail to assign storage datum to endkey", K(ret), KPC(datum_row_), K(rowkey_column_count));
} else {
endkey = &endkey_;
}
} else if (IndexFormat::BLOCK_TREE == index_format_) {
if (OB_ISNULL(block_meta_tree_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("block meta iterator is null", K(ret));
} else if (OB_FAIL(block_meta_tree_->get_index_block_row_header(current_, idx_row_header, endkey_))) {
} else if (OB_FAIL(block_meta_tree_->get_index_block_row_header(current_, idx_row_header, endkey))) {
LOG_WARN("get index block row header failed", K(ret), K(current_));
}
} else {

View File

@ -126,7 +126,7 @@ private:
int locate_key(const ObDatumRowkey &rowkey);
int locate_range(const ObDatumRange &range, const bool is_left_border, const bool is_right_border);
int init_datum_row();
int read_curr_idx_row(const ObIndexBlockRowHeader *&idx_row_header);
int read_curr_idx_row(const ObIndexBlockRowHeader *&idx_row_header, const ObDatumRowkey *&endkey);
private:
union {
const ObDatumRowkey *rowkey_;

View File

@ -377,11 +377,10 @@ int ObBlockMetaTree::locate_range(const blocksstable::ObDatumRange &range,
int ObBlockMetaTree::get_index_block_row_header(const int64_t idx,
const ObIndexBlockRowHeader *&idx_header,
blocksstable::ObDatumRowkey &endkey)
const blocksstable::ObDatumRowkey *&endkey)
{
int ret = OB_SUCCESS;
idx_header = nullptr;
endkey.reset();
if (OB_UNLIKELY(!is_inited_)) {
ret = OB_NOT_INIT;
LOG_WARN("not init", K(ret));
@ -390,12 +389,9 @@ int ObBlockMetaTree::get_index_block_row_header(const int64_t idx,
LOG_WARN("invalid argument", K(ret), K(idx), K(sorted_rowkeys_.count()));
} else {
IndexItem &cur_item = sorted_rowkeys_.at(idx);
if (OB_FAIL(cur_item.block_meta_->get_rowkey(endkey))) {
LOG_WARN("get endkey failed", K(ret), K(cur_item));
} else {
endkey = &cur_item.block_meta_->end_key_;
idx_header = &cur_item.header_;
}
}
return ret;
}

View File

@ -65,7 +65,7 @@ public:
int64_t &end_idx);
int get_index_block_row_header(const int64_t idx,
const blocksstable::ObIndexBlockRowHeader *&header,
blocksstable::ObDatumRowkey &endkey);
const blocksstable::ObDatumRowkey *&endkey);
int get_macro_block_meta(const int64_t idx,
blocksstable::ObDataMacroBlockMeta &macro_meta);
int64_t get_macro_block_cnt() const { return macro_blocks_.count(); }