Co-authored-by: wangt1xiuyi <13547954130@163.com> Co-authored-by: yangqise7en <877793735@qq.com> Co-authored-by: Zach41 <zach_41@163.com>
168 lines
4.5 KiB
C++
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
|