Skip to content

Commit

Permalink
fix: region_peers returns same region_id for multi logical tables (#…
Browse files Browse the repository at this point in the history
…4190)

* fix: `region_peers` returns same region_id for multi logical tables

* test: add sqlness test for information_schema.region_peers

* refactor: region_peers sqlness
  • Loading branch information
poltao authored Jun 24, 2024
1 parent 07cbaba commit 77904ad
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 5 deletions.
15 changes: 10 additions & 5 deletions src/catalog/src/information_schema/region_peers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ use datatypes::value::Value;
use datatypes::vectors::{Int64VectorBuilder, StringVectorBuilder, UInt64VectorBuilder};
use futures::{StreamExt, TryStreamExt};
use snafu::{OptionExt, ResultExt};
use store_api::storage::{ScanRequest, TableId};
use store_api::storage::{RegionId, ScanRequest, TableId};
use table::metadata::TableType;

use super::REGION_PEERS;
Expand Down Expand Up @@ -205,18 +205,23 @@ impl InformationSchemaRegionPeersBuilder {
table_ids.into_iter().map(|id| (id, vec![])).collect()
};

for routes in table_routes.values() {
self.add_region_peers(&predicates, routes);
for (table_id, routes) in table_routes {
self.add_region_peers(&predicates, table_id, &routes);
}
}
}

self.finish()
}

fn add_region_peers(&mut self, predicates: &Predicates, routes: &[RegionRoute]) {
fn add_region_peers(
&mut self,
predicates: &Predicates,
table_id: TableId,
routes: &[RegionRoute],
) {
for route in routes {
let region_id = route.region.id.as_u64();
let region_id = RegionId::new(table_id, route.region.id.region_number()).as_u64();
let peer_id = route.leader_peer.clone().map(|p| p.id);
let peer_addr = route.leader_peer.clone().map(|p| p.addr);
let status = if let Some(status) = route.leader_status {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
--- test information_schema.region_peers ----
USE INFORMATION_SCHEMA;

Affected Rows: 0

CREATE TABLE region_peers_phy (ts timestamp time index, val double) engine = metric with ("physical_metric_table" = "");

Affected Rows: 0

CREATE TABLE region_peers_t1 (
ts timestamp time index,
val double,
host string primary key
) engine = metric with ("on_physical_table" = "region_peers_phy");

Affected Rows: 0

CREATE TABLE region_peers_t2 (
ts timestamp time index,
job string primary key,
val double
) engine = metric with ("on_physical_table" = "region_peers_phy");

Affected Rows: 0

CREATE TABLE region_peers_test (
a int primary key,
b string,
ts timestamp time index,
) PARTITION ON COLUMNS (a) (
a < 10,
a >= 10 AND a < 20,
a >= 20,
);

Affected Rows: 0

SELECT COUNT(distinct region_id) FROM region_peers;

+----------------------------------------+
| COUNT(DISTINCT region_peers.region_id) |
+----------------------------------------+
| 6 |
+----------------------------------------+

DROP TABLE region_peers_t1, region_peers_t2, region_peers_phy, region_peers_test;

Affected Rows: 0

USE public;

Affected Rows: 0

34 changes: 34 additions & 0 deletions tests/cases/standalone/common/information_schema/region_peers.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
--- test information_schema.region_peers ----
USE INFORMATION_SCHEMA;

CREATE TABLE region_peers_phy (ts timestamp time index, val double) engine = metric with ("physical_metric_table" = "");

CREATE TABLE region_peers_t1 (
ts timestamp time index,
val double,
host string primary key
) engine = metric with ("on_physical_table" = "region_peers_phy");

CREATE TABLE region_peers_t2 (
ts timestamp time index,
job string primary key,
val double
) engine = metric with ("on_physical_table" = "region_peers_phy");

CREATE TABLE region_peers_test (
a int primary key,
b string,
ts timestamp time index,
) PARTITION ON COLUMNS (a) (
a < 10,
a >= 10 AND a < 20,
a >= 20,
);

SELECT COUNT(distinct region_id) FROM region_peers;

DROP TABLE region_peers_t1, region_peers_t2, region_peers_phy, region_peers_test;

USE public;


0 comments on commit 77904ad

Please sign in to comment.