Fix row lock checker cannot trigger bloomfilter construction

This commit is contained in:
obdev
2024-08-16 09:12:00 +00:00
committed by ob-robot
parent 579021c456
commit b14d24478f
3 changed files with 21 additions and 0 deletions

View File

@ -14,7 +14,9 @@
#include "ob_sstable_row_scanner.h"
#include "ob_sstable_index_filter.h"
#include "ob_block_row_store.h"
#include "storage/access/ob_store_row_iterator.h"
#include "storage/blocksstable/ob_datum_row.h"
#include "storage/blocksstable/ob_micro_block_row_lock_checker.h"
#include "storage/column_store/ob_co_sstable_rows_filter.h"
#include "lib/statistic_event/ob_stat_event.h"
#include "lib/stat/ob_diagnose_info.h"
@ -376,6 +378,11 @@ int ObSSTableRowScanner<PrefetchType>::fetch_row(ObSSTableReadHandle &read_handl
LOG_WARN("Fail to get next row", K(ret));
} else if (prefetcher_.cur_micro_data_fetch_idx_ >= read_handle.micro_end_idx_) {
ret = OB_ITER_END;
if (ObStoreRowIterator::IteratorRowLockAndDuplicationCheck == type_ ||
ObStoreRowIterator::IteratorRowLockCheck == type_) {
ObMicroBlockRowLockChecker *checker = static_cast<ObMicroBlockRowLockChecker *>(micro_scanner_);
checker->inc_empty_read(read_handle.get_rowkey().get_datum_cnt());
}
LOG_DEBUG("[INDEX BLOCK] Open data block handle iter end", K(ret),
K(prefetcher_.cur_micro_data_fetch_idx_), K(read_handle));
} else if (FALSE_IT(prefetcher_.inc_cur_micro_data_fetch_idx())) {

View File

@ -36,6 +36,19 @@ ObMicroBlockRowLockChecker::~ObMicroBlockRowLockChecker()
{
}
void ObMicroBlockRowLockChecker::inc_empty_read(int64_t empty_read_prefix)
{
if (OB_NOT_NULL(context_) && OB_NOT_NULL(sstable_) &&
!context_->query_flag_.is_index_back() && context_->query_flag_.is_use_bloomfilter_cache() &&
!sstable_->is_small_sstable()) {
(void) OB_STORE_CACHE.get_bf_cache().inc_empty_read(
MTL_ID(),
param_->table_id_,
macro_id_,
empty_read_prefix);
}
}
int ObMicroBlockRowLockChecker::inner_get_next_row(
bool &row_lock_checked,
int64_t &current,

View File

@ -40,6 +40,7 @@ public:
{
check_exist_ = check_eixst;
}
void inc_empty_read(int64_t empty_read_prefix);
protected:
virtual int inner_get_next_row(
bool &row_lock_checked,