cherry-pick from 3_1_x_release to 3.1_opensource_release

This commit is contained in:
yy0
2021-07-26 10:42:25 +08:00
committed by wangzelin.wzl
parent f2f91f98c6
commit 821da37d63
29 changed files with 318 additions and 368 deletions

View File

@ -57,8 +57,10 @@ ObMultipleMerge::ObMultipleMerge()
relocate_cnt_(0),
table_stat_(),
skip_refresh_table_(false),
read_memtable_only_(false)
{}
read_memtable_only_(false),
is_tables_reset_(false)
{
}
ObMultipleMerge::~ObMultipleMerge()
{
@ -130,6 +132,7 @@ int ObMultipleMerge::init(
cur_row_.row_val_.count_ = access_param_->iter_param_.out_cols_project_->count();
skip_refresh_table_ = false;
read_memtable_only_ = false;
is_tables_reset_ = false;
for (int64_t i = cur_row_.row_val_.count_; i < max(param.reserve_cell_cnt_, param.out_col_desc_param_.count());
++i) {
cur_row_.row_val_.cells_[i].set_nop_value();
@ -267,7 +270,7 @@ int ObMultipleMerge::deal_with_tables(ObTableAccessContext& context, ObTablesHan
read_memtable_only_ = true;
}
if (result_tables.count() != tables_handle_.get_count()) {
tables_handle_.reset();
tables_handle_.reset_tables();
if (OB_FAIL(tables_handle_.add_tables(result_tables))) {
STORAGE_LOG(WARN, "failed to push result tables into tables handle", K(ret), K(result_tables));
}
@ -521,6 +524,7 @@ void ObMultipleMerge::reset()
out_cols_projector_ = NULL;
skip_refresh_table_ = false;
read_memtable_only_ = false;
is_tables_reset_ = false;
}
void ObMultipleMerge::reuse()
@ -556,6 +560,13 @@ int ObMultipleMerge::open()
ObMultipleMerge::reuse();
scan_cnt_ = 0;
filt_cnt_ = 0;
if (is_tables_reset_) {
if (OB_FAIL(prepare_read_tables())) {
STORAGE_LOG(WARN, "fail to prepare read tables", K(ret));
} else {
is_tables_reset_ = false;
}
}
}
return ret;
}
@ -949,7 +960,29 @@ int ObMultipleMerge::refresh_table_on_demand()
return ret;
}
int ObMultipleMerge::check_need_refresh_table(bool& need_refresh)
int ObMultipleMerge::release_table_ref()
{
int ret = OB_SUCCESS;
bool need_refresh = false;
if (OB_UNLIKELY(!inited_)) {
ret = OB_NOT_INIT;
STORAGE_LOG(WARN, "ObMultipleMerge has not been inited", K(ret));
} else if (!skip_refresh_table_) {
STORAGE_LOG(DEBUG, "no need to release table ref", "table_id", access_param_->iter_param_.table_id_);
} else if (OB_FAIL(check_need_refresh_table(need_refresh))) {
STORAGE_LOG(WARN, "fail to check need refresh table", K(ret));
} else if (need_refresh) {
tables_handle_.reset();
reuse_iter_array();
is_tables_reset_ = true;
STORAGE_LOG(INFO, "table need to be released", "table_id", access_param_->iter_param_.table_id_,
K(*access_param_), K(curr_scan_index_));
}
return ret;
}
int ObMultipleMerge::check_need_refresh_table(bool &need_refresh)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(!inited_)) {
@ -960,6 +993,7 @@ int ObMultipleMerge::check_need_refresh_table(bool& need_refresh)
? false
: access_ctx_->store_ctx_->mem_ctx_->get_relocate_cnt() > relocate_cnt_;
const bool memtable_retired = tables_handle_.check_store_expire();
const int64_t relocate_cnt = access_ctx_->store_ctx_->mem_ctx_->get_relocate_cnt();
need_refresh = relocated || memtable_retired;
#ifdef ERRSIM
ret = E(EventTable::EN_FORCE_REFRESH_TABLE) ret;