Files
oceanbase/src/observer/virtual_table/ob_all_virtual_tablet_stat.cpp
chaser-ch 566e920620 Merge branch 'column_store'
Co-authored-by: wangt1xiuyi <13547954130@163.com>
Co-authored-by: yangqise7en <877793735@qq.com>
Co-authored-by: Zach41 <zach_41@163.com>
2023-10-31 15:39:22 +00:00

168 lines
4.5 KiB
C++

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#include "ob_all_virtual_tablet_stat.h"
#include "share/ob_errno.h"
#include "storage/ob_tenant_tablet_stat_mgr.h"
namespace oceanbase
{
using namespace storage;
using namespace common;
namespace observer
{
ObAllVirtualTabletStat::ObAllVirtualTabletStat()
: ip_buf_(),
tablet_stats_(),
cur_stat_(),
cur_idx_(0),
need_collect_stats_(true)
{
}
ObAllVirtualTabletStat::~ObAllVirtualTabletStat()
{
reset();
}
int ObAllVirtualTabletStat::inner_get_next_row(ObNewRow *&row)
{
int ret = OB_SUCCESS;
if (OB_FAIL(execute(row))) {
if (ret != OB_ITER_END) {
SERVER_LOG(WARN, "execute fail", K(ret));
}
}
return ret;
}
void ObAllVirtualTabletStat::reset()
{
omt::ObMultiTenantOperator::reset();
MEMSET(ip_buf_, 0, sizeof(ip_buf_));
tablet_stats_.reset();
cur_idx_ = 0;
ObVirtualTableScannerIterator::reset();
}
bool ObAllVirtualTabletStat::is_need_process(uint64_t tenant_id)
{
bool bret = false;
if (is_sys_tenant(effective_tenant_id_) || tenant_id == effective_tenant_id_) {
bret = true;
}
return bret;
}
void ObAllVirtualTabletStat::release_last_tenant()
{
tablet_stats_.reset();
cur_idx_ = 0;
need_collect_stats_ = true;
}
int ObAllVirtualTabletStat::process_curr_tenant(ObNewRow *&row)
{
int ret = OB_SUCCESS;
row = nullptr;
const uint64_t tenant_id = MTL_ID();
if (need_collect_stats_) {
tablet_stats_.reset();
if (OB_FAIL(MTL(ObTenantTabletStatMgr *)->get_all_tablet_stats(tablet_stats_))) {
SERVER_LOG(WARN, "failed to get all tablet stats", K(ret), K(tenant_id));
} else {
need_collect_stats_ = false;
cur_idx_ = 0;
}
}
if (OB_SUCC(ret)) {
if (cur_idx_ < tablet_stats_.count()) {
cur_stat_ = tablet_stats_.at(cur_idx_);
cur_idx_++;
} else {
ret = OB_ITER_END;
}
}
if (OB_SUCC(ret)) {
const int64_t col_cnt = output_column_ids_.count();
ObObj *cells = cur_row_.cells_;
for (int64_t i = 0; OB_SUCC(ret) && i < col_cnt; ++i) {
uint64_t col_id = output_column_ids_.at(i);
switch (col_id) {
case SVR_IP:
if (ObServerConfig::get_instance().self_addr_.ip_to_string(ip_buf_, sizeof(ip_buf_))) {
cells[i].set_varchar(ip_buf_);
cells[i].set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset()));
}
break;
case SVR_PORT:
cells[i].set_int(ObServerConfig::get_instance().self_addr_.get_port());
break;
case TENANT_ID:
cells[i].set_int(tenant_id);
break;
case LS_ID:
cells[i].set_int(cur_stat_.ls_id_);
break;
case TABLET_ID:
cells[i].set_int(cur_stat_.tablet_id_);
break;
case QUERY_CNT:
cells[i].set_int(cur_stat_.query_cnt_);
break;
case MINI_MERGE_CNT:
cells[i].set_int(cur_stat_.merge_cnt_);
break;
case SCAN_OUTPUT_ROW_CNT:
cells[i].set_int(cur_stat_.scan_logical_row_cnt_);
break;
case SCAN_TOTAL_ROW_CNT:
cells[i].set_int(cur_stat_.scan_physical_row_cnt_);
break;
case PUSHDOWN_MICRO_BLOCK_CNT:
cells[i].set_int(cur_stat_.scan_micro_block_cnt_);
break;
case TOTAL_MICRO_BLOCK_CNT:
cells[i].set_int(cur_stat_.pushdown_micro_block_cnt_);
break;
case EXIST_ITER_TABLE_CNT:
cells[i].set_int(cur_stat_.exist_row_total_table_cnt_);
break;
case EXIST_TOTAL_TABLE_CNT:
cells[i].set_int(cur_stat_.exist_row_read_table_cnt_);
break;
case INSERT_ROW_CNT:
cells[i].set_int(cur_stat_.insert_row_cnt_);
break;
case UPDATE_ROW_CNT:
cells[i].set_int(cur_stat_.update_row_cnt_);
break;
case DELETE_ROW_CNT:
cells[i].set_int(cur_stat_.delete_row_cnt_);
break;
default:
ret = OB_ERR_UNEXPECTED;
SERVER_LOG(WARN, "invalid column id", K(ret), K(col_id));
break;
} // end switch
} // end for
}
if (OB_SUCC(ret)) {
row = &cur_row_;
}
return ret;
}
} // observer
} // oceanbase