Skip to content

RustFS 1.0.0-beta.12 (beta)

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Jul 04:13
2e5cef5

Release 1.0.0-beta.12

What's Changed

  • fix(oidc): support separate discovery issuer by @overtrue in #5149
  • fix(iam): route issuer-relative JWKS through config URL by @overtrue in #5150
  • perf(ecstore): add guarded encrypted multipart range seeks by @overtrue in #5145
  • chore(deps): update erasure codec and russh by @houseme in #5155
  • feat(bench): capture node attribution metadata by @houseme in #5158
  • chore(deps): refresh workspace dependencies by @houseme in #5157
  • fix(security): pin OIDC discovery/token client to the outbound egress policy by @overtrue in #5159
  • fix(runtime): update codec and debug stack headroom by @houseme in #5164
  • fix(s3): honor CopyObject tagging directives by @cxymds in #5165
  • fix(security): reject federated STS credentials that collide with the root principal by @overtrue in #5161
  • fix(s3): honor CopyObject replacement metadata by @cxymds in #5168
  • fix(s3): persist multipart upload storage class by @cxymds in #5170
  • fix(storage): cover inline reader fallback controls by @houseme in #5169
  • feat(ilm): add manual transition run endpoint by @houseme in #5171
  • fix(storage): expose truthful storage class capabilities by @cxymds in #5172
  • feat(ilm): bound manual transition duration by @houseme in #5174
  • fix(s3): complete CopyObject checksum support by @cxymds in #5178
  • fix(ecstore): self-verify no-parity bitrot writes by @houseme in #5179
  • fix(iam): virtualize OIDC service account parents by @GatewayJ in #5152
  • feat(ilm): count already transitioned manual runs by @houseme in #5177
  • fix(internode): guard msgpack-only JSON fallback by @houseme in #5180
  • feat(ilm): trace manual transition runs by @houseme in #5187
  • test(ilm): cover manual transition queue pressure by @houseme in #5189
  • test(ilm): deny manual transition for non-admin by @houseme in #5188
  • fix(s3): enforce SSE-C copy key validation by @cxymds in #5185
  • feat(ilm): gate durable manual transition mode by @houseme in #5190
  • perf(protos): cache internode msgpack-only flag by @houseme in #5191
  • test(internode): pin msgpack compatibility send sites by @houseme in #5193
  • fix(heal): report no-parity bitrot as unrecoverable by @houseme in #5192
  • fix(s3): list multipart uploads by bucket prefix by @cxymds in #5195
  • fix(admin): restore complete config history snapshots by @cxymds in #5196
  • fix(internode): align msgpack benchmark gates by @houseme in #5197
  • fix(ecstore): fix wide-prefix listing stalls and decode downstream logging by @houseme in #5198
  • fix(replication): persist sanitized resync errors by @cxymds in #5200
  • perf(ecstore): avoid redundant leaf object scans by @marshawcoco in #5176
  • fix(getobject): enrich stream error context by @houseme in #5201
  • feat(ilm): reject overlapping manual transition runs by @houseme in #5202
  • test(internode): pin msgpack gate rollback coverage by @houseme in #5203
  • fix(kms): validate configured backend cleanup by @cxymds in #5204
  • fix(admin): report truthful diagnostic capabilities by @cxymds in #5205
  • fix(admin): redact and seal config history by @cxymds in #5206
  • feat(admin): add encrypted diagnostic archives by @cxymds in #5207
  • feat(replication): structure active check results by @cxymds in #5208
  • fix(replication): report authoritative backlog metrics by @cxymds in #5209
  • chore(deps): bump quinn-proto from 0.11.14 to 0.11.16 in /fuzz in the cargo group across 1 directory by @dependabot[bot] in #5210
  • fix(console): handle apple touch icon paths by @overtrue in #5214
  • fix(replication): make resync starts atomic by @cxymds in #5215
  • test(rpc): add corrupt-json decode coverage by @houseme in #5216
  • feat(site-replication): make repair operations durable by @cxymds in #5217
  • test(ilm): cover manual transition e2e gaps by @houseme in #5219
  • feat(rpc): add server-side internode v2 signature verification (fail-open, method-path binding groundwork) by @overtrue in #5160
  • fix(getobject): distinguish downstream output closure by @houseme in #5220
  • feat(ilm): add durable manual transition jobs by @houseme in #5223
  • refactor(getobject): scope downstream close tagging by @houseme in #5224
  • fix(s3select): enforce query and resource limits by @GatewayJ in #5028
  • fix(scanner): make distributed usage convergence authoritative by @marshawcoco in #5151
  • fix(tier): handle mutation intent CAS races by @houseme in #5227
  • fix(object): make version undo preconditions atomic by @cxymds in #5225
  • feat(ilm): add manual transition job route contract by @houseme in #5221
  • fix(lock): jitter distributed lock retries by @hkwi in #5113
  • test(internode): extend fallback and transition coverage by @houseme in #5232
  • test(e2e): cover async transition limit partial by @houseme in #5233
  • fix(getobject): avoid duplicate downstream-close metrics by @houseme in #5231
  • test(e2e): stabilize tier and storage class checks by @houseme in #5228
  • feat(ilm): add durable manual transition job store by @houseme in #5229
  • feat(rpc): bind canonical body digest into internode mutating disk RPC signatures by @overtrue in #5234
  • fix(tier): reconcile committed mutation replay by @houseme in #5230
  • fix(ilm): harden durable transition admission by @houseme in #5235
  • fix(tier): converge config after peer recovery by @houseme in #5240
  • fix(ilm): preserve lifecycle version groups by @houseme in #5239
  • fix(ilm): report manual transition tier failures by @houseme in #5238
  • test(rpc): cross-process replay/tamper acceptance for internode RPC signatures by @overtrue in #5236
  • feat(kms): introduce KMS unavailability error and enhance data key handling by @reatang in #5184
  • fix(s3): return Cache-Control on GET object by @overtrue in #5241
  • feat(kms): add static single-key backend by @reatang in #5222
  • docs: fix dead TLS configuration doc links by @overtrue in #5242
  • fix(kms): do not include secret value in static KMS format error by @overtrue in #5243
  • docs: add autonomy and approval boundaries to AGENTS.md by @overtrue in #5246
  • chore(security): add guardrails against secret values in error strings by @overtrue in #5244
  • test(kms): cover static secret file config by @overtrue in #5245
  • test(kms): rename secret-named fixture bindings to satisfy logging guardrails by @overtrue in #5247
  • fix(ecstore): fail fast on missing RPC secret in distributed startup by @overtrue in #5248
  • feat(ilm): trace lifecycle expiry execution by @houseme in #5250
  • test(e2e): assert msgpack decode-error controls by @houseme in #5251
  • test(e2e): cover manual transition active cancel by @houseme in #5252
  • fix(lifecycle): stop tier free-version recovery walk-timeout loop by @harryhan24 in #5194
  • test(ilm): cover manual transition job auth matrix by @houseme in #5254
  • fix(ilm): honor explicit object lock metadata by @houseme in #5253
  • fix(ilm): normalize cancelled manual job reports by @houseme in #5255
  • fix: reject overlapping console listener address by @houseme in #5257
  • test(ilm): cover manual job status after restart by @houseme in #5256
  • fix(helm): coordinate distributed pod startup by @cxymds in #5258
  • test(perf): add pinned paired ABBA benchmark by @houseme in #5259
  • test(internode): pin msgpack rollout gates by @houseme in #5261
  • test(ilm): cover manual transition queue pressure status by @houseme in #5265
  • test(ilm): cover deterministic manual transition cancel by @houseme in #5263
  • test(ilm): cover noncurrent version expiry e2e by @houseme in #5264
  • feat(ilm): expose lifecycle expiry scanner counters by @houseme in #5262
  • fix: normalize console listener address by @houseme in #5266
  • test(ilm): cover same-scope async transition conflict by @houseme in #5267
  • feat(admin): expose ILM expiry status by @houseme in #5268
  • test(perf): add exact 1MiB ABBA benchmark drivers by @houseme in #5260
  • test(ilm): cover unknown manual transition worker loss by @houseme in #5269
  • test(tier): cover committed prepare replay fanout by @houseme in #5270
  • chore(deps): update flake.lock by @houseme in #5271
  • test(ilm): cover manual transition worker failure summary by @houseme in #5272
  • test(ilm): cover stale transition admission reclaim by @houseme in #5273
  • test(perf): preflight GET smoke buckets by @houseme in #5274
  • test(perf): tolerate empty paired runner node args by @houseme in #5275
  • test(ilm): cover queue terminal partial reports by @houseme in #5277
  • fix(ilm): fail closed on unsafe manual recovery by @houseme in #5276
  • fix(ilm): deduplicate manual transition worker results by @houseme in #5278
  • refactor(storage): resolve staged dead code in store module by @overtrue in #5283
  • fix(ilm): retry transient scope admission races by @houseme in #5280
  • test(ilm): cover combined manual transition failures by @houseme in #5279
  • test(perf): fix GET stage metrics capture by @houseme in #5284
  • test(ilm): cover cancelled worker counter persistence by @houseme in #5285
  • test(ilm): cover durable transition progress recovery by @houseme in #5286
  • test(ilm): cover durable progress checkpoint renewal by @houseme in #5287
  • test(ilm): cover admission scope parallelism by @houseme in #5293
  • test(ilm): cover durable checkpoint persistence by @houseme in #5288
  • test(perf): cover GET fallback metric probes by @houseme in #5291
  • test(perf): reject zero-byte paired warp sizes by @houseme in #5289
  • test(ilm): cover manual transition endpoint contract by @houseme in #5295
  • test(tier): cover reporter committed prepare replay by @houseme in #5297
  • feat(ilm): persist manual transition task journals by @houseme in #5296
  • test(ilm): cover restart unknown readback by @houseme in #5298
  • test(ilm): cover cancelled continuation resume by @houseme in #5294
  • test(ilm): cover manual transition journal replay matrix by @houseme in #5300
  • test(ilm): cover async partial continuation resume by @houseme in #5301
  • test(ilm): cover manual job status cancel matrix by @houseme in #5302
  • test(ilm): cover unknown checkpoint counters by @houseme in #5299
  • test(ilm): cover heartbeat backpressure status by @houseme in #5303
  • test(ilm): cover terminal job status readback by @houseme in #5304
  • test(ilm): cover transition budget partial records by @houseme in #5305
  • test(admin): expose manual transition job capabilities by @houseme in #5306
  • fix(ecstore): never cache fabricated bucket metadata as authoritative by @overtrue in #5307
  • feat(internode): track msgpack decode traffic by @houseme in #5309
  • test(ilm): cover queue-full terminal job records by @houseme in #5310
  • test(admin): cover manual transition capabilities e2e by @houseme in #5311
  • test(ilm): cover queue pressure job readback by @houseme in #5313
  • test(ilm): cover parallel bucket admission by @houseme in #5314
  • fix(ilm): preserve manual transition duration budget by @houseme in #5315
  • test(ilm): cover manual transition restart recovery by @houseme in #5318
  • test(ilm): cover restart cancel readback by @houseme in #5316
  • test(ilm): cover pending worker budget status by @houseme in #5317
  • test(e2e): cover distributed manual transition admission by @houseme in #5319
  • fix(bench): parse final warp report metrics by @houseme in #5308
  • test(ilm): cover manual transition e2e stress by @houseme in #5320
  • chore(deps): bump the dependencies group with 3 updates by @dependabot[bot] in #5321
  • fix(bench): formalize paired ABBA corrected artifacts by @houseme in #5322
  • feat(ecstore): attribute manual transition worker failures by @houseme in #5324
  • feat(scripts): add runbook entrypoints for #1508 #1510 by @houseme in #5326
  • fix(iam): align OIDC parent IDs with MinIO by @GatewayJ in #5290
  • test(scripts): cover manual transition runbooks by @houseme in #5327
  • chore(scripts): add manual transition follow-up monitor by @houseme in #5328
  • fix(ecstore): replay manual transition task journal by @houseme in #5329
  • test(internode): pin JSON fallback compatibility by @houseme in #5330
  • test(scripts): capture manual transition failure samples by @houseme in #5331
  • docs: document RUSTFS_OUTBOUND_ALLOW_ORIGINS outbound policy by @yyyCode in #5334
  • docs: clarify outbound allowlist scope by @houseme in #5336
  • fix: classify manual transition tier failures by @houseme in #5335
  • fix(site-replication): keep reverse direction after config broadcast by @abdullahnah92 in #5292
  • fix(audit): load env-only targets at startup by @houseme in #5342
  • fix(lifecycle): harden manual transition rollout checks by @houseme in #5344
  • perf(s3): resolve bucket versioning once per DeleteObjects request by @overtrue in #5340
  • fix(scanner): require authoritative usage snapshots by @marshawcoco in #5333
  • test(lifecycle): add manual transition rollout harnesses by @houseme in #5346
  • fix(sts): return Query API-compatible responses by @GatewayJ in #5282
  • chore(build): pin Rust toolchain configs to 1.97.1 by @houseme in #5350
  • test(e2e): stabilize inline full gate checks by @houseme in #5351
  • fix(s3): reject empty multipart completions by @cxymds in #5352
  • fix(kms): unify persisted SSE data key envelopes by @reatang in #5343
  • fix(authz): fail closed on policy load errors by @cxymds in #5359
  • fix(multipart): list uploads across all sets by @cxymds in #5362
  • fix(multipart): preserve retried parts on quorum failure by @cxymds in #5363
  • fix(tiering): abort failed multipart restores by @cxymds in #5367
  • fix(swift): enforce TempURL IP restrictions by @cxymds in #5377
  • fix(swift): enforce cumulative container quotas by @cxymds in #5378
  • fix(notify): emit noop event for missing deletes by @cxymds in #5381
  • fix(ecstore): handle mutex poisoning explicitly by @cxymds in #5379
  • fix(auth): enforce presigned URL expiry limit by @cxymds in #5368
  • fix(ecstore): handle pre-epoch disk health clocks by @cxymds in #5383
  • fix(bitrot): reject trailing shard data by @cxymds in #5358
  • fix(ecstore): use set read quorum for version reads by @cxymds in #5365
  • fix(lifecycle): reject invalid modification times by @cxymds in #5370
  • fix(lifecycle): recover saturated scanner tasks by @cxymds in #5369
  • fix(filemeta): reject positive size without parts by @cxymds in #5354
  • fix(ecstore): fence object tagging updates by @cxymds in #5360
  • fix(heal): report partial rename failures by @cxymds in #5355
  • fix(filemeta): preserve canonical version order by @cxymds in #5353
  • feat(tiering): model provider version capabilities by @cxymds in #5372
  • fix(auth): compare sensitive tokens in constant time by @cxymds in #5371
  • fix(notify): defer disabled bootstrap storage refresh by @houseme in #5373
  • test(lifecycle): classify mixed rollout harness results by @houseme in #5384
  • test(ci): stabilize lifecycle timeout coverage by @houseme in #5404
  • fix(multipart): serialize complete and abort by @cxymds in #5356
  • fix(swift): persist container and account metadata writes by @overtrue in #5398
  • feat(ecstore): add local data-dir snapshot leases by @cxymds in #5388
  • fix(tiering): gate remote version state safely by @cxymds in #5374
  • fix(tiering): base restore expiry on completion by @cxymds in #5366
  • fix(ecstore): classify peer RPC failures by gRPC status code by @overtrue in #5400
  • ci: preserve timeout evidence for workspace tests by @cxymds in #5402
  • fix(action): change quay.io image repository name by @majinghe in #5417
  • ci(checksums): inherit workspace lint policy by @overtrue in #5415
  • fix(filemeta): canonicalize version order after insert by @overtrue in #5413
  • test(ilm): make active cancellation deterministic by @cxymds in #5403
  • fix(tier): keep converging peers that reject a config reload by @overtrue in #5412
  • fix(swift): merge account and container metadata POSTs by @overtrue in #5414
  • fix(ecstore): prevent deleted bucket recreation by @cxymds in #5380
  • test(ecstore): rendezvous concurrent resend commits by @cxymds in #5411
  • fix(heal): fail closed on ambiguous metadata rescue by @cxymds in #5361
  • fix(tiering): gate remote version state writes by @cxymds in #5382
  • feat(ecstore): add remote snapshot lease RPCs by @cxymds in #5389
  • fix(data-usage): preserve nonempty replication stats by @overtrue in #5422
  • fix(ecstore): fail peer metadata reloads closed instead of caching fabricated defaults by @overtrue in #5396
  • fix(ilm): preserve restore source version mode by @cxymds in #5406
  • ci(concurrency): inherit workspace lint policy by @overtrue in #5420
  • fix(rpc): authenticate non-disk mutation bodies by @overtrue in #5425
  • test(heal): avoid live disk removal race by @overtrue in #5421
  • fix(data-usage): make empty checks exhaustive by @overtrue in #5424
  • chore(heal): enforce workspace lint policy by @overtrue in #5426
  • feat(kms): support safe local KMS evaluation workflows by @reatang in #5418
  • refactor(deps): replace md5 crate with md-5 by @houseme in #5432
  • test(ecstore): remove invalid transition version drift case by @cxymds in #5392
  • feat(ecstore): protect streaming GETs with snapshot leases by @cxymds in #5391
  • fix(tiering): use exact GCS generations by @cxymds in #5376
  • ci(keystone): inherit workspace lint policy by @overtrue in #5429
  • fix(ecstore): defer delete cleanup for snapshot reads by @cxymds in #5408
  • perf(utils): reduce highway hash key setup by @houseme in #5434
  • test(entrypoint): preserve cargo toolchain environment by @cxymds in #5385
  • ci: sample runner state during the nextest step by @overtrue in #5440
  • fix(scanner): report active first-cycle status by @marshawcoco in #5397
  • fix(ecstore): fence bucket metadata generations by @cxymds in #5427
  • ci(protocols): inherit workspace lint policy by @overtrue in #5436
  • test(ecstore): fix two cluster::rpc flakes from process-global test state by @overtrue in #5438
  • fix(notify): reconcile persisted bucket rules by @houseme in #5437
  • fix(tier): reconcile paginated remote versions by @cxymds in #5405
  • ci(s3select-api): inherit workspace lint policy by @overtrue in #5441
  • ci(s3select-query): inherit workspace lint policy by @overtrue in #5443
  • fix(s3): correlate server-owned request IDs by @GatewayJ in #5433
  • fix(ecstore): serialize every bucket config write under the transaction lock by @overtrue in #5445
  • fix(tiering): bind recovery to transaction metadata by @cxymds in #5409
  • fix(ecstore): prevent recursive delete after empty bucket scan by @overtrue in #5453
  • test(ecstore): stabilize multipart lock ordering test by @overtrue in #5454
  • feat(rpc): add replay-scoped internode authentication by @overtrue in #5455
  • fix(scanner): persist portable usage cache keys by @marshawcoco in #5444
  • fix(server): preserve non-S3 trace context by @overtrue in #5450
  • fix(data-usage): classify 1024-byte objects correctly by @overtrue in #5451
  • fix(admin): fail closed for empty server context slots by @overtrue in #5452
  • test(ecstore): fix rename_all WARN flake from callsite-interest poisoning by @overtrue in #5448
  • test(ecstore): stabilize late snapshot lease cleanup by @overtrue in #5456
  • ci: model server as a composition root by @overtrue in #5459
  • refactor(ecstore): correct bucket config static names by @overtrue in #5458
  • fix(iam): add correctly named policy APIs by @overtrue in #5457
  • chore(release): prepare 1.0.0-beta.12 by @overtrue in #5461

New Contributors

Full Changelog: 1.0.0-beta.11...1.0.0-beta.12