diff --git a/Cargo.lock b/Cargo.lock index 4b9b5989..47e9fedb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4618,7 +4618,7 @@ dependencies = [ "httpdate", "itoa 1.0.15", "pin-project-lite", - "socket2", + "socket2 0.5.10", "tokio", "tower-service", "tracing", @@ -4712,7 +4712,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2", + "socket2 0.5.10", "system-configuration", "tokio", "tower-service", @@ -7180,6 +7180,16 @@ name = "quick-xml" version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick-xml" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8927b0664f5c5a98265138b7e3f90aa19a6b21353182469ace36d4ac527b7b1b" dependencies = [ "memchr", "serde", @@ -7199,7 +7209,7 @@ dependencies = [ "quinn-udp", "rustc-hash 2.1.1", "rustls 0.23.29", - "socket2", + "socket2 0.5.10", "thiserror 2.0.12", "tokio", "tracing", @@ -7236,7 +7246,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.10", "tracing", "windows-sys 0.59.0", ] @@ -7400,9 +7410,9 @@ dependencies = [ [[package]] name = "rdkafka" -version = "0.37.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14b52c81ac3cac39c9639b95c20452076e74b8d9a71bc6fc4d83407af2ea6fff" +checksum = "5f1856d72dbbbea0d2a5b2eaf6af7fb3847ef2746e883b11781446a51dbc85c0" dependencies = [ "futures-channel", "futures-util", @@ -7888,7 +7898,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "shadow-rs", - "socket2", + "socket2 0.6.0", "thiserror 2.0.12", "tikv-jemallocator", "time", @@ -8156,7 +8166,7 @@ dependencies = [ "dashmap 6.1.0", "form_urlencoded", "once_cell", - "quick-xml", + "quick-xml 0.38.0", "reqwest", "rumqttc", "rustfs-config", @@ -8616,7 +8626,7 @@ dependencies = [ "nugine-rust-utils", "numeric_cast", "pin-project-lite", - "quick-xml", + "quick-xml 0.37.5", "serde", "serde_urlencoded", "sha1 0.11.0-pre.5", @@ -9237,6 +9247,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "soup3" version = "0.5.0" @@ -9530,9 +9550,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.35.2" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3ffa3e4ff2b324a57f7aeb3c349656c7b127c3c189520251a648102a92496e" +checksum = "aab138f5c1bb35231de19049060a87977ad23e04f2303e953bc5c2947ac7dec4" dependencies = [ "libc", "memchr", @@ -9877,7 +9897,7 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2", + "socket2 0.5.10", "tokio-macros", "tracing", "windows-sys 0.52.0", @@ -10062,7 +10082,7 @@ dependencies = [ "percent-encoding", "pin-project", "prost", - "socket2", + "socket2 0.5.10", "tokio", "tokio-stream", "tower", diff --git a/Cargo.toml b/Cargo.toml index a2c50f55..64dbb6d4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -182,9 +182,9 @@ pbkdf2 = "0.12.2" percent-encoding = "2.3.1" pin-project-lite = "0.2.16" prost = "0.13.5" -quick-xml = "0.37.5" +quick-xml = "0.38.0" rand = "0.9.1" -rdkafka = { version = "0.37.0", features = ["tokio"] } +rdkafka = { version = "0.38.0", features = ["tokio"] } reed-solomon-simd = { version = "3.0.1" } regex = { version = "1.11.1" } reqwest = { version = "0.12.22", default-features = false, features = [ @@ -222,9 +222,9 @@ siphasher = "1.0.1" smallvec = { version = "1.15.1", features = ["serde"] } snafu = "0.8.6" snap = "1.1.1" -socket2 = "0.5.10" +socket2 = "0.6.0" strum = { version = "0.27.1", features = ["derive"] } -sysinfo = "0.35.2" +sysinfo = "0.36.0" tempfile = "3.20.0" temp-env = "0.3.6" test-case = "3.3.1" diff --git a/Dockerfile.obs b/Dockerfile.obs index f16ea3dc..f7c02645 100644 --- a/Dockerfile.obs +++ b/Dockerfile.obs @@ -7,7 +7,7 @@ FROM ubuntu:latest WORKDIR /app -# 创建与 RUSTFS_VOLUMES 一致的目录 +# Create a directory that is consistent with RUSTFS_VOLUMES RUN mkdir -p /root/data/target/volume/test1 /root/data/target/volume/test2 /root/data/target/volume/test3 /root/data/target/volume/test4 # COPY ./target/x86_64-unknown-linux-musl/release/rustfs /app/rustfs @@ -16,6 +16,5 @@ COPY ./target/x86_64-unknown-linux-gnu/release/rustfs /app/rustfs RUN chmod +x /app/rustfs EXPOSE 9000 -EXPOSE 9002 CMD ["/app/rustfs"] \ No newline at end of file diff --git a/crates/utils/src/net.rs b/crates/utils/src/net.rs index 0d5440c9..1bc0adcc 100644 --- a/crates/utils/src/net.rs +++ b/crates/utils/src/net.rs @@ -176,7 +176,7 @@ impl Display for XHost { impl TryFrom for XHost { type Error = std::io::Error; - fn try_from(value: String) -> std::result::Result { + fn try_from(value: String) -> Result { if let Some(addr) = value.to_socket_addrs()?.next() { Ok(Self { name: addr.ip().to_string(), @@ -212,9 +212,9 @@ pub fn parse_and_resolve_address(addr_str: &str) -> std::io::Result } #[allow(dead_code)] -pub fn bytes_stream(stream: S, content_length: usize) -> impl Stream> + Send + 'static +pub fn bytes_stream(stream: S, content_length: usize) -> impl Stream> + Send + 'static where - S: Stream> + Send + 'static, + S: Stream> + Send + 'static, E: Send + 'static, { AsyncTryStream::::new(|mut y| async move { diff --git a/docker-compose-obs.yaml b/docker-compose-obs.yaml index 8878574d..e546a004 100644 --- a/docker-compose-obs.yaml +++ b/docker-compose-obs.yaml @@ -79,14 +79,12 @@ services: - RUSTFS_VOLUMES=http://node{1...4}:9000/root/data/target/volume/test{1...4} - RUSTFS_ADDRESS=:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=:9002 - RUSTFS_OBS_CONFIG=/etc/observability/config/obs-multi.toml platform: linux/amd64 ports: - - "9001:9000" # 映射宿主机的 9001 端口到容器的 9000 端口 - - "9101:9002" + - "9001:9000" # Map port 9001 of the host to port 9000 of the container volumes: - # - ./data:/root/data # 将当前路径挂载到容器内的 /root/data + # - ./data:/root/data # Mount the current path to /root/data in the container - ./.docker/observability/config:/etc/observability/config networks: - rustfs-network @@ -100,12 +98,10 @@ services: - RUSTFS_VOLUMES=http://node{1...4}:9000/root/data/target/volume/test{1...4} - RUSTFS_ADDRESS=:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=:9002 - RUSTFS_OBS_CONFIG=/etc/observability/config/obs-multi.toml platform: linux/amd64 ports: - - "9002:9000" # 映射宿主机的 9002 端口到容器的 9000 端口 - - "9102:9002" + - "9002:9000" # Map port 9002 of the host to port 9000 of the container volumes: # - ./data:/root/data - ./.docker/observability/config:/etc/observability/config @@ -121,12 +117,10 @@ services: - RUSTFS_VOLUMES=http://node{1...4}:9000/root/data/target/volume/test{1...4} - RUSTFS_ADDRESS=:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=:9002 - RUSTFS_OBS_CONFIG=/etc/observability/config/obs-multi.toml platform: linux/amd64 ports: - - "9003:9000" # 映射宿主机的 9003 端口到容器的 9000 端口 - - "9103:9002" + - "9003:9000" # Map port 9003 of the host to port 9000 of the container volumes: # - ./data:/root/data - ./.docker/observability/config:/etc/observability/config @@ -142,12 +136,10 @@ services: - RUSTFS_VOLUMES=http://node{1...4}:9000/root/data/target/volume/test{1...4} - RUSTFS_ADDRESS=:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=:9002 - RUSTFS_OBS_CONFIG=/etc/observability/config/obs-multi.toml platform: linux/amd64 ports: - - "9004:9000" # 映射宿主机的 9004 端口到容器的 9000 端口 - - "9104:9002" + - "9004:9000" # Map port 9004 of the host to port 9000 of the container volumes: # - ./data:/root/data - ./.docker/observability/config:/etc/observability/config diff --git a/docker-compose.yaml b/docker-compose.yaml index d34b0df2..8de2ec71 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -14,70 +14,61 @@ services: node0: - image: rustfs:v1 # 替换为你的镜像名称和标签 + image: rustfs/rustfs:latest # Replace with your image name and label container_name: node0 hostname: node0 environment: - RUSTFS_VOLUMES=http://node{0...3}:9000/data/rustfs{0...3} - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9002 platform: linux/amd64 ports: - - "9000:9000" # 映射宿主机的 9001 端口到容器的 9000 端口 - - "8000:9001" # 映射宿主机的 9001 端口到容器的 9000 端口 + - "9000:9000" # Map port 9001 of the host to port 9000 of the container volumes: - ./target/x86_64-unknown-linux-musl/release/rustfs:/app/rustfs - # - ./data/node0:/data # 将当前路径挂载到容器内的 /root/data command: "/app/rustfs" node1: - image: rustfs:v1 + image: rustfs/rustfs:latest container_name: node1 hostname: node1 environment: - RUSTFS_VOLUMES=http://node{0...3}:9000/data/rustfs{0...3} - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9002 platform: linux/amd64 ports: - - "9001:9000" # 映射宿主机的 9002 端口到容器的 9000 端口 + - "9001:9000" # Map port 9002 of the host to port 9000 of the container volumes: - - ./target/x86_64-unknown-linux-musl/release/rustfs:/app/rustfs - # - ./data/node1:/data + - ./target/x86_64-unknown-linux-musl/release/rustfs:/app/rustfs command: "/app/rustfs" node2: - image: rustfs:v1 + image: rustfs/rustfs:latest container_name: node2 hostname: node2 environment: - RUSTFS_VOLUMES=http://node{0...3}:9000/data/rustfs{0...3} - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9002 platform: linux/amd64 ports: - - "9002:9000" # 映射宿主机的 9003 端口到容器的 9000 端口 + - "9002:9000" # Map port 9003 of the host to port 9000 of the container volumes: - ./target/x86_64-unknown-linux-musl/release/rustfs:/app/rustfs - # - ./data/node2:/data command: "/app/rustfs" node3: - image: rustfs:v1 + image: rustfs/rustfs:latest container_name: node3 hostname: node3 environment: - RUSTFS_VOLUMES=http://node{0...3}:9000/data/rustfs{0...3} - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9002 platform: linux/amd64 ports: - - "9003:9000" # 映射宿主机的 9004 端口到容器的 9000 端口 + - "9003:9000" # Map port 9004 of the host to port 9000 of the container volumes: - ./target/x86_64-unknown-linux-musl/release/rustfs:/app/rustfs - # - ./data/node3:/data command: "/app/rustfs" diff --git a/docker-compose.yml b/docker-compose.yml index 6ffe4f7e..ffba7c83 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,12 +28,10 @@ services: TARGETPLATFORM: linux/amd64 ports: - "9000:9000" # S3 API port - - "9001:9001" # Console port environment: - RUSTFS_VOLUMES=/data/rustfs0,/data/rustfs1,/data/rustfs2,/data/rustfs3 - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001 - RUSTFS_ACCESS_KEY=rustfsadmin - RUSTFS_SECRET_KEY=rustfsadmin - RUSTFS_LOG_LEVEL=info @@ -65,12 +63,10 @@ services: dockerfile: .docker/Dockerfile.devenv ports: - "9010:9000" - - "9011:9001" environment: - RUSTFS_VOLUMES=/data/rustfs0,/data/rustfs1 - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9001 - RUSTFS_ACCESS_KEY=devadmin - RUSTFS_SECRET_KEY=devadmin - RUSTFS_LOG_LEVEL=debug diff --git a/rustfs/src/config/mod.rs b/rustfs/src/config/mod.rs index 8b93801b..fc127762 100644 --- a/rustfs/src/config/mod.rs +++ b/rustfs/src/config/mod.rs @@ -68,15 +68,7 @@ pub struct Opt { #[arg(long, default_value_t = true, env = "RUSTFS_CONSOLE_ENABLE")] pub console_enable: bool, - /// Console server bind address - #[arg(long, default_value_t = rustfs_config::DEFAULT_CONSOLE_ADDRESS.to_string(), env = "RUSTFS_CONSOLE_ADDRESS")] - pub console_address: String, - - /// rustfs endpoint for console - #[arg(long, env = "RUSTFS_CONSOLE_FS_ENDPOINT")] - pub console_fs_endpoint: Option, - - /// Observability configuration file + /// Observability endpoint for trace, metrics and logs,only support grpc mode. #[arg(long, default_value_t = rustfs_config::DEFAULT_OBS_ENDPOINT.to_string(), env = "RUSTFS_OBS_ENDPOINT")] pub obs_endpoint: String, diff --git a/rustfs/src/logging/mod.rs b/rustfs/src/logging/mod.rs deleted file mode 100644 index 6238cfff..00000000 --- a/rustfs/src/logging/mod.rs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2024 RustFS Team -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. diff --git a/rustfs/src/main.rs b/rustfs/src/main.rs index 1a0a9c39..469624c1 100644 --- a/rustfs/src/main.rs +++ b/rustfs/src/main.rs @@ -18,14 +18,11 @@ mod config; mod error; // mod grpc; pub mod license; -mod logging; mod server; mod storage; mod update; mod version; -use rustfs_config::DEFAULT_DELIMITER; -use rustfs_ecstore::config::GLOBAL_ServerConfig; // Ensure the correct path for parse_license is imported use crate::server::{SHUTDOWN_TIMEOUT, ServiceState, ServiceStateManager, ShutdownSignal, start_http_server, wait_for_shutdown}; use chrono::Datelike; @@ -34,10 +31,12 @@ use license::init_license; use rustfs_ahm::scanner::data_scanner::ScannerConfig; use rustfs_ahm::{Scanner, create_ahm_services_cancel_token, shutdown_ahm_services}; use rustfs_common::globals::set_global_addr; +use rustfs_config::DEFAULT_DELIMITER; use rustfs_ecstore::bucket::metadata_sys::init_bucket_metadata_sys; use rustfs_ecstore::cmd::bucket_replication::init_bucket_replication_pool; use rustfs_ecstore::config as ecconfig; use rustfs_ecstore::config::GLOBAL_ConfigSys; +use rustfs_ecstore::config::GLOBAL_ServerConfig; use rustfs_ecstore::store_api::BucketOptions; use rustfs_ecstore::{ StorageAPI, diff --git a/rustfs/src/server/http.rs b/rustfs/src/server/http.rs index 7ffb2c47..34a20813 100644 --- a/rustfs/src/server/http.rs +++ b/rustfs/src/server/http.rs @@ -1,7 +1,21 @@ -// use crate::admin::console::{CONSOLE_CONFIG, init_console_cfg}; -use crate::auth::IAMAuth; +// Copyright 2024 RustFS Team +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + // Ensure the correct path for parse_license is imported use crate::admin; +// use crate::admin::console::{CONSOLE_CONFIG, init_console_cfg}; +use crate::auth::IAMAuth; use crate::config; use crate::server::hybrid::hybrid; use crate::server::layer::RedirectLayer; @@ -44,7 +58,7 @@ const MI_B: usize = 1024 * 1024; pub async fn start_http_server( opt: &config::Opt, worker_state_manager: ServiceStateManager, -) -> std::io::Result> { +) -> Result> { let server_addr = parse_and_resolve_address(opt.address.as_str()).map_err(Error::other)?; let server_port = server_addr.port(); let server_address = server_addr.to_string(); @@ -201,7 +215,7 @@ pub async fn start_http_server( }; let socket_ref = SockRef::from(&socket); - if let Err(err) = socket_ref.set_nodelay(true) { + if let Err(err) = socket_ref.set_tcp_nodelay(true) { warn!(?err, "Failed to set TCP_NODELAY"); } if let Err(err) = socket_ref.set_recv_buffer_size(4 * MI_B) { diff --git a/rustfs/src/server/layer.rs b/rustfs/src/server/layer.rs index d00af717..f77f1252 100644 --- a/rustfs/src/server/layer.rs +++ b/rustfs/src/server/layer.rs @@ -1,3 +1,17 @@ +// Copyright 2024 RustFS Team +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + use crate::server::hybrid::HybridBody; use http::{Request as HttpRequest, Response, StatusCode}; use hyper::body::Incoming; diff --git a/scripts/dev_rustfs.env b/scripts/dev_rustfs.env index d45fa38c..59ee523d 100644 --- a/scripts/dev_rustfs.env +++ b/scripts/dev_rustfs.env @@ -4,7 +4,6 @@ RUSTFS_ROOT_PASSWORD=rustfsadmin RUSTFS_VOLUMES="http://node{1...4}:7000/data/rustfs{0...3} http://node{5...8}:7000/data/rustfs{0...3}" RUSTFS_ADDRESS=":7000" RUSTFS_CONSOLE_ENABLE=true -RUSTFS_CONSOLE_ADDRESS=":7001" RUST_LOG=warn RUSTFS_OBS_LOG_DIRECTORY="/var/logs/rustfs/" RUSTFS_NS_SCANNER_INTERVAL=60 diff --git a/scripts/run.sh b/scripts/run.sh index fa53566a..1f77a067 100755 --- a/scripts/run.sh +++ b/scripts/run.sh @@ -57,7 +57,7 @@ export RUSTFS_OBS_ENDPOINT=http://localhost:4317 # OpenTelemetry Collector 的 #export RUSTFS_OBS_METER_INTERVAL=1 # 采样间隔,单位为秒 #export RUSTFS_OBS_SERVICE_NAME=rustfs # 服务名称 #export RUSTFS_OBS_SERVICE_VERSION=0.1.0 # 服务版本 -#export RUSTFS_OBS_ENVIRONMENT=develop # 环境名称 +export RUSTFS_OBS_ENVIRONMENT=develop # 环境名称 export RUSTFS_OBS_LOGGER_LEVEL=debug # 日志级别,支持 trace, debug, info, warn, error export RUSTFS_OBS_LOCAL_LOGGING_ENABLED=true # 是否启用本地日志记录 export RUSTFS_OBS_LOG_DIRECTORY="$current_dir/deploy/logs" # Log directory