diff --git a/Cargo.lock b/Cargo.lock index 1505f2528..1328882bd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9210,9 +9210,9 @@ dependencies = [ [[package]] name = "rustfs-erasure-codec" -version = "7.0.1" +version = "7.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31c2f2ff65a5075aad1fe29d350f1a154bdb097ff0057ee846ec1faf5701098" +checksum = "6548bf01cd47c0a7809f004b69c49e46e323744d0c23d2b7180843cbef16eafe" dependencies = [ "cc", "hashlink", diff --git a/Cargo.toml b/Cargo.toml index 1c9ca85bc..f3660a383 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -274,7 +274,7 @@ pretty_assertions = "1.4.1" rand = { version = "0.10.2", features = ["serde"] } ratelimit = "0.10.1" rayon = "1.12.0" -reed-solomon-erasure = { package = "rustfs-erasure-codec", version = "7.0.1", features = ["simd-accel"] } +reed-solomon-erasure = { package = "rustfs-erasure-codec", version = "7.0.2", features = ["simd-accel"] } #reed-solomon-erasure = { version = "6.0", features = ["simd-accel"], git = "https://github.com/houseme/reed-solomon-erasure",rev = "main" } reed-solomon-simd = "3.1.0" regex = { version = "1.13.0" } diff --git a/Dockerfile.decommission-local b/Dockerfile.decommission-local index d3561baed..356db8d14 100644 --- a/Dockerfile.decommission-local +++ b/Dockerfile.decommission-local @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM rust:1.95-trixie +FROM rust:1.97-trixie RUN set -eux; \ export DEBIAN_FRONTEND=noninteractive; \ diff --git a/Dockerfile.source b/Dockerfile.source index f9367eacd..2054405dc 100644 --- a/Dockerfile.source +++ b/Dockerfile.source @@ -32,7 +32,7 @@ ARG RUSTFS_BUILD_FEATURES="" # ----------------------------- # Build stage # ----------------------------- -FROM rust:1.95-trixie AS builder +FROM rust:1.97-trixie AS builder # Re-declare args after FROM ARG TARGETPLATFORM diff --git a/crates/object-data-cache/src/moka_backend.rs b/crates/object-data-cache/src/moka_backend.rs index 6b4a1b757..7f5d3193e 100644 --- a/crates/object-data-cache/src/moka_backend.rs +++ b/crates/object-data-cache/src/moka_backend.rs @@ -352,7 +352,9 @@ impl MokaBackend { // Moka maintenance is still needed to retire queued removals, but clear // must not rely on lazy invalidation alone: under heavy contention an // entry can remain physically resident (and still counted) even though - // the invalidation fence already hides it from lookups. + // the invalidation fence already hides it from lookups. Sweep both the + // entries visible to iteration and a fallback invalidate_all fence so + // delayed internal writes cannot strand a counted entry. for _ in 0..256 { self.cache.run_pending_tasks().await; let lingering_keys: Vec<_> = self.cache.iter().map(|(key, _)| key.as_ref().clone()).collect(); @@ -360,6 +362,9 @@ impl MokaBackend { self.cache.remove(&key).await; } + self.cache.invalidate_all(); + self.cache.run_pending_tasks().await; + if self.cache.entry_count() == 0 { break; }