Skip to content

Commit bb3205c

Browse files
authored
[Improvement](scanner) Include open() time in PerScannerRunningTime (#61042)
Use NVI (Non-Virtual Interface) pattern for Scanner::open(), similar to Scanner::get_block() / _get_block_impl(). Add SCOPED_RAW_TIMER in the base class open() method to include scanner initialization time (ReaderInitTime, BlockReaderBuildHeapInitTimer, etc.) in PerScannerRunningTime profile counter. This fixes the issue where PerScannerRunningTime showed only microseconds while ReaderInitTime showed several seconds, making the profile misleading. Changes: - scanner.h: Change open() to non-virtual NVI, add _open_impl() virtual - 5 subclasses: Rename open() to _open_impl() and call base::_open_impl() (OlapScanner, FileScanner, MetaScanner, JdbcScanner, EsScanner)
1 parent 1babe06 commit bb3205c

File tree

11 files changed

+24
-18
lines changed

11 files changed

+24
-18
lines changed

be/src/vec/exec/scan/es_scanner.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ Status EsScanner::init(RuntimeState* state, const VExprContextSPtrs& conjuncts)
7878
return Status::OK();
7979
}
8080

81-
Status EsScanner::open(RuntimeState* state) {
81+
Status EsScanner::_open_impl(RuntimeState* state) {
8282
VLOG_CRITICAL << NEW_SCANNER_TYPE << "::open";
8383

8484
if (nullptr == state) {
@@ -90,7 +90,7 @@ Status EsScanner::open(RuntimeState* state) {
9090
}
9191

9292
RETURN_IF_CANCELLED(state);
93-
RETURN_IF_ERROR(Scanner::open(state));
93+
RETURN_IF_ERROR(Scanner::_open_impl(state));
9494

9595
RETURN_IF_ERROR(_es_reader->open());
9696

be/src/vec/exec/scan/es_scanner.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class EsScanner : public Scanner {
5454
const std::map<std::string, std::string>& docvalue_context, bool doc_value_mode,
5555
RuntimeProfile* profile);
5656

57-
Status open(RuntimeState* state) override;
57+
Status _open_impl(RuntimeState* state) override;
5858
Status close(RuntimeState* state) override;
5959
Status init(RuntimeState* state, const VExprContextSPtrs& conjuncts) override;
6060

be/src/vec/exec/scan/file_scanner.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,9 +379,9 @@ void FileScanner::_get_slot_ids(VExpr* expr, std::vector<int>* slot_ids) {
379379
}
380380
}
381381

382-
Status FileScanner::open(RuntimeState* state) {
382+
Status FileScanner::_open_impl(RuntimeState* state) {
383383
RETURN_IF_CANCELLED(state);
384-
RETURN_IF_ERROR(Scanner::open(state));
384+
RETURN_IF_ERROR(Scanner::_open_impl(state));
385385
RETURN_IF_ERROR(_split_source->get_next(&_first_scan_range, &_current_range));
386386
if (_first_scan_range) {
387387
RETURN_IF_ERROR(_init_expr_ctxes());

be/src/vec/exec/scan/file_scanner.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class FileScanner : public Scanner {
7070
RuntimeProfile* profile, ShardedKVCache* kv_cache,
7171
const std::unordered_map<std::string, int>* colname_to_slot_id);
7272

73-
Status open(RuntimeState* state) override;
73+
Status _open_impl(RuntimeState* state) override;
7474

7575
Status close(RuntimeState* state) override;
7676

be/src/vec/exec/scan/jdbc_scanner.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ Status JdbcScanner::init(RuntimeState* state, const VExprContextSPtrs& conjuncts
101101
return Status::OK();
102102
}
103103

104-
Status JdbcScanner::open(RuntimeState* state) {
104+
Status JdbcScanner::_open_impl(RuntimeState* state) {
105105
VLOG_CRITICAL << "JdbcScanner::open";
106106
if (state == nullptr) {
107107
return Status::InternalError("input pointer is NULL of VJdbcScanNode::open.");
@@ -111,7 +111,7 @@ Status JdbcScanner::open(RuntimeState* state) {
111111
return Status::InternalError("used before initialize of VJdbcScanNode::open.");
112112
}
113113
RETURN_IF_CANCELLED(state);
114-
RETURN_IF_ERROR(Scanner::open(state));
114+
RETURN_IF_ERROR(Scanner::_open_impl(state));
115115
RETURN_IF_ERROR(_jdbc_connector->open(state, true));
116116
RETURN_IF_ERROR(_jdbc_connector->query());
117117
return Status::OK();

be/src/vec/exec/scan/jdbc_scanner.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class JdbcScanner : public Scanner {
4848
JdbcScanner(RuntimeState* state, doris::pipeline::JDBCScanLocalState* parent, int64_t limit,
4949
const TupleId& tuple_id, const std::string& query_string,
5050
TOdbcTableType::type table_type, bool is_tvf, RuntimeProfile* profile);
51-
Status open(RuntimeState* state) override;
51+
Status _open_impl(RuntimeState* state) override;
5252
Status close(RuntimeState* state) override;
5353

5454
Status init(RuntimeState* state, const VExprContextSPtrs& conjuncts) override;

be/src/vec/exec/scan/meta_scanner.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ MetaScanner::MetaScanner(RuntimeState* state, pipeline::ScanLocalStateBase* loca
6464
_user_identity(user_identity),
6565
_scan_range(scan_range.scan_range) {}
6666

67-
Status MetaScanner::open(RuntimeState* state) {
67+
Status MetaScanner::_open_impl(RuntimeState* state) {
6868
VLOG_CRITICAL << "MetaScanner::open";
69-
RETURN_IF_ERROR(Scanner::open(state));
69+
RETURN_IF_ERROR(Scanner::_open_impl(state));
7070
if (_scan_range.meta_scan_range.metadata_type == TMetadataType::ICEBERG) {
7171
// TODO: refactor this code
7272
auto reader = IcebergSysTableJniReader::create_unique(_tuple_desc->slots(), state, _profile,

be/src/vec/exec/scan/meta_scanner.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ class MetaScanner : public Scanner {
5454
const TScanRangeParams& scan_range, int64_t limit, RuntimeProfile* profile,
5555
TUserIdentity user_identity);
5656

57-
Status open(RuntimeState* state) override;
57+
Status _open_impl(RuntimeState* state) override;
5858
Status close(RuntimeState* state) override;
5959
Status init(RuntimeState* state, const VExprContextSPtrs& conjuncts) override;
6060

be/src/vec/exec/scan/olap_scanner.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,8 @@ Status OlapScanner::prepare() {
306306
return Status::OK();
307307
}
308308

309-
Status OlapScanner::open(RuntimeState* state) {
310-
RETURN_IF_ERROR(Scanner::open(state));
309+
Status OlapScanner::_open_impl(RuntimeState* state) {
310+
RETURN_IF_ERROR(Scanner::_open_impl(state));
311311
SCOPED_TIMER(_local_state->cast<pipeline::OlapScanLocalState>()._reader_init_timer);
312312

313313
auto res = _tablet_reader->init(_tablet_reader_params);

be/src/vec/exec/scan/olap_scanner.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class OlapScanner : public Scanner {
7575

7676
Status prepare() override;
7777

78-
Status open(RuntimeState* state) override;
78+
Status _open_impl(RuntimeState* state) override;
7979

8080
Status close(RuntimeState* state) override;
8181

0 commit comments

Comments
 (0)