build(deps): bump the dependencies group with 19 updates (#1745)

This commit is contained in:
houseme
2026-02-07 12:22:14 +08:00
committed by GitHub
parent d635ee8d2e
commit 0b870d6301
33 changed files with 398 additions and 283 deletions
+1 -1
View File
@@ -67,7 +67,7 @@ To send telemetry data from your application, configure your OpenTelemetry SDK t
For example, in a Rust application using the `rustfs-obs` library: For example, in a Rust application using the `rustfs-obs` library:
```bash ```bash
export RUSTFS_OBS_ENDPOINT=http://localhost:4317 export RUSTFS_OBS_ENDPOINT=http://localhost:4318
export RUSTFS_OBS_SERVICE_NAME=yourservice export RUSTFS_OBS_SERVICE_NAME=yourservice
export RUSTFS_OBS_SERVICE_VERSION=1.0.0 export RUSTFS_OBS_SERVICE_VERSION=1.0.0
export RUSTFS_OBS_ENVIRONMENT=development export RUSTFS_OBS_ENVIRONMENT=development
Generated
+296 -160
View File
@@ -19,11 +19,11 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
[[package]] [[package]]
name = "aead" name = "aead"
version = "0.6.0-rc.5" version = "0.6.0-rc.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67a578e7d4edaef88aeb9cdd81556f4a62266ce26601317c006a79e8bc58b5af" checksum = "6b657e772794c6b04730ea897b66a058ccd866c16d1967da05eeeecec39043fe"
dependencies = [ dependencies = [
"crypto-common 0.2.0-rc.9", "crypto-common 0.2.0",
"inout 0.2.2", "inout 0.2.2",
] ]
@@ -40,24 +40,24 @@ dependencies = [
[[package]] [[package]]
name = "aes" name = "aes"
version = "0.9.0-rc.2" version = "0.9.0-rc.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd9e1c818b25efb32214df89b0ec22f01aa397aaeb718d1022bf0635a3bfd1a8" checksum = "04097e08a47d9ad181c2e1f4a5fabc9ae06ce8839a333ba9a949bcb0d31fd2a3"
dependencies = [ dependencies = [
"cfg-if", "cipher 0.5.0",
"cipher 0.5.0-rc.3", "cpubits",
"cpufeatures", "cpufeatures",
] ]
[[package]] [[package]]
name = "aes-gcm" name = "aes-gcm"
version = "0.11.0-rc.2" version = "0.11.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f5c07f414d7dc0755870f84c7900425360288d24e0eae4836f9dee19a30fa5f" checksum = "e22c0c90bbe8d4f77c3ca9ddabe41a1f8382d6fc1f7cea89459d0f320371f972"
dependencies = [ dependencies = [
"aead", "aead",
"aes 0.9.0-rc.2", "aes 0.9.0-rc.4",
"cipher 0.5.0-rc.3", "cipher 0.5.0",
"ctr", "ctr",
"ghash", "ghash",
"subtle", "subtle",
@@ -192,9 +192,9 @@ dependencies = [
[[package]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.100" version = "1.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" checksum = "5f0e0fee31ef5ed1ba1316088939cea399010ed7731dba877ed44aeb407a75ea"
[[package]] [[package]]
name = "ar_archive_writer" name = "ar_archive_writer"
@@ -216,12 +216,12 @@ dependencies = [
[[package]] [[package]]
name = "argon2" name = "argon2"
version = "0.6.0-rc.6" version = "0.6.0-rc.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39b5afeb474438603309cd6e638f6baff5b8f4eb4605d63c761516712e044e5c" checksum = "5cc32af0fde8095068147d01a5dfbc0e0b06307924138d992df7c8f18d34c585"
dependencies = [ dependencies = [
"base64ct", "base64ct",
"blake2 0.11.0-rc.3", "blake2 0.11.0-rc.5",
"cpufeatures", "cpufeatures",
"password-hash", "password-hash",
] ]
@@ -530,9 +530,9 @@ dependencies = [
[[package]] [[package]]
name = "async-compression" name = "async-compression"
version = "0.4.37" version = "0.4.38"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d10e4f991a553474232bc0a31799f6d24b034a84c0971d80d2e2f78b2e576e40" checksum = "82da0ea54ea533ec09d949717c6386a1c34f2d9b51c1fcc7eef8b9ce0b690a3e"
dependencies = [ dependencies = [
"compression-codecs", "compression-codecs",
"compression-core", "compression-core",
@@ -1200,11 +1200,11 @@ dependencies = [
[[package]] [[package]]
name = "blake2" name = "blake2"
version = "0.11.0-rc.3" version = "0.11.0-rc.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "679065eb2b85a078ace42411e657bef3a6afe93a40d1b9cb04e39ca303cc3f36" checksum = "d52965399b470437fc7f4d4b51134668dbc96573fea6f1b83318a420e4605745"
dependencies = [ dependencies = [
"digest 0.11.0-rc.5", "digest 0.11.0-rc.11",
] ]
[[package]] [[package]]
@@ -1217,7 +1217,7 @@ dependencies = [
"arrayvec", "arrayvec",
"cc", "cc",
"cfg-if", "cfg-if",
"constant_time_eq 0.4.2", "constant_time_eq",
"cpufeatures", "cpufeatures",
"memmap2", "memmap2",
"rayon-core", "rayon-core",
@@ -1394,25 +1394,25 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
[[package]] [[package]]
name = "chacha20" name = "chacha20"
version = "0.10.0-rc.6" version = "0.10.0-rc.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f895fb33c1ad22da4bc79d37c0bddff8aee2ba4575705345eb73b8ffbc386074" checksum = "14f3c04cdd19f5ed3271e460267fb1d94b7899ae1f7bb10ac3dfc3afb749d659"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"cipher 0.5.0-rc.3", "cipher 0.5.0",
"cpufeatures", "cpufeatures",
"rand_core 0.10.0-rc-3", "rand_core 0.10.0",
] ]
[[package]] [[package]]
name = "chacha20poly1305" name = "chacha20poly1305"
version = "0.11.0-rc.2" version = "0.11.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c662d31454533832974f2b2b3fcbd552ed3cde94c95e614a5039d297dd97076f" checksum = "1c9ed179664f12fd6f155f6dd632edf5f3806d48c228c67ff78366f2a0eb6b5e"
dependencies = [ dependencies = [
"aead", "aead",
"chacha20", "chacha20",
"cipher 0.5.0-rc.3", "cipher 0.5.0",
"poly1305", "poly1305",
] ]
@@ -1479,12 +1479,12 @@ dependencies = [
[[package]] [[package]]
name = "cipher" name = "cipher"
version = "0.5.0-rc.3" version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98d708bac5451350d56398433b19a7889022fa9187df1a769c0edbc3b2c03167" checksum = "64727038c8c5e2bb503a15b9f5b9df50a1da9a33e83e1f93067d914f2c6604a5"
dependencies = [ dependencies = [
"block-buffer 0.11.0", "block-buffer 0.11.0",
"crypto-common 0.2.0-rc.9", "crypto-common 0.2.0",
"inout 0.2.2", "inout 0.2.2",
] ]
@@ -1539,9 +1539,9 @@ dependencies = [
[[package]] [[package]]
name = "cmov" name = "cmov"
version = "0.5.0-pre.0" version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5417da527aa9bf6a1e10a781231effd1edd3ee82f27d5f8529ac9b279babce96" checksum = "de0758edba32d61d1fd9f4d69491b47604b91ee2f7e6b33de7e54ca4ebe55dc3"
[[package]] [[package]]
name = "colorchoice" name = "colorchoice"
@@ -1672,12 +1672,6 @@ dependencies = [
"unicode-xid", "unicode-xid",
] ]
[[package]]
name = "constant_time_eq"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
[[package]] [[package]]
name = "constant_time_eq" name = "constant_time_eq"
version = "0.4.2" version = "0.4.2"
@@ -1748,6 +1742,12 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "cpubits"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ef0c543070d296ea414df2dd7625d1b24866ce206709d8a4a424f28377f5861"
[[package]] [[package]]
name = "cpufeatures" name = "cpufeatures"
version = "0.2.17" version = "0.2.17"
@@ -1910,13 +1910,14 @@ dependencies = [
[[package]] [[package]]
name = "crypto-bigint" name = "crypto-bigint"
version = "0.7.0-rc.18" version = "0.7.0-rc.25"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37387ceb32048ff590f2cbd24d8b05fffe63c3f69a5cfa089d4f722ca4385a19" checksum = "cba9eeeb213f7fd29353032f71f7c173e5f6d95d85151cb3a47197b0ea7e8be7"
dependencies = [ dependencies = [
"cpubits",
"ctutils", "ctutils",
"num-traits", "num-traits",
"rand_core 0.10.0-rc-3", "rand_core 0.10.0",
"serdect", "serdect",
"zeroize", "zeroize",
] ]
@@ -1933,24 +1934,24 @@ dependencies = [
[[package]] [[package]]
name = "crypto-common" name = "crypto-common"
version = "0.2.0-rc.9" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41b8986f836d4aeb30ccf4c9d3bd562fd716074cfd7fc4a2948359fbd21ed809" checksum = "211f05e03c7d03754740fd9e585de910a095d6b99f8bcfffdef8319fa02a8331"
dependencies = [ dependencies = [
"getrandom 0.4.0-rc.0", "getrandom 0.4.1",
"hybrid-array", "hybrid-array",
"rand_core 0.10.0-rc-3", "rand_core 0.10.0",
] ]
[[package]] [[package]]
name = "crypto-primes" name = "crypto-primes"
version = "0.7.0-pre.6" version = "0.7.0-pre.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e79c98a281f9441200b24e3151407a629bfbe720399186e50516da939195e482" checksum = "334a79c97c0b7fa536716dc132fd417d0afbf471440a41fc25a5d9f66d8771cd"
dependencies = [ dependencies = [
"crypto-bigint 0.7.0-rc.18", "crypto-bigint 0.7.0-rc.25",
"libm", "libm",
"rand_core 0.10.0-rc-3", "rand_core 0.10.0",
] ]
[[package]] [[package]]
@@ -1976,18 +1977,18 @@ dependencies = [
[[package]] [[package]]
name = "ctr" name = "ctr"
version = "0.10.0-rc.2" version = "0.10.0-rc.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d0ec605a95e78815a4c4b8040217d56d5a1ab37043851ee9e7e65b89afa00e3" checksum = "65ea71550d18331d179854662ab330bb54306b9b56020d0466aae2a58f4e17c1"
dependencies = [ dependencies = [
"cipher 0.5.0-rc.3", "cipher 0.5.0",
] ]
[[package]] [[package]]
name = "ctutils" name = "ctutils"
version = "0.3.2" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "758e5ed90be3c8abff7f9a6f37ab7f6d8c59c2210d448b81f3f508134aec84e4" checksum = "1005a6d4446f5120ef475ad3d2af2b30c49c2c9c6904258e3bb30219bebed5e4"
dependencies = [ dependencies = [
"cmov", "cmov",
] ]
@@ -2968,13 +2969,13 @@ dependencies = [
[[package]] [[package]]
name = "digest" name = "digest"
version = "0.11.0-rc.5" version = "0.11.0-rc.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebf9423bafb058e4142194330c52273c343f8a5beb7176d052f0e73b17dd35b9" checksum = "02b42f1d9edf5207c137646b568a0168ca0ec25b7f9eaf7f9961da51a3d91cea"
dependencies = [ dependencies = [
"block-buffer 0.11.0", "block-buffer 0.11.0",
"const-oid 0.10.2", "const-oid 0.10.2",
"crypto-common 0.2.0-rc.9", "crypto-common 0.2.0",
"subtle", "subtle",
] ]
@@ -3042,7 +3043,7 @@ dependencies = [
"flatbuffers", "flatbuffers",
"futures", "futures",
"md5", "md5",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"rcgen", "rcgen",
"reqwest 0.13.1", "reqwest 0.13.1",
"rmp-serde", "rmp-serde",
@@ -3057,7 +3058,7 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"serial_test", "serial_test",
"sha2 0.11.0-rc.3", "sha2 0.11.0-rc.5",
"suppaftp", "suppaftp",
"tokio", "tokio",
"tokio-stream", "tokio-stream",
@@ -3541,15 +3542,18 @@ dependencies = [
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.4.0-rc.0" version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b99f0d993a2b9b97b9a201193aa8ad21305cde06a3be9a7e1f8f4201e5cc27e" checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"js-sys",
"libc", "libc",
"r-efi", "r-efi",
"rand_core 0.10.0-rc-3", "rand_core 0.10.0",
"wasip2", "wasip2",
"wasip3",
"wasm-bindgen",
] ]
[[package]] [[package]]
@@ -3566,9 +3570,9 @@ dependencies = [
[[package]] [[package]]
name = "ghash" name = "ghash"
version = "0.6.0-rc.3" version = "0.6.0-rc.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "333de57ed9494a40df4bbb866752b100819dde0d18f2264c48f5a08a85fe673d" checksum = "f484be0236661c5ba22d445ed75d3624ba5544541c647549f867fb576e55b2a2"
dependencies = [ dependencies = [
"polyval", "polyval",
] ]
@@ -3945,11 +3949,11 @@ dependencies = [
[[package]] [[package]]
name = "hmac" name = "hmac"
version = "0.13.0-rc.3" version = "0.13.0-rc.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1c597ac7d6cc8143e30e83ef70915e7f883b18d8bec2e2b2bce47f5bbb06d57" checksum = "ef451d73f36d8a3f93ad32c332ea01146c9650e1ec821a9b0e46c01277d544f8"
dependencies = [ dependencies = [
"digest 0.11.0-rc.5", "digest 0.11.0-rc.11",
] ]
[[package]] [[package]]
@@ -4228,6 +4232,12 @@ dependencies = [
"zerovec", "zerovec",
] ]
[[package]]
name = "id-arena"
version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
[[package]] [[package]]
name = "ident_case" name = "ident_case"
version = "1.0.1" version = "1.0.1"
@@ -4453,9 +4463,9 @@ dependencies = [
[[package]] [[package]]
name = "jiff" name = "jiff"
version = "0.2.18" version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" checksum = "d89a5b5e10d5a9ad6e5d1f4bd58225f655d6fe9767575a5e8ac5a6fe64e04495"
dependencies = [ dependencies = [
"jiff-static", "jiff-static",
"jiff-tzdb-platform", "jiff-tzdb-platform",
@@ -4468,9 +4478,9 @@ dependencies = [
[[package]] [[package]]
name = "jiff-static" name = "jiff-static"
version = "0.2.18" version = "0.2.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" checksum = "ff7a39c8862fc1369215ccf0a8f12dd4598c7f6484704359f0351bd617034dbf"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -4600,6 +4610,12 @@ 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 = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]]
name = "leb128fmt"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]] [[package]]
name = "lexical-core" name = "lexical-core"
version = "1.0.6" version = "1.0.6"
@@ -4926,12 +4942,12 @@ dependencies = [
[[package]] [[package]]
name = "md-5" name = "md-5"
version = "0.11.0-rc.3" version = "0.11.0-rc.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "64dd2c9099caf8e29b629305199dddb1c6d981562b62c089afea54b0b4b5c333" checksum = "59e715bb6f273068fc89403d6c4f5eeb83708c62b74c8d43e3e8772ca73a6288"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"digest 0.11.0-rc.5", "digest 0.11.0-rc.11",
] ]
[[package]] [[package]]
@@ -5631,11 +5647,11 @@ dependencies = [
[[package]] [[package]]
name = "password-hash" name = "password-hash"
version = "0.6.0-rc.10" version = "0.6.0-rc.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80b7795f59c339f0458e0213b31e01f45de7f061bdfc52857386f457d94c2cb8" checksum = "5fa9e3d1c7b6f3e230b60fa44adc855cb8e24eede37236621f2cc1940d95564f"
dependencies = [ dependencies = [
"getrandom 0.4.0-rc.0", "getrandom 0.4.1",
"phc", "phc",
] ]
@@ -5687,12 +5703,12 @@ dependencies = [
[[package]] [[package]]
name = "pbkdf2" name = "pbkdf2"
version = "0.13.0-rc.8" version = "0.13.0-rc.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "626220f48328b90cad8393e99e9ef80503970e6e86e77f32f7e42227972e7c2c" checksum = "c8dfa4e14084d963d35bfb4cdb38712cde78dcf83054c0e8b9b8e899150f374e"
dependencies = [ dependencies = [
"digest 0.11.0-rc.5", "digest 0.11.0-rc.11",
"hmac 0.13.0-rc.3", "hmac 0.13.0-rc.5",
] ]
[[package]] [[package]]
@@ -5739,7 +5755,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d390c5fe8d102c2c18ff39f1e72b9ad5996de282c2d831b0312f56910f5508" checksum = "71d390c5fe8d102c2c18ff39f1e72b9ad5996de282c2d831b0312f56910f5508"
dependencies = [ dependencies = [
"base64ct", "base64ct",
"getrandom 0.4.0-rc.0", "getrandom 0.4.1",
"subtle", "subtle",
] ]
@@ -5865,9 +5881,9 @@ checksum = "2f3a9f18d041e6d0e102a0a46750538147e5e8992d3b4873aaafee2520b00ce3"
[[package]] [[package]]
name = "poly1305" name = "poly1305"
version = "0.9.0-rc.3" version = "0.9.0-rc.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9c0749ae91cfe6e68c77c4d48802d9720ee06aed3f7100a38975fb0962d50bc" checksum = "518693a4015fbfd281debf35bcac145ba2e180ae325ec855fdb405be0b2971fb"
dependencies = [ dependencies = [
"cpufeatures", "cpufeatures",
"universal-hash", "universal-hash",
@@ -5875,11 +5891,11 @@ dependencies = [
[[package]] [[package]]
name = "polyval" name = "polyval"
version = "0.7.0-rc.3" version = "0.7.0-rc.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ad60831c19edda4b20878a676595c357e93a9b4e6dca2ba98d75b01066b317b" checksum = "63641a86fddf4b5274f31c43734458ec7acd3133016dbaa37e4e247e1e9acd46"
dependencies = [ dependencies = [
"cfg-if", "cpubits",
"cpufeatures", "cpufeatures",
"universal-hash", "universal-hash",
] ]
@@ -6322,13 +6338,13 @@ dependencies = [
[[package]] [[package]]
name = "rand" name = "rand"
version = "0.10.0-rc.6" version = "0.10.0-rc.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bccc05ac8fad6ee391f3cc6725171817eed960345e2fb42ad229d486c1ca2d98" checksum = "9a8cd8be2e7e2fd2ee3e09045798e65c906682ec9f16293defc4790dd775d5a3"
dependencies = [ dependencies = [
"chacha20", "chacha20",
"getrandom 0.4.0-rc.0", "getrandom 0.4.1",
"rand_core 0.10.0-rc-3", "rand_core 0.10.0",
"serde", "serde",
] ]
@@ -6362,9 +6378,9 @@ dependencies = [
[[package]] [[package]]
name = "rand_core" name = "rand_core"
version = "0.10.0-rc-3" version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f66ee92bc15280519ef199a274fe0cafff4245d31bc39aaa31c011ad56cb1f05" checksum = "0c8d0fd677905edcbeedbf2edb6494d676f0e98d54d5cf9bda0b061cb8fb8aba"
[[package]] [[package]]
name = "rayon" name = "rayon"
@@ -6699,18 +6715,18 @@ dependencies = [
[[package]] [[package]]
name = "rsa" name = "rsa"
version = "0.10.0-rc.12" version = "0.10.0-rc.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9a2b1eacbc34fbaf77f6f1db1385518446008d49b9f9f59dc9d1340fce4ca9e" checksum = "1b342b99544549f37509ed7fd42b0cea04bfd9ce07c16ca56094cf0fbeefbbcd"
dependencies = [ dependencies = [
"const-oid 0.10.2", "const-oid 0.10.2",
"crypto-bigint 0.7.0-rc.18", "crypto-bigint 0.7.0-rc.25",
"crypto-primes", "crypto-primes",
"digest 0.11.0-rc.5", "digest 0.11.0-rc.11",
"pkcs1", "pkcs1",
"pkcs8 0.11.0-rc.10", "pkcs8 0.11.0-rc.10",
"rand_core 0.10.0-rc-3", "rand_core 0.10.0",
"signature 3.0.0-rc.6", "signature 3.0.0-rc.10",
"spki 0.8.0-rc.4", "spki 0.8.0-rc.4",
"zeroize", "zeroize",
] ]
@@ -6835,7 +6851,7 @@ dependencies = [
"opentelemetry", "opentelemetry",
"pin-project-lite", "pin-project-lite",
"pprof", "pprof",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"reqwest 0.13.1", "reqwest 0.13.1",
"rmp-serde", "rmp-serde",
"rust-embed", "rust-embed",
@@ -6901,7 +6917,7 @@ name = "rustfs-appauth"
version = "0.0.5" version = "0.0.5"
dependencies = [ dependencies = [
"base64-simd", "base64-simd",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"rsa", "rsa",
"serde", "serde",
"serde_json", "serde_json",
@@ -6937,10 +6953,10 @@ dependencies = [
"bytes", "bytes",
"crc-fast", "crc-fast",
"http 1.4.0", "http 1.4.0",
"md-5 0.11.0-rc.3", "md-5 0.11.0-rc.5",
"pretty_assertions", "pretty_assertions",
"sha1 0.11.0-rc.3", "sha1 0.11.0-rc.5",
"sha2 0.11.0-rc.3", "sha2 0.11.0-rc.5",
] ]
[[package]] [[package]]
@@ -6973,7 +6989,7 @@ name = "rustfs-credentials"
version = "0.0.5" version = "0.0.5"
dependencies = [ dependencies = [
"base64-simd", "base64-simd",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"serde", "serde",
"serde_json", "serde_json",
"time", "time",
@@ -6988,10 +7004,10 @@ dependencies = [
"cfg-if", "cfg-if",
"chacha20poly1305", "chacha20poly1305",
"jsonwebtoken", "jsonwebtoken",
"pbkdf2 0.13.0-rc.8", "pbkdf2 0.13.0-rc.9",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"serde_json", "serde_json",
"sha2 0.11.0-rc.3", "sha2 0.11.0-rc.5",
"test-case", "test-case",
"thiserror 2.0.18", "thiserror 2.0.18",
"time", "time",
@@ -7024,7 +7040,7 @@ dependencies = [
"google-cloud-auth", "google-cloud-auth",
"google-cloud-storage", "google-cloud-storage",
"hex-simd", "hex-simd",
"hmac 0.13.0-rc.3", "hmac 0.13.0-rc.5",
"http 1.4.0", "http 1.4.0",
"http-body 1.0.1", "http-body 1.0.1",
"http-body-util", "http-body-util",
@@ -7032,14 +7048,14 @@ dependencies = [
"hyper-rustls", "hyper-rustls",
"hyper-util", "hyper-util",
"lazy_static", "lazy_static",
"md-5 0.11.0-rc.3", "md-5 0.11.0-rc.5",
"moka", "moka",
"num_cpus", "num_cpus",
"parking_lot", "parking_lot",
"path-absolutize", "path-absolutize",
"pin-project-lite", "pin-project-lite",
"quick-xml 0.39.0", "quick-xml 0.39.0",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"reed-solomon-simd", "reed-solomon-simd",
"regex", "regex",
"reqwest 0.13.1", "reqwest 0.13.1",
@@ -7063,8 +7079,8 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"serde_urlencoded", "serde_urlencoded",
"sha1 0.11.0-rc.3", "sha1 0.11.0-rc.5",
"sha2 0.11.0-rc.3", "sha2 0.11.0-rc.5",
"shadow-rs", "shadow-rs",
"smallvec", "smallvec",
"temp-env", "temp-env",
@@ -7140,7 +7156,7 @@ dependencies = [
"futures", "futures",
"jsonwebtoken", "jsonwebtoken",
"pollster", "pollster",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"rustfs-credentials", "rustfs-credentials",
"rustfs-crypto", "rustfs-crypto",
"rustfs-ecstore", "rustfs-ecstore",
@@ -7168,11 +7184,11 @@ dependencies = [
"jiff", "jiff",
"md5", "md5",
"moka", "moka",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"reqwest 0.13.1", "reqwest 0.13.1",
"serde", "serde",
"serde_json", "serde_json",
"sha2 0.11.0-rc.3", "sha2 0.11.0-rc.5",
"tempfile", "tempfile",
"thiserror 2.0.18", "thiserror 2.0.18",
"tokio", "tokio",
@@ -7323,9 +7339,7 @@ name = "rustfs-protocols"
version = "0.0.5" version = "0.0.5"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"base64",
"bytes", "bytes",
"futures",
"futures-util", "futures-util",
"libunftp", "libunftp",
"rustfs-credentials", "rustfs-credentials",
@@ -7335,13 +7349,10 @@ dependencies = [
"rustls", "rustls",
"s3s", "s3s",
"serde_json", "serde_json",
"suppaftp",
"thiserror 2.0.18", "thiserror 2.0.18",
"time", "time",
"tokio", "tokio",
"tokio-util",
"tracing", "tracing",
"uuid",
] ]
[[package]] [[package]]
@@ -7369,17 +7380,17 @@ dependencies = [
"futures", "futures",
"hex-simd", "hex-simd",
"http 1.4.0", "http 1.4.0",
"md-5 0.11.0-rc.3", "md-5 0.11.0-rc.5",
"pin-project-lite", "pin-project-lite",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"reqwest 0.13.1", "reqwest 0.13.1",
"rustfs-config", "rustfs-config",
"rustfs-utils", "rustfs-utils",
"s3s", "s3s",
"serde", "serde",
"serde_json", "serde_json",
"sha1 0.11.0-rc.3", "sha1 0.11.0-rc.5",
"sha2 0.11.0-rc.3", "sha2 0.11.0-rc.5",
"thiserror 2.0.18", "thiserror 2.0.18",
"tokio", "tokio",
"tokio-test", "tokio-test",
@@ -7438,7 +7449,7 @@ dependencies = [
"futures", "futures",
"http 1.4.0", "http 1.4.0",
"path-clean", "path-clean",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"rmp-serde", "rmp-serde",
"rustfs-common", "rustfs-common",
"rustfs-config", "rustfs-config",
@@ -7531,15 +7542,15 @@ dependencies = [
"hashbrown 0.16.1", "hashbrown 0.16.1",
"hex-simd", "hex-simd",
"highway", "highway",
"hmac 0.13.0-rc.3", "hmac 0.13.0-rc.5",
"http 1.4.0", "http 1.4.0",
"hyper", "hyper",
"libc", "libc",
"local-ip-address", "local-ip-address",
"lz4", "lz4",
"md-5 0.11.0-rc.3", "md-5 0.11.0-rc.5",
"netif", "netif",
"rand 0.10.0-rc.6", "rand 0.10.0-rc.9",
"regex", "regex",
"rustfs-config", "rustfs-config",
"rustix 1.1.3", "rustix 1.1.3",
@@ -7548,8 +7559,8 @@ dependencies = [
"rustls-pki-types", "rustls-pki-types",
"s3s", "s3s",
"serde", "serde",
"sha1 0.11.0-rc.3", "sha1 0.11.0-rc.5",
"sha2 0.11.0-rc.3", "sha2 0.11.0-rc.5",
"siphasher", "siphasher",
"snap", "snap",
"sysinfo", "sysinfo",
@@ -7762,7 +7773,7 @@ checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984"
[[package]] [[package]]
name = "s3s" name = "s3s"
version = "0.13.0-alpha.2" version = "0.13.0-alpha.2"
source = "git+https://github.com/rustfs/s3s.git?rev=13f968fc89e3bd286d308ca855456b23734d4f74#13f968fc89e3bd286d308ca855456b23734d4f74" source = "git+https://github.com/s3s-project/s3s.git?rev=355141446e358fdd4d71a32408b9fbebd65359c7#355141446e358fdd4d71a32408b9fbebd65359c7"
dependencies = [ dependencies = [
"arc-swap", "arc-swap",
"arrayvec", "arrayvec",
@@ -7777,14 +7788,14 @@ dependencies = [
"crc-fast", "crc-fast",
"futures", "futures",
"hex-simd", "hex-simd",
"hmac 0.13.0-rc.3", "hmac 0.13.0-rc.5",
"http 1.4.0", "http 1.4.0",
"http-body 1.0.1", "http-body 1.0.1",
"http-body-util", "http-body-util",
"httparse", "httparse",
"hyper", "hyper",
"itoa", "itoa",
"md-5 0.11.0-rc.3", "md-5 0.11.0-rc.5",
"memchr", "memchr",
"mime", "mime",
"nom 8.0.0", "nom 8.0.0",
@@ -7792,9 +7803,10 @@ dependencies = [
"pin-project-lite", "pin-project-lite",
"quick-xml 0.37.5", "quick-xml 0.37.5",
"serde", "serde",
"serde_json",
"serde_urlencoded", "serde_urlencoded",
"sha1 0.11.0-rc.3", "sha1 0.11.0-rc.5",
"sha2 0.11.0-rc.3", "sha2 0.11.0-rc.5",
"smallvec", "smallvec",
"std-next", "std-next",
"subtle", "subtle",
@@ -8115,13 +8127,13 @@ dependencies = [
[[package]] [[package]]
name = "sha1" name = "sha1"
version = "0.11.0-rc.3" version = "0.11.0-rc.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa1ae819b9870cadc959a052363de870944a1646932d274a4e270f64bf79e5ef" checksum = "3b167252f3c126be0d8926639c4c4706950f01445900c4b3db0fd7e89fcb750a"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"cpufeatures", "cpufeatures",
"digest 0.11.0-rc.5", "digest 0.11.0-rc.11",
] ]
[[package]] [[package]]
@@ -8137,13 +8149,13 @@ dependencies = [
[[package]] [[package]]
name = "sha2" name = "sha2"
version = "0.11.0-rc.3" version = "0.11.0-rc.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19d43dc0354d88b791216bb5c1bfbb60c0814460cc653ae0ebd71f286d0bd927" checksum = "7c5f3b1e2dc8aad28310d8410bd4d7e180eca65fca176c52ab00d364475d0024"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"cpufeatures", "cpufeatures",
"digest 0.11.0-rc.5", "digest 0.11.0-rc.11",
] ]
[[package]] [[package]]
@@ -8215,12 +8227,12 @@ dependencies = [
[[package]] [[package]]
name = "signature" name = "signature"
version = "3.0.0-rc.6" version = "3.0.0-rc.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "597a96996ccff7dfa16f052bd995b4cecc72af22c35138738dc029f0ead6608d" checksum = "7f1880df446116126965eeec169136b2e0251dba37c6223bcc819569550edea3"
dependencies = [ dependencies = [
"digest 0.11.0-rc.5", "digest 0.11.0-rc.11",
"rand_core 0.10.0-rc-3", "rand_core 0.10.0",
] ]
[[package]] [[package]]
@@ -9418,11 +9430,11 @@ checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]] [[package]]
name = "universal-hash" name = "universal-hash"
version = "0.6.0-rc.4" version = "0.6.0-rc.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0386f227888b17b65d3e38219a7d41185035471300855c285667811907bb1677" checksum = "058482a494bb3c9c39447d8b40a3a0f38ebb3dccaf02c5a2d681e69035f8da11"
dependencies = [ dependencies = [
"crypto-common 0.2.0-rc.9", "crypto-common 0.2.0",
"subtle", "subtle",
] ]
@@ -9589,6 +9601,15 @@ dependencies = [
"wit-bindgen", "wit-bindgen",
] ]
[[package]]
name = "wasip3"
version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
dependencies = [
"wit-bindgen",
]
[[package]] [[package]]
name = "wasm-bindgen" name = "wasm-bindgen"
version = "0.2.108" version = "0.2.108"
@@ -9648,6 +9669,28 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "wasm-encoder"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
dependencies = [
"leb128fmt",
"wasmparser",
]
[[package]]
name = "wasm-metadata"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
dependencies = [
"anyhow",
"indexmap 2.13.0",
"wasm-encoder",
"wasmparser",
]
[[package]] [[package]]
name = "wasm-streams" name = "wasm-streams"
version = "0.4.2" version = "0.4.2"
@@ -9661,6 +9704,18 @@ dependencies = [
"web-sys", "web-sys",
] ]
[[package]]
name = "wasmparser"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
dependencies = [
"bitflags 2.10.0",
"hashbrown 0.15.5",
"indexmap 2.13.0",
"semver",
]
[[package]] [[package]]
name = "web-sys" name = "web-sys"
version = "0.3.85" version = "0.3.85"
@@ -10114,6 +10169,88 @@ name = "wit-bindgen"
version = "0.51.0" version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
dependencies = [
"wit-bindgen-rust-macro",
]
[[package]]
name = "wit-bindgen-core"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
dependencies = [
"anyhow",
"heck",
"wit-parser",
]
[[package]]
name = "wit-bindgen-rust"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
dependencies = [
"anyhow",
"heck",
"indexmap 2.13.0",
"prettyplease",
"syn 2.0.114",
"wasm-metadata",
"wit-bindgen-core",
"wit-component",
]
[[package]]
name = "wit-bindgen-rust-macro"
version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
dependencies = [
"anyhow",
"prettyplease",
"proc-macro2",
"quote",
"syn 2.0.114",
"wit-bindgen-core",
"wit-bindgen-rust",
]
[[package]]
name = "wit-component"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
dependencies = [
"anyhow",
"bitflags 2.10.0",
"indexmap 2.13.0",
"log",
"serde",
"serde_derive",
"serde_json",
"wasm-encoder",
"wasm-metadata",
"wasmparser",
"wit-parser",
]
[[package]]
name = "wit-parser"
version = "0.244.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
dependencies = [
"anyhow",
"id-arena",
"indexmap 2.13.0",
"log",
"semver",
"serde",
"serde_derive",
"serde_json",
"unicode-xid",
"wasmparser",
]
[[package]] [[package]]
name = "wrapcenum-derive" name = "wrapcenum-derive"
@@ -10230,18 +10367,18 @@ dependencies = [
[[package]] [[package]]
name = "zerocopy" name = "zerocopy"
version = "0.8.38" version = "0.8.39"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57cf3aa6855b23711ee9852dfc97dfaa51c45feaba5b645d0c777414d494a961" checksum = "db6d35d663eadb6c932438e763b262fe1a70987f9ae936e60158176d710cae4a"
dependencies = [ dependencies = [
"zerocopy-derive", "zerocopy-derive",
] ]
[[package]] [[package]]
name = "zerocopy-derive" name = "zerocopy-derive"
version = "0.8.38" version = "0.8.39"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a616990af1a287837c4fe6596ad77ef57948f787e46ce28e166facc0cc1cb75" checksum = "4122cd3169e94605190e77839c9a40d40ed048d305bfdc146e7df40ab0f3e517"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -10324,18 +10461,17 @@ dependencies = [
[[package]] [[package]]
name = "zip" name = "zip"
version = "7.2.0" version = "7.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c42e33efc22a0650c311c2ef19115ce232583abbe80850bc8b66509ebef02de0" checksum = "cc12baa6db2b15a140161ce53d72209dacea594230798c24774139b54ecaa980"
dependencies = [ dependencies = [
"aes 0.8.4", "aes 0.8.4",
"bzip2", "bzip2",
"constant_time_eq 0.3.1", "constant_time_eq",
"crc32fast", "crc32fast",
"deflate64", "deflate64",
"flate2", "flate2",
"generic-array", "getrandom 0.4.1",
"getrandom 0.3.4",
"hmac 0.12.1", "hmac 0.12.1",
"indexmap 2.13.0", "indexmap 2.13.0",
"lzma-rust2", "lzma-rust2",
+19 -19
View File
@@ -103,7 +103,7 @@ rustfs-protocols = { path = "crates/protocols", version = "0.0.5" }
# Async Runtime and Networking # Async Runtime and Networking
async-channel = "2.5.0" async-channel = "2.5.0"
async-compression = { version = "0.4.37" } async-compression = { version = "0.4.38" }
async-recursion = "1.1.1" async-recursion = "1.1.1"
async-trait = "0.1.89" async-trait = "0.1.89"
axum = "0.8.8" axum = "0.8.8"
@@ -148,32 +148,32 @@ serde_urlencoded = "0.7.1"
schemars = "1.2.1" schemars = "1.2.1"
# Cryptography and Security # Cryptography and Security
aes-gcm = { version = "0.11.0-rc.2", features = ["rand_core"] } aes-gcm = { version = "0.11.0-rc.3", features = ["rand_core"] }
argon2 = { version = "0.6.0-rc.6" } argon2 = { version = "0.6.0-rc.7" }
blake3 = { version = "1.8.3", features = ["rayon", "mmap"] } blake3 = { version = "1.8.3", features = ["rayon", "mmap"] }
chacha20poly1305 = { version = "0.11.0-rc.2" } chacha20poly1305 = { version = "0.11.0-rc.3" }
crc-fast = "1.9.0" crc-fast = "1.9.0"
hmac = { version = "0.13.0-rc.3" } hmac = { version = "0.13.0-rc.5" }
jsonwebtoken = { version = "10.3.0", features = ["aws_lc_rs"] } jsonwebtoken = { version = "10.3.0", features = ["aws_lc_rs"] }
pbkdf2 = "0.13.0-rc.8" pbkdf2 = "0.13.0-rc.9"
rsa = { version = "0.10.0-rc.12" } rsa = { version = "0.10.0-rc.15" }
rustls = { version = "0.23.36", default-features = false, features = ["aws-lc-rs", "logging", "tls12", "prefer-post-quantum", "std"] } rustls = { version = "0.23.36", default-features = false, features = ["aws-lc-rs", "logging", "tls12", "prefer-post-quantum", "std"] }
rustls-pemfile = "2.2.0" rustls-pemfile = "2.2.0"
rustls-pki-types = "1.14.0" rustls-pki-types = "1.14.0"
sha1 = "0.11.0-rc.3" sha1 = "0.11.0-rc.5"
sha2 = "0.11.0-rc.3" sha2 = "0.11.0-rc.5"
subtle = "2.6" subtle = "2.6"
zeroize = { version = "1.8.2", features = ["derive"] } zeroize = { version = "1.8.2", features = ["derive"] }
# Time and Date # Time and Date
chrono = { version = "0.4.43", features = ["serde"] } chrono = { version = "0.4.43", features = ["serde"] }
humantime = "2.3.0" humantime = "2.3.0"
jiff = { version = "0.2.18", features = ["serde"] } jiff = { version = "0.2.19", features = ["serde"] }
time = { version = "0.3.46", features = ["std", "parsing", "formatting", "macros", "serde"] } time = { version = "0.3.47", features = ["std", "parsing", "formatting", "macros", "serde"] }
# Utilities and Tools # Utilities and Tools
anyhow = "1.0.100" anyhow = "1.0.101"
arc-swap = "1.8.0" arc-swap = "1.8.1"
astral-tokio-tar = "0.5.6" astral-tokio-tar = "0.5.6"
atoi = "2.0.0" atoi = "2.0.0"
atomic_enum = "0.3.0" atomic_enum = "0.3.0"
@@ -195,7 +195,7 @@ datafusion = "52.1.0"
derive_builder = "0.20.2" derive_builder = "0.20.2"
enumset = "1.1.10" enumset = "1.1.10"
faster-hex = "0.10.0" faster-hex = "0.10.0"
flate2 = "1.1.8" flate2 = "1.1.9"
flexi_logger = { version = "0.31.8", features = ["trc", "dont_minimize_extra_stacks", "compress", "kv", "json"] } flexi_logger = { version = "0.31.8", features = ["trc", "dont_minimize_extra_stacks", "compress", "kv", "json"] }
glob = "0.3.3" glob = "0.3.3"
google-cloud-storage = "1.7.0" google-cloud-storage = "1.7.0"
@@ -210,7 +210,7 @@ libsystemd = "0.7.2"
local-ip-address = "0.6.10" local-ip-address = "0.6.10"
lz4 = "1.28.1" lz4 = "1.28.1"
matchit = "0.9.1" matchit = "0.9.1"
md-5 = "0.11.0-rc.3" md-5 = "0.11.0-rc.5"
md5 = "0.8.0" md5 = "0.8.0"
mime_guess = "2.0.5" mime_guess = "2.0.5"
moka = { version = "0.12.13", features = ["future"] } moka = { version = "0.12.13", features = ["future"] }
@@ -224,15 +224,15 @@ path-absolutize = "3.1.1"
path-clean = "1.0.1" path-clean = "1.0.1"
pin-project-lite = "0.2.16" pin-project-lite = "0.2.16"
pretty_assertions = "1.4.1" pretty_assertions = "1.4.1"
rand = { version = "0.10.0-rc.6", features = ["serde"] } rand = { version = "0.10.0-rc.9", features = ["serde"] }
rayon = "1.11.0" rayon = "1.11.0"
reed-solomon-simd = { version = "3.1.0" } reed-solomon-simd = { version = "3.1.0" }
regex = { version = "1.12.2" } regex = { version = "1.12.3" }
rumqttc = { version = "0.25.1" } rumqttc = { version = "0.25.1" }
rustix = { version = "1.1.3", features = ["fs"] } rustix = { version = "1.1.3", features = ["fs"] }
rust-embed = { version = "8.11.0" } rust-embed = { version = "8.11.0" }
rustc-hash = { version = "2.1.1" } rustc-hash = { version = "2.1.1" }
s3s = { version = "0.13.0-alpha.2", features = ["minio"], git = "https://github.com/rustfs/s3s.git", rev = "13f968fc89e3bd286d308ca855456b23734d4f74" } s3s = { version = "0.13.0-alpha.2", features = ["minio"], git = "https://github.com/s3s-project/s3s.git", rev = "355141446e358fdd4d71a32408b9fbebd65359c7" }
serial_test = "3.3.1" serial_test = "3.3.1"
shadow-rs = { version = "1.7.0", default-features = false } shadow-rs = { version = "1.7.0", default-features = false }
siphasher = "1.0.2" siphasher = "1.0.2"
@@ -261,7 +261,7 @@ walkdir = "2.5.0"
wildmatch = { version = "2.6.1", features = ["serde"] } wildmatch = { version = "2.6.1", features = ["serde"] }
windows = { version = "0.62.2" } windows = { version = "0.62.2" }
xxhash-rust = { version = "0.8.15", features = ["xxh64", "xxh3"] } xxhash-rust = { version = "0.8.15", features = ["xxh64", "xxh3"] }
zip = "7.2.0" zip = "7.4.0"
zstd = "0.13.3" zstd = "0.13.3"
# Observability and Metrics # Observability and Metrics
+1 -1
View File
@@ -13,7 +13,7 @@
// limitations under the License. // limitations under the License.
use crate::{DEFAULT_SECRET_KEY, ENV_RPC_SECRET, IAM_POLICY_CLAIM_NAME_SA, INHERITED_POLICY_TYPE}; use crate::{DEFAULT_SECRET_KEY, ENV_RPC_SECRET, IAM_POLICY_CLAIM_NAME_SA, INHERITED_POLICY_TYPE};
use rand::{Rng, RngCore}; use rand::{Rng, RngExt};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_json::Value; use serde_json::Value;
use std::collections::HashMap; use std::collections::HashMap;
+1 -1
View File
@@ -58,7 +58,7 @@ fn encrypt<T: aes_gcm::aead::Aead>(
use crate::error::Error; use crate::error::Error;
use aes_gcm::AeadCore; use aes_gcm::AeadCore;
use aes_gcm::aead::array::Array; use aes_gcm::aead::array::Array;
use rand::RngCore; use rand::Rng;
let mut nonce: Array<u8, <T as AeadCore>::NonceSize> = Array::default(); let mut nonce: Array<u8, <T as AeadCore>::NonceSize> = Array::default();
rand::rng().fill_bytes(&mut nonce); rand::rng().fill_bytes(&mut nonce);
+1 -1
View File
@@ -117,7 +117,7 @@ pub async fn create_default_key(
/// Create a KMS key with a specific ID (by directly writing to the key directory) /// Create a KMS key with a specific ID (by directly writing to the key directory)
pub async fn create_key_with_specific_id(key_dir: &str, key_id: &str) -> Result<(), Box<dyn std::error::Error + Send + Sync>> { pub async fn create_key_with_specific_id(key_dir: &str, key_id: &str) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
use rand::RngCore; use rand::Rng;
use std::collections::HashMap; use std::collections::HashMap;
use tokio::fs; use tokio::fs;
@@ -782,7 +782,7 @@ impl<S: StorageAPI> ReplicationPool<S> {
} }
// Generate random duration between 0 and 1 minute // Generate random duration between 0 and 1 minute
use rand::Rng; use rand::RngExt;
let duration_millis = rand::rng().random_range(0..60_000); let duration_millis = rand::rng().random_range(0..60_000);
let mut duration = Duration::from_millis(duration_millis); let mut duration = Duration::from_millis(duration_millis);
+1 -1
View File
@@ -47,7 +47,7 @@ use hyper_rustls::{ConfigBuilderExt, HttpsConnector};
use hyper_util::{client::legacy::Client, client::legacy::connect::HttpConnector, rt::TokioExecutor}; use hyper_util::{client::legacy::Client, client::legacy::connect::HttpConnector, rt::TokioExecutor};
use md5::Digest; use md5::Digest;
use md5::Md5; use md5::Md5;
use rand::Rng; use rand::{Rng, RngExt};
use rustfs_config::MAX_S3_CLIENT_RESPONSE_SIZE; use rustfs_config::MAX_S3_CLIENT_RESPONSE_SIZE;
use rustfs_rio::HashReader; use rustfs_rio::HashReader;
use rustfs_utils::HashAlgorithm; use rustfs_utils::HashAlgorithm;
+1 -1
View File
@@ -620,7 +620,7 @@ pub async fn load_data_usage_cache(store: &crate::set_disk::SetDisks, name: &str
use crate::disk::{BUCKET_META_PREFIX, RUSTFS_META_BUCKET}; use crate::disk::{BUCKET_META_PREFIX, RUSTFS_META_BUCKET};
use crate::store_api::{ObjectIO, ObjectOptions}; use crate::store_api::{ObjectIO, ObjectOptions};
use http::HeaderMap; use http::HeaderMap;
use rand::Rng; use rand::RngExt;
use std::path::Path; use std::path::Path;
use std::time::Duration; use std::time::Duration;
use tokio::time::sleep; use tokio::time::sleep;
+1 -1
View File
@@ -66,7 +66,7 @@ use crate::{
use futures::future::join_all; use futures::future::join_all;
use http::HeaderMap; use http::HeaderMap;
use lazy_static::lazy_static; use lazy_static::lazy_static;
use rand::Rng as _; use rand::RngExt as _;
use rustfs_common::heal_channel::{HealItemType, HealOpts}; use rustfs_common::heal_channel::{HealItemType, HealOpts};
use rustfs_common::{GLOBAL_LOCAL_NODE_NAME, GLOBAL_RUSTFS_HOST, GLOBAL_RUSTFS_PORT}; use rustfs_common::{GLOBAL_LOCAL_NODE_NAME, GLOBAL_RUSTFS_HOST, GLOBAL_RUSTFS_PORT};
use rustfs_filemeta::FileInfo; use rustfs_filemeta::FileInfo;
+1 -1
View File
@@ -21,7 +21,7 @@
use bytes::Bytes; use bytes::Bytes;
use http::status::StatusCode; use http::status::StatusCode;
use lazy_static::lazy_static; use lazy_static::lazy_static;
use rand::Rng; use rand::{Rng, RngExt};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::{ use std::{
collections::{HashMap, hash_map::Entry}, collections::{HashMap, hash_map::Entry},
+1 -1
View File
@@ -13,7 +13,7 @@
// limitations under the License. // limitations under the License.
use jsonwebtoken::{Algorithm, DecodingKey, EncodingKey, Header}; use jsonwebtoken::{Algorithm, DecodingKey, EncodingKey, Header};
use rand::{Rng, RngCore}; use rand::{Rng, RngExt};
use serde::{Serialize, de::DeserializeOwned}; use serde::{Serialize, de::DeserializeOwned};
use std::io::{Error, Result}; use std::io::{Error, Result};
+1 -1
View File
@@ -27,7 +27,7 @@ use aes_gcm::{
use async_trait::async_trait; use async_trait::async_trait;
use base64::{Engine as _, engine::general_purpose::STANDARD as BASE64}; use base64::{Engine as _, engine::general_purpose::STANDARD as BASE64};
use jiff::Zoned; use jiff::Zoned;
use rand::Rng; use rand::RngExt;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::collections::HashMap; use std::collections::HashMap;
use std::path::PathBuf; use std::path::PathBuf;
+1 -1
View File
@@ -21,7 +21,7 @@ use aes_gcm::{
aead::{Aead, KeyInit}, aead::{Aead, KeyInit},
}; };
use chacha20poly1305::ChaCha20Poly1305; use chacha20poly1305::ChaCha20Poly1305;
use rand::Rng; use rand::RngExt;
/// Trait for object encryption ciphers /// Trait for object encryption ciphers
#[cfg_attr(not(test), allow(dead_code))] #[cfg_attr(not(test), allow(dead_code))]
+1 -1
View File
@@ -23,7 +23,7 @@
use crate::error::{KmsError, Result}; use crate::error::{KmsError, Result};
use async_trait::async_trait; use async_trait::async_trait;
use jiff::Zoned; use jiff::Zoned;
use rand::RngCore; use rand::Rng;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::collections::HashMap; use std::collections::HashMap;
+1 -6
View File
@@ -27,7 +27,7 @@ categories = ["network-programming", "filesystem"]
[features] [features]
default = [] default = []
ftps = ["libunftp", "suppaftp", "rustls"] ftps = ["dep:libunftp", "dep:rustls"]
[dependencies] [dependencies]
# Core RustFS dependencies # Core RustFS dependencies
@@ -39,7 +39,6 @@ rustfs-utils = { workspace = true }
# Async dependencies # Async dependencies
tokio = { workspace = true, features = ["fs", "io-util", "sync", "time"] } tokio = { workspace = true, features = ["fs", "io-util", "sync", "time"] }
tracing = { workspace = true } tracing = { workspace = true }
futures = { workspace = true }
futures-util = { workspace = true } futures-util = { workspace = true }
# Error handling # Error handling
@@ -50,9 +49,6 @@ serde_json = { workspace = true }
# Utilities # Utilities
async-trait = { workspace = true } async-trait = { workspace = true }
base64 = { workspace = true }
uuid = { workspace = true }
tokio-util = { workspace = true, features = ["io"] }
time = { workspace = true } time = { workspace = true }
bytes = { workspace = true } bytes = { workspace = true }
@@ -61,7 +57,6 @@ s3s = { workspace = true }
# FTPS specific dependencies (optional) # FTPS specific dependencies (optional)
libunftp = { workspace = true, optional = true } libunftp = { workspace = true, optional = true }
suppaftp = { workspace = true, optional = true }
rustls = { workspace = true, optional = true } rustls = { workspace = true, optional = true }
[package.metadata.docs.rs] [package.metadata.docs.rs]
+6 -6
View File
@@ -505,7 +505,7 @@ pub fn get_content_checksum(headers: &HeaderMap) -> Result<Option<Checksum>, std
for header in trailing_headers { for header in trailing_headers {
let mut duplicates = false; let mut duplicates = false;
for &checksum_type in crate::checksum::BASE_CHECKSUM_TYPES { for &checksum_type in BASE_CHECKSUM_TYPES {
if let Some(key) = checksum_type.key() if let Some(key) = checksum_type.key()
&& header.eq_ignore_ascii_case(key) && header.eq_ignore_ascii_case(key)
{ {
@@ -570,17 +570,17 @@ fn get_content_checksum_direct(headers: &HeaderMap) -> (ChecksumType, String) {
if checksum_type.is_set() if checksum_type.is_set()
&& let Some(key) = checksum_type.key() && let Some(key) = checksum_type.key()
{ {
if let Some(value) = headers.get(key).and_then(|v| v.to_str().ok()) { return if let Some(value) = headers.get(key).and_then(|v| v.to_str().ok()) {
return (checksum_type, value.to_string()); (checksum_type, value.to_string())
} else { } else {
return (ChecksumType::NONE, String::new()); (ChecksumType::NONE, String::new())
} };
} }
return (checksum_type, String::new()); return (checksum_type, String::new());
} }
// Check individual checksum headers // Check individual checksum headers
for &ct in crate::checksum::BASE_CHECKSUM_TYPES { for &ct in BASE_CHECKSUM_TYPES {
if let Some(key) = ct.key() if let Some(key) = ct.key()
&& let Some(value) = headers.get(key).and_then(|v| v.to_str().ok()) && let Some(value) = headers.get(key).and_then(|v| v.to_str().ok())
{ {
+1 -2
View File
@@ -439,6 +439,7 @@ mod tests {
use crate::WarpReader; use crate::WarpReader;
use super::*; use super::*;
use rand::RngExt;
use std::io::Cursor; use std::io::Cursor;
use tokio::io::{AsyncReadExt, BufReader}; use tokio::io::{AsyncReadExt, BufReader};
@@ -494,7 +495,6 @@ mod tests {
#[tokio::test] #[tokio::test]
async fn test_compress_reader_large() { async fn test_compress_reader_large() {
use rand::Rng;
// Generate 1MB of random bytes // Generate 1MB of random bytes
let mut data = vec![0u8; 1024 * 1024 * 32]; let mut data = vec![0u8; 1024 * 1024 * 32];
rand::rng().fill(&mut data[..]); rand::rng().fill(&mut data[..]);
@@ -513,7 +513,6 @@ mod tests {
#[tokio::test] #[tokio::test]
async fn test_compress_reader_large_deflate() { async fn test_compress_reader_large_deflate() {
use rand::Rng;
// Generate 1MB of random bytes // Generate 1MB of random bytes
let mut data = vec![0u8; 1024 * 1024 * 3 + 512]; let mut data = vec![0u8; 1024 * 1024 * 3 + 512];
rand::rng().fill(&mut data[..]); rand::rng().fill(&mut data[..]);
+1 -1
View File
@@ -487,7 +487,7 @@ mod tests {
use crate::WarpReader; use crate::WarpReader;
use super::*; use super::*;
use rand::RngCore; use rand::{Rng, RngExt};
use tokio::io::{AsyncReadExt, BufReader}; use tokio::io::{AsyncReadExt, BufReader};
#[tokio::test] #[tokio::test]
+1 -1
View File
@@ -112,6 +112,7 @@ mod tests {
use crate::WarpReader; use crate::WarpReader;
use super::*; use super::*;
use rand::RngExt;
use std::io::Cursor; use std::io::Cursor;
use tokio::io::{AsyncReadExt, BufReader}; use tokio::io::{AsyncReadExt, BufReader};
@@ -191,7 +192,6 @@ mod tests {
#[tokio::test] #[tokio::test]
async fn test_etag_reader_large_data() { async fn test_etag_reader_large_data() {
use rand::Rng;
// Generate 3MB random data // Generate 3MB random data
let size = 3 * 1024 * 1024; let size = 3 * 1024 * 1024;
let mut data = vec![0u8; size]; let mut data = vec![0u8; size];
+1 -1
View File
@@ -562,6 +562,7 @@ impl TryGetIndex for HashReader {
mod tests { mod tests {
use super::*; use super::*;
use crate::{DecryptReader, WarpReader, encrypt_reader}; use crate::{DecryptReader, WarpReader, encrypt_reader};
use rand::RngExt;
use std::io::Cursor; use std::io::Cursor;
use tokio::io::{AsyncReadExt, BufReader}; use tokio::io::{AsyncReadExt, BufReader};
@@ -656,7 +657,6 @@ mod tests {
use crate::{CompressReader, DecompressReader}; use crate::{CompressReader, DecompressReader};
use md5::{Digest, Md5}; use md5::{Digest, Md5};
use rand::Rng; use rand::Rng;
use rand::RngCore;
use rustfs_utils::compress::CompressionAlgorithm; use rustfs_utils::compress::CompressionAlgorithm;
// Generate 1MB random data // Generate 1MB random data
+2 -3
View File
@@ -122,9 +122,9 @@ impl<R> TryGetIndex for LimitReader<R> where R: AsyncRead + Unpin + Send + Sync
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use std::io::Cursor;
use super::*; use super::*;
use rand::RngExt;
use std::io::Cursor;
use tokio::io::{AsyncReadExt, BufReader}; use tokio::io::{AsyncReadExt, BufReader};
#[tokio::test] #[tokio::test]
@@ -186,7 +186,6 @@ mod tests {
#[tokio::test] #[tokio::test]
async fn test_limit_reader_large_file() { async fn test_limit_reader_large_file() {
use rand::Rng;
// Generate a 3MB random byte array for testing // Generate a 3MB random byte array for testing
let size = 3 * 1024 * 1024; let size = 3 * 1024 * 1024;
let mut data = vec![0u8; size]; let mut data = vec![0u8; size];
+3 -7
View File
@@ -77,11 +77,7 @@ impl Writer {
} }
impl AsyncWrite for Writer { impl AsyncWrite for Writer {
fn poll_write( fn poll_write(self: Pin<&mut Self>, cx: &mut std::task::Context<'_>, buf: &[u8]) -> std::task::Poll<std::io::Result<usize>> {
self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
buf: &[u8],
) -> std::task::Poll<std::io::Result<usize>> {
match self.get_mut() { match self.get_mut() {
Writer::Cursor(w) => Pin::new(w).poll_write(cx, buf), Writer::Cursor(w) => Pin::new(w).poll_write(cx, buf),
Writer::Http(w) => Pin::new(w).poll_write(cx, buf), Writer::Http(w) => Pin::new(w).poll_write(cx, buf),
@@ -89,14 +85,14 @@ impl AsyncWrite for Writer {
} }
} }
fn poll_flush(self: std::pin::Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> std::task::Poll<std::io::Result<()>> { fn poll_flush(self: Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> std::task::Poll<std::io::Result<()>> {
match self.get_mut() { match self.get_mut() {
Writer::Cursor(w) => Pin::new(w).poll_flush(cx), Writer::Cursor(w) => Pin::new(w).poll_flush(cx),
Writer::Http(w) => Pin::new(w).poll_flush(cx), Writer::Http(w) => Pin::new(w).poll_flush(cx),
Writer::Other(w) => Pin::new(w.as_mut()).poll_flush(cx), Writer::Other(w) => Pin::new(w.as_mut()).poll_flush(cx),
} }
} }
fn poll_shutdown(self: std::pin::Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> std::task::Poll<std::io::Result<()>> { fn poll_shutdown(self: Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> std::task::Poll<std::io::Result<()>> {
match self.get_mut() { match self.get_mut() {
Writer::Cursor(w) => Pin::new(w).poll_shutdown(cx), Writer::Cursor(w) => Pin::new(w).poll_shutdown(cx),
Writer::Http(w) => Pin::new(w).poll_shutdown(cx), Writer::Http(w) => Pin::new(w).poll_shutdown(cx),
+2 -2
View File
@@ -22,7 +22,7 @@ repository.workspace = true
rust-version.workspace = true rust-version.workspace = true
homepage.workspace = true homepage.workspace = true
description = "RustFS Scanner provides scanning capabilities for data integrity checks, health monitoring, and storage analysis." description = "RustFS Scanner provides scanning capabilities for data integrity checks, health monitoring, and storage analysis."
keywords = ["RustFS", "scanner", "health-monitoring", "data-integrity", "storage-analysis", "Minio"] keywords = ["RustFS", "scanner", "health-monitoring", "data-integrity", "storage-analysis"]
categories = ["web-programming", "development-tools", "filesystem"] categories = ["web-programming", "development-tools", "filesystem"]
documentation = "https://docs.rs/rustfs-scanner/latest/rustfs_scanner/" documentation = "https://docs.rs/rustfs-scanner/latest/rustfs_scanner/"
@@ -47,7 +47,7 @@ rmp-serde = { workspace = true }
rustfs-filemeta = { workspace = true } rustfs-filemeta = { workspace = true }
rustfs-madmin = { workspace = true } rustfs-madmin = { workspace = true }
tokio-util = { workspace = true } tokio-util = { workspace = true }
rustfs-ecstore = { workspace = true } rustfs-ecstore = { workspace = true }
http = { workspace = true } http = { workspace = true }
rand = { workspace = true } rand = { workspace = true }
s3s = { workspace = true } s3s = { workspace = true }
+5 -5
View File
@@ -502,8 +502,8 @@ impl Metrics {
} }
// Type aliases for compatibility with existing code // Type aliases for compatibility with existing code
pub type UpdateCurrentPathFn = Arc<dyn Fn(&str) -> Pin<Box<dyn std::future::Future<Output = ()> + Send>> + Send + Sync>; pub type UpdateCurrentPathFn = Arc<dyn Fn(&str) -> Pin<Box<dyn Future<Output = ()> + Send>> + Send + Sync>;
pub type CloseDiskFn = Arc<dyn Fn() -> Pin<Box<dyn std::future::Future<Output = ()> + Send>> + Send + Sync>; pub type CloseDiskFn = Arc<dyn Fn() -> Pin<Box<dyn Future<Output = ()> + Send>> + Send + Sync>;
/// Create a current path updater for tracking scan progress /// Create a current path updater for tracking scan progress
pub fn current_path_updater(disk: &str, initial: &str) -> (UpdateCurrentPathFn, CloseDiskFn) { pub fn current_path_updater(disk: &str, initial: &str) -> (UpdateCurrentPathFn, CloseDiskFn) {
@@ -519,7 +519,7 @@ pub fn current_path_updater(disk: &str, initial: &str) -> (UpdateCurrentPathFn,
let update_fn = { let update_fn = {
let tracker = Arc::clone(&tracker); let tracker = Arc::clone(&tracker);
Arc::new(move |path: &str| -> Pin<Box<dyn std::future::Future<Output = ()> + Send>> { Arc::new(move |path: &str| -> Pin<Box<dyn Future<Output = ()> + Send>> {
let tracker = Arc::clone(&tracker); let tracker = Arc::clone(&tracker);
let path = path.to_string(); let path = path.to_string();
Box::pin(async move { Box::pin(async move {
@@ -530,7 +530,7 @@ pub fn current_path_updater(disk: &str, initial: &str) -> (UpdateCurrentPathFn,
let done_fn = { let done_fn = {
let disk_name = disk_name.clone(); let disk_name = disk_name.clone();
Arc::new(move || -> Pin<Box<dyn std::future::Future<Output = ()> + Send>> { Arc::new(move || -> Pin<Box<dyn Future<Output = ()> + Send>> {
let disk_name = disk_name.clone(); let disk_name = disk_name.clone();
Box::pin(async move { Box::pin(async move {
global_metrics().current_paths.write().await.remove(&disk_name); global_metrics().current_paths.write().await.remove(&disk_name);
@@ -555,7 +555,7 @@ impl CloseDiskGuard {
} }
pub async fn close(&self) { pub async fn close(&self) {
(self.0)().await; self.0().await;
} }
} }
+5 -8
View File
@@ -86,13 +86,10 @@ pub async fn read_background_heal_info(storeapi: Arc<ECStore>) -> BackgroundHeal
// Get last healing information // Get last healing information
match read_config(storeapi, &BACKGROUND_HEAL_INFO_PATH).await { match read_config(storeapi, &BACKGROUND_HEAL_INFO_PATH).await {
Ok(buf) => match serde_json::from_slice::<BackgroundHealInfo>(&buf) { Ok(buf) => serde_json::from_slice::<BackgroundHealInfo>(&buf).unwrap_or_else(|e| {
Ok(info) => info, error!("Failed to unmarshal background heal info from {}: {}", &*BACKGROUND_HEAL_INFO_PATH, e);
Err(e) => { BackgroundHealInfo::default()
error!("Failed to unmarshal background heal info from {}: {}", &*BACKGROUND_HEAL_INFO_PATH, e); }),
BackgroundHealInfo::default()
}
},
Err(e) => { Err(e) => {
// Only log if it's not a ConfigNotFound error // Only log if it's not a ConfigNotFound error
if e != EcstoreError::ConfigNotFound { if e != EcstoreError::ConfigNotFound {
@@ -194,7 +191,7 @@ pub async fn run_data_scanner(ctx: CancellationToken, storeapi: Arc<ECStore>) ->
let (sender, receiver) = tokio::sync::mpsc::channel::<DataUsageInfo>(1); let (sender, receiver) = mpsc::channel::<DataUsageInfo>(1);
let storeapi_clone = storeapi.clone(); let storeapi_clone = storeapi.clone();
let ctx_clone = ctx.clone(); let ctx_clone = ctx.clone();
tokio::spawn(async move { tokio::spawn(async move {
+3 -3
View File
@@ -1086,7 +1086,7 @@ pub async fn scan_data_folder(
// Create skip_heal flag // Create skip_heal flag
let is_erasure_mode = is_erasure().await; let is_erasure_mode = is_erasure().await;
let skip_heal = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(!is_erasure_mode || cache.info.skip_healing)); let skip_heal = Arc::new(std::sync::atomic::AtomicBool::new(!is_erasure_mode || cache.info.skip_healing));
// Create heal_object_select flag // Create heal_object_select flag
let heal_object_select = if is_erasure_mode && !cache.info.skip_healing { let heal_object_select = if is_erasure_mode && !cache.info.skip_healing {
@@ -1144,11 +1144,11 @@ pub async fn scan_data_folder(
new_cache.info.last_update = Some(SystemTime::now()); new_cache.info.last_update = Some(SystemTime::now());
new_cache.info.next_cycle = cache.info.next_cycle; new_cache.info.next_cycle = cache.info.next_cycle;
(close_disk)().await; close_disk().await;
Ok(new_cache.clone()) Ok(new_cache.clone())
} }
Err(e) => { Err(e) => {
(close_disk)().await; close_disk().await;
// No useful information, return original cache // No useful information, return original cache
Err(e) Err(e)
} }
+15 -1
View File
@@ -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::scanner_folder::{ScannerItem, scan_data_folder}; use crate::scanner_folder::{ScannerItem, scan_data_folder};
use crate::{ use crate::{
DATA_USAGE_CACHE_NAME, DATA_USAGE_ROOT, DataUsageCache, DataUsageCacheInfo, DataUsageEntry, DataUsageEntryInfo, DATA_USAGE_CACHE_NAME, DATA_USAGE_ROOT, DataUsageCache, DataUsageCacheInfo, DataUsageEntry, DataUsageEntryInfo,
@@ -114,7 +128,7 @@ impl ScannerIO for ECStore {
let results_mutex_clone = results_mutex.clone(); let results_mutex_clone = results_mutex.clone();
let first_err_mutex_clone = first_err_mutex.clone(); let first_err_mutex_clone = first_err_mutex.clone();
let (tx, mut rx) = tokio::sync::mpsc::channel::<DataUsageCache>(1); let (tx, mut rx) = mpsc::channel::<DataUsageCache>(1);
// Spawn task to receive and store results // Spawn task to receive and store results
let receiver_fut = tokio::spawn(async move { let receiver_fut = tokio::spawn(async move {
+1 -1
View File
@@ -165,7 +165,7 @@ pub fn is_request_error_retryable(_err: std::io::Error) -> bool {
mod tests { mod tests {
use super::*; use super::*;
use futures::StreamExt; use futures::StreamExt;
use rand::Rng; use rand::RngExt;
use std::time::UNIX_EPOCH; use std::time::UNIX_EPOCH;
#[tokio::test] #[tokio::test]
+20 -42
View File
@@ -12,9 +12,6 @@
// See the License for the specific language governing permissions and // See the License for the specific language governing permissions and
// limitations under the License. // limitations under the License.
// use async_zip::tokio::read::seek::ZipFileReader;
// use async_zip::tokio::write::ZipFileWriter;
// use async_zip::{Compression, ZipEntryBuilder};
use async_compression::tokio::bufread::{BzDecoder, GzipDecoder, XzDecoder, ZlibDecoder, ZstdDecoder}; use async_compression::tokio::bufread::{BzDecoder, GzipDecoder, XzDecoder, ZlibDecoder, ZstdDecoder};
use async_compression::tokio::write::{BzEncoder, GzipEncoder, XzEncoder, ZlibEncoder, ZstdEncoder}; use async_compression::tokio::write::{BzEncoder, GzipEncoder, XzEncoder, ZlibEncoder, ZstdEncoder};
use std::path::Path; use std::path::Path;
@@ -115,6 +112,15 @@ impl CompressionFormat {
Ok(decoder) Ok(decoder)
} }
/// Convert CompressionLevel to async_compression::Level
fn convert_level(level: CompressionLevel) -> async_compression::Level {
match level {
CompressionLevel::Fastest => async_compression::Level::Fastest,
CompressionLevel::Best => async_compression::Level::Best,
CompressionLevel::Default => async_compression::Level::Default,
CompressionLevel::Level(n) => async_compression::Level::Precise(n as i32),
}
}
/// Create compressor /// Create compressor
pub fn get_encoder<W>(&self, output: W, level: CompressionLevel) -> io::Result<Box<dyn AsyncWrite + Send + Unpin>> pub fn get_encoder<W>(&self, output: W, level: CompressionLevel) -> io::Result<Box<dyn AsyncWrite + Send + Unpin>>
@@ -125,48 +131,23 @@ impl CompressionFormat {
let encoder: Box<dyn AsyncWrite + Send + Unpin + 'static> = match self { let encoder: Box<dyn AsyncWrite + Send + Unpin + 'static> = match self {
CompressionFormat::Gzip => { CompressionFormat::Gzip => {
let level = match level { let level = Self::convert_level(level);
CompressionLevel::Fastest => async_compression::Level::Fastest,
CompressionLevel::Best => async_compression::Level::Best,
CompressionLevel::Default => async_compression::Level::Default,
CompressionLevel::Level(n) => async_compression::Level::Precise(n as i32),
};
Box::new(GzipEncoder::with_quality(writer, level)) Box::new(GzipEncoder::with_quality(writer, level))
} }
CompressionFormat::Bzip2 => { CompressionFormat::Bzip2 => {
let level = match level { let level = Self::convert_level(level);
CompressionLevel::Fastest => async_compression::Level::Fastest,
CompressionLevel::Best => async_compression::Level::Best,
CompressionLevel::Default => async_compression::Level::Default,
CompressionLevel::Level(n) => async_compression::Level::Precise(n as i32),
};
Box::new(BzEncoder::with_quality(writer, level)) Box::new(BzEncoder::with_quality(writer, level))
} }
CompressionFormat::Zlib => { CompressionFormat::Zlib => {
let level = match level { let level = Self::convert_level(level);
CompressionLevel::Fastest => async_compression::Level::Fastest,
CompressionLevel::Best => async_compression::Level::Best,
CompressionLevel::Default => async_compression::Level::Default,
CompressionLevel::Level(n) => async_compression::Level::Precise(n as i32),
};
Box::new(ZlibEncoder::with_quality(writer, level)) Box::new(ZlibEncoder::with_quality(writer, level))
} }
CompressionFormat::Xz => { CompressionFormat::Xz => {
let level = match level { let level = Self::convert_level(level);
CompressionLevel::Fastest => async_compression::Level::Fastest,
CompressionLevel::Best => async_compression::Level::Best,
CompressionLevel::Default => async_compression::Level::Default,
CompressionLevel::Level(n) => async_compression::Level::Precise(n as i32),
};
Box::new(XzEncoder::with_quality(writer, level)) Box::new(XzEncoder::with_quality(writer, level))
} }
CompressionFormat::Zstd => { CompressionFormat::Zstd => {
let level = match level { let level = Self::convert_level(level);
CompressionLevel::Fastest => async_compression::Level::Fastest,
CompressionLevel::Best => async_compression::Level::Best,
CompressionLevel::Default => async_compression::Level::Default,
CompressionLevel::Level(n) => async_compression::Level::Precise(n as i32),
};
Box::new(ZstdEncoder::with_quality(writer, level)) Box::new(ZstdEncoder::with_quality(writer, level))
} }
CompressionFormat::Tar => Box::new(writer), CompressionFormat::Tar => Box::new(writer),
@@ -189,7 +170,7 @@ impl CompressionFormat {
pub async fn decompress<R, F>(input: R, format: CompressionFormat, mut callback: F) -> io::Result<()> pub async fn decompress<R, F>(input: R, format: CompressionFormat, mut callback: F) -> io::Result<()>
where where
R: AsyncRead + Send + Unpin + 'static, R: AsyncRead + Send + Unpin + 'static,
F: AsyncFnMut(tokio_tar::Entry<Archive<Box<dyn AsyncRead + Send + Unpin + 'static>>>) -> std::io::Result<()> + Send + 'static, F: AsyncFnMut(tokio_tar::Entry<Archive<Box<dyn AsyncRead + Send + Unpin + 'static>>>) -> io::Result<()> + Send + 'static,
{ {
let decoder = format.get_decoder(input)?; let decoder = format.get_decoder(input)?;
let mut ar = Archive::new(decoder); let mut ar = Archive::new(decoder);
@@ -258,7 +239,7 @@ impl Compressor {
let cursor = std::io::Cursor::new(output); let cursor = std::io::Cursor::new(output);
let mut encoder = self.format.get_encoder(cursor, self.level)?; let mut encoder = self.format.get_encoder(cursor, self.level)?;
tokio::io::copy(&mut std::io::Cursor::new(input), &mut encoder).await?; io::copy(&mut std::io::Cursor::new(input), &mut encoder).await?;
encoder.shutdown().await?; encoder.shutdown().await?;
// Get compressed data // Get compressed data
@@ -273,7 +254,7 @@ impl Compressor {
let cursor = std::io::Cursor::new(input); let cursor = std::io::Cursor::new(input);
let mut decoder = self.format.get_decoder(cursor)?; let mut decoder = self.format.get_decoder(cursor)?;
tokio::io::copy(&mut decoder, &mut output).await?; io::copy(&mut decoder, &mut output).await?;
Ok(output) Ok(output)
} }
@@ -302,7 +283,7 @@ impl Decompressor {
let mut decoder = self.format.get_decoder(input_file)?; let mut decoder = self.format.get_decoder(input_file)?;
let mut writer = BufWriter::new(output_file); let mut writer = BufWriter::new(output_file);
tokio::io::copy(&mut decoder, &mut writer).await?; io::copy(&mut decoder, &mut writer).await?;
writer.shutdown().await?; writer.shutdown().await?;
Ok(()) Ok(())
@@ -538,15 +519,12 @@ mod tests {
#[test] #[test]
fn test_compression_format_memory_efficiency() { fn test_compression_format_memory_efficiency() {
// Test memory efficiency of enum
use std::mem;
// Verify enum size is reasonable // Verify enum size is reasonable
let size = mem::size_of::<CompressionFormat>(); let size = size_of::<CompressionFormat>();
assert!(size <= 8, "CompressionFormat should be memory efficient, got {size} bytes"); assert!(size <= 8, "CompressionFormat should be memory efficient, got {size} bytes");
// Verify Option<CompressionFormat> size // Verify Option<CompressionFormat> size
let option_size = mem::size_of::<Option<CompressionFormat>>(); let option_size = size_of::<Option<CompressionFormat>>();
assert!( assert!(
option_size <= 16, option_size <= 16,
"Option<CompressionFormat> should be efficient, got {option_size} bytes" "Option<CompressionFormat> should be efficient, got {option_size} bytes"
+1
View File
@@ -34,6 +34,7 @@ path = "src/main.rs"
default = ["metrics"] default = ["metrics"]
metrics = [] metrics = []
ftps = ["rustfs-protocols/ftps"] ftps = ["rustfs-protocols/ftps"]
full = ["metrics", "ftps"]
[lints] [lints]
workspace = true workspace = true
+1 -1
View File
@@ -16,7 +16,7 @@
use backtrace::Backtrace; use backtrace::Backtrace;
use pprof::protos::Message; use pprof::protos::Message;
use rand::Rng; use rand::RngExt;
use starshard::ShardedHashMap; use starshard::ShardedHashMap;
use std::alloc::{GlobalAlloc, Layout}; use std::alloc::{GlobalAlloc, Layout};
use std::cell::Cell; use std::cell::Cell;
+1 -1
View File
@@ -78,7 +78,7 @@ use aes_gcm::{
}; };
use async_trait::async_trait; use async_trait::async_trait;
use base64::{Engine, engine::general_purpose::STANDARD as BASE64_STANDARD}; use base64::{Engine, engine::general_purpose::STANDARD as BASE64_STANDARD};
use rand::RngCore; use rand::Rng;
use rustfs_ecstore::error::StorageError; use rustfs_ecstore::error::StorageError;
use rustfs_filemeta::ObjectPartInfo; use rustfs_filemeta::ObjectPartInfo;
use rustfs_kms::{ use rustfs_kms::{