diff --git a/.github/workflows/helm-package.yml b/.github/workflows/helm-package.yml
index d1f69288..cb21874c 100644
--- a/.github/workflows/helm-package.yml
+++ b/.github/workflows/helm-package.yml
@@ -44,7 +44,6 @@ jobs:
set -x
old_version=$(grep "^appVersion:" helm/rustfs/Chart.yaml | awk '{print $2}')
sed -i "s/$old_version/$new_version/g" helm/rustfs/Chart.yaml
- sed -i "/^image:/,/^[^ ]/ s/tag:.*/tag: "$new_version"/" helm/rustfs/values.yaml
- name: Set up Helm
uses: azure/setup-helm@v4.3.0
diff --git a/Cargo.lock b/Cargo.lock
index 1dd12ff7..722b5c2b 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -270,7 +270,7 @@ dependencies = [
"base64ct",
"blake2 0.11.0-rc.3",
"cpufeatures",
- "password-hash 0.6.0-rc.7",
+ "password-hash 0.6.0-rc.8",
]
[[package]]
@@ -287,9 +287,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
[[package]]
name = "arrow"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb372a7cbcac02a35d3fb7b3fc1f969ec078e871f9bb899bf00a2e1809bec8a3"
+checksum = "2a2b10dcb159faf30d3f81f6d56c1211a5bea2ca424eabe477648a44b993320e"
dependencies = [
"arrow-arith",
"arrow-array",
@@ -308,9 +308,9 @@ dependencies = [
[[package]]
name = "arrow-arith"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f377dcd19e440174596d83deb49cd724886d91060c07fec4f67014ef9d54049"
+checksum = "288015089e7931843c80ed4032c5274f02b37bcb720c4a42096d50b390e70372"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -322,9 +322,9 @@ dependencies = [
[[package]]
name = "arrow-array"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a23eaff85a44e9fa914660fb0d0bb00b79c4a3d888b5334adb3ea4330c84f002"
+checksum = "65ca404ea6191e06bf30956394173337fa9c35f445bd447fe6c21ab944e1a23c"
dependencies = [
"ahash",
"arrow-buffer",
@@ -341,9 +341,9 @@ dependencies = [
[[package]]
name = "arrow-buffer"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2819d893750cb3380ab31ebdc8c68874dd4429f90fd09180f3c93538bd21626"
+checksum = "36356383099be0151dacc4245309895f16ba7917d79bdb71a7148659c9206c56"
dependencies = [
"bytes",
"half",
@@ -353,9 +353,9 @@ dependencies = [
[[package]]
name = "arrow-cast"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3d131abb183f80c450d4591dc784f8d7750c50c6e2bc3fcaad148afc8361271"
+checksum = "9c8e372ed52bd4ee88cc1e6c3859aa7ecea204158ac640b10e187936e7e87074"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -375,9 +375,9 @@ dependencies = [
[[package]]
name = "arrow-csv"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2275877a0e5e7e7c76954669366c2aa1a829e340ab1f612e647507860906fb6b"
+checksum = "8e4100b729fe656f2e4fb32bc5884f14acf9118d4ad532b7b33c1132e4dce896"
dependencies = [
"arrow-array",
"arrow-cast",
@@ -390,9 +390,9 @@ dependencies = [
[[package]]
name = "arrow-data"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "05738f3d42cb922b9096f7786f606fcb8669260c2640df8490533bb2fa38c9d3"
+checksum = "bf87f4ff5fc13290aa47e499a8b669a82c5977c6a1fedce22c7f542c1fd5a597"
dependencies = [
"arrow-buffer",
"arrow-schema",
@@ -403,9 +403,9 @@ dependencies = [
[[package]]
name = "arrow-ipc"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d09446e8076c4b3f235603d9ea7c5494e73d441b01cd61fb33d7254c11964b3"
+checksum = "eb3ca63edd2073fcb42ba112f8ae165df1de935627ead6e203d07c99445f2081"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -419,9 +419,9 @@ dependencies = [
[[package]]
name = "arrow-json"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "371ffd66fa77f71d7628c63f209c9ca5341081051aa32f9c8020feb0def787c0"
+checksum = "a36b2332559d3310ebe3e173f75b29989b4412df4029a26a30cc3f7da0869297"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -430,7 +430,7 @@ dependencies = [
"arrow-schema",
"chrono",
"half",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"itoa",
"lexical-core",
"memchr",
@@ -443,9 +443,9 @@ dependencies = [
[[package]]
name = "arrow-ord"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbc94fc7adec5d1ba9e8cd1b1e8d6f72423b33fe978bf1f46d970fafab787521"
+checksum = "13c4e0530272ca755d6814218dffd04425c5b7854b87fa741d5ff848bf50aa39"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -456,9 +456,9 @@ dependencies = [
[[package]]
name = "arrow-row"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "169676f317157dc079cc5def6354d16db63d8861d61046d2f3883268ced6f99f"
+checksum = "b07f52788744cc71c4628567ad834cadbaeb9f09026ff1d7a4120f69edf7abd3"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -469,9 +469,9 @@ dependencies = [
[[package]]
name = "arrow-schema"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d27609cd7dd45f006abae27995c2729ef6f4b9361cde1ddd019dc31a5aa017e0"
+checksum = "6bb63203e8e0e54b288d0d8043ca8fa1013820822a27692ef1b78a977d879f2c"
dependencies = [
"serde_core",
"serde_json",
@@ -479,9 +479,9 @@ dependencies = [
[[package]]
name = "arrow-select"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae980d021879ea119dd6e2a13912d81e64abed372d53163e804dfe84639d8010"
+checksum = "c96d8a1c180b44ecf2e66c9a2f2bbcb8b1b6f14e165ce46ac8bde211a363411b"
dependencies = [
"ahash",
"arrow-array",
@@ -493,9 +493,9 @@ dependencies = [
[[package]]
name = "arrow-string"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf35e8ef49dcf0c5f6d175edee6b8af7b45611805333129c541a8b89a0fc0534"
+checksum = "a8ad6a81add9d3ea30bf8374ee8329992c7fd246ffd8b7e2f48a3cea5aa0cc9a"
dependencies = [
"arrow-array",
"arrow-buffer",
@@ -532,7 +532,7 @@ checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
"synstructure 0.13.2",
]
@@ -544,7 +544,7 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -612,7 +612,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -623,7 +623,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -649,7 +649,7 @@ checksum = "99e1aca718ea7b89985790c94aad72d77533063fe00bc497bb79a7c2dae6a661"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -1280,15 +1280,16 @@ dependencies = [
[[package]]
name = "blake3"
-version = "1.8.2"
+version = "1.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3888aaa89e4b2a40fca9848e400f6a658a5a3978de7be858e209cafa8be9a4a0"
+checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d"
dependencies = [
"arrayref",
"arrayvec",
"cc",
"cfg-if",
- "constant_time_eq",
+ "constant_time_eq 0.4.2",
+ "cpufeatures",
"memmap2",
"rayon-core",
]
@@ -1333,9 +1334,9 @@ dependencies = [
[[package]]
name = "bon"
-version = "3.8.1"
+version = "3.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ebeb9aaf9329dff6ceb65c689ca3db33dbf15f324909c60e4e5eef5701ce31b1"
+checksum = "234655ec178edd82b891e262ea7cf71f6584bcd09eff94db786be23f1821825c"
dependencies = [
"bon-macros",
"rustversion",
@@ -1343,17 +1344,17 @@ dependencies = [
[[package]]
name = "bon-macros"
-version = "3.8.1"
+version = "3.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "77e9d642a7e3a318e37c2c9427b5a6a48aa1ad55dcd986f3034ab2239045a645"
+checksum = "89ec27229c38ed0eb3c0feee3d2c1d6a4379ae44f418a29a658890e062d8f365"
dependencies = [
- "darling 0.21.3",
+ "darling 0.23.0",
"ident_case",
"prettyplease",
"proc-macro2",
"quote",
"rustversion",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -1528,9 +1529,9 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.2.51"
+version = "1.2.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a0aeaff4ff1a90589618835a598e545176939b97874f7abc7851caa0618f203"
+checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3"
dependencies = [
"find-msvc-tools",
"jobserver",
@@ -1690,7 +1691,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -1747,9 +1748,9 @@ checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
[[package]]
name = "const-oid"
-version = "0.10.1"
+version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dabb6555f92fb9ee4140454eb5dcd14c7960e1225c6d1a6cc361f032947713e"
+checksum = "a6ef517f0926dd24a1582492c791b6a4818a4d94e789a334894aa15b0d12f55c"
[[package]]
name = "const-random"
@@ -1766,7 +1767,7 @@ version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
dependencies = [
- "getrandom 0.2.16",
+ "getrandom 0.2.17",
"once_cell",
"tiny-keccak",
]
@@ -1788,7 +1789,7 @@ checksum = "1d3e0f24ee268386bd3ab4e04fc60df9a818ad801b5ffe592f388a6acc5053fb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -1817,6 +1818,12 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
+[[package]]
+name = "constant_time_eq"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b"
+
[[package]]
name = "convert_case"
version = "0.10.0"
@@ -2037,9 +2044,9 @@ dependencies = [
[[package]]
name = "crypto-bigint"
-version = "0.7.0-rc.14"
+version = "0.7.0-rc.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9c6daa2049db6a5fad90a981b8c63f023dbaf75a0fae73db4dcf234556fc957"
+checksum = "1a9e36ac79ac44866b74e08a0b4925f97b984e3fff17680d2c6fbce8317ab0f6"
dependencies = [
"ctutils",
"num-traits",
@@ -2075,7 +2082,7 @@ version = "0.7.0-pre.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da0b07a7a616370e8b6efca0c6a25e5f4c6d02fde11f3d570e4af64d8ed7e2e9"
dependencies = [
- "crypto-bigint 0.7.0-rc.14",
+ "crypto-bigint 0.7.0-rc.15",
"libm",
"rand_core 0.10.0-rc-3",
]
@@ -2167,7 +2174,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -2235,7 +2242,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim 0.11.1",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -2249,7 +2256,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim 0.11.1",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -2262,7 +2269,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim 0.11.1",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -2284,7 +2291,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
dependencies = [
"darling_core 0.20.11",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -2295,7 +2302,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81"
dependencies = [
"darling_core 0.21.3",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -2306,7 +2313,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d"
dependencies = [
"darling_core 0.23.0",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -2325,9 +2332,9 @@ dependencies = [
[[package]]
name = "data-encoding"
-version = "2.9.0"
+version = "2.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
+checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea"
[[package]]
name = "datafusion"
@@ -2446,7 +2453,7 @@ dependencies = [
"chrono",
"half",
"hashbrown 0.14.5",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"libc",
"log",
"object_store",
@@ -2644,7 +2651,7 @@ dependencies = [
"datafusion-functions-aggregate-common",
"datafusion-functions-window-common",
"datafusion-physical-expr-common",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"itertools 0.14.0",
"paste",
"recursive",
@@ -2660,7 +2667,7 @@ checksum = "5ce2fb1b8c15c9ac45b0863c30b268c69dc9ee7a1ee13ecf5d067738338173dc"
dependencies = [
"arrow",
"datafusion-common",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"itertools 0.14.0",
"paste",
]
@@ -2804,7 +2811,7 @@ checksum = "1063ad4c9e094b3f798acee16d9a47bd7372d9699be2de21b05c3bd3f34ab848"
dependencies = [
"datafusion-doc",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -2819,7 +2826,7 @@ dependencies = [
"datafusion-expr",
"datafusion-expr-common",
"datafusion-physical-expr",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"itertools 0.14.0",
"log",
"recursive",
@@ -2842,11 +2849,11 @@ dependencies = [
"datafusion-physical-expr-common",
"half",
"hashbrown 0.14.5",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"itertools 0.14.0",
"parking_lot",
"paste",
- "petgraph 0.8.3",
+ "petgraph",
]
[[package]]
@@ -2920,7 +2927,7 @@ dependencies = [
"futures",
"half",
"hashbrown 0.14.5",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"itertools 0.14.0",
"log",
"parking_lot",
@@ -2970,7 +2977,7 @@ dependencies = [
"chrono",
"datafusion-common",
"datafusion-expr",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"log",
"recursive",
"regex",
@@ -3000,7 +3007,7 @@ checksum = "780eb241654bf097afb00fc5f054a09b687dad862e485fdcf8399bb056565370"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -3030,7 +3037,7 @@ version = "0.8.0-rc.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "02c1d73e9668ea6b6a28172aa55f3ebec38507131ce179051c8033b5c6037653"
dependencies = [
- "const-oid 0.10.1",
+ "const-oid 0.10.2",
"pem-rfc7468 1.0.0",
"zeroize",
]
@@ -3067,7 +3074,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -3109,7 +3116,7 @@ dependencies = [
"darling 0.20.11",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -3129,7 +3136,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
dependencies = [
"derive_builder_core 0.20.2",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -3151,7 +3158,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustc_version",
- "syn 2.0.113",
+ "syn 2.0.114",
"unicode-xid",
]
@@ -3189,7 +3196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebf9423bafb058e4142194330c52273c343f8a5beb7176d052f0e73b17dd35b9"
dependencies = [
"block-buffer 0.11.0",
- "const-oid 0.10.1",
+ "const-oid 0.10.2",
"crypto-common 0.2.0-rc.9",
"subtle",
]
@@ -3223,7 +3230,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -3428,7 +3435,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -3449,7 +3456,7 @@ dependencies = [
"darling 0.21.3",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -3488,7 +3495,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -3610,9 +3617,9 @@ dependencies = [
[[package]]
name = "find-msvc-tools"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "645cbb3a84e60b7531617d5ae4e57f7e27308f6445f5abf653209ea76dec8dff"
+checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41"
[[package]]
name = "findshlibs"
@@ -3820,7 +3827,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -3883,9 +3890,9 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.2.16"
+version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
+checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
dependencies = [
"cfg-if",
"js-sys",
@@ -3930,7 +3937,7 @@ dependencies = [
"proc-macro-error2",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -4026,7 +4033,7 @@ dependencies = [
"opentelemetry-semantic-conventions",
"percent-encoding",
"pin-project",
- "prost 0.14.1",
+ "prost 0.14.3",
"prost-types",
"reqwest",
"rustc_version",
@@ -4136,7 +4143,7 @@ dependencies = [
"mime",
"percent-encoding",
"pin-project",
- "prost 0.14.1",
+ "prost 0.14.3",
"prost-types",
"reqwest",
"serde",
@@ -4204,9 +4211,9 @@ dependencies = [
[[package]]
name = "h2"
-version = "0.4.12"
+version = "0.4.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
+checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54"
dependencies = [
"atomic-waker",
"bytes",
@@ -4214,7 +4221,7 @@ dependencies = [
"futures-core",
"futures-sink",
"http 1.4.0",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"slab",
"tokio",
"tokio-util",
@@ -4304,7 +4311,7 @@ dependencies = [
"proc-macro-error2",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -4753,9 +4760,9 @@ dependencies = [
[[package]]
name = "indexmap"
-version = "2.12.1"
+version = "2.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ad4bb2b565bca0645f4d68c5c9af97fba094e9791da685bf83cb5f3ce74acf2"
+checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
dependencies = [
"equivalent",
"hashbrown 0.16.1",
@@ -4770,7 +4777,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "232929e1d75fe899576a3d5c7416ad0d88dbfbb3c3d6aa00873a7408a50ddb88"
dependencies = [
"ahash",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"is-terminal",
"itoa",
"log",
@@ -4793,7 +4800,7 @@ dependencies = [
"crossbeam-utils",
"dashmap",
"env_logger",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"itoa",
"log",
"num-format",
@@ -4866,7 +4873,7 @@ dependencies = [
"p384",
"p521",
"rand_core 0.6.4",
- "rsa 0.10.0-rc.11",
+ "rsa",
"sec1 0.7.3",
"sha1 0.10.6",
"sha1 0.11.0-rc.3",
@@ -4994,19 +5001,13 @@ version = "10.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c76e1c7d7df3e34443b3621b459b066a7b79644f059fc8b2db7070c825fd417e"
dependencies = [
+ "aws-lc-rs",
"base64",
- "ed25519-dalek 2.2.0",
- "getrandom 0.2.16",
- "hmac 0.12.1",
+ "getrandom 0.2.17",
"js-sys",
- "p256 0.13.2",
- "p384",
"pem",
- "rand 0.8.5",
- "rsa 0.9.9",
"serde",
"serde_json",
- "sha2 0.10.9",
"signature 2.2.0",
"simple_asn1",
]
@@ -5051,7 +5052,7 @@ dependencies = [
"proc-macro2",
"quote",
"regex",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -5128,9 +5129,9 @@ checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7"
[[package]]
name = "libc"
-version = "0.2.179"
+version = "0.2.180"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f"
+checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
[[package]]
name = "libcrux-intrinsics"
@@ -5402,9 +5403,9 @@ dependencies = [
[[package]]
name = "lzma-rust2"
-version = "0.15.4"
+version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48172246aa7c3ea28e423295dd1ca2589a24617cc4e588bb8cfe177cb2c54d95"
+checksum = "7fa48f5024824ecd3e8282cc948bd46fbd095aed5a98939de0594601a59b4e2b"
dependencies = [
"crc",
"sha2 0.10.9",
@@ -5626,7 +5627,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -5787,7 +5788,6 @@ dependencies = [
"rand 0.8.5",
"serde",
"smallvec",
- "zeroize",
]
[[package]]
@@ -6057,7 +6057,7 @@ dependencies = [
"opentelemetry-http",
"opentelemetry-proto",
"opentelemetry_sdk",
- "prost 0.14.1",
+ "prost 0.14.3",
"reqwest",
"thiserror 2.0.17",
"tracing",
@@ -6071,7 +6071,7 @@ checksum = "a7175df06de5eaee9909d4805a3d07e28bb752c34cab57fa9cff549da596b30f"
dependencies = [
"opentelemetry",
"opentelemetry_sdk",
- "prost 0.14.1",
+ "prost 0.14.3",
"tonic",
"tonic-prost",
]
@@ -6240,9 +6240,9 @@ dependencies = [
[[package]]
name = "parquet"
-version = "57.1.0"
+version = "57.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be3e4f6d320dd92bfa7d612e265d7d08bba0a240bab86af3425e1d255a511d89"
+checksum = "5f6a2926a30477c0b95fea6c28c3072712b139337a242c2cc64817bdc20a8854"
dependencies = [
"ahash",
"arrow-array",
@@ -6288,9 +6288,9 @@ dependencies = [
[[package]]
name = "password-hash"
-version = "0.6.0-rc.7"
+version = "0.6.0-rc.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c351143b5ab27b1f1d24712f21ea4d0458fe74f60dd5839297dabcc2ecd24d58"
+checksum = "f77af9403a6489b7b51f552693bd48d8e81a710c92d3d77648b203558578762d"
dependencies = [
"getrandom 0.4.0-rc.0",
"phc",
@@ -6350,9 +6350,9 @@ dependencies = [
[[package]]
name = "pbkdf2"
-version = "0.13.0-rc.5"
+version = "0.13.0-rc.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c015873c38594dfb7724f90b2ed912a606697393bda2d39fd83c2394301f808a"
+checksum = "9fb9b101849c3ddab38905781f5aa7ae14ea06e87befaf0e7b003e5d3186250d"
dependencies = [
"digest 0.11.0-rc.5",
"hmac 0.13.0-rc.3",
@@ -6392,16 +6392,6 @@ version = "2.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220"
-[[package]]
-name = "petgraph"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772"
-dependencies = [
- "fixedbitset",
- "indexmap 2.12.1",
-]
-
[[package]]
name = "petgraph"
version = "0.8.3"
@@ -6410,7 +6400,7 @@ checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
dependencies = [
"fixedbitset",
"hashbrown 0.15.5",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"serde",
]
@@ -6464,7 +6454,7 @@ dependencies = [
"phf_shared 0.11.3",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -6502,7 +6492,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -6517,17 +6507,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
-[[package]]
-name = "pkcs1"
-version = "0.7.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
-dependencies = [
- "der 0.7.10",
- "pkcs8 0.10.2",
- "spki 0.7.3",
-]
-
[[package]]
name = "pkcs1"
version = "0.8.0-rc.4"
@@ -6762,7 +6741,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
dependencies = [
"proc-macro2",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -6802,14 +6781,14 @@ dependencies = [
"proc-macro-error-attr2",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
name = "proc-macro2"
-version = "1.0.104"
+version = "1.0.105"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0"
+checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
dependencies = [
"unicode-ident",
]
@@ -6840,33 +6819,32 @@ dependencies = [
[[package]]
name = "prost"
-version = "0.14.1"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7231bd9b3d3d33c86b58adbac74b5ec0ad9f496b19d22801d773636feaa95f3d"
+checksum = "d2ea70524a2f82d518bce41317d0fae74151505651af45faf1ffbd6fd33f0568"
dependencies = [
"bytes",
- "prost-derive 0.14.1",
+ "prost-derive 0.14.3",
]
[[package]]
name = "prost-build"
-version = "0.14.1"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac6c3320f9abac597dcbc668774ef006702672474aad53c6d596b62e487b40b1"
+checksum = "343d3bd7056eda839b03204e68deff7d1b13aba7af2b2fd16890697274262ee7"
dependencies = [
"heck",
"itertools 0.14.0",
"log",
"multimap",
- "once_cell",
- "petgraph 0.7.1",
+ "petgraph",
"prettyplease",
- "prost 0.14.1",
+ "prost 0.14.3",
"prost-types",
"pulldown-cmark",
"pulldown-cmark-to-cmark",
"regex",
- "syn 2.0.113",
+ "syn 2.0.114",
"tempfile",
]
@@ -6880,29 +6858,29 @@ dependencies = [
"itertools 0.14.0",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
name = "prost-derive"
-version = "0.14.1"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9120690fafc389a67ba3803df527d0ec9cbbc9cc45e4cc20b332996dfb672425"
+checksum = "27c6023962132f4b30eb4c172c91ce92d933da334c59c23cddee82358ddafb0b"
dependencies = [
"anyhow",
"itertools 0.14.0",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
name = "prost-types"
-version = "0.14.1"
+version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9b4db3d6da204ed77bb26ba83b6122a73aeb2e87e25fbf7ad2e84c4ccbf8f72"
+checksum = "8991c4cbdb8bc5b11f0b074ffe286c30e523de90fee5ba8132f1399f23cb3dd7"
dependencies = [
- "prost 0.14.1",
+ "prost 0.14.3",
]
[[package]]
@@ -6938,7 +6916,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4aeaa1f2460f1d348eeaeed86aea999ce98c1bded6f089ff8514c9d9dbdc973"
dependencies = [
"anyhow",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"log",
"protobuf",
"protobuf-support",
@@ -6989,9 +6967,9 @@ dependencies = [
[[package]]
name = "pulldown-cmark-to-cmark"
-version = "21.1.0"
+version = "22.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8246feae3db61428fd0bb94285c690b460e4517d83152377543ca802357785f1"
+checksum = "50793def1b900256624a709439404384204a5dc3a6ec580281bfaac35e882e90"
dependencies = [
"pulldown-cmark",
]
@@ -7020,6 +6998,15 @@ name = "quick-xml"
version = "0.38.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2e3bf4aa9d243beeb01a7b3bc30b77cfe2c44e24ec02d751a7104a53c2c49a1"
dependencies = [
"memchr",
"serde",
@@ -7083,9 +7070,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.42"
+version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f"
+checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
dependencies = [
"proc-macro2",
]
@@ -7155,7 +7142,7 @@ version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
- "getrandom 0.2.16",
+ "getrandom 0.2.17",
]
[[package]]
@@ -7230,7 +7217,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76009fbe0614077fc1a2ce255e3a1881a2e3a3527097d5dc6d8212c585e7e38b"
dependencies = [
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -7257,7 +7244,7 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
dependencies = [
- "getrandom 0.2.16",
+ "getrandom 0.2.17",
"libredox",
"thiserror 2.0.17",
]
@@ -7291,7 +7278,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -7420,7 +7407,7 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
dependencies = [
"cc",
"cfg-if",
- "getrandom 0.2.16",
+ "getrandom 0.2.17",
"libc",
"untrusted 0.9.0",
"windows-sys 0.52.0",
@@ -7458,7 +7445,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_json",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -7480,37 +7467,17 @@ dependencies = [
"serde",
]
-[[package]]
-name = "rsa"
-version = "0.9.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40a0376c50d0358279d9d643e4bf7b7be212f1f4ff1da9070a7b54d22ef75c88"
-dependencies = [
- "const-oid 0.9.6",
- "digest 0.10.7",
- "num-bigint-dig",
- "num-integer",
- "num-traits",
- "pkcs1 0.7.5",
- "pkcs8 0.10.2",
- "rand_core 0.6.4",
- "signature 2.2.0",
- "spki 0.7.3",
- "subtle",
- "zeroize",
-]
-
[[package]]
name = "rsa"
version = "0.10.0-rc.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d27d813937fdf8e9ad15e3e422a55da4021d29639000139ca19d99f3949060da"
dependencies = [
- "const-oid 0.10.1",
- "crypto-bigint 0.7.0-rc.14",
+ "const-oid 0.10.2",
+ "crypto-bigint 0.7.0-rc.15",
"crypto-primes",
"digest 0.11.0-rc.5",
- "pkcs1 0.8.0-rc.4",
+ "pkcs1",
"pkcs8 0.11.0-rc.8",
"rand_core 0.10.0-rc-3",
"sha2 0.11.0-rc.3",
@@ -7544,7 +7511,7 @@ dependencies = [
"regex",
"relative-path",
"rustc_version",
- "syn 2.0.113",
+ "syn 2.0.114",
"unicode-ident",
]
@@ -7594,7 +7561,7 @@ dependencies = [
"enum_dispatch",
"futures",
"generic-array 1.3.5",
- "getrandom 0.2.16",
+ "getrandom 0.2.17",
"hex-literal",
"hmac 0.12.1",
"home",
@@ -7609,12 +7576,12 @@ dependencies = [
"p521",
"pageant",
"pbkdf2 0.12.2",
- "pkcs1 0.8.0-rc.4",
+ "pkcs1",
"pkcs5",
"pkcs8 0.10.2",
"rand 0.8.5",
"rand_core 0.6.4",
- "rsa 0.10.0-rc.11",
+ "rsa",
"russh-cryptovec",
"russh-util",
"sec1 0.7.3",
@@ -7693,7 +7660,7 @@ dependencies = [
"quote",
"rust-embed-utils",
"shellexpand",
- "syn 2.0.113",
+ "syn 2.0.114",
"walkdir",
]
@@ -7862,7 +7829,7 @@ version = "0.0.5"
dependencies = [
"base64-simd",
"rand 0.10.0-rc.6",
- "rsa 0.10.0-rc.11",
+ "rsa",
"serde",
"serde_json",
]
@@ -7948,7 +7915,7 @@ dependencies = [
"cfg-if",
"chacha20poly1305",
"jsonwebtoken",
- "pbkdf2 0.13.0-rc.5",
+ "pbkdf2 0.13.0-rc.6",
"rand 0.10.0-rc.6",
"serde_json",
"sha2 0.11.0-rc.3",
@@ -7975,6 +7942,7 @@ dependencies = [
"bytesize",
"chrono",
"criterion",
+ "dunce",
"enumset",
"faster-hex",
"flatbuffers",
@@ -7995,7 +7963,7 @@ dependencies = [
"parking_lot",
"path-absolutize",
"pin-project-lite",
- "quick-xml 0.38.4",
+ "quick-xml 0.39.0",
"rand 0.10.0-rc.6",
"reed-solomon-simd",
"regex",
@@ -8173,7 +8141,7 @@ dependencies = [
"form_urlencoded",
"futures",
"hashbrown 0.16.1",
- "quick-xml 0.38.4",
+ "quick-xml 0.39.0",
"rayon",
"rumqttc",
"rustc-hash",
@@ -8253,7 +8221,7 @@ name = "rustfs-protos"
version = "0.0.5"
dependencies = [
"flatbuffers",
- "prost 0.14.1",
+ "prost 0.14.3",
"rustfs-common",
"tonic",
"tonic-prost",
@@ -8444,7 +8412,7 @@ dependencies = [
"tracing",
"transform-stream",
"url",
- "winapi",
+ "windows 0.62.2",
"zstd",
]
@@ -8537,9 +8505,9 @@ dependencies = [
[[package]]
name = "rustls"
-version = "0.23.35"
+version = "0.23.36"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "533f54bc6a7d4f647e46ad909549eda97bf5afc1585190ef692b4286b198bd8f"
+checksum = "c665f33d38cea657d9614f766881e4d510e0eda4239891eea56b4cadcf01801b"
dependencies = [
"aws-lc-rs",
"log",
@@ -8737,7 +8705,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -8873,7 +8841,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -8884,7 +8852,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -8898,9 +8866,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.148"
+version = "1.0.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da"
+checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
dependencies = [
"itoa",
"memchr",
@@ -8951,7 +8919,7 @@ dependencies = [
"chrono",
"hex",
"indexmap 1.9.3",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"schemars 0.9.0",
"schemars 1.2.0",
"serde_core",
@@ -8969,7 +8937,7 @@ dependencies = [
"darling 0.21.3",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -9005,7 +8973,7 @@ checksum = "6f50427f258fb77356e4cd4aa0e87e2bd2c66dbcee41dc405282cae2bfc26c83"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -9260,7 +9228,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -9346,7 +9314,7 @@ checksum = "da5fc6819faabb412da764b99d3b713bb55083c11e7e0c00144d386cd6a1939c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -9401,7 +9369,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ad6a09263583e83e934fcd436b7e3bb9d69602e2feef3787adb615c1fe3a343"
dependencies = [
"base64ct",
- "crypto-bigint 0.7.0-rc.14",
+ "crypto-bigint 0.7.0-rc.15",
"digest 0.11.0-rc.5",
"pem-rfc7468 1.0.0",
"subtle",
@@ -9416,7 +9384,7 @@ checksum = "7faefb89d4a5304e31238913d1f7f164e22494276ed58cd84d5058ba7b04911f"
dependencies = [
"ed25519-dalek 3.0.0-pre.2",
"rand_core 0.10.0-rc-3",
- "rsa 0.10.0-rc.11",
+ "rsa",
"sec1 0.8.0-rc.11",
"sha2 0.11.0-rc.3",
"signature 3.0.0-rc.6",
@@ -9510,7 +9478,7 @@ dependencies = [
"heck",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -9521,9 +9489,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "suppaftp"
-version = "7.0.7"
+version = "7.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba8928c89e226be233f0eb1594e9bd023f72a948dc06581c0d908387f57de1de"
+checksum = "69a15b325bbe0a1f85de3dbf988a3a14e9cd321537dffcbf6641381dd6d7586f"
dependencies = [
"async-trait",
"chrono",
@@ -9652,9 +9620,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.113"
+version = "2.0.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "678faa00651c9eb72dd2020cbdf275d92eccb2400d568e419efdd64838145cb4"
+checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
dependencies = [
"proc-macro2",
"quote",
@@ -9699,7 +9667,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -9784,7 +9752,7 @@ dependencies = [
"cfg-if",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -9795,7 +9763,7 @@ checksum = "5c89e72a01ed4c579669add59014b9a524d609c0c88c6a585ce37485879f6ffb"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
"test-case-core",
]
@@ -9825,7 +9793,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -9836,7 +9804,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -9985,7 +9953,7 @@ checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -10013,7 +9981,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -10098,7 +10066,7 @@ version = "0.22.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41fe8c660ae4257887cf66394862d21dbca4a6ddd26f04a3560410406a2f819a"
dependencies = [
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"serde",
"serde_spanned",
"toml_datetime 0.6.11",
@@ -10112,7 +10080,7 @@ version = "0.23.10+spec-1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269"
dependencies = [
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"toml_datetime 0.7.5+spec-1.1.0",
"toml_parser",
"winnow",
@@ -10174,7 +10142,7 @@ dependencies = [
"prettyplease",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -10184,7 +10152,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "66bd50ad6ce1252d87ef024b3d64fe4c3cf54a86fb9ef4c631fdd0ded7aeaa67"
dependencies = [
"bytes",
- "prost 0.14.1",
+ "prost 0.14.3",
"tonic",
]
@@ -10199,7 +10167,7 @@ dependencies = [
"prost-build",
"prost-types",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
"tempfile",
"tonic-build",
]
@@ -10212,7 +10180,7 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
dependencies = [
"futures-core",
"futures-util",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"pin-project-lite",
"slab",
"sync_wrapper",
@@ -10292,7 +10260,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -10438,9 +10406,9 @@ dependencies = [
[[package]]
name = "unicase"
-version = "2.8.1"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539"
+checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
[[package]]
name = "unicode-ident"
@@ -10500,9 +10468,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
-version = "2.5.7"
+version = "2.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b"
+checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed"
dependencies = [
"form_urlencoded",
"idna",
@@ -10550,7 +10518,7 @@ checksum = "39d11901c36b3650df7acb0f9ebe624f35b5ac4e1922ecd3c57f444648429594"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -10706,7 +10674,7 @@ dependencies = [
"bumpalo",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
"wasm-bindgen-shared",
]
@@ -10912,7 +10880,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -10923,7 +10891,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -11212,7 +11180,7 @@ dependencies = [
"darling 0.20.11",
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -11321,28 +11289,28 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
"synstructure 0.13.2",
]
[[package]]
name = "zerocopy"
-version = "0.8.31"
+version = "0.8.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3"
+checksum = "668f5168d10b9ee831de31933dc111a459c97ec93225beb307aed970d1372dfd"
dependencies = [
"zerocopy-derive",
]
[[package]]
name = "zerocopy-derive"
-version = "0.8.31"
+version = "0.8.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a"
+checksum = "2c7962b26b0a8685668b671ee4b54d007a67d4eaf05fda79ac0ecf41e32270f1"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -11362,7 +11330,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
"synstructure 0.13.2",
]
@@ -11383,7 +11351,7 @@ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -11416,7 +11384,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.113",
+ "syn 2.0.114",
]
[[package]]
@@ -11428,14 +11396,14 @@ dependencies = [
"aes 0.8.4",
"arbitrary",
"bzip2 0.6.1",
- "constant_time_eq",
+ "constant_time_eq 0.3.1",
"crc32fast",
"deflate64",
"flate2",
"generic-array 0.14.7",
"getrandom 0.3.4",
"hmac 0.12.1",
- "indexmap 2.12.1",
+ "indexmap 2.13.0",
"lzma-rust2",
"memchr",
"pbkdf2 0.12.2",
@@ -11455,9 +11423,9 @@ checksum = "40990edd51aae2c2b6907af74ffb635029d5788228222c4bb811e9351c0caad3"
[[package]]
name = "zmij"
-version = "1.0.10"
+version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30e0d8dffbae3d840f64bda38e28391faef673a7b5a6017840f2a106c8145868"
+checksum = "ac93432f5b761b22864c774aac244fa5c0fd877678a4c37ebf6cf42208f9c9ec"
[[package]]
name = "zopfli"
diff --git a/Cargo.toml b/Cargo.toml
index 80f877e3..1bea10c3 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -51,7 +51,7 @@ resolver = "2"
edition = "2024"
license = "Apache-2.0"
repository = "https://github.com/rustfs/rustfs"
-rust-version = "1.88"
+rust-version = "1.90"
version = "0.0.5"
homepage = "https://rustfs.com"
description = "RustFS is a high-performance distributed object storage software built using Rust, one of the most popular languages worldwide. "
@@ -132,27 +132,27 @@ bytesize = "2.3.1"
byteorder = "1.5.0"
flatbuffers = "25.12.19"
form_urlencoded = "1.2.2"
-prost = "0.14.1"
-quick-xml = "0.38.4"
+prost = "0.14.3"
+quick-xml = "0.39.0"
rmcp = { version = "0.12.0" }
rmp = { version = "0.8.15" }
rmp-serde = { version = "1.3.1" }
serde = { version = "1.0.228", features = ["derive"] }
-serde_json = { version = "1.0.148", features = ["raw_value"] }
+serde_json = { version = "1.0.149", features = ["raw_value"] }
serde_urlencoded = "0.7.1"
schemars = "1.2.0"
# Cryptography and Security
aes-gcm = { version = "0.11.0-rc.2", features = ["rand_core"] }
argon2 = { version = "0.6.0-rc.5" }
-blake3 = { version = "1.8.2", features = ["rayon", "mmap"] }
+blake3 = { version = "1.8.3", features = ["rayon", "mmap"] }
chacha20poly1305 = { version = "0.11.0-rc.2" }
crc-fast = "1.6.0"
hmac = { version = "0.13.0-rc.3" }
-jsonwebtoken = { version = "10.2.0", features = ["rust_crypto"] }
-pbkdf2 = "0.13.0-rc.5"
+jsonwebtoken = { version = "10.2.0", features = ["aws_lc_rs"] }
+pbkdf2 = "0.13.0-rc.6"
rsa = { version = "0.10.0-rc.11" }
-rustls = { version = "0.23.35" }
+rustls = { version = "0.23.36", default-features = false, features = ["aws-lc-rs", "logging", "tls12", "prefer-post-quantum", "std"] }
rustls-pemfile = "2.2.0"
rustls-pki-types = "1.13.2"
sha1 = "0.11.0-rc.3"
@@ -186,6 +186,7 @@ criterion = { version = "0.8", features = ["html_reports"] }
crossbeam-queue = "0.3.12"
datafusion = "51.0.0"
derive_builder = "0.20.2"
+dunce = "1.0.5"
enumset = "1.1.10"
faster-hex = "0.10.0"
flate2 = "1.1.5"
@@ -199,7 +200,7 @@ hex-simd = "0.8.0"
highway = { version = "1.3.0" }
ipnetwork = { version = "0.21.1", features = ["serde"] }
lazy_static = "1.5.0"
-libc = "0.2.179"
+libc = "0.2.180"
libsystemd = "0.7.2"
local-ip-address = "0.6.8"
lz4 = "1.28.1"
@@ -247,13 +248,13 @@ tracing-error = "0.2.1"
tracing-opentelemetry = "0.32.0"
tracing-subscriber = { version = "0.3.22", features = ["env-filter", "time"] }
transform-stream = "0.3.1"
-url = "2.5.7"
+url = "2.5.8"
urlencoding = "2.1.3"
uuid = { version = "1.19.0", features = ["v4", "fast-rng", "macro-diagnostics"] }
vaultrs = { version = "0.7.4" }
walkdir = "2.5.0"
wildmatch = { version = "2.6.1", features = ["serde"] }
-winapi = { version = "0.3.9" }
+windows = { version = "0.62.2" }
xxhash-rust = { version = "0.8.15", features = ["xxh64", "xxh3"] }
zip = "7.0.0"
zstd = "0.13.3"
@@ -272,7 +273,7 @@ libunftp = "0.21.0"
russh = { version = "0.56.0", features = ["aws-lc-rs", "rsa"], default-features = false }
russh-sftp = "2.1.1"
ssh-key = { version = "0.7.0-rc.4", features = ["std", "rsa", "ed25519"] }
-suppaftp = { version = "7.0.7", features = ["tokio", "tokio-rustls", "rustls"] }
+suppaftp = { version = "7.1.0", features = ["tokio", "tokio-rustls", "rustls"] }
rcgen = "0.14.6"
# Performance Analysis and Memory Profiling
diff --git a/Dockerfile b/Dockerfile
index 1f303ae6..8f22a10c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM alpine:3.22 AS build
+FROM alpine:3.23 AS build
ARG TARGETARCH
ARG RELEASE=latest
@@ -40,7 +40,7 @@ RUN set -eux; \
rm -rf rustfs.zip /build/.tmp || true
-FROM alpine:3.22
+FROM alpine:3.23
ARG RELEASE=latest
ARG BUILD_DATE
diff --git a/Dockerfile.source b/Dockerfile.source
index 6cea2782..280d606d 100644
--- a/Dockerfile.source
+++ b/Dockerfile.source
@@ -16,7 +16,7 @@ ARG BUILDPLATFORM
# -----------------------------
# Build stage
# -----------------------------
-FROM rust:1.88-bookworm AS builder
+FROM rust:1.91-trixie AS builder
# Re-declare args after FROM
ARG TARGETPLATFORM
diff --git a/README.md b/README.md
index d106e8f6..dbc5f388 100644
--- a/README.md
+++ b/README.md
@@ -83,6 +83,13 @@ Unlike other storage systems, RustFS is released under the permissible Apache 2.
| **Edge & IoT** | **Strong Edge Support**
Ideal for secure, innovative edge devices. | **Weak Edge Support**
Often too heavy for edge gateways. |
| **Risk Profile** | **Enterprise Risk Mitigation**
Clear IP rights and safe for commercial use. | **Legal Risks**
Intellectual property ambiguity and usage restrictions. |
+
+## Staying ahead
+
+Star RustFS on GitHub and be instantly notified of new releases.
+
+
+
## Quickstart
To get started with RustFS, follow these steps:
diff --git a/README_ZH.md b/README_ZH.md
index 166ba1cf..175e7f2b 100644
--- a/README_ZH.md
+++ b/README_ZH.md
@@ -86,6 +86,15 @@ RustFS 是一个基于 Rust 构建的高性能分布式对象存储系统。Rust
| **成本** | **稳定且免费**
免费社区支持,稳定的商业定价。 | **高昂成本**
1PiB 的成本可能高达 250,000 美元。 |
| **风险控制** | **企业级风险规避**
清晰的知识产权,商业使用安全无忧。 | **法律风险**
知识产权归属模糊及使用限制风险。 |
+
+## 保持领先
+
+在 GitHub 上为 RustFS 点赞,即可第一时间收到新版本发布通知。
+
+
+
+
+
## 快速开始
请按照以下步骤快速上手 RustFS:
diff --git a/crates/audit/src/registry.rs b/crates/audit/src/registry.rs
index 76edcabf..e3620b66 100644
--- a/crates/audit/src/registry.rs
+++ b/crates/audit/src/registry.rs
@@ -21,6 +21,7 @@ use futures::stream::FuturesUnordered;
use hashbrown::{HashMap, HashSet};
use rustfs_config::{DEFAULT_DELIMITER, ENABLE_KEY, ENV_PREFIX, EnableState, audit::AUDIT_ROUTE_PREFIX};
use rustfs_ecstore::config::{Config, KVS};
+use rustfs_targets::arn::TargetID;
use rustfs_targets::{Target, TargetError, target::ChannelTargetType};
use std::str::FromStr;
use std::sync::Arc;
@@ -392,4 +393,80 @@ impl AuditRegistry {
Ok(())
}
+
+ /// Creates a unique key for a target based on its type and ID
+ ///
+ /// # Arguments
+ /// * `target_type` - The type of the target (e.g., "webhook", "mqtt").
+ /// * `target_id` - The identifier for the target instance.
+ ///
+ /// # Returns
+ /// * `String` - The unique key for the target.
+ pub fn create_key(&self, target_type: &str, target_id: &str) -> String {
+ let key = TargetID::new(target_id.to_string(), target_type.to_string());
+ info!(target_type = %target_type, "Create key for {}", key);
+ key.to_string()
+ }
+
+ /// Enables a target (placeholder, assumes target exists)
+ ///
+ /// # Arguments
+ /// * `target_type` - The type of the target (e.g., "webhook", "mqtt").
+ /// * `target_id` - The identifier for the target instance.
+ ///
+ /// # Returns
+ /// * `AuditResult<()>` - Result indicating success or failure.
+ pub fn enable_target(&self, target_type: &str, target_id: &str) -> AuditResult<()> {
+ let key = self.create_key(target_type, target_id);
+ if self.get_target(&key).is_some() {
+ info!("Target {}-{} enabled", target_type, target_id);
+ Ok(())
+ } else {
+ Err(AuditError::Configuration(
+ format!("Target not found: {}-{}", target_type, target_id),
+ None,
+ ))
+ }
+ }
+
+ /// Disables a target (placeholder, assumes target exists)
+ ///
+ /// # Arguments
+ /// * `target_type` - The type of the target (e.g., "webhook", "mqtt").
+ /// * `target_id` - The identifier for the target instance.
+ ///
+ /// # Returns
+ /// * `AuditResult<()>` - Result indicating success or failure.
+ pub fn disable_target(&self, target_type: &str, target_id: &str) -> AuditResult<()> {
+ let key = self.create_key(target_type, target_id);
+ if self.get_target(&key).is_some() {
+ info!("Target {}-{} disabled", target_type, target_id);
+ Ok(())
+ } else {
+ Err(AuditError::Configuration(
+ format!("Target not found: {}-{}", target_type, target_id),
+ None,
+ ))
+ }
+ }
+
+ /// Upserts a target into the registry
+ ///
+ /// # Arguments
+ /// * `target_type` - The type of the target (e.g., "webhook", "mqtt").
+ /// * `target_id` - The identifier for the target instance.
+ /// * `target` - The target instance to be upserted.
+ ///
+ /// # Returns
+ /// * `AuditResult<()>` - Result indicating success or failure.
+ pub fn upsert_target(
+ &mut self,
+ target_type: &str,
+ target_id: &str,
+ target: Box + Send + Sync>,
+ ) -> AuditResult<()> {
+ let key = self.create_key(target_type, target_id);
+ self.targets.insert(key, target);
+ Ok(())
+ }
}
diff --git a/crates/audit/src/system.rs b/crates/audit/src/system.rs
index 0441f280..d9116b65 100644
--- a/crates/audit/src/system.rs
+++ b/crates/audit/src/system.rs
@@ -274,9 +274,9 @@ impl AuditSystem {
drop(state);
let registry = self.registry.lock().await;
- let target_ids = registry.list_targets();
+ let target_keys = registry.list_targets();
- if target_ids.is_empty() {
+ if target_keys.is_empty() {
warn!("No audit targets configured for dispatch");
return Ok(());
}
@@ -284,22 +284,22 @@ impl AuditSystem {
// Dispatch to all targets concurrently
let mut tasks = Vec::new();
- for target_id in target_ids {
- if let Some(target) = registry.get_target(&target_id) {
+ for target_key in target_keys {
+ if let Some(target) = registry.get_target(&target_key) {
let entry_clone = Arc::clone(&entry);
- let target_id_clone = target_id.clone();
+ let target_key_clone = target_key.clone();
// Create EntityTarget for the audit log entry
let entity_target = EntityTarget {
object_name: entry.api.name.clone().unwrap_or_default(),
bucket_name: entry.api.bucket.clone().unwrap_or_default(),
- event_name: rustfs_targets::EventName::ObjectCreatedPut, // Default, should be derived from entry
+ event_name: entry.event, // Default, should be derived from entry
data: (*entry_clone).clone(),
};
let task = async move {
let result = target.save(Arc::new(entity_target)).await;
- (target_id_clone, result)
+ (target_key_clone, result)
};
tasks.push(task);
@@ -312,14 +312,14 @@ impl AuditSystem {
let mut errors = Vec::new();
let mut success_count = 0;
- for (target_id, result) in results {
+ for (target_key, result) in results {
match result {
Ok(_) => {
success_count += 1;
observability::record_target_success();
}
Err(e) => {
- error!(target_id = %target_id, error = %e, "Failed to dispatch audit log to target");
+ error!(target_id = %target_key, error = %e, "Failed to dispatch audit log to target");
errors.push(e);
observability::record_target_failure();
}
@@ -360,18 +360,18 @@ impl AuditSystem {
drop(state);
let registry = self.registry.lock().await;
- let target_ids = registry.list_targets();
+ let target_keys = registry.list_targets();
- if target_ids.is_empty() {
+ if target_keys.is_empty() {
warn!("No audit targets configured for batch dispatch");
return Ok(());
}
let mut tasks = Vec::new();
- for target_id in target_ids {
- if let Some(target) = registry.get_target(&target_id) {
+ for target_key in target_keys {
+ if let Some(target) = registry.get_target(&target_key) {
let entries_clone: Vec<_> = entries.iter().map(Arc::clone).collect();
- let target_id_clone = target_id.clone();
+ let target_key_clone = target_key.clone();
let task = async move {
let mut success_count = 0;
@@ -380,7 +380,7 @@ impl AuditSystem {
let entity_target = EntityTarget {
object_name: entry.api.name.clone().unwrap_or_default(),
bucket_name: entry.api.bucket.clone().unwrap_or_default(),
- event_name: rustfs_targets::EventName::ObjectCreatedPut,
+ event_name: entry.event,
data: (*entry).clone(),
};
match target.save(Arc::new(entity_target)).await {
@@ -388,7 +388,7 @@ impl AuditSystem {
Err(e) => errors.push(e),
}
}
- (target_id_clone, success_count, errors)
+ (target_key_clone, success_count, errors)
};
tasks.push(task);
}
@@ -418,6 +418,7 @@ impl AuditSystem {
}
/// Starts the audit stream processing for a target with batching and retry logic
+ ///
/// # Arguments
/// * `store` - The store from which to read audit entries
/// * `target` - The target to which audit entries will be sent
@@ -501,7 +502,7 @@ impl AuditSystem {
/// Enables a specific target
///
/// # Arguments
- /// * `target_id` - The ID of the target to enable
+ /// * `target_id` - The ID of the target to enable, TargetID to string
///
/// # Returns
/// * `AuditResult<()>` - Result indicating success or failure
@@ -520,7 +521,7 @@ impl AuditSystem {
/// Disables a specific target
///
/// # Arguments
- /// * `target_id` - The ID of the target to disable
+ /// * `target_id` - The ID of the target to disable, TargetID to string
///
/// # Returns
/// * `AuditResult<()>` - Result indicating success or failure
@@ -539,7 +540,7 @@ impl AuditSystem {
/// Removes a target from the system
///
/// # Arguments
- /// * `target_id` - The ID of the target to remove
+ /// * `target_id` - The ID of the target to remove, TargetID to string
///
/// # Returns
/// * `AuditResult<()>` - Result indicating success or failure
@@ -559,7 +560,7 @@ impl AuditSystem {
/// Updates or inserts a target
///
/// # Arguments
- /// * `target_id` - The ID of the target to upsert
+ /// * `target_id` - The ID of the target to upsert, TargetID to string
/// * `target` - The target instance to insert or update
///
/// # Returns
@@ -596,7 +597,7 @@ impl AuditSystem {
/// Gets information about a specific target
///
/// # Arguments
- /// * `target_id` - The ID of the target to retrieve
+ /// * `target_id` - The ID of the target to retrieve, TargetID to string
///
/// # Returns
/// * `Option` - Target ID if found
diff --git a/crates/common/src/metrics.rs b/crates/common/src/metrics.rs
index f0fc031a..196e16c2 100644
--- a/crates/common/src/metrics.rs
+++ b/crates/common/src/metrics.rs
@@ -96,6 +96,11 @@ pub enum Metric {
ApplyNonCurrent,
HealAbandonedVersion,
+ // Quota metrics:
+ QuotaCheck,
+ QuotaViolation,
+ QuotaSync,
+
// START Trace metrics:
StartTrace,
ScanObject, // Scan object. All operations included.
@@ -131,6 +136,9 @@ impl Metric {
Self::CleanAbandoned => "clean_abandoned",
Self::ApplyNonCurrent => "apply_non_current",
Self::HealAbandonedVersion => "heal_abandoned_version",
+ Self::QuotaCheck => "quota_check",
+ Self::QuotaViolation => "quota_violation",
+ Self::QuotaSync => "quota_sync",
Self::StartTrace => "start_trace",
Self::ScanObject => "scan_object",
Self::HealAbandonedObject => "heal_abandoned_object",
@@ -163,15 +171,18 @@ impl Metric {
10 => Some(Self::CleanAbandoned),
11 => Some(Self::ApplyNonCurrent),
12 => Some(Self::HealAbandonedVersion),
- 13 => Some(Self::StartTrace),
- 14 => Some(Self::ScanObject),
- 15 => Some(Self::HealAbandonedObject),
- 16 => Some(Self::LastRealtime),
- 17 => Some(Self::ScanFolder),
- 18 => Some(Self::ScanCycle),
- 19 => Some(Self::ScanBucketDrive),
- 20 => Some(Self::CompactFolder),
- 21 => Some(Self::Last),
+ 13 => Some(Self::QuotaCheck),
+ 14 => Some(Self::QuotaViolation),
+ 15 => Some(Self::QuotaSync),
+ 16 => Some(Self::StartTrace),
+ 17 => Some(Self::ScanObject),
+ 18 => Some(Self::HealAbandonedObject),
+ 19 => Some(Self::LastRealtime),
+ 20 => Some(Self::ScanFolder),
+ 21 => Some(Self::ScanCycle),
+ 22 => Some(Self::ScanBucketDrive),
+ 23 => Some(Self::CompactFolder),
+ 24 => Some(Self::Last),
_ => None,
}
}
diff --git a/crates/config/src/constants/mod.rs b/crates/config/src/constants/mod.rs
index f16859be..5c5de2a0 100644
--- a/crates/config/src/constants/mod.rs
+++ b/crates/config/src/constants/mod.rs
@@ -21,6 +21,7 @@ pub(crate) mod heal;
pub(crate) mod object;
pub(crate) mod profiler;
pub(crate) mod protocols;
+pub(crate) mod quota;
pub(crate) mod runtime;
pub(crate) mod scanner;
pub(crate) mod targets;
diff --git a/crates/config/src/constants/quota.rs b/crates/config/src/constants/quota.rs
new file mode 100644
index 00000000..90d98d60
--- /dev/null
+++ b/crates/config/src/constants/quota.rs
@@ -0,0 +1,26 @@
+// 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.
+
+pub const QUOTA_CONFIG_FILE: &str = "quota.json";
+pub const QUOTA_TYPE_HARD: &str = "HARD";
+
+pub const QUOTA_EXCEEDED_ERROR_CODE: &str = "XRustfsQuotaExceeded";
+pub const QUOTA_INVALID_CONFIG_ERROR_CODE: &str = "InvalidArgument";
+pub const QUOTA_NOT_FOUND_ERROR_CODE: &str = "NoSuchBucket";
+pub const QUOTA_INTERNAL_ERROR_CODE: &str = "InternalError";
+
+pub const QUOTA_API_PATH: &str = "/rustfs/admin/v3/quota/{bucket}";
+
+pub const QUOTA_INVALID_TYPE_ERROR_MSG: &str = "Only HARD quota type is supported";
+pub const QUOTA_METADATA_SYSTEM_ERROR_MSG: &str = "Bucket metadata system not initialized";
diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs
index 89161d96..3f650232 100644
--- a/crates/config/src/lib.rs
+++ b/crates/config/src/lib.rs
@@ -33,6 +33,8 @@ pub use constants::profiler::*;
#[cfg(feature = "constants")]
pub use constants::protocols::*;
#[cfg(feature = "constants")]
+pub use constants::quota::*;
+#[cfg(feature = "constants")]
pub use constants::runtime::*;
#[cfg(feature = "constants")]
pub use constants::scanner::*;
diff --git a/crates/e2e_test/src/bucket_policy_check_test.rs b/crates/e2e_test/src/bucket_policy_check_test.rs
new file mode 100644
index 00000000..c0b18ec6
--- /dev/null
+++ b/crates/e2e_test/src/bucket_policy_check_test.rs
@@ -0,0 +1,155 @@
+// 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.
+
+//! Regression test for Issue #1423
+//! Verifies that Bucket Policies are honored for Authenticated Users.
+
+use crate::common::{RustFSTestEnvironment, init_logging};
+use aws_sdk_s3::config::{Credentials, Region};
+use aws_sdk_s3::{Client, Config};
+use serial_test::serial;
+use tracing::info;
+
+async fn create_user(
+ env: &RustFSTestEnvironment,
+ username: &str,
+ password: &str,
+) -> Result<(), Box> {
+ let create_user_body = serde_json::json!({
+ "secretKey": password,
+ "status": "enabled"
+ })
+ .to_string();
+
+ let create_user_url = format!("{}/rustfs/admin/v3/add-user?accessKey={}", env.url, username);
+ crate::common::awscurl_put(&create_user_url, &create_user_body, &env.access_key, &env.secret_key).await?;
+ Ok(())
+}
+
+fn create_user_client(env: &RustFSTestEnvironment, access_key: &str, secret_key: &str) -> Client {
+ let credentials = Credentials::new(access_key, secret_key, None, None, "test-user");
+ let config = Config::builder()
+ .credentials_provider(credentials)
+ .region(Region::new("us-east-1"))
+ .endpoint_url(&env.url)
+ .force_path_style(true)
+ .behavior_version_latest()
+ .build();
+
+ Client::from_conf(config)
+}
+
+#[tokio::test]
+#[serial]
+async fn test_bucket_policy_authenticated_user() -> Result<(), Box> {
+ init_logging();
+ info!("Starting test_bucket_policy_authenticated_user...");
+
+ let mut env = RustFSTestEnvironment::new().await?;
+ env.start_rustfs_server(vec![]).await?;
+
+ let admin_client = env.create_s3_client();
+ let bucket_name = "bucket-policy-auth-test";
+ let object_key = "test-object.txt";
+ let user_access = "testuser";
+ let user_secret = "testpassword";
+
+ // 1. Create Bucket (Admin)
+ admin_client.create_bucket().bucket(bucket_name).send().await?;
+
+ // 2. Create User (Admin API)
+ create_user(&env, user_access, user_secret).await?;
+
+ // 3. Create User Client
+ let user_client = create_user_client(&env, user_access, user_secret);
+
+ // 4. Verify Access Denied initially (No Policy)
+ let result = user_client.list_objects_v2().bucket(bucket_name).send().await;
+ if result.is_ok() {
+ return Err("Should be Access Denied initially".into());
+ }
+
+ // 5. Apply Bucket Policy Allowed User
+ let policy_json = serde_json::json!({
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Sid": "AllowTestUser",
+ "Effect": "Allow",
+ "Principal": {
+ "AWS": [user_access]
+ },
+ "Action": [
+ "s3:ListBucket",
+ "s3:GetObject",
+ "s3:PutObject",
+ "s3:DeleteObject"
+ ],
+ "Resource": [
+ format!("arn:aws:s3:::{}", bucket_name),
+ format!("arn:aws:s3:::{}/*", bucket_name)
+ ]
+ }
+ ]
+ })
+ .to_string();
+
+ admin_client
+ .put_bucket_policy()
+ .bucket(bucket_name)
+ .policy(&policy_json)
+ .send()
+ .await?;
+
+ // 6. Verify Access Allowed (With Bucket Policy)
+ info!("Verifying PutObject...");
+ user_client
+ .put_object()
+ .bucket(bucket_name)
+ .key(object_key)
+ .body(aws_sdk_s3::primitives::ByteStream::from_static(b"hello world"))
+ .send()
+ .await
+ .map_err(|e| format!("PutObject failed: {}", e))?;
+
+ info!("Verifying ListObjects...");
+ let list_res = user_client
+ .list_objects_v2()
+ .bucket(bucket_name)
+ .send()
+ .await
+ .map_err(|e| format!("ListObjects failed: {}", e))?;
+ assert_eq!(list_res.contents().len(), 1);
+
+ info!("Verifying GetObject...");
+ user_client
+ .get_object()
+ .bucket(bucket_name)
+ .key(object_key)
+ .send()
+ .await
+ .map_err(|e| format!("GetObject failed: {}", e))?;
+
+ info!("Verifying DeleteObject...");
+ user_client
+ .delete_object()
+ .bucket(bucket_name)
+ .key(object_key)
+ .send()
+ .await
+ .map_err(|e| format!("DeleteObject failed: {}", e))?;
+
+ info!("Test Passed!");
+ Ok(())
+}
diff --git a/crates/e2e_test/src/common.rs b/crates/e2e_test/src/common.rs
index 9b94005e..da70db83 100644
--- a/crates/e2e_test/src/common.rs
+++ b/crates/e2e_test/src/common.rs
@@ -176,12 +176,14 @@ impl RustFSTestEnvironment {
/// Kill any existing RustFS processes
pub async fn cleanup_existing_processes(&self) -> Result<(), Box> {
info!("Cleaning up any existing RustFS processes");
- let output = Command::new("pkill").args(["-f", "rustfs"]).output();
+ let binary_path = rustfs_binary_path();
+ let binary_name = binary_path.to_string_lossy();
+ let output = Command::new("pkill").args(["-f", &binary_name]).output();
if let Ok(output) = output
&& output.status.success()
{
- info!("Killed existing RustFS processes");
+ info!("Killed existing RustFS processes: {}", binary_name);
sleep(Duration::from_millis(1000)).await;
}
Ok(())
@@ -363,3 +365,12 @@ pub async fn awscurl_put(
) -> Result> {
execute_awscurl(url, "PUT", Some(body), access_key, secret_key).await
}
+
+/// Helper function for DELETE requests
+pub async fn awscurl_delete(
+ url: &str,
+ access_key: &str,
+ secret_key: &str,
+) -> Result> {
+ execute_awscurl(url, "DELETE", None, access_key, secret_key).await
+}
diff --git a/crates/e2e_test/src/lib.rs b/crates/e2e_test/src/lib.rs
index cef028e5..0d5a8bbb 100644
--- a/crates/e2e_test/src/lib.rs
+++ b/crates/e2e_test/src/lib.rs
@@ -29,6 +29,13 @@ mod data_usage_test;
#[cfg(test)]
mod kms;
+// Quota tests
+#[cfg(test)]
+mod quota_test;
+
+#[cfg(test)]
+mod bucket_policy_check_test;
+
// Special characters in path test modules
#[cfg(test)]
mod special_chars_test;
diff --git a/crates/e2e_test/src/quota_test.rs b/crates/e2e_test/src/quota_test.rs
new file mode 100644
index 00000000..f3c53622
--- /dev/null
+++ b/crates/e2e_test/src/quota_test.rs
@@ -0,0 +1,798 @@
+// 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::common::{RustFSTestEnvironment, awscurl_delete, awscurl_get, awscurl_post, awscurl_put, init_logging};
+use aws_sdk_s3::Client;
+use serial_test::serial;
+use tracing::{debug, info};
+
+/// Test environment setup for quota tests
+pub struct QuotaTestEnv {
+ pub env: RustFSTestEnvironment,
+ pub client: Client,
+ pub bucket_name: String,
+}
+
+impl QuotaTestEnv {
+ pub async fn new() -> Result> {
+ let bucket_name = format!("quota-test-{}", uuid::Uuid::new_v4());
+ let mut env = RustFSTestEnvironment::new().await?;
+ env.start_rustfs_server(vec![]).await?;
+ let client = env.create_s3_client();
+
+ Ok(Self {
+ env,
+ client,
+ bucket_name,
+ })
+ }
+
+ pub async fn create_bucket(&self) -> Result<(), Box> {
+ self.env.create_test_bucket(&self.bucket_name).await?;
+ Ok(())
+ }
+
+ pub async fn cleanup_bucket(&self) -> Result<(), Box> {
+ let objects = self.client.list_objects_v2().bucket(&self.bucket_name).send().await?;
+ for object in objects.contents() {
+ self.client
+ .delete_object()
+ .bucket(&self.bucket_name)
+ .key(object.key().unwrap_or_default())
+ .send()
+ .await?;
+ }
+ self.env.delete_test_bucket(&self.bucket_name).await?;
+ Ok(())
+ }
+
+ pub async fn set_bucket_quota(&self, quota_bytes: u64) -> Result<(), Box> {
+ let url = format!("{}/rustfs/admin/v3/quota/{}", self.env.url, self.bucket_name);
+ let quota_config = serde_json::json!({
+ "quota": quota_bytes,
+ "quota_type": "HARD"
+ });
+
+ let response = awscurl_put(&url, "a_config.to_string(), &self.env.access_key, &self.env.secret_key).await?;
+ if response.contains("error") {
+ Err(format!("Failed to set quota: {}", response).into())
+ } else {
+ Ok(())
+ }
+ }
+
+ pub async fn get_bucket_quota(&self) -> Result