mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-22 12:26:37 +00:00
Remove the sysctl crate and use libc's sysctl call interface (#1396)
Co-authored-by: houseme <housemecn@gmail.com>
This commit is contained in:
Generated
+1
-27
@@ -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"
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user