fix: format detected IPv6 grpc address (#8221)

Signed-off-by: WenyXu <wenymedia@gmail.com>
This commit is contained in:
Weny Xu
2026-06-03 20:05:50 +08:00
committed by GitHub
parent 91d7dc547b
commit 31cdd864d2

View File

@@ -24,7 +24,7 @@ pub mod prom_query_gateway;
pub mod region_server;
use std::any::Any;
use std::net::SocketAddr;
use std::net::{IpAddr, SocketAddr};
use std::time::Duration;
use api::v1::health_check_server::{HealthCheck, HealthCheckServer};
@@ -95,14 +95,8 @@ impl GrpcOptions {
if self.server_addr.is_empty() {
match local_ip_address::local_ip() {
Ok(ip) => {
let detected_addr = format!(
"{}:{}",
ip,
self.bind_addr
.split(':')
.nth(1)
.unwrap_or(DEFAULT_GRPC_ADDR_PORT)
);
let port = port_from_bind_addr(&self.bind_addr);
let detected_addr = format_server_addr(ip, port);
info!("Using detected: {} as server address", detected_addr);
self.server_addr = detected_addr;
}
@@ -131,7 +125,18 @@ impl GrpcOptions {
}
}
const DEFAULT_GRPC_ADDR_PORT: &str = "4001";
const DEFAULT_GRPC_ADDR_PORT: u16 = 4001;
fn port_from_bind_addr(bind_addr: &str) -> u16 {
bind_addr
.rsplit_once(':')
.and_then(|(_, port)| port.parse().ok())
.unwrap_or(DEFAULT_GRPC_ADDR_PORT)
}
fn format_server_addr(ip: IpAddr, port: u16) -> String {
SocketAddr::new(ip, port).to_string()
}
const DEFAULT_INTERNAL_GRPC_ADDR_PORT: &str = "4010";
@@ -415,3 +420,36 @@ impl Server for GrpcServer {
self
}
}
#[cfg(test)]
mod tests {
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
use super::{DEFAULT_GRPC_ADDR_PORT, format_server_addr, port_from_bind_addr};
#[test]
fn test_port_from_bind_addr() {
assert_eq!(3002, port_from_bind_addr("127.0.0.1:3002"));
assert_eq!(3002, port_from_bind_addr("[::]:3002"));
assert_eq!(
3002,
port_from_bind_addr("greptimedb-metasrv.default.svc.cluster.local:3002")
);
assert_eq!(
DEFAULT_GRPC_ADDR_PORT,
port_from_bind_addr("invalid-bind-addr")
);
}
#[test]
fn test_format_server_addr() {
assert_eq!(
"127.0.0.1:3002",
format_server_addr(IpAddr::V4(Ipv4Addr::LOCALHOST), 3002)
);
assert_eq!(
"[::1]:3002",
format_server_addr(IpAddr::V6(Ipv6Addr::LOCALHOST), 3002)
);
}
}