diff --git a/.vscode/launch.json b/.vscode/launch.json index 8c61c1833..28578442c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -20,19 +20,33 @@ } }, "env": { - "RUST_LOG": "rustfs=debug,ecstore=info,s3s=debug" + "RUST_LOG": "rustfs=debug,ecstore=info,s3s=debug", + "RUSTFS_VOLUMES": "./target/volume/test{0...3}", + "RUSTFS_ADDRESS": "[::]:9000", + "RUSTFS_CONSOLE_ENABLE": "true", + "RUSTFS_CONSOLE_ADDRESS": "[::]:9002", + "RUSTFS_SERVER_DOMAINS": "localhost:9000", + "RUSTFS_TLS_PATH": "./deploy/certs", + "RUSTFS_OBS_CONFIG": "./deploy/config/obs.example.toml", + "RUSTFS__OBSERVABILITY__ENDPOINT": "http://localhost:4317", + "RUSTFS__OBSERVABILITY__USE_STDOUT": "true", + "RUSTFS__OBSERVABILITY__SAMPLE_RATIO": "2.0", + "RUSTFS__OBSERVABILITY__METER_INTERVAL": "30", + "RUSTFS__OBSERVABILITY__SERVICE_NAME": "rustfs", + "RUSTFS__OBSERVABILITY__SERVICE_VERSION": "0.1.0", + "RUSTFS__OBSERVABILITY__ENVIRONMENT": "develop", + "RUSTFS__OBSERVABILITY__LOGGER_LEVEL": "info", + "RUSTFS__SINKS__FILE__ENABLED": "true", + "RUSTFS__SINKS__FILE__PATH": "./deploy/logs/rustfs.log", + "RUSTFS__SINKS__WEBHOOK__ENABLED": "false", + "RUSTFS__SINKS__WEBHOOK__ENDPOINT": "", + "RUSTFS__SINKS__WEBHOOK__AUTH_TOKEN": "", + "RUSTFS__SINKS__KAFKA__ENABLED": "false", + "RUSTFS__SINKS__KAFKA__BOOTSTRAP_SERVERS": "", + "RUSTFS__SINKS__KAFKA__TOPIC": "", + "RUSTFS__LOGGER__QUEUE_CAPACITY": "10" + }, - "args": [ - "--access-key", - "AKEXAMPLERUSTFS", - "--secret-key", - "SKEXAMPLERUSTFS", - "--address", - "0.0.0.0:9010", - "--domain-name", - "127.0.0.1:9010", - "./target/volume/test{0...4}" - ], "cwd": "${workspaceFolder}" }, { diff --git a/Cargo.toml b/Cargo.toml index 67c0012f7..d69bdce23 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -173,6 +173,10 @@ inherits = "dev" inherits = "dev" [profile.release] -opt-level = 3 # Optimization Level (0-3) -lto = true # Optimize when linking -codegen-units = 1 # Reduce code generation units to improve optimization +opt-level = 3 +lto = "thin" + +[profile.production] +inherits = "release" +lto = "fat" +codegen-units = 1 diff --git a/crates/obs/src/telemetry.rs b/crates/obs/src/telemetry.rs index 82c93de73..8efa869dd 100644 --- a/crates/obs/src/telemetry.rs +++ b/crates/obs/src/telemetry.rs @@ -254,7 +254,11 @@ pub fn init_telemetry(config: &OtelConfig) -> OtelGuard { let filter_otel = match logger_level { "trace" | "debug" => { info!("OpenTelemetry tracing initialized with level: {}", logger_level); - EnvFilter::new(logger_level) + let mut filter = EnvFilter::new(logger_level); + for directive in ["hyper", "tonic", "h2", "reqwest", "tower"] { + filter = filter.add_directive(format!("{}=off", directive).parse().unwrap()); + } + filter } _ => { let mut filter = EnvFilter::new(logger_level); diff --git a/docker-compose.yaml b/docker-compose.yaml index bee2f4a0a..b26b84a63 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -67,16 +67,3 @@ services: - ./target/x86_64-unknown-linux-musl/release/rustfs:/app/rustfs # - ./data/node3:/data command: "/app/rustfs" - - - - - - 2025-03-14T05:23:15.661154Z INFO ecstore::disk::os: reliable_rename rm dst failed. src_file_path: "/data/rustfs1/.rustfs.sys/tmp/c7fabb9c-48c8-4827-b5e2-13271c3867c3x1741929793/part.38", dst_file_path: "/data/rustfs1/.rustfs.sys/multipart/494d877741f5e87d5160dc4e1bd4fbdacda64559ea0b7d16cdbeed61f252b98f/a83dc20f-e73a-46d0-a02b-11b330ba6e7ex1741929773056730169/641d3efd-cca0-418e-983b-ca2d47652900/part.38", base_dir: "/data/rustfs1/.rustfs.sys/multipart", err: Os { code: 2, kind: NotFound, message: "No such file or directory" } - at ecstore/src/disk/os.rs:144 - - 2025-03-14T05:23:15.953116Z INFO ecstore::disk::os: reliable_rename rm dst failed. src_file_path: "/data/rustfs3/.rustfs.sys/tmp/e712821f-bc3f-4ffe-8a0c-0daa379d00d4x1741929793/part.39", dst_file_path: "/data/rustfs3/.rustfs.sys/multipart/494d877741f5e87d5160dc4e1bd4fbdacda64559ea0b7d16cdbeed61f252b98f/a83dc20f-e73a-46d0-a02b-11b330ba6e7ex1741929773056730169/641d3efd-cca0-418e-983b-ca2d47652900/part.39", base_dir: "/data/rustfs3/.rustfs.sys/multipart", err: Os { code: 2, kind: NotFound, message: "No such file or directory" } - at ecstore/src/disk/os.rs:144 - - 2025-03-14T05:23:15.953218Z INFO ecstore::disk::os: reliable_rename rm dst failed. src_file_path: "/data/rustfs2/.rustfs.sys/tmp/e712821f-bc3f-4ffe-8a0c-0daa379d00d4x1741929793/part.39", dst_file_path: "/data/rustfs2/.rustfs.sys/multipart/494d877741f5e87d5160dc4e1bd4fbdacda64559ea0b7d16cdbeed61f252b98f/a83dc20f-e73a-46d0-a02b-11b330ba6e7ex1741929773056730169/641d3efd-cca0-418e-983b-ca2d47652900/part.39", base_dir: "/data/rustfs2/.rustfs.sys/multipart", err: Os { code: 2, kind: NotFound, message: "No such file or directory" } - at ecstore/src/disk/os.rs:144 \ No newline at end of file diff --git a/ecstore/src/file_meta.rs b/ecstore/src/file_meta.rs index c9558578e..e4da3882a 100644 --- a/ecstore/src/file_meta.rs +++ b/ecstore/src/file_meta.rs @@ -99,7 +99,7 @@ impl FileMeta { Ok((bin_len, &buf[5..])) } - #[tracing::instrument] + pub fn unmarshal_msg(&mut self, buf: &[u8]) -> Result { let i = buf.len() as u64; @@ -711,7 +711,6 @@ impl FileMetaVersion { Ok(data_dir) } - #[tracing::instrument] pub fn unmarshal_msg(&mut self, buf: &[u8]) -> Result { let mut cur = Cursor::new(buf); @@ -998,7 +997,7 @@ impl FileMetaVersionHeader { Ok(wr) } - #[tracing::instrument] + pub fn unmarshal_msg(&mut self, buf: &[u8]) -> Result { let mut cur = Cursor::new(buf); let alen = rmp::decode::read_array_len(&mut cur)?; @@ -1144,7 +1143,6 @@ pub struct MetaObject { } impl MetaObject { - #[tracing::instrument] pub fn unmarshal_msg(&mut self, buf: &[u8]) -> Result { let mut cur = Cursor::new(buf); diff --git a/ecstore/src/heal/data_scanner.rs b/ecstore/src/heal/data_scanner.rs index 315b21fef..78c5b9f64 100644 --- a/ecstore/src/heal/data_scanner.rs +++ b/ecstore/src/heal/data_scanner.rs @@ -344,7 +344,6 @@ impl CurrentScannerCycle { Ok(result) } - #[tracing::instrument] pub fn unmarshal_msg(&mut self, buf: &[u8]) -> Result { let mut cur = Cursor::new(buf); diff --git a/ecstore/src/store.rs b/ecstore/src/store.rs index 4bd2067f1..927672afb 100644 --- a/ecstore/src/store.rs +++ b/ecstore/src/store.rs @@ -695,7 +695,7 @@ impl ECStore { let at = a.object_info.mod_time.unwrap_or(OffsetDateTime::UNIX_EPOCH); let bt = b.object_info.mod_time.unwrap_or(OffsetDateTime::UNIX_EPOCH); - at.cmp(&bt) + bt.cmp(&at) }); let mut def_pool = PoolObjInfo::default(); @@ -911,29 +911,30 @@ impl ECStore { // TODO: test order idx_res.sort_by(|a, b| { - if let Some(obj1) = &a.res { - if let Some(obj2) = &b.res { - let cmp = obj1.mod_time.cmp(&obj2.mod_time); - match cmp { - // eq use lowest - Ordering::Equal => { - if a.idx < b.idx { - Ordering::Greater - } else { - Ordering::Less - } - } - _ => cmp, - } - } else { - Ordering::Greater - } + let a_mod = if let Some(o1) = &a.res { + o1.mod_time.unwrap_or(OffsetDateTime::UNIX_EPOCH) } else { - Ordering::Less + OffsetDateTime::UNIX_EPOCH + }; + + let b_mod = if let Some(o2) = &b.res { + o2.mod_time.unwrap_or(OffsetDateTime::UNIX_EPOCH) + } else { + OffsetDateTime::UNIX_EPOCH + }; + + if a_mod == b_mod { + if a.idx < b.idx { + return Ordering::Greater; + } else { + return Ordering::Less; + } } + + b_mod.cmp(&a_mod) }); - for res in idx_res { + for res in idx_res.into_iter() { if let Some(obj) = res.res { return Ok((obj, res.idx)); }