int ObStatManager::get_scanner(ObNewScanner &scanner) const { int ret = OB_SUCCESS; int64_t last_used_mod = OB_INVALID_ID; char ipbuf[OB_IP_STR_BUFF] = {0}; server_.ip_to_string(ipbuf, sizeof (ipbuf)); ObString ipstr = ObString::make_string(ipbuf); const int32_t port = server_.get_port(); ObString server_name = ObString::make_string(print_role(get_server_type())); int64_t total_stat_cnt = 0; /* create row_desc */ ObRowDesc row_desc; int32_t column_id = OB_APP_MIN_COLUMN_ID; row_desc.add_column_desc(OB_ALL_SERVER_STAT_TID, column_id++); row_desc.add_column_desc(OB_ALL_SERVER_STAT_TID, column_id++); row_desc.add_column_desc(OB_ALL_SERVER_STAT_TID, column_id++); row_desc.add_column_desc(OB_ALL_SERVER_STAT_TID, column_id++); row_desc.add_column_desc(OB_ALL_SERVER_STAT_TID, column_id++); row_desc.set_rowkey_cell_count(4); ObRow row; ObObj obj; // drop mod id info for (int32_t mod = 0; mod < OB_MAX_MOD_NUMBER; mod++) { ObStat stat; total_stat_cnt += stat_cnt_[mod]; // drop table id info for (int32_t i = 0; i < table_stats_[mod].get_array_index(); i++) { for (int32_t j = 0; j < stat_cnt_[mod]; j++) { stat.inc(j, table_stats_[mod].at(i)->get_value(j)); } } for (int32_t i = 0; i < stat_cnt_[mod]; i++) { column_id = OB_APP_MIN_COLUMN_ID; row.set_row_desc(row_desc); row.reset(false, ObRow::DEFAULT_NULL); /* server type */ obj.set_type(ObVarcharType); obj.set_varchar(server_name); row.set_cell(OB_ALL_SERVER_STAT_TID, column_id++, obj); /* server ip */ obj.set_type(ObVarcharType); obj.set_varchar(ipstr); row.set_cell(OB_ALL_SERVER_STAT_TID, column_id++, obj); /* port */ obj.set_type(ObIntType); obj.set_int(port); row.set_cell(OB_ALL_SERVER_STAT_TID, column_id++, obj); /* key */ obj.set_type(ObVarcharType); obj.set_varchar(ObString::make_string(get_name(mod, i))); row.set_cell(OB_ALL_SERVER_STAT_TID, column_id++, obj); /* value */ obj.set_type(ObIntType); obj.set_int(stat.get_value(i)); row.set_cell(OB_ALL_SERVER_STAT_TID, column_id++, obj); scanner.add_row(row); // for last rowkey last_used_mod = mod; } } /* last rowkey */ if (total_stat_cnt > 0) { static ObObj rk_objs[4]; rk_objs[0].set_type(ObVarcharType); rk_objs[0].set_varchar(server_name); rk_objs[1].set_type(ObVarcharType); rk_objs[1].set_varchar(ipstr); rk_objs[2].set_type(ObIntType); rk_objs[2].set_int(port); rk_objs[3].set_type(ObVarcharType); rk_objs[3].set_varchar(ObString::make_string(get_name(last_used_mod, stat_cnt_[last_used_mod] - 1))); ObRowkey rowkey(rk_objs, 4); scanner.set_last_row_key(rowkey); } /* fullfilled */ scanner.set_is_req_fullfilled(true, total_stat_cnt); return ret; }
// ObRow.reset TEST_F(ObRowTest, reset_test) { ObRow row; ObRowDesc row_desc; const uint64_t TABLE_ID = 1001; const int64_t COLUMN_NUM = 8; ObObj cell; const ObObj *value = NULL; uint64_t table_id = 0; uint64_t column_id = 0; int64_t int_value = 0; row_desc.set_rowkey_cell_count(2); for (int i = 0; i < COLUMN_NUM; i ++) { row_desc.add_column_desc(TABLE_ID, OB_APP_MIN_COLUMN_ID + i); } row.set_row_desc(row_desc); for (int i = 0; i < COLUMN_NUM; i ++) { cell.set_int(i); row.raw_set_cell(i, cell); } row.reset(true, ObRow::DEFAULT_NULL); for (int i = 0; i < row_desc.get_rowkey_cell_count(); i ++) { row.raw_get_cell(i, value, table_id, column_id); value->get_int(int_value); ASSERT_EQ(i, int_value); } for (int64_t i = row_desc.get_rowkey_cell_count(); i < COLUMN_NUM; i ++) { row.raw_get_cell(i, value, table_id, column_id); ASSERT_TRUE( ObNullType == value->get_type() ); } row_desc.add_column_desc(OB_INVALID_ID, OB_ACTION_FLAG_COLUMN_ID); cell.set_ext(ObActionFlag::OP_DEL_ROW); row.set_cell(OB_INVALID_ID, OB_ACTION_FLAG_COLUMN_ID, cell); row.reset(true, ObRow::DEFAULT_NOP); for (int i = 0; i < row_desc.get_rowkey_cell_count(); i ++) { row.raw_get_cell(i, value, table_id, column_id); value->get_int(int_value); ASSERT_EQ(i, int_value); } for (int64_t i = row_desc.get_rowkey_cell_count(); i < COLUMN_NUM; i ++) { row.raw_get_cell(i, value, table_id, column_id); ASSERT_TRUE( ObActionFlag::OP_NOP == value->get_ext() ) << "ext value: " << value->get_ext(); } row.get_cell(OB_INVALID_ID, OB_ACTION_FLAG_COLUMN_ID, value); ASSERT_TRUE( ObActionFlag::OP_ROW_DOES_NOT_EXIST == value->get_ext() ); }