Remove the sysctl crate and use libc's sysctl call interface (#1396)

Co-authored-by: houseme <housemecn@gmail.com>
This commit is contained in:
Jan S
2026-01-06 03:26:09 +01:00
committed by GitHub
parent 5f19eef945
commit 18fb920fa4
4 changed files with 37 additions and 42 deletions
Generated
+1 -27
View File
@@ -3419,18 +3419,6 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "enum-as-inner"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.113",
]
[[package]] [[package]]
name = "enum_dispatch" name = "enum_dispatch"
version = "0.3.13" version = "0.3.13"
@@ -7767,6 +7755,7 @@ dependencies = [
"hyper", "hyper",
"hyper-util", "hyper-util",
"jemalloc_pprof", "jemalloc_pprof",
"libc",
"libsystemd", "libsystemd",
"libunftp", "libunftp",
"matchit 0.9.1", "matchit 0.9.1",
@@ -7815,7 +7804,6 @@ dependencies = [
"socket2", "socket2",
"ssh-key", "ssh-key",
"subtle", "subtle",
"sysctl",
"sysinfo", "sysinfo",
"thiserror 2.0.17", "thiserror 2.0.17",
"tikv-jemalloc-ctl", "tikv-jemalloc-ctl",
@@ -9680,20 +9668,6 @@ dependencies = [
"syn 2.0.113", "syn 2.0.113",
] ]
[[package]]
name = "sysctl"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cca424247104946a59dacd27eaad296223b7feec3d168a6dd04585183091eb0b"
dependencies = [
"bitflags 2.10.0",
"byteorder",
"enum-as-inner",
"libc",
"thiserror 2.0.17",
"walkdir",
]
[[package]] [[package]]
name = "sysinfo" name = "sysinfo"
version = "0.37.2" version = "0.37.2"
-1
View File
@@ -234,7 +234,6 @@ snafu = "0.8.9"
snap = "1.1.1" snap = "1.1.1"
starshard = { version = "0.6.0", features = ["rayon", "async", "serde"] } starshard = { version = "0.6.0", features = ["rayon", "async", "serde"] }
strum = { version = "0.27.2", features = ["derive"] } strum = { version = "0.27.2", features = ["derive"] }
sysctl = "0.7.1"
sysinfo = "0.37.2" sysinfo = "0.37.2"
temp-env = "0.3.6" temp-env = "0.3.6"
tempfile = "3.24.0" tempfile = "3.24.0"
+1 -3
View File
@@ -125,6 +125,7 @@ url = { workspace = true }
urlencoding = { workspace = true } urlencoding = { workspace = true }
uuid = { workspace = true } uuid = { workspace = true }
zip = { workspace = true } zip = { workspace = true }
libc = { workspace = true }
# Observability and Metrics # Observability and Metrics
metrics = { workspace = true } metrics = { workspace = true }
@@ -135,9 +136,6 @@ russh = { workspace = true }
russh-sftp = { workspace = true } russh-sftp = { workspace = true }
ssh-key = { workspace = true } ssh-key = { workspace = true }
[target.'cfg(any(target_os = "macos", target_os = "freebsd", target_os = "netbsd", target_os = "openbsd"))'.dependencies]
sysctl = { workspace = true }
[target.'cfg(target_os = "linux")'.dependencies] [target.'cfg(target_os = "linux")'.dependencies]
libsystemd.workspace = true libsystemd.workspace = true
+35 -11
View File
@@ -743,34 +743,58 @@ fn check_auth(req: Request<()>) -> std::result::Result<Request<()>, Status> {
Ok(req) Ok(req)
} }
// For macOS and BSD variants use the syscall way of getting the connection queue length.
#[cfg(any(target_os = "macos", target_os = "freebsd", target_os = "netbsd", target_os = "openbsd"))]
#[allow(unsafe_code)]
fn get_conn_queue_len() -> i32 {
const DEFAULT_BACKLOG: i32 = 1024;
#[cfg(target_os = "openbsd")]
let mut name = [libc::CTL_KERN, libc::KERN_SOMAXCONN];
#[cfg(any(target_os = "netbsd", target_os = "macos", target_os = "freebsd"))]
let mut name = [libc::CTL_KERN, libc::KERN_IPC, libc::KIPC_SOMAXCONN];
let mut buf = [0; 1];
let mut buf_len = std::mem::size_of_val(&buf);
if unsafe {
libc::sysctl(
name.as_mut_ptr(),
name.len() as u32,
buf.as_mut_ptr() as *mut libc::c_void,
&mut buf_len,
std::ptr::null_mut(),
0,
)
} != 0
{
return DEFAULT_BACKLOG;
}
buf[0]
}
/// Determines the listen backlog size. /// Determines the listen backlog size.
/// ///
/// It tries to read the system's maximum connection queue length (`somaxconn`). /// It tries to read the system's maximum connection queue length (`somaxconn`).
/// If reading fails, it falls back to a default value (e.g., 1024). /// If reading fails, it falls back to a default value (e.g., 1024).
/// This makes the backlog size adaptive to the system configuration. /// This makes the backlog size adaptive to the system configuration.
fn get_listen_backlog() -> i32 { fn get_listen_backlog() -> i32 {
const DEFAULT_BACKLOG: i32 = 1024;
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
{ {
const DEFAULT_BACKLOG: i32 = 1024;
// For Linux, read from /proc/sys/net/core/somaxconn // For Linux, read from /proc/sys/net/core/somaxconn
match std::fs::read_to_string("/proc/sys/net/core/somaxconn") { match std::fs::read_to_string("/proc/sys/net/core/somaxconn") {
Ok(s) => s.trim().parse().unwrap_or(DEFAULT_BACKLOG), Ok(s) => s.trim().parse().unwrap_or(DEFAULT_BACKLOG),
Err(_) => DEFAULT_BACKLOG, Err(_) => DEFAULT_BACKLOG,
} }
} }
#[cfg(any(target_os = "macos", target_os = "freebsd", target_os = "netbsd", target_os = "openbsd"))] #[cfg(any(target_os = "macos", target_os = "freebsd", target_os = "netbsd", target_os = "openbsd"))]
{ {
// For macOS and BSD variants, use sysctl get_conn_queue_len()
use sysctl::Sysctl;
match sysctl::Ctl::new("kern.ipc.somaxconn") {
Ok(ctl) => match ctl.value() {
Ok(sysctl::CtlValue::Int(val)) => val,
_ => DEFAULT_BACKLOG,
},
Err(_) => DEFAULT_BACKLOG,
}
} }
#[cfg(not(any( #[cfg(not(any(
target_os = "linux", target_os = "linux",
target_os = "macos", target_os = "macos",