Merge branch 'main' into cxymds/fix-5416-k8s-quorum-startup

This commit is contained in:
cxymds
2026-07-30 09:41:01 +08:00
committed by GitHub
17 changed files with 368 additions and 226 deletions
+8 -2
View File
@@ -10,10 +10,16 @@ never weaken a check to get green.
## `check_layer_dependencies.sh` — layer DAG in `rustfs/src` ## `check_layer_dependencies.sh` — layer DAG in `rustfs/src`
Enforces `interface (admin, storage/ecfs, storage/s3_api) → app → infra`; no Enforces `composition (server, startup/init) → interface (admin,
upward imports. Known legacy violations live in storage/ecfs, storage/s3_api) → app → infra`; no upward imports. Server source
files are composition roots, while imports of their exported HTTP contracts
are classified as interface dependencies. Known legacy violations live in
`scripts/layer-dependency-baseline.txt`. `scripts/layer-dependency-baseline.txt`.
Dedicated `*_test.rs` and `tests/` modules are outside this production guard.
Inline `#[cfg(test)]` imports remain checked under their source file's layer;
move architecture-crossing test scaffolding into a dedicated test module.
- **New violation**: restructure your change so the dependency points - **New violation**: restructure your change so the dependency points
downward (move the shared type/function to the lower layer). downward (move the shared type/function to the lower layer).
- **You legitimately removed a baseline entry**: run - **You legitimately removed a baseline entry**: run
Generated
+123 -123
View File
@@ -642,9 +642,9 @@ dependencies = [
[[package]] [[package]]
name = "async-compression" name = "async-compression"
version = "0.4.42" version = "0.4.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e79b3f8a79cccc2898f31920fc69f304859b3bd567490f75ebf51ae1c792a9ac" checksum = "3976abdc8fe7d1133d43d304afd42abdf5bc3e1319d263d223bde07b5efc4be8"
dependencies = [ dependencies = [
"compression-codecs", "compression-codecs",
"compression-core", "compression-core",
@@ -870,7 +870,7 @@ dependencies = [
"bytes", "bytes",
"fastrand", "fastrand",
"hex", "hex",
"http 1.4.2", "http 1.5.0",
"sha1 0.10.7", "sha1 0.10.7",
"time", "time",
"tokio", "tokio",
@@ -934,7 +934,7 @@ dependencies = [
"bytes-utils", "bytes-utils",
"fastrand", "fastrand",
"http 0.2.12", "http 0.2.12",
"http 1.4.2", "http 1.5.0",
"http-body 0.4.6", "http-body 0.4.6",
"http-body 1.1.0", "http-body 1.1.0",
"percent-encoding", "percent-encoding",
@@ -970,7 +970,7 @@ dependencies = [
"hex", "hex",
"hmac 0.13.0", "hmac 0.13.0",
"http 0.2.12", "http 0.2.12",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"lru 0.16.4", "lru 0.16.4",
"percent-encoding", "percent-encoding",
@@ -1001,7 +1001,7 @@ dependencies = [
"bytes", "bytes",
"fastrand", "fastrand",
"http 0.2.12", "http 0.2.12",
"http 1.4.2", "http 1.5.0",
"regex-lite", "regex-lite",
"tracing", "tracing",
] ]
@@ -1027,7 +1027,7 @@ dependencies = [
"bytes", "bytes",
"fastrand", "fastrand",
"http 0.2.12", "http 0.2.12",
"http 1.4.2", "http 1.5.0",
"regex-lite", "regex-lite",
"tracing", "tracing",
] ]
@@ -1054,7 +1054,7 @@ dependencies = [
"aws-types", "aws-types",
"fastrand", "fastrand",
"http 0.2.12", "http 0.2.12",
"http 1.4.2", "http 1.5.0",
"regex-lite", "regex-lite",
"tracing", "tracing",
] ]
@@ -1076,7 +1076,7 @@ dependencies = [
"hex", "hex",
"hmac 0.13.0", "hmac 0.13.0",
"http 0.2.12", "http 0.2.12",
"http 1.4.2", "http 1.5.0",
"p256 0.13.2", "p256 0.13.2",
"percent-encoding", "percent-encoding",
"sha2 0.11.0", "sha2 0.11.0",
@@ -1108,7 +1108,7 @@ dependencies = [
"bytes", "bytes",
"crc-fast", "crc-fast",
"hex", "hex",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"md-5 0.11.0", "md-5 0.11.0",
@@ -1142,7 +1142,7 @@ dependencies = [
"bytes-utils", "bytes-utils",
"futures-core", "futures-core",
"futures-util", "futures-util",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"percent-encoding", "percent-encoding",
@@ -1161,7 +1161,7 @@ dependencies = [
"aws-smithy-runtime-api", "aws-smithy-runtime-api",
"aws-smithy-types", "aws-smithy-types",
"h2", "h2",
"http 1.4.2", "http 1.5.0",
"hyper", "hyper",
"hyper-rustls", "hyper-rustls",
"hyper-util", "hyper-util",
@@ -1224,7 +1224,7 @@ dependencies = [
"bytes", "bytes",
"fastrand", "fastrand",
"http 0.2.12", "http 0.2.12",
"http 1.4.2", "http 1.5.0",
"http-body 0.4.6", "http-body 0.4.6",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
@@ -1245,7 +1245,7 @@ dependencies = [
"aws-smithy-types", "aws-smithy-types",
"bytes", "bytes",
"http 0.2.12", "http 0.2.12",
"http 1.4.2", "http 1.5.0",
"pin-project-lite", "pin-project-lite",
"tokio", "tokio",
"tracing", "tracing",
@@ -1271,7 +1271,7 @@ checksum = "7d56e0a4e53127a632224e43633b0fe045fa9e1e3cfc68b9830f1115e103f910"
dependencies = [ dependencies = [
"aws-smithy-runtime-api", "aws-smithy-runtime-api",
"aws-smithy-types", "aws-smithy-types",
"http 1.4.2", "http 1.5.0",
] ]
[[package]] [[package]]
@@ -1285,7 +1285,7 @@ dependencies = [
"bytes-utils", "bytes-utils",
"futures-core", "futures-core",
"http 0.2.12", "http 0.2.12",
"http 1.4.2", "http 1.5.0",
"http-body 0.4.6", "http-body 0.4.6",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
@@ -1337,7 +1337,7 @@ dependencies = [
"bytes", "bytes",
"form_urlencoded", "form_urlencoded",
"futures-util", "futures-util",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"hyper", "hyper",
@@ -1368,7 +1368,7 @@ checksum = "08c78f31d7b1291f7ee735c1c6780ccde7785daae9a9206026862dab7d8792d1"
dependencies = [ dependencies = [
"bytes", "bytes",
"futures-core", "futures-core",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"mime", "mime",
@@ -3229,7 +3229,7 @@ dependencies = [
"futures-util", "futures-util",
"headers", "headers",
"htmlescape", "htmlescape",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"libc", "libc",
@@ -3654,7 +3654,7 @@ checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555"
[[package]] [[package]]
name = "e2e_test" name = "e2e_test"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"astral-tokio-tar", "astral-tokio-tar",
@@ -3672,7 +3672,7 @@ dependencies = [
"flate2", "flate2",
"futures", "futures",
"hex", "hex",
"http 1.4.2", "http 1.5.0",
"http-body-util", "http-body-util",
"hyper", "hyper",
"hyper-util", "hyper-util",
@@ -4384,7 +4384,7 @@ dependencies = [
"google-cloud-gax", "google-cloud-gax",
"hex", "hex",
"hmac 0.13.0", "hmac 0.13.0",
"http 1.4.2", "http 1.5.0",
"jsonwebtoken 10.4.0", "jsonwebtoken 10.4.0",
"reqwest", "reqwest",
"rustc_version", "rustc_version",
@@ -4409,7 +4409,7 @@ dependencies = [
"futures", "futures",
"google-cloud-rpc", "google-cloud-rpc",
"google-cloud-wkt", "google-cloud-wkt",
"http 1.4.2", "http 1.5.0",
"pin-project", "pin-project",
"rand 0.10.2", "rand 0.10.2",
"serde", "serde",
@@ -4431,7 +4431,7 @@ dependencies = [
"google-cloud-rpc", "google-cloud-rpc",
"google-cloud-wkt", "google-cloud-wkt",
"h2", "h2",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"hyper", "hyper",
@@ -4544,7 +4544,7 @@ dependencies = [
"google-cloud-type", "google-cloud-type",
"google-cloud-wkt", "google-cloud-wkt",
"hex", "hex",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"md5", "md5",
"percent-encoding", "percent-encoding",
@@ -4624,7 +4624,7 @@ dependencies = [
"fnv", "fnv",
"futures-core", "futures-core",
"futures-sink", "futures-sink",
"http 1.4.2", "http 1.5.0",
"indexmap 2.14.0", "indexmap 2.14.0",
"slab", "slab",
"tokio", "tokio",
@@ -4727,7 +4727,7 @@ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"bytes", "bytes",
"headers-core", "headers-core",
"http 1.4.2", "http 1.5.0",
"httpdate", "httpdate",
"mime", "mime",
"sha1 0.10.7", "sha1 0.10.7",
@@ -4739,7 +4739,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4"
dependencies = [ dependencies = [
"http 1.4.2", "http 1.5.0",
] ]
[[package]] [[package]]
@@ -4961,9 +4961,9 @@ dependencies = [
[[package]] [[package]]
name = "http" name = "http"
version = "1.4.2" version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6970f50e31d6fc17d3fa27329444bfa74e196cf62e95052a3f6fee181dba6425" checksum = "918d3568bebf352712bc2ef3d46a8bcf1a75b373be6539de198e9105cbbf9ce0"
dependencies = [ dependencies = [
"bytes", "bytes",
"itoa", "itoa",
@@ -4987,7 +4987,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c"
dependencies = [ dependencies = [
"bytes", "bytes",
"http 1.4.2", "http 1.5.0",
] ]
[[package]] [[package]]
@@ -4998,7 +4998,7 @@ checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2"
dependencies = [ dependencies = [
"bytes", "bytes",
"futures-core", "futures-core",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"pin-project-lite", "pin-project-lite",
] ]
@@ -5044,7 +5044,7 @@ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"h2", "h2",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"httparse", "httparse",
"httpdate", "httpdate",
@@ -5061,7 +5061,7 @@ version = "0.27.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f" checksum = "33ca68d021ef39cf6463ab54c1d0f5daf03377b70561305bb89a8f83aab66e0f"
dependencies = [ dependencies = [
"http 1.4.2", "http 1.5.0",
"hyper", "hyper",
"hyper-util", "hyper-util",
"log", "log",
@@ -5095,7 +5095,7 @@ dependencies = [
"bytes", "bytes",
"futures-channel", "futures-channel",
"futures-util", "futures-util",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"hyper", "hyper",
"ipnet", "ipnet",
@@ -6704,10 +6704,10 @@ version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d" checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.21.7",
"chrono", "chrono",
"getrandom 0.2.17", "getrandom 0.2.17",
"http 1.4.2", "http 1.5.0",
"rand 0.8.7", "rand 0.8.7",
"serde", "serde",
"serde_json", "serde_json",
@@ -6815,7 +6815,7 @@ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-util", "futures-util",
"http 1.4.2", "http 1.5.0",
"humantime", "humantime",
"itertools 0.14.0", "itertools 0.14.0",
"parking_lot", "parking_lot",
@@ -6871,7 +6871,7 @@ dependencies = [
"dyn-clone", "dyn-clone",
"ed25519-dalek 2.2.0", "ed25519-dalek 2.2.0",
"hmac 0.12.1", "hmac 0.12.1",
"http 1.4.2", "http 1.5.0",
"itertools 0.10.5", "itertools 0.10.5",
"log", "log",
"oauth2", "oauth2",
@@ -6932,7 +6932,7 @@ checksum = "5683015d09e2df236ef005b17f6f196f0d5f6313c4fa43a7b6a53b52776e4331"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"bytes", "bytes",
"http 1.4.2", "http 1.5.0",
"opentelemetry", "opentelemetry",
"reqwest", "reqwest",
] ]
@@ -6944,7 +6944,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9966929966d17620d7c316c643ba62631826e10021409357772d5eea84f62c35" checksum = "9966929966d17620d7c316c643ba62631826e10021409357772d5eea84f62c35"
dependencies = [ dependencies = [
"flate2", "flate2",
"http 1.4.2", "http 1.5.0",
"opentelemetry", "opentelemetry",
"opentelemetry-http", "opentelemetry-http",
"opentelemetry-proto", "opentelemetry-proto",
@@ -7820,7 +7820,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf"
dependencies = [ dependencies = [
"heck", "heck",
"itertools 0.14.0", "itertools 0.10.5",
"log", "log",
"multimap", "multimap",
"once_cell", "once_cell",
@@ -7840,7 +7840,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042" checksum = "03da047801ff44bb6a4d407d4860c05fd70bb81714e6b2f3812603d5b145b042"
dependencies = [ dependencies = [
"heck", "heck",
"itertools 0.14.0", "itertools 0.10.5",
"log", "log",
"multimap", "multimap",
"petgraph 0.8.3", "petgraph 0.8.3",
@@ -7861,7 +7861,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"itertools 0.14.0", "itertools 0.10.5",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.119", "syn 2.0.119",
@@ -7874,7 +7874,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"itertools 0.14.0", "itertools 0.10.5",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.119", "syn 2.0.119",
@@ -8329,9 +8329,9 @@ dependencies = [
[[package]] [[package]]
name = "redis" name = "redis"
version = "1.4.1" version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0b9503711b03773e43b31668c7b5bd279ee7cd9b7d18cff7c23a42cc1d08e5a" checksum = "3257df217f7eab0044627a268c9cc6cdb60c0c421c88f83ac41c4e31520b6b84"
dependencies = [ dependencies = [
"arc-swap", "arc-swap",
"arcstr", "arcstr",
@@ -8481,7 +8481,7 @@ dependencies = [
"futures-core", "futures-core",
"futures-util", "futures-util",
"h2", "h2",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"hyper", "hyper",
@@ -8627,7 +8627,7 @@ dependencies = [
"async-tungstenite", "async-tungstenite",
"futures-io", "futures-io",
"futures-util", "futures-util",
"http 1.4.2", "http 1.5.0",
"rustls-native-certs", "rustls-native-certs",
"rustls-pki-types", "rustls-pki-types",
"rustls-webpki", "rustls-webpki",
@@ -8657,7 +8657,7 @@ dependencies = [
"flume", "flume",
"futures-io", "futures-io",
"futures-util", "futures-util",
"http 1.4.2", "http 1.5.0",
"log", "log",
"mqttbytes-core-next", "mqttbytes-core-next",
"rumqttc-core-next", "rumqttc-core-next",
@@ -8845,7 +8845,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs" name = "rustfs"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"aes-gcm", "aes-gcm",
"anyhow", "anyhow",
@@ -8874,7 +8874,7 @@ dependencies = [
"hex-simd", "hex-simd",
"hmac 0.13.0", "hmac 0.13.0",
"hotpath", "hotpath",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"hyper", "hyper",
@@ -8981,7 +8981,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-audit" name = "rustfs-audit"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"chrono", "chrono",
@@ -9003,12 +9003,12 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-checksums" name = "rustfs-checksums"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"base64-simd", "base64-simd",
"bytes", "bytes",
"crc-fast", "crc-fast",
"http 1.4.2", "http 1.5.0",
"md-5 0.11.0", "md-5 0.11.0",
"pretty_assertions", "pretty_assertions",
"sha1 0.11.0", "sha1 0.11.0",
@@ -9018,7 +9018,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-common" name = "rustfs-common"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"chrono", "chrono",
"metrics", "metrics",
@@ -9033,7 +9033,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-concurrency" name = "rustfs-concurrency"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"insta", "insta",
"rustfs-io-core", "rustfs-io-core",
@@ -9045,7 +9045,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-config" name = "rustfs-config"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"const-str", "const-str",
"serde", "serde",
@@ -9054,7 +9054,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-credentials" name = "rustfs-credentials"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"base64-simd", "base64-simd",
"hmac 0.13.0", "hmac 0.13.0",
@@ -9067,7 +9067,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-crypto" name = "rustfs-crypto"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"aes-gcm", "aes-gcm",
"argon2", "argon2",
@@ -9087,7 +9087,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-data-usage" name = "rustfs-data-usage"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"rmp-serde", "rmp-serde",
@@ -9097,7 +9097,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-ecstore" name = "rustfs-ecstore"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"aes-gcm", "aes-gcm",
"arc-swap", "arc-swap",
@@ -9130,7 +9130,7 @@ dependencies = [
"hmac 0.13.0", "hmac 0.13.0",
"hostname", "hostname",
"hotpath", "hotpath",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"hyper", "hyper",
@@ -9236,7 +9236,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-extension-schema" name = "rustfs-extension-schema"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
@@ -9245,7 +9245,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-filemeta" name = "rustfs-filemeta"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"arc-swap", "arc-swap",
"byteorder", "byteorder",
@@ -9271,12 +9271,12 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-heal" name = "rustfs-heal"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"base64 0.23.0", "base64 0.23.0",
"futures", "futures",
"http 1.4.2", "http 1.5.0",
"metrics", "metrics",
"rustfs-common", "rustfs-common",
"rustfs-concurrency", "rustfs-concurrency",
@@ -9301,13 +9301,13 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-iam" name = "rustfs-iam"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"arc-swap", "arc-swap",
"async-trait", "async-trait",
"base64-simd", "base64-simd",
"futures", "futures",
"http 1.4.2", "http 1.5.0",
"jsonwebtoken 11.0.0", "jsonwebtoken 11.0.0",
"moka", "moka",
"openidconnect", "openidconnect",
@@ -9338,7 +9338,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-io-core" name = "rustfs-io-core"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"bytes", "bytes",
"memmap2", "memmap2",
@@ -9350,7 +9350,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-io-metrics" name = "rustfs-io-metrics"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"criterion", "criterion",
"metrics", "metrics",
@@ -9413,11 +9413,11 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-keystone" name = "rustfs-keystone"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"bytes", "bytes",
"futures", "futures",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"hyper", "hyper",
@@ -9439,7 +9439,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-kms" name = "rustfs-kms"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"aes-gcm", "aes-gcm",
"arc-swap", "arc-swap",
@@ -9473,7 +9473,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-lifecycle" name = "rustfs-lifecycle"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"metrics", "metrics",
@@ -9495,7 +9495,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-lock" name = "rustfs-lock"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"crossbeam-queue", "crossbeam-queue",
@@ -9517,7 +9517,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-log-analyzer" name = "rustfs-log-analyzer"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"chrono", "chrono",
"flate2", "flate2",
@@ -9535,7 +9535,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-madmin" name = "rustfs-madmin"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"chrono", "chrono",
"humantime", "humantime",
@@ -9549,7 +9549,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-notify" name = "rustfs-notify"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"arc-swap", "arc-swap",
"async-trait", "async-trait",
@@ -9583,7 +9583,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-object-capacity" name = "rustfs-object-capacity"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"criterion", "criterion",
"futures", "futures",
@@ -9601,7 +9601,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-object-data-cache" name = "rustfs-object-data-cache"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"bytes", "bytes",
"criterion", "criterion",
@@ -9617,7 +9617,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-obs" name = "rustfs-obs"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"chrono", "chrono",
"crossbeam-channel", "crossbeam-channel",
@@ -9669,7 +9669,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-policy" name = "rustfs-policy"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"base64-simd", "base64-simd",
@@ -9698,7 +9698,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-protocols" name = "rustfs-protocols"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"astral-tokio-tar", "astral-tokio-tar",
"async-compression", "async-compression",
@@ -9711,7 +9711,7 @@ dependencies = [
"futures-util", "futures-util",
"hex", "hex",
"hmac 0.13.0", "hmac 0.13.0",
"http 1.4.2", "http 1.5.0",
"http-body-util", "http-body-util",
"hyper", "hyper",
"hyper-util", "hyper-util",
@@ -9760,7 +9760,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-protos" name = "rustfs-protos"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"flatbuffers", "flatbuffers",
"prost 0.14.4", "prost 0.14.4",
@@ -9783,7 +9783,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-replication" name = "rustfs-replication"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"byteorder", "byteorder",
"bytes", "bytes",
@@ -9800,7 +9800,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-rio" name = "rustfs-rio"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"aes-gcm", "aes-gcm",
"arc-swap", "arc-swap",
@@ -9812,7 +9812,7 @@ dependencies = [
"futures", "futures",
"hex-simd", "hex-simd",
"hotpath", "hotpath",
"http 1.4.2", "http 1.5.0",
"http-body-util", "http-body-util",
"md-5 0.11.0", "md-5 0.11.0",
"pin-project-lite", "pin-project-lite",
@@ -9838,7 +9838,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-rio-v2" name = "rustfs-rio-v2"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"aes-gcm", "aes-gcm",
"bytes", "bytes",
@@ -9860,14 +9860,14 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-s3-ops" name = "rustfs-s3-ops"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"rustfs-s3-types", "rustfs-s3-types",
] ]
[[package]] [[package]]
name = "rustfs-s3-types" name = "rustfs-s3-types"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
@@ -9875,7 +9875,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-s3select-api" name = "rustfs-s3select-api"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"bytes", "bytes",
@@ -9883,7 +9883,7 @@ dependencies = [
"datafusion", "datafusion",
"futures", "futures",
"futures-core", "futures-core",
"http 1.4.2", "http 1.5.0",
"metrics", "metrics",
"parking_lot", "parking_lot",
"rustfs-common", "rustfs-common",
@@ -9904,7 +9904,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-s3select-query" name = "rustfs-s3select-query"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-recursion", "async-recursion",
"async-trait", "async-trait",
@@ -9920,7 +9920,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-scanner" name = "rustfs-scanner"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"bytes", "bytes",
@@ -9928,7 +9928,7 @@ dependencies = [
"futures", "futures",
"hex-simd", "hex-simd",
"hmac 0.13.0", "hmac 0.13.0",
"http 1.4.2", "http 1.5.0",
"metrics", "metrics",
"rand 0.10.2", "rand 0.10.2",
"rmp-serde", "rmp-serde",
@@ -9958,18 +9958,18 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-security-governance" name = "rustfs-security-governance"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"thiserror 2.0.19", "thiserror 2.0.19",
] ]
[[package]] [[package]]
name = "rustfs-signer" name = "rustfs-signer"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"base64-simd", "base64-simd",
"bytes", "bytes",
"http 1.4.2", "http 1.5.0",
"hyper", "hyper",
"rustfs-utils", "rustfs-utils",
"s3s", "s3s",
@@ -9982,7 +9982,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-storage-api" name = "rustfs-storage-api"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"insta", "insta",
@@ -9996,7 +9996,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-targets" name = "rustfs-targets"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"arc-swap", "arc-swap",
"async-nats", "async-nats",
@@ -10049,7 +10049,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-test-utils" name = "rustfs-test-utils"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"rustfs-data-usage", "rustfs-data-usage",
"rustfs-ecstore", "rustfs-ecstore",
@@ -10064,7 +10064,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-tls-runtime" name = "rustfs-tls-runtime"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"arc-swap", "arc-swap",
"metrics", "metrics",
@@ -10084,11 +10084,11 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-trusted-proxies" name = "rustfs-trusted-proxies"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"axum", "axum",
"http 1.4.2", "http 1.5.0",
"ipnetwork", "ipnetwork",
"metrics", "metrics",
"moka", "moka",
@@ -10120,7 +10120,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-utils" name = "rustfs-utils"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"base64-simd", "base64-simd",
"blake2", "blake2",
@@ -10134,7 +10134,7 @@ dependencies = [
"hex-simd", "hex-simd",
"highway", "highway",
"hmac 0.13.0", "hmac 0.13.0",
"http 1.4.2", "http 1.5.0",
"hyper", "hyper",
"local-ip-address", "local-ip-address",
"lz4", "lz4",
@@ -10161,7 +10161,7 @@ dependencies = [
[[package]] [[package]]
name = "rustfs-zip" name = "rustfs-zip"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
dependencies = [ dependencies = [
"astral-tokio-tar", "astral-tokio-tar",
"async-compression", "async-compression",
@@ -10191,7 +10191,7 @@ dependencies = [
"anyhow", "anyhow",
"async-trait", "async-trait",
"bytes", "bytes",
"http 1.4.2", "http 1.5.0",
"reqwest", "reqwest",
"rustify_derive", "rustify_derive",
"serde", "serde",
@@ -10231,9 +10231,9 @@ dependencies = [
[[package]] [[package]]
name = "rustls" name = "rustls"
version = "0.23.42" version = "0.23.43"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" checksum = "0283386ce02abc0151e1761d08802dfe86c173b0b494af5cbc086574e453da06"
dependencies = [ dependencies = [
"aws-lc-rs", "aws-lc-rs",
"log", "log",
@@ -10371,7 +10371,7 @@ dependencies = [
"futures", "futures",
"hex-simd", "hex-simd",
"hmac 0.13.0", "hmac 0.13.0",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"httparse", "httparse",
@@ -11499,7 +11499,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd"
dependencies = [ dependencies = [
"fastrand", "fastrand",
"getrandom 0.4.3", "getrandom 0.3.4",
"once_cell", "once_cell",
"rustix", "rustix",
"windows-sys 0.61.2", "windows-sys 0.61.2",
@@ -11735,13 +11735,13 @@ dependencies = [
[[package]] [[package]]
name = "tokio-macros" name = "tokio-macros"
version = "2.7.1" version = "2.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.119", "syn 3.0.3",
] ]
[[package]] [[package]]
@@ -11845,7 +11845,7 @@ dependencies = [
"bytes", "bytes",
"futures-core", "futures-core",
"futures-sink", "futures-sink",
"http 1.4.2", "http 1.5.0",
"httparse", "httparse",
"rand 0.8.7", "rand 0.8.7",
"rustls-pki-types", "rustls-pki-types",
@@ -11897,7 +11897,7 @@ dependencies = [
"bytes", "bytes",
"flate2", "flate2",
"h2", "h2",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"hyper", "hyper",
@@ -11984,7 +11984,7 @@ dependencies = [
"bitflags 2.13.1", "bitflags 2.13.1",
"bytes", "bytes",
"futures-util", "futures-util",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"pin-project-lite", "pin-project-lite",
"tower", "tower",
@@ -12004,7 +12004,7 @@ dependencies = [
"bytes", "bytes",
"futures-core", "futures-core",
"futures-util", "futures-util",
"http 1.4.2", "http 1.5.0",
"http-body 1.1.0", "http-body 1.1.0",
"http-body-util", "http-body-util",
"percent-encoding", "percent-encoding",
@@ -12177,7 +12177,7 @@ checksum = "6c01152af293afb9c7c2a57e4b559c5620b421f6d133261c60dd2d0cdb38e6b8"
dependencies = [ dependencies = [
"bytes", "bytes",
"data-encoding", "data-encoding",
"http 1.4.2", "http 1.5.0",
"httparse", "httparse",
"log", "log",
"rand 0.9.5", "rand 0.9.5",
@@ -12364,7 +12364,7 @@ checksum = "30ffcc0e81025065dda612ec1e26a3d81bb16ef3062354873d17a35965d68522"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"derive_builder", "derive_builder",
"http 1.4.2", "http 1.5.0",
"reqwest", "reqwest",
"rustify", "rustify",
"rustify_derive", "rustify_derive",
+51 -51
View File
@@ -69,7 +69,7 @@ edition = "2024"
license = "Apache-2.0" license = "Apache-2.0"
repository = "https://github.com/rustfs/rustfs" repository = "https://github.com/rustfs/rustfs"
rust-version = "1.97.1" rust-version = "1.97.1"
version = "1.0.0-beta.11" version = "1.0.0-beta.12"
homepage = "https://rustfs.com" homepage = "https://rustfs.com"
description = "RustFS is a high-performance distributed object storage software built using Rust, one of the most popular languages worldwide. " description = "RustFS is a high-performance distributed object storage software built using Rust, one of the most popular languages worldwide. "
keywords = ["RustFS", "Minio", "object-storage", "filesystem", "s3"] keywords = ["RustFS", "Minio", "object-storage", "filesystem", "s3"]
@@ -86,58 +86,58 @@ redundant_clone = "warn"
[workspace.dependencies] [workspace.dependencies]
# RustFS Internal Crates # RustFS Internal Crates
rustfs = { path = "./rustfs", version = "1.0.0-beta.11" } rustfs = { path = "./rustfs", version = "1.0.0-beta.12" }
rustfs-heal = { path = "crates/heal", version = "1.0.0-beta.11" } rustfs-heal = { path = "crates/heal", version = "1.0.0-beta.12" }
rustfs-audit = { path = "crates/audit", version = "1.0.0-beta.11" } rustfs-audit = { path = "crates/audit", version = "1.0.0-beta.12" }
rustfs-checksums = { path = "crates/checksums", version = "1.0.0-beta.11" } rustfs-checksums = { path = "crates/checksums", version = "1.0.0-beta.12" }
rustfs-common = { path = "crates/common", version = "1.0.0-beta.11" } rustfs-common = { path = "crates/common", version = "1.0.0-beta.12" }
rustfs-data-usage = { path = "crates/data-usage", version = "1.0.0-beta.11" } rustfs-data-usage = { path = "crates/data-usage", version = "1.0.0-beta.12" }
rustfs-config = { path = "./crates/config", version = "1.0.0-beta.11" } rustfs-config = { path = "./crates/config", version = "1.0.0-beta.12" }
rustfs-concurrency = { path = "./crates/concurrency", version = "1.0.0-beta.11" } rustfs-concurrency = { path = "./crates/concurrency", version = "1.0.0-beta.12" }
rustfs-credentials = { path = "crates/credentials", version = "1.0.0-beta.11" } rustfs-credentials = { path = "crates/credentials", version = "1.0.0-beta.12" }
rustfs-crypto = { path = "crates/crypto", version = "1.0.0-beta.11" } rustfs-crypto = { path = "crates/crypto", version = "1.0.0-beta.12" }
rustfs-ecstore = { path = "crates/ecstore", version = "1.0.0-beta.11" } rustfs-ecstore = { path = "crates/ecstore", version = "1.0.0-beta.12" }
rustfs-filemeta = { path = "crates/filemeta", version = "1.0.0-beta.11" } rustfs-filemeta = { path = "crates/filemeta", version = "1.0.0-beta.12" }
rustfs-iam = { path = "crates/iam", version = "1.0.0-beta.11" } rustfs-iam = { path = "crates/iam", version = "1.0.0-beta.12" }
rustfs-keystone = { path = "crates/keystone", version = "1.0.0-beta.11" } rustfs-keystone = { path = "crates/keystone", version = "1.0.0-beta.12" }
rustfs-lifecycle = { path = "crates/lifecycle", version = "1.0.0-beta.11" } rustfs-lifecycle = { path = "crates/lifecycle", version = "1.0.0-beta.12" }
rustfs-kms = { path = "crates/kms", version = "1.0.0-beta.11" } rustfs-kms = { path = "crates/kms", version = "1.0.0-beta.12" }
rustfs-lock = { path = "crates/lock", version = "1.0.0-beta.11" } rustfs-lock = { path = "crates/lock", version = "1.0.0-beta.12" }
rustfs-madmin = { path = "crates/madmin", version = "1.0.0-beta.11" } rustfs-madmin = { path = "crates/madmin", version = "1.0.0-beta.12" }
rustfs-notify = { path = "crates/notify", version = "1.0.0-beta.11" } rustfs-notify = { path = "crates/notify", version = "1.0.0-beta.12" }
rustfs-io-metrics = { path = "crates/io-metrics", version = "1.0.0-beta.11" } rustfs-io-metrics = { path = "crates/io-metrics", version = "1.0.0-beta.12" }
rustfs-io-core = { path = "crates/io-core", version = "1.0.0-beta.11" } rustfs-io-core = { path = "crates/io-core", version = "1.0.0-beta.12" }
rustfs-object-capacity = { path = "crates/object-capacity", version = "1.0.0-beta.11" } rustfs-object-capacity = { path = "crates/object-capacity", version = "1.0.0-beta.12" }
rustfs-object-data-cache = { path = "crates/object-data-cache", version = "1.0.0-beta.11" } rustfs-object-data-cache = { path = "crates/object-data-cache", version = "1.0.0-beta.12" }
rustfs-log-analyzer = { path = "crates/log-analyzer", version = "1.0.0-beta.11" } rustfs-log-analyzer = { path = "crates/log-analyzer", version = "1.0.0-beta.12" }
rustfs-obs = { path = "crates/obs", version = "1.0.0-beta.11" } rustfs-obs = { path = "crates/obs", version = "1.0.0-beta.12" }
rustfs-policy = { path = "crates/policy", version = "1.0.0-beta.11" } rustfs-policy = { path = "crates/policy", version = "1.0.0-beta.12" }
rustfs-protos = { path = "crates/protos", version = "1.0.0-beta.11" } rustfs-protos = { path = "crates/protos", version = "1.0.0-beta.12" }
rustfs-protocols = { path = "crates/protocols", version = "1.0.0-beta.11" } rustfs-protocols = { path = "crates/protocols", version = "1.0.0-beta.12" }
rustfs-replication = { path = "crates/replication", version = "1.0.0-beta.11" } rustfs-replication = { path = "crates/replication", version = "1.0.0-beta.12" }
rustfs-rio = { path = "crates/rio", version = "1.0.0-beta.11" } rustfs-rio = { path = "crates/rio", version = "1.0.0-beta.12" }
rustfs-rio-v2 = { path = "crates/rio-v2", version = "1.0.0-beta.11" } rustfs-rio-v2 = { path = "crates/rio-v2", version = "1.0.0-beta.12" }
rustfs-s3-types = { path = "crates/s3-types", version = "1.0.0-beta.11" } rustfs-s3-types = { path = "crates/s3-types", version = "1.0.0-beta.12" }
rustfs-s3-ops = { path = "crates/s3-ops", version = "1.0.0-beta.11" } rustfs-s3-ops = { path = "crates/s3-ops", version = "1.0.0-beta.12" }
rustfs-s3select-api = { path = "crates/s3select-api", version = "1.0.0-beta.11" } rustfs-s3select-api = { path = "crates/s3select-api", version = "1.0.0-beta.12" }
rustfs-s3select-query = { path = "crates/s3select-query", version = "1.0.0-beta.11" } rustfs-s3select-query = { path = "crates/s3select-query", version = "1.0.0-beta.12" }
rustfs-scanner = { path = "crates/scanner", version = "1.0.0-beta.11" } rustfs-scanner = { path = "crates/scanner", version = "1.0.0-beta.12" }
rustfs-security-governance = { path = "crates/security-governance", version = "1.0.0-beta.11" } rustfs-security-governance = { path = "crates/security-governance", version = "1.0.0-beta.12" }
rustfs-extension-schema = { path = "crates/extension-schema", version = "1.0.0-beta.11" } rustfs-extension-schema = { path = "crates/extension-schema", version = "1.0.0-beta.12" }
rustfs-signer = { path = "crates/signer", version = "1.0.0-beta.11" } rustfs-signer = { path = "crates/signer", version = "1.0.0-beta.12" }
rustfs-storage-api = { path = "crates/storage-api", version = "1.0.0-beta.11" } rustfs-storage-api = { path = "crates/storage-api", version = "1.0.0-beta.12" }
rustfs-trusted-proxies = { path = "crates/trusted-proxies", version = "1.0.0-beta.11" } rustfs-trusted-proxies = { path = "crates/trusted-proxies", version = "1.0.0-beta.12" }
rustfs-targets = { path = "crates/targets", version = "1.0.0-beta.11" } rustfs-targets = { path = "crates/targets", version = "1.0.0-beta.12" }
rustfs-test-utils = { path = "crates/test-utils", version = "1.0.0-beta.11" } rustfs-test-utils = { path = "crates/test-utils", version = "1.0.0-beta.12" }
rustfs-tls-runtime = { path = "crates/tls-runtime", version = "1.0.0-beta.11" } rustfs-tls-runtime = { path = "crates/tls-runtime", version = "1.0.0-beta.12" }
rustfs-utils = { path = "crates/utils", version = "1.0.0-beta.11" } rustfs-utils = { path = "crates/utils", version = "1.0.0-beta.12" }
rustfs-zip = { path = "./crates/zip", version = "1.0.0-beta.11" } rustfs-zip = { path = "./crates/zip", version = "1.0.0-beta.12" }
# Async Runtime and Networking # Async Runtime and Networking
async-channel = "2.5.0" async-channel = "2.5.0"
async_zip = { default-features = false, version = "0.0.18" } async_zip = { default-features = false, version = "0.0.18" }
mysql_async = { default-features = false, version = "0.37" } mysql_async = { default-features = false, version = "0.37" }
async-compression = { version = "0.4.42" } async-compression = { version = "0.4.43" }
async-recursion = "1.1.1" async-recursion = "1.1.1"
async-trait = "0.1.91" async-trait = "0.1.91"
async-nats = { version = "0.50.0", default-features = false } async-nats = { version = "0.50.0", default-features = false }
@@ -152,7 +152,7 @@ lapin = { default-features = false, version = "4.10.0" }
hyper = { version = "1.11.0" } hyper = { version = "1.11.0" }
hyper-rustls = { default-features = false, version = "0.27.9" } hyper-rustls = { default-features = false, version = "0.27.9" }
hyper-util = { version = "0.1.20" } hyper-util = { version = "0.1.20" }
http = "1.4.2" http = "1.5.0"
http-body = "1.1.0" http-body = "1.1.0"
http-body-util = "0.1.4" http-body-util = "0.1.4"
minlz = "1.2.3" minlz = "1.2.3"
@@ -200,7 +200,7 @@ jsonwebtoken = { version = "11.0.0" }
openidconnect = { default-features = false, version = "4.0" } openidconnect = { default-features = false, version = "4.0" }
pbkdf2 = "0.13.0" pbkdf2 = "0.13.0"
rsa = { version = "=0.10.0-rc.18" } rsa = { version = "=0.10.0-rc.18" }
rustls = { default-features = false, version = "0.23.42" } rustls = { default-features = false, version = "0.23.43" }
rustls-native-certs = "0.8" rustls-native-certs = "0.8"
rustls-pki-types = "1.15.1" rustls-pki-types = "1.15.1"
sha1 = "0.11.0" sha1 = "0.11.0"
@@ -284,7 +284,7 @@ reed-solomon-erasure = { package = "rustfs-erasure-codec", version = "8.0.2" }
reed-solomon-simd = "3.1.0" reed-solomon-simd = "3.1.0"
regex = { version = "1.13.1" } regex = { version = "1.13.1" }
rumqttc = { package = "rumqttc-next", version = "0.33.3" } rumqttc = { package = "rumqttc-next", version = "0.33.3" }
redis = { version = "1.4.1" } redis = { version = "1.5.0" }
rustix = { version = "1.1.4" } rustix = { version = "1.1.4" }
rust-embed = { version = "8.12.0" } rust-embed = { version = "8.12.0" }
rustc-hash = { version = "2.1.3" } rustc-hash = { version = "2.1.3" }
+1 -1
View File
@@ -116,7 +116,7 @@ chown -R 10001:10001 data logs
docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:latest docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:latest
# Using specific version # Using specific version
docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:1.0.0-beta.11 docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:1.0.0-beta.12
``` ```
If you use [podman](https://github.com/containers/podman) instead of docker, you can install the RustFS with the below command If you use [podman](https://github.com/containers/podman) instead of docker, you can install the RustFS with the below command
+1 -1
View File
@@ -113,7 +113,7 @@ chown -R 10001:10001 data logs
docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:latest docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:latest
# 使用指定版本运行 # 使用指定版本运行
docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:1.0.0-beta.11 docker run -d -p 9000:9000 -p 9001:9001 -v $(pwd)/data:/data -v $(pwd)/logs:/logs rustfs/rustfs:1.0.0-beta.12
``` ```
如果您通过绑定挂载启用 TLS 证书目录,也请用同样方式准备该目录: 如果您通过绑定挂载启用 TLS 证书目录,也请用同样方式准备该目录:
+4 -3
View File
@@ -310,12 +310,13 @@ impl ECStore {
meta.set_created(opts.created_at); meta.set_created(opts.created_at);
if opts.lock_enabled { if opts.lock_enabled {
meta.object_lock_config_xml = crate::bucket::utils::serialize::<ObjectLockConfiguration>(&enableObjcetLockConfig)?; meta.object_lock_config_xml =
meta.versioning_config_xml = crate::bucket::utils::serialize::<VersioningConfiguration>(&enableVersioningConfig)?; crate::bucket::utils::serialize::<ObjectLockConfiguration>(&ENABLED_OBJECT_LOCK_CONFIG)?;
meta.versioning_config_xml = crate::bucket::utils::serialize::<VersioningConfiguration>(&ENABLED_VERSIONING_CONFIG)?;
} }
if opts.versioning_enabled { if opts.versioning_enabled {
meta.versioning_config_xml = crate::bucket::utils::serialize::<VersioningConfiguration>(&enableVersioningConfig)?; meta.versioning_config_xml = crate::bucket::utils::serialize::<VersioningConfiguration>(&ENABLED_VERSIONING_CONFIG)?;
} }
await_bucket_namespace_operation( await_bucket_namespace_operation(
+2 -2
View File
@@ -428,11 +428,11 @@ impl ECStore {
} }
lazy_static! { lazy_static! {
static ref enableObjcetLockConfig: ObjectLockConfiguration = ObjectLockConfiguration { static ref ENABLED_OBJECT_LOCK_CONFIG: ObjectLockConfiguration = ObjectLockConfiguration {
object_lock_enabled: Some(ObjectLockEnabled::from_static(ObjectLockEnabled::ENABLED)), object_lock_enabled: Some(ObjectLockEnabled::from_static(ObjectLockEnabled::ENABLED)),
..Default::default() ..Default::default()
}; };
static ref enableVersioningConfig: VersioningConfiguration = VersioningConfiguration { static ref ENABLED_VERSIONING_CONFIG: VersioningConfiguration = VersioningConfiguration {
status: Some(BucketVersioningStatus::from_static(BucketVersioningStatus::ENABLED)), status: Some(BucketVersioningStatus::from_static(BucketVersioningStatus::ENABLED)),
..Default::default() ..Default::default()
}; };
+27 -3
View File
@@ -556,7 +556,7 @@ where
Ok(now) Ok(now)
} }
pub async fn list_polices(&self, bucket_name: &str) -> Result<HashMap<String, Policy>> { pub async fn list_policies(&self, bucket_name: &str) -> Result<HashMap<String, Policy>> {
let mut m = HashMap::new(); let mut m = HashMap::new();
self.api.load_policy_docs(&mut m).await?; self.api.load_policy_docs(&mut m).await?;
@@ -588,6 +588,15 @@ where
Ok(filtered) Ok(filtered)
} }
/// Backward-compatible misspelling retained until the next breaking release.
#[deprecated(
since = "1.0.0",
note = "use list_policies instead; this alias will be removed in the next breaking release"
)]
pub async fn list_polices(&self, bucket_name: &str) -> Result<HashMap<String, Policy>> {
self.list_policies(bucket_name).await
}
pub async fn merge_policies(&self, name: &str) -> (String, Policy) { pub async fn merge_policies(&self, name: &str) -> (String, Policy) {
let mut policies = Vec::new(); let mut policies = Vec::new();
let mut to_merge = Vec::new(); let mut to_merge = Vec::new();
@@ -2184,7 +2193,7 @@ where
} }
} }
pub fn get_default_policyes() -> HashMap<String, PolicyDoc> { pub fn get_default_policies() -> HashMap<String, PolicyDoc> {
let default_policies = &DEFAULT_POLICIES; let default_policies = &DEFAULT_POLICIES;
default_policies default_policies
.iter() .iter()
@@ -2201,6 +2210,15 @@ pub fn get_default_policyes() -> HashMap<String, PolicyDoc> {
.collect() .collect()
} }
/// Backward-compatible misspelling retained until the next breaking release.
#[deprecated(
since = "1.0.0",
note = "use get_default_policies instead; this alias will be removed in the next breaking release"
)]
pub fn get_default_policyes() -> HashMap<String, PolicyDoc> {
get_default_policies()
}
fn set_default_canned_policies(policies: &mut HashMap<String, PolicyDoc>) { fn set_default_canned_policies(policies: &mut HashMap<String, PolicyDoc>) {
let default_policies = &DEFAULT_POLICIES; let default_policies = &DEFAULT_POLICIES;
for (k, v) in default_policies.iter() { for (k, v) in default_policies.iter() {
@@ -2900,7 +2918,7 @@ mod tests {
#[test] #[test]
fn test_get_default_policies() { fn test_get_default_policies() {
let policies = get_default_policyes(); let policies = get_default_policies();
// Should contain some default policies // Should contain some default policies
assert!(!policies.is_empty()); assert!(!policies.is_empty());
@@ -2913,6 +2931,12 @@ mod tests {
} }
} }
#[test]
#[allow(deprecated)]
fn deprecated_get_default_policyes_matches_current_api() {
assert_eq!(get_default_policyes().len(), get_default_policies().len());
}
#[test] #[test]
fn test_get_token_signing_key() { fn test_get_token_signing_key() {
// This function returns the global action credential's secret key // This function returns the global action credential's secret key
+2 -2
View File
@@ -22,7 +22,7 @@ use crate::{
cache::{Cache, CacheEntity}, cache::{Cache, CacheEntity},
error::{is_err_no_such_policy, is_err_no_such_user}, error::{is_err_no_such_policy, is_err_no_such_user},
keyring, keyring,
manager::{extract_jwt_claims, extract_jwt_claims_allow_missing_exp, get_default_policyes}, manager::{extract_jwt_claims, extract_jwt_claims_allow_missing_exp, get_default_policies},
root_credentials, root_credentials,
}; };
use futures::future::join_all; use futures::future::join_all;
@@ -1127,7 +1127,7 @@ impl Store for ObjectStore {
let cache_snapshot = cache.snapshot(); let cache_snapshot = cache.snapshot();
let listed_config_items = self.list_all_iamconfig_items().await?; let listed_config_items = self.list_all_iamconfig_items().await?;
let mut policy_docs_cache = CacheEntity::new(get_default_policyes()); let mut policy_docs_cache = CacheEntity::new(get_default_policies());
if let Some(policies_list) = listed_config_items.get(POLICIES_LIST_KEY) { if let Some(policies_list) = listed_config_items.get(POLICIES_LIST_KEY) {
// Load in fixed-size chunks so each policy is fetched exactly once. // Load in fixed-size chunks so each policy is fetched exactly once.
+20 -5
View File
@@ -18,7 +18,7 @@ use crate::error::is_err_no_such_temp_account;
use crate::error::{Error, Result}; use crate::error::{Error, Result};
use crate::federation::OIDC_VIRTUAL_PARENT_CLAIM; use crate::federation::OIDC_VIRTUAL_PARENT_CLAIM;
use crate::manager::extract_jwt_claims; use crate::manager::extract_jwt_claims;
use crate::manager::get_default_policyes; use crate::manager::get_default_policies;
use crate::manager::{IamCache, IamSyncMetricsSnapshot}; use crate::manager::{IamCache, IamSyncMetricsSnapshot};
use crate::store::GroupInfo; use crate::store::GroupInfo;
use crate::store::MappedPolicy; use crate::store::MappedPolicy;
@@ -249,7 +249,7 @@ impl<T: Store> IamSys<T> {
} }
pub async fn delete_policy(&self, name: &str, notify: bool) -> Result<()> { pub async fn delete_policy(&self, name: &str, notify: bool) -> Result<()> {
for k in get_default_policyes().keys() { for k in get_default_policies().keys() {
if k == name { if k == name {
return Err(Error::other("system policy can not be deleted")); return Err(Error::other("system policy can not be deleted"));
} }
@@ -291,8 +291,17 @@ impl<T: Store> IamSys<T> {
self.store.api.load_mapped_policies(user_type, is_group, m).await self.store.api.load_mapped_policies(user_type, is_group, m).await
} }
pub async fn list_policies(&self, bucket_name: &str) -> Result<HashMap<String, Policy>> {
self.store.list_policies(bucket_name).await
}
/// Backward-compatible misspelling retained until the next breaking release.
#[deprecated(
since = "1.0.0",
note = "use list_policies instead; this alias will be removed in the next breaking release"
)]
pub async fn list_polices(&self, bucket_name: &str) -> Result<HashMap<String, Policy>> { pub async fn list_polices(&self, bucket_name: &str) -> Result<HashMap<String, Policy>> {
self.store.list_polices(bucket_name).await self.list_policies(bucket_name).await
} }
pub async fn list_policy_docs(&self, bucket_name: &str) -> Result<HashMap<String, PolicyDoc>> { pub async fn list_policy_docs(&self, bucket_name: &str) -> Result<HashMap<String, PolicyDoc>> {
@@ -1683,11 +1692,17 @@ mod tests {
use super::*; use super::*;
use crate::cache::{Cache, CacheEntity}; use crate::cache::{Cache, CacheEntity};
use crate::error::Error; use crate::error::Error;
use crate::manager::get_default_policyes; use crate::manager::get_default_policies;
use crate::store::{GroupInfo, MappedPolicy, Store, UserType}; use crate::store::{GroupInfo, MappedPolicy, Store, UserType};
use rustfs_credentials::{Credentials, init_global_action_credentials}; use rustfs_credentials::{Credentials, init_global_action_credentials};
use rustfs_policy::auth::{UserIdentity, get_new_credentials_with_metadata}; use rustfs_policy::auth::{UserIdentity, get_new_credentials_with_metadata};
use rustfs_policy::policy::Args; use rustfs_policy::policy::Args;
#[test]
#[allow(deprecated)]
fn deprecated_list_polices_api_is_available() {
let _ = IamSys::<StsTestMockStore>::list_polices;
}
use rustfs_policy::policy::action::{Action, AdminAction, S3Action}; use rustfs_policy::policy::action::{Action, AdminAction, S3Action};
use rustfs_policy::policy::policy_uses_existing_object_tag_conditions; use rustfs_policy::policy::policy_uses_existing_object_tag_conditions;
use serde_json::Value; use serde_json::Value;
@@ -1925,7 +1940,7 @@ mod tests {
} }
async fn load_all(&self, cache: &Cache) -> Result<()> { async fn load_all(&self, cache: &Cache) -> Result<()> {
let mut policy_docs = get_default_policyes(); let mut policy_docs = get_default_policies();
let custom_claim_policy = let custom_claim_policy =
Policy::parse_config(CUSTOM_STS_CLAIM_POLICY_JSON.as_bytes()).expect("custom STS claim policy should parse"); Policy::parse_config(CUSTOM_STS_CLAIM_POLICY_JSON.as_bytes()).expect("custom STS claim policy should parse");
policy_docs.insert(CUSTOM_STS_CLAIM_POLICY.to_string(), PolicyDoc::new(custom_claim_policy)); policy_docs.insert(CUSTOM_STS_CLAIM_POLICY.to_string(), PolicyDoc::new(custom_claim_policy));
+1 -1
View File
@@ -59,7 +59,7 @@
{ {
default = rustPlatform.buildRustPackage { default = rustPlatform.buildRustPackage {
pname = "rustfs"; pname = "rustfs";
version = "1.0.0-beta.11"; version = "1.0.0-beta.12";
src = ./.; src = ./.;
+2 -2
View File
@@ -2,8 +2,8 @@ apiVersion: v2
name: rustfs name: rustfs
description: RustFS helm chart to deploy RustFS on kubernetes cluster. description: RustFS helm chart to deploy RustFS on kubernetes cluster.
type: application type: application
version: "0.11.0" version: "0.12.0"
appVersion: "1.0.0-beta.11" appVersion: "1.0.0-beta.12"
home: https://rustfs.com home: https://rustfs.com
icon: https://media.sys.truenas.net/apps/rustfs/icons/icon.svg icon: https://media.sys.truenas.net/apps/rustfs/icons/icon.svg
maintainers: maintainers:
+5 -2
View File
@@ -1,9 +1,9 @@
%global _enable_debug_packages 0 %global _enable_debug_packages 0
%global _empty_manifest_terminate_build 0 %global _empty_manifest_terminate_build 0
%global prerelease beta.11 %global prerelease beta.12
Name: rustfs Name: rustfs
Version: 1.0.0 Version: 1.0.0
Release: beta.11 Release: beta.12
Summary: High-performance distributed object storage for MinIO alternative Summary: High-performance distributed object storage for MinIO alternative
License: Apache-2.0 License: Apache-2.0
@@ -58,6 +58,9 @@ install %_builddir/%{name}-%{version}-%{prerelease}/target/%_arch/%_arch-unknown
%_bindir/rustfs %_bindir/rustfs
%changelog %changelog
* Thu Jul 30 2026 overtrue <anzhengchao@gmail.com>
- Update RPM package to RustFS 1.0.0-beta.12
* Thu Jul 23 2026 overtrue <anzhengchao@gmail.com> * Thu Jul 23 2026 overtrue <anzhengchao@gmail.com>
- Update RPM package to RustFS 1.0.0-beta.11 - Update RPM package to RustFS 1.0.0-beta.11
+1 -1
View File
@@ -148,7 +148,7 @@ impl Operation for ListCannedPolicies {
return Err(s3_error!(InternalError, "iam is not initialized")); return Err(s3_error!(InternalError, "iam is not initialized"));
}; };
let policies = iam_store.list_polices(&query.bucket).await.map_err(|e| { let policies = iam_store.list_policies(&query.bucket).await.map_err(|e| {
warn!( warn!(
component = LOG_COMPONENT_ADMIN, component = LOG_COMPONENT_ADMIN,
subsystem = LOG_SUBSYSTEM_POLICY, subsystem = LOG_SUBSYSTEM_POLICY,
+1 -1
View File
@@ -724,7 +724,7 @@ impl Operation for ExportIam {
match file { match file {
ALL_POLICIES_FILE => { ALL_POLICIES_FILE => {
let policies: HashMap<String, rustfs_policy::policy::Policy> = iam_store let policies: HashMap<String, rustfs_policy::policy::Policy> = iam_store
.list_polices("") .list_policies("")
.await .await
.map_err(|e| S3Error::with_message(S3ErrorCode::InternalError, e.to_string()))?; .map_err(|e| S3Error::with_message(S3ErrorCode::InternalError, e.to_string()))?;
let json_str = serde_json::to_vec(&policies) let json_str = serde_json::to_vec(&policies)
+90 -6
View File
@@ -13,7 +13,14 @@ fi
classify_source_layer() { classify_source_layer() {
local file="$1" local file="$1"
if [[ "$file" == rustfs/src/app/* ]]; then if [[ "$file" == rustfs/src/server/* ]] ||
[[ "$file" == rustfs/src/startup_*.rs ]] ||
[[ "$file" == rustfs/src/init.rs ]] ||
[[ "$file" == rustfs/src/main.rs ]] ||
[[ "$file" == rustfs/src/lib.rs ]] ||
[[ "$file" == rustfs/src/embedded.rs ]]; then
printf 'composition'
elif [[ "$file" == rustfs/src/app/* ]]; then
printf 'app' printf 'app'
elif [[ "$file" == rustfs/src/admin/* ]] || [[ "$file" == rustfs/src/storage/ecfs.rs ]] || [[ "$file" == rustfs/src/storage/s3_api/* ]]; then elif [[ "$file" == rustfs/src/admin/* ]] || [[ "$file" == rustfs/src/storage/ecfs.rs ]] || [[ "$file" == rustfs/src/storage/s3_api/* ]]; then
printf 'interface' printf 'interface'
@@ -30,6 +37,14 @@ classify_target_layer() {
local storage_path local storage_path
case "$root" in case "$root" in
init | main | lib | embedded | startup_*)
printf 'composition'
;;
server)
# Server files are composition roots when they import lower layers, but
# their exported HTTP contracts belong to the interface boundary.
printf 'interface'
;;
app) app)
printf 'app' printf 'app'
;; ;;
@@ -53,6 +68,9 @@ classify_target_layer() {
layer_rank() { layer_rank() {
case "$1" in case "$1" in
composition)
printf '4'
;;
interface) interface)
printf '3' printf '3'
;; ;;
@@ -68,6 +86,50 @@ layer_rank() {
esac esac
} }
is_reverse_dependency() {
local source_rank target_rank
source_rank="$(layer_rank "$1")"
target_rank="$(layer_rank "$2")"
(( source_rank < target_rank ))
}
assert_dependency_direction() {
local expected="$1"
local source="$2"
local target="$3"
local actual='allowed'
if is_reverse_dependency "$source" "$target"; then
actual='reverse'
fi
if [[ "$actual" != "$expected" ]]; then
printf 'Layer dependency guard self-test failed: %s -> %s (expected %s, got %s)\n' \
"$source" "$target" "$expected" "$actual" >&2
exit 1
fi
}
run_layer_model_self_tests() {
local server_source app_source storage_source server_target admin_target app_target storage_target
server_source="$(classify_source_layer rustfs/src/server/http.rs)"
app_source="$(classify_source_layer rustfs/src/app/bucket_usecase.rs)"
storage_source="$(classify_source_layer rustfs/src/storage/rpc/node_service.rs)"
server_target="$(classify_target_layer server::http)"
admin_target="$(classify_target_layer admin::router)"
app_target="$(classify_target_layer app::bucket_usecase)"
storage_target="$(classify_target_layer storage::rpc)"
assert_dependency_direction 'allowed' "$server_source" "$admin_target"
assert_dependency_direction 'allowed' "$server_source" "$app_target"
assert_dependency_direction 'allowed' "$server_source" "$storage_target"
assert_dependency_direction 'reverse' "$app_source" "$server_target"
assert_dependency_direction 'reverse' "$storage_source" "$server_target"
assert_dependency_direction 'reverse' "$app_source" "$admin_target"
assert_dependency_direction 'reverse' "$storage_source" "$admin_target"
}
normalize_import_group_item() { normalize_import_group_item() {
local prefix="$1" local prefix="$1"
local item="$2" local item="$2"
@@ -182,6 +244,11 @@ normalize_import_path() {
emit_crate_use_statements() { emit_crate_use_statements() {
(cd "$ROOT_DIR" && rg --files -g '*.rs' rustfs/src | while IFS= read -r file; do (cd "$ROOT_DIR" && rg --files -g '*.rs' rustfs/src | while IFS= read -r file; do
# The guard is file-scoped: dedicated test modules are excluded, while
# inline #[cfg(test)] imports remain subject to the source file's layer.
if [[ "$file" == *_test.rs ]] || [[ "$file" == */tests/* ]]; then
continue
fi
perl -0777 -ne ' perl -0777 -ne '
while (/\buse\s+crate::.*?;/sg) { while (/\buse\s+crate::.*?;/sg) {
my $statement = $&; my $statement = $&;
@@ -194,6 +261,26 @@ emit_crate_use_statements() {
done) done)
} }
write_baseline_file() {
local entries="$1"
cat >"$BASELINE_FILE" <<'EOF'
# Layer dependency baseline for the rustfs binary crate.
#
# The guard models production imports as:
# composition -> interface -> app -> infra
#
# Canonical dependency entry:
# dep|source_file|source_layer->target_layer|crate::imported_symbol
#
# Canonical conceptual cycle entry:
# cycle|left_layer<->right_layer
EOF
cat "$entries" >>"$BASELINE_FILE"
}
run_layer_model_self_tests
normalize_baseline_file() { normalize_baseline_file() {
local input="$1" local input="$1"
local output="$2" local output="$2"
@@ -265,10 +352,7 @@ while IFS= read -r line; do
printf '%s->%s\n' "$source_layer" "$target_layer" >>"$EDGES_RAW" printf '%s->%s\n' "$source_layer" "$target_layer" >>"$EDGES_RAW"
fi fi
source_rank="$(layer_rank "$source_layer")" if is_reverse_dependency "$source_layer" "$target_layer"; then
target_rank="$(layer_rank "$target_layer")"
if (( source_rank < target_rank )); then
printf 'dep|%s|%s->%s|crate::%s\n' "$file" "$source_layer" "$target_layer" "$import_path" >>"$VIOLATIONS_RAW" printf 'dep|%s|%s->%s|crate::%s\n' "$file" "$source_layer" "$target_layer" "$import_path" >>"$VIOLATIONS_RAW"
fi fi
done < <(normalize_import_path "$text") done < <(normalize_import_path "$text")
@@ -292,7 +376,7 @@ done <"${TMP_DIR}/edges_sorted.txt" | sort -u >"${TMP_DIR}/cycles_sorted.txt"
cat "${TMP_DIR}/violations_sorted.txt" "${TMP_DIR}/cycles_sorted.txt" | sort -u >"$CURRENT_BASELINE" cat "${TMP_DIR}/violations_sorted.txt" "${TMP_DIR}/cycles_sorted.txt" | sort -u >"$CURRENT_BASELINE"
if [[ "$MODE" == "update" ]]; then if [[ "$MODE" == "update" ]]; then
cp "$CURRENT_BASELINE" "$BASELINE_FILE" write_baseline_file "$CURRENT_BASELINE"
echo "Updated baseline: $BASELINE_FILE" echo "Updated baseline: $BASELINE_FILE"
exit 0 exit 0
fi fi
+29 -20
View File
@@ -1,35 +1,44 @@
# Layer dependency baseline for the rustfs binary crate. # Layer dependency baseline for the rustfs binary crate.
# #
# These are intra-crate module references within rustfs/ that cross the # The guard models production imports as:
# conceptual layer boundaries (app, infra/server, interface/admin). # composition -> interface -> app -> infra
# Since they live inside one Cargo crate, Rust doesn't enforce separation.
# The list is maintained for architectural awareness during code review.
# #
# Format for dependency entries: # Canonical dependency entry:
# status|source_file|direction|imported_symbol|reason # dep|source_file|source_layer->target_layer|crate::imported_symbol
# #
# Format for conceptual cycles: # Canonical conceptual cycle entry:
# status|cycle|direction_pair|reason # cycle|left_layer<->right_layer
#
# Status:
# accepted - reviewed and intentionally allowed
# todo - should be resolved in a future refactor
cycle|app<->infra cycle|app<->infra
cycle|app<->interface cycle|app<->interface
cycle|composition<->infra
cycle|composition<->interface
cycle|infra<->interface cycle|infra<->interface
dep|rustfs/src/admin/handlers/scanner.rs|interface->composition|crate::startup_background::ENV_SCANNER_ENABLED
dep|rustfs/src/admin/handlers/scanner.rs|interface->composition|crate::startup_background::scanner_enabled_from_env
dep|rustfs/src/app/admin_usecase.rs|app->interface|crate::server::DependencyReadiness
dep|rustfs/src/app/admin_usecase.rs|app->interface|crate::server::collect_dependency_readiness_report
dep|rustfs/src/app/bucket_usecase.rs|app->interface|crate::admin::handlers::site_replication::site_replication_bucket_meta_hook dep|rustfs/src/app/bucket_usecase.rs|app->interface|crate::admin::handlers::site_replication::site_replication_bucket_meta_hook
dep|rustfs/src/app/bucket_usecase.rs|app->interface|crate::admin::handlers::site_replication::site_replication_delete_bucket_hook dep|rustfs/src/app/bucket_usecase.rs|app->interface|crate::admin::handlers::site_replication::site_replication_delete_bucket_hook
dep|rustfs/src/app/bucket_usecase.rs|app->interface|crate::admin::handlers::site_replication::site_replication_make_bucket_hook dep|rustfs/src/app/bucket_usecase.rs|app->interface|crate::admin::handlers::site_replication::site_replication_make_bucket_hook
dep|rustfs/src/init.rs|infra->interface|crate::admin dep|rustfs/src/app/bucket_usecase.rs|app->interface|crate::server::RemoteAddr
dep|rustfs/src/app/object_usecase.rs|app->interface|crate::server::convert_ecstore_object_info
dep|rustfs/src/cluster_snapshot.rs|infra->interface|crate::server::DependencyReadiness
dep|rustfs/src/cluster_snapshot.rs|infra->interface|crate::server::DependencyReadinessReport
dep|rustfs/src/cluster_snapshot.rs|infra->interface|crate::server::ReadinessDegradedReason
dep|rustfs/src/cluster_snapshot.rs|infra->interface|crate::server::snapshot_dependency_readiness_report
dep|rustfs/src/runtime_sources.rs|infra->app|crate::app::context dep|rustfs/src/runtime_sources.rs|infra->app|crate::app::context
dep|rustfs/src/server/http.rs|infra->interface|crate::admin dep|rustfs/src/storage/access.rs|infra->interface|crate::server::RemoteAddr
dep|rustfs/src/server/layer.rs|infra->interface|crate::admin::console::is_console_path dep|rustfs/src/storage/ecfs_extend.rs|infra->interface|crate::server::cors
dep|rustfs/src/storage/ecfs_extend.rs|infra->interface|crate::storage::ecfs::ListObjectUnorderedQuery dep|rustfs/src/storage/ecfs_extend.rs|infra->interface|crate::storage::ecfs::ListObjectUnorderedQuery
dep|rustfs/src/storage/ecfs_test.rs|infra->interface|crate::storage::ecfs::FS dep|rustfs/src/storage/helper.rs|infra->interface|crate::server::convert_ecstore_object_info
dep|rustfs/src/storage/ecfs_test.rs|infra->interface|crate::storage::ecfs::validate_object_lock_configuration_input dep|rustfs/src/storage/helper.rs|infra->interface|crate::server::is_audit_module_enabled
dep|rustfs/src/storage/ecfs_test.rs|infra->interface|crate::storage::s3_api::common::rustfs_initiator dep|rustfs/src/storage/helper.rs|infra->interface|crate::server::is_notify_module_enabled
dep|rustfs/src/storage/ecfs_test.rs|infra->interface|crate::storage::s3_api::common::rustfs_owner dep|rustfs/src/storage/helper.rs|infra->interface|crate::server::refresh_audit_module_enabled
dep|rustfs/src/storage/helper.rs|infra->interface|crate::server::refresh_notify_module_enabled
dep|rustfs/src/storage/rpc/http_service.rs|infra->interface|crate::server::RPC_PREFIX
dep|rustfs/src/storage/rpc/node_service.rs|infra->interface|crate::admin::service::config::reload_dynamic_config_runtime_state dep|rustfs/src/storage/rpc/node_service.rs|infra->interface|crate::admin::service::config::reload_dynamic_config_runtime_state
dep|rustfs/src/storage/rpc/node_service.rs|infra->interface|crate::admin::service::config::reload_runtime_config_snapshot dep|rustfs/src/storage/rpc/node_service.rs|infra->interface|crate::admin::service::config::reload_runtime_config_snapshot
dep|rustfs/src/storage/rpc/node_service.rs|infra->interface|crate::admin::service::site_replication::reload_site_replication_runtime_state dep|rustfs/src/storage/rpc/node_service.rs|infra->interface|crate::admin::service::site_replication::reload_site_replication_runtime_state
dep|rustfs/src/storage/rpc/node_service.rs|infra->interface|crate::server::MODULE_SWITCHES_SIGNAL_SUBSYSTEM
dep|rustfs/src/storage/rpc/node_service/heal.rs|infra->composition|crate::startup_background::heal_enabled_from_env
dep|rustfs/src/storage/rpc/node_service/heal.rs|infra->composition|crate::startup_background::scanner_enabled_from_env