From 0596d20a3b776cebb0fc8ff74260465d00fb4667 Mon Sep 17 00:00:00 2001 From: fys <40801205+Fengys123@users.noreply.github.com> Date: Mon, 20 Mar 2023 20:12:35 +0800 Subject: [PATCH] fix: can not create table in the local distributed environment (#1207) fix: create table in local distribute env --- src/catalog/src/lib.rs | 35 ++++++++++++++++++++--------------- src/datanode/src/heartbeat.rs | 6 +++--- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/catalog/src/lib.rs b/src/catalog/src/lib.rs index 3b0e0bd8b7..a07c671586 100644 --- a/src/catalog/src/lib.rs +++ b/src/catalog/src/lib.rs @@ -19,7 +19,7 @@ use std::fmt::{Debug, Formatter}; use std::sync::Arc; use api::v1::meta::{RegionStat, TableName}; -use common_telemetry::info; +use common_telemetry::{info, warn}; use snafu::{OptionExt, ResultExt}; use table::engine::{EngineContext, TableEngineRef}; use table::metadata::TableId; @@ -228,8 +228,10 @@ pub(crate) async fn handle_system_table_request<'a, M: CatalogManager>( /// The stat of regions in the datanode node. /// The number of regions can be got from len of vec. -pub async fn region_stats(catalog_manager: &CatalogManagerRef) -> Result> { +pub async fn datanode_stat(catalog_manager: &CatalogManagerRef) -> Result<(u64, Vec)> { + let mut region_number: u64 = 0; let mut region_stats = Vec::new(); + for catalog_name in catalog_manager.catalog_names()? { let catalog = catalog_manager @@ -255,16 +257,12 @@ pub async fn region_stats(catalog_manager: &CatalogManagerRef) -> Result { + let stats = stats.into_iter().map(|stat| RegionStat { region_id: stat.region_id, table_name: Some(TableName { catalog_name: catalog_name.clone(), @@ -273,10 +271,17 @@ pub async fn region_stats(catalog_manager: &CatalogManagerRef) -> Result { + warn!("Failed to get region status, err: {:?}", e); + } + }; } } } - Ok(region_stats) + + Ok((region_number, region_stats)) } diff --git a/src/datanode/src/heartbeat.rs b/src/datanode/src/heartbeat.rs index 539af7f819..ddc3ce30c2 100644 --- a/src/datanode/src/heartbeat.rs +++ b/src/datanode/src/heartbeat.rs @@ -17,7 +17,7 @@ use std::sync::Arc; use std::time::Duration; use api::v1::meta::{HeartbeatRequest, HeartbeatResponse, NodeStat, Peer}; -use catalog::{region_stats, CatalogManagerRef}; +use catalog::{datanode_stat, CatalogManagerRef}; use common_telemetry::{error, info, warn}; use meta_client::client::{HeartbeatSender, MetaClient}; use snafu::ResultExt; @@ -106,8 +106,8 @@ impl HeartbeatTask { let mut tx = Self::create_streams(&meta_client, running.clone()).await?; common_runtime::spawn_bg(async move { while running.load(Ordering::Acquire) { - let (region_num, region_stats) = match region_stats(&catalog_manager_clone).await { - Ok(region_stats) => (region_stats.len() as i64, region_stats), + let (region_num, region_stats) = match datanode_stat(&catalog_manager_clone).await { + Ok(datanode_stat) => (datanode_stat.0 as i64, datanode_stat.1), Err(e) => { error!("failed to get region status, err: {e:?}"); (-1, vec![])