From 6047da89a3e92ea30b552120e38eff31cdf8ed90 Mon Sep 17 00:00:00 2001 From: ZenoWang Date: Mon, 5 Feb 2024 06:46:49 +0000 Subject: [PATCH] [CP] [FIX] checkout timeout_ts when iterate virtual table --- src/share/ob_virtual_table_iterator.cpp | 8 +++++++- src/share/ob_virtual_table_iterator.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/share/ob_virtual_table_iterator.cpp b/src/share/ob_virtual_table_iterator.cpp index d8e7f8c9b4..bd509e6a5c 100644 --- a/src/share/ob_virtual_table_iterator.cpp +++ b/src/share/ob_virtual_table_iterator.cpp @@ -368,7 +368,13 @@ int ObVirtualTableIterator::get_next_row(ObNewRow *&row) int ret = OB_SUCCESS; ObNewRow *cur_row = NULL; row_calc_buf_.reuse(); - if (OB_FAIL(inner_get_next_row(cur_row))) { + const int64_t abs_timeout_ts = get_scan_param()->timeout_; + if (ObClockGenerator::getClock() > abs_timeout_ts) { + ret = OB_TIMEOUT; + LOG_WARN("iterate virtual table row timeout", KR(ret), KTIME(abs_timeout_ts)); + } else if (OB_FAIL(THIS_WORKER.check_status())) { + LOG_WARN("iterate virtual table row failed", KR(ret), KTIME(abs_timeout_ts)); + } else if (OB_FAIL(inner_get_next_row(cur_row))) { if (OB_UNLIKELY(OB_ITER_END != ret)) { LOG_WARN("fail to inner get next row", K(ret), KPC(scan_param_)); } diff --git a/src/share/ob_virtual_table_iterator.h b/src/share/ob_virtual_table_iterator.h index 4ec52ae9f5..c5b4e5ed7d 100644 --- a/src/share/ob_virtual_table_iterator.h +++ b/src/share/ob_virtual_table_iterator.h @@ -68,6 +68,7 @@ public: inline void set_table_schema(const share::schema::ObTableSchema *table_schema); inline void set_index_schema(const share::schema::ObTableSchema *index_schema); inline void set_scan_param(const ObVTableScanParam *scan_param) { scan_param_ = scan_param; } + inline const ObVTableScanParam *get_scan_param() { return scan_param_; } virtual int open(); virtual int inner_open() { return common::OB_SUCCESS; }; virtual int get_next_row(common::ObNewRow *&row);