mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-06-04 22:30:37 +00:00
fix: format detected IPv6 grpc address (#8221)
Signed-off-by: WenyXu <wenymedia@gmail.com>
This commit is contained in:
@@ -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)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user