Commit Graph
100 Commits
Author SHA1 Message Date
362f6026ac chore(build): pin Rust toolchain configs to 1.97.1 (#5350)
Co-authored-by: heihutu <[email protected]>
2026-07-28 03:53:32 +00:00
d385cea7c6 test(lifecycle): add manual transition rollout harnesses (#5346)
* test(lifecycle): add manual transition rollout harnesses

Add a dedicated #1508 ignored E2E harness for non-empty manual transition rollout readback and a reusable Docker mixed-version harness entrypoint.

Co-Authored-By: heihutu <[email protected]>

* test(lifecycle): satisfy rollout harness clippy

Use unwrap_or_default for the optional transition_failed report field while preserving the zero-default status readback behavior.

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-28 00:04:47 +00:00
6d3ce90c0f fix(lifecycle): harden manual transition rollout checks (#5344)
Co-authored-by: heihutu <[email protected]>
2026-07-27 17:29:06 +00:00
0e42a3d1d9 fix(audit): load env-only targets at startup (#5342)
Co-authored-by: heihutu <[email protected]>
2026-07-27 16:41:38 +00:00
300beff970 fix: classify manual transition tier failures (#5335)
Co-authored-by: heihutu <[email protected]>
2026-07-27 12:49:08 +00:00
housemeandGitHub 0a2370c024 docs: clarify outbound allowlist scope (#5336) 2026-07-27 19:57:22 +08:00
f6c227628f test(scripts): capture manual transition failure samples (#5331)
Add a reusable evidence collector for manual transition tier-failure attribution samples and wire the runbook tests to cover its dry-run and argument guards.

Co-authored-by: heihutu <[email protected]>
2026-07-27 18:49:48 +08:00
0cbfa1ac90 test(internode): pin JSON fallback compatibility (#5330)
Co-authored-by: heihutu <[email protected]>
2026-07-27 09:49:24 +00:00
ab5aa54035 fix(ecstore): replay manual transition task journal (#5329)
Recover accepted manual-transition tasks from the durable task journal when worker-result markers are missing after a restart.

Co-authored-by: heihutu <[email protected]>
2026-07-27 17:36:40 +08:00
464bf45e15 chore(scripts): add manual transition follow-up monitor (#5328)
* test(scripts): cover manual transition runbooks

Add a script-test entry for the manual transition rollout and soak runbook generators. The test covers ratio fail-fast behavior, generated status/metrics/journal checks, and runnable dry-run artifacts.

Verification:

- ./scripts/test_manual_transition_runbooks.sh

- make script-tests

Co-Authored-By: heihutu <[email protected]>

* test(scripts): assert nightly stress snapshot hooks

Co-Authored-By: heihutu <[email protected]>

* feat(scripts): add transition CI follow-up monitor

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-27 16:36:41 +08:00
bc2d8e0c60 test(scripts): cover manual transition runbooks (#5327)
Add a script-test entry for the manual transition rollout and soak runbook generators. The test covers ratio fail-fast behavior, generated status/metrics/journal checks, and runnable dry-run artifacts.

Verification:

- ./scripts/test_manual_transition_runbooks.sh

- make script-tests

Co-authored-by: heihutu <[email protected]>
2026-07-27 07:56:58 +00:00
e076e8cc6e feat(scripts): add runbook entrypoints for #1508 #1510 (#5326)
* feat(ecstore): attribute manual transition worker failures

Add manual transition worker failure reason tracking and persistence recovery compatibility for checksum validation.

Co-Authored-By: heihutu <[email protected]>

* chore(ilm): add manual transition diagnostics scripts

Co-Authored-By: heihutu <[email protected]>

* style(ecstore): format manual transition attribution

Co-Authored-By: heihutu <[email protected]>

* fix(ecstore): avoid copying failure reasons via clone

Co-Authored-By: heihutu <[email protected]>

* fix(manual-transition): improve matrix verification scripts

- Add strict mixed rollout phase ratio validation.
- Add strict read/write ratio validation for soak mix.
- Inline generated admin-check command blocks into mixed-rollout run script.

Co-Authored-By: heihutu <[email protected]>

* feat(scripts): add runbook entrypoints for #1508 #1510

---------

Co-authored-by: heihutu <[email protected]>
2026-07-27 06:47:28 +00:00
9d84056d7b feat(ecstore): attribute manual transition worker failures (#5324)
* feat(ecstore): attribute manual transition worker failures

Add manual transition worker failure reason tracking and persistence recovery compatibility for checksum validation.

Co-Authored-By: heihutu <[email protected]>

* chore(ilm): add manual transition diagnostics scripts

Co-Authored-By: heihutu <[email protected]>

* style(ecstore): format manual transition attribution

Co-Authored-By: heihutu <[email protected]>

* fix(ecstore): avoid copying failure reasons via clone

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-27 06:06:12 +00:00
f566b382a0 fix(bench): formalize paired ABBA corrected artifacts (#5322)
Add a reusable offline rebuild path for pinned paired ABBA benchmark evidence so corrected summaries can be regenerated from raw warp logs after parser fixes.

Record ACK-contract comparability explicitly in the rebuilt product comparison output, preventing relaxed RustFS ACK results from being treated as direct strict MinIO comparisons.

Co-authored-by: heihutu <[email protected]>
2026-07-27 04:06:51 +00:00
5af997ce5f test(ilm): cover manual transition e2e stress (#5320)
* test(e2e): cover distributed manual transition admission

Co-Authored-By: heihutu <[email protected]>

* test: cover manual transition restart recovery

Co-Authored-By: heihutu <[email protected]>

* test(ilm): cover queue pressure status readback

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 18:46:15 +00:00
4bd8cc1369 fix(bench): parse final warp report metrics (#5308)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:49:00 +00:00
3500f2e5ee test(e2e): cover distributed manual transition admission (#5319)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:42:29 +00:00
e0e2eb30a9 test(ilm): cover pending worker budget status (#5317)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:38:28 +00:00
467fb0a15c test(ilm): cover restart cancel readback (#5316)
* test(ilm): cover restart cancel readback

Co-Authored-By: heihutu <[email protected]>

* style(ilm): format restart cancel e2e

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 17:36:58 +00:00
0902538ceb test(ilm): cover manual transition restart recovery (#5318)
test: cover manual transition restart recovery

Co-authored-by: heihutu <[email protected]>
2026-07-26 17:33:59 +00:00
fec09968b9 fix(ilm): preserve manual transition duration budget (#5315)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:32:33 +00:00
4b09239ceb test(ilm): cover parallel bucket admission (#5314)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:30:48 +00:00
cc3c39da5c test(ilm): cover queue pressure job readback (#5313)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:16:53 +00:00
07f6d5cda6 test(admin): cover manual transition capabilities e2e (#5311)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:14:14 +00:00
e79337bb5c test(ilm): cover queue-full terminal job records (#5310)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:11:47 +00:00
683ff52a7b feat(internode): track msgpack decode traffic (#5309)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:03:58 +00:00
887868e7cd test(admin): expose manual transition job capabilities (#5306)
Co-authored-by: heihutu <[email protected]>
2026-07-27 00:17:40 +08:00
0ea7f17fd7 test(ilm): cover transition budget partial records (#5305)
Co-authored-by: heihutu <[email protected]>
2026-07-27 00:15:58 +08:00
5532510e42 test(ilm): cover terminal job status readback (#5304)
Co-authored-by: heihutu <[email protected]>
2026-07-26 14:56:31 +00:00
fc6dfa891a test(ilm): cover heartbeat backpressure status (#5303)
Co-authored-by: heihutu <[email protected]>
2026-07-26 14:41:18 +00:00
994678cfcf test(ilm): cover unknown checkpoint counters (#5299)
Co-authored-by: heihutu <[email protected]>
2026-07-26 14:33:21 +00:00
cee5009c57 test(ilm): cover manual job status cancel matrix (#5302)
Co-authored-by: heihutu <[email protected]>
2026-07-26 14:07:02 +00:00
bb130e2655 test(ilm): cover async partial continuation resume (#5301)
* test(ilm): cover async partial continuation resume

Co-Authored-By: heihutu <[email protected]>

* style(ilm): apply rustfmt to continuation e2e

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 21:59:47 +08:00
0711a6f4fe test(ilm): cover manual transition journal replay matrix (#5300)
Co-authored-by: heihutu <[email protected]>
2026-07-26 13:41:32 +00:00
0a25d25e68 test(ilm): cover cancelled continuation resume (#5294)
Co-authored-by: heihutu <[email protected]>
2026-07-26 13:40:36 +00:00
009dd93788 test(ilm): cover restart unknown readback (#5298)
Co-authored-by: heihutu <[email protected]>
2026-07-26 13:15:25 +00:00
7cacd1f558 feat(ilm): persist manual transition task journals (#5296)
* feat(ilm): persist manual transition task journal

Co-Authored-By: heihutu <[email protected]>

* fix(ilm): reconcile manual task journals on recovery

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 12:38:41 +00:00
c3242f83ba test(tier): cover reporter committed prepare replay (#5297)
Add a deterministic four-hot AddTier regression for the reporter path where one peer has already durably committed prepare replay and the remaining peers still need commit fanout before local publish.

Co-authored-by: heihutu <[email protected]>
2026-07-26 12:37:14 +00:00
e0bd18bd50 test(ilm): cover manual transition endpoint contract (#5295)
Co-authored-by: heihutu <[email protected]>
2026-07-26 12:36:53 +00:00
7f0c42e2bb test(perf): reject zero-byte paired warp sizes (#5289)
* test(perf): tolerate empty paired runner node args

Co-Authored-By: heihutu <[email protected]>

* test(perf): reject zero-byte paired warp sizes

Keep the #1432 pinned paired ABBA default matrix on positive object sizes because warp refuses zero-byte object generation. Add a dry-run guard so zero-byte compatibility stays a separate functional probe instead of failing mid-benchmark.

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 20:31:00 +08:00
09a991e735 test(perf): cover GET fallback metric probes (#5291)
* test(perf): cover GET fallback metric probes

Co-Authored-By: heihutu <[email protected]>

* test(perf): prefer format fallback labels

Co-Authored-By: heihutu <[email protected]>

* test(ilm): remove duplicate manual transition import

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 11:44:53 +00:00
14c249c266 test(ilm): cover durable checkpoint persistence (#5288)
* test(ilm): cover durable checkpoint persistence

Co-Authored-By: heihutu <[email protected]>

* style: format checkpoint persistence imports

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 11:32:23 +00:00
5acc52b7f9 test(ilm): cover admission scope parallelism (#5293)
* test(ilm): cover cross-bucket admission scope

Co-Authored-By: heihutu <[email protected]>

* fix(ilm): remove duplicate transition progress import

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 11:30:08 +00:00
26663e0d5d test(ilm): cover durable progress checkpoint renewal (#5287)
Add regression coverage for durable manual transition progress checkpoints so page progress persists the report, queue snapshot, and renewed scope admission lease together.

Co-authored-by: heihutu <[email protected]>
2026-07-26 10:34:08 +00:00
caeaa4bf34 test(ilm): cover durable transition progress recovery (#5286)
Co-authored-by: heihutu <[email protected]>
2026-07-26 10:06:24 +00:00
05f52beea3 test(ilm): cover cancelled worker counter persistence (#5285)
* test(ilm): cover combined manual transition failures

Co-Authored-By: heihutu <[email protected]>

* test(ecstore): route transition matrix imports

Co-Authored-By: heihutu <[email protected]>

* test(ilm): satisfy transition matrix lint

Co-Authored-By: heihutu <[email protected]>

* test(ilm): cover cancelled worker counter persistence

Add a focused manual transition job matrix regression for cancel-requested terminal records that already contain mixed worker completion and failure counters. The test verifies cancelled state reduction preserves worker counters and survives encode/decode.

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 10:01:03 +00:00
25cf7922f5 test(perf): fix GET stage metrics capture (#5284)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:14:24 +08:00
e6706bb94a test(ilm): cover combined manual transition failures (#5279)
* test(ilm): cover combined manual transition failures

Co-Authored-By: heihutu <[email protected]>

* test(ecstore): route transition matrix imports

Co-Authored-By: heihutu <[email protected]>

* test(ilm): satisfy transition matrix lint

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 17:14:01 +08:00
a609b92b3c fix(ilm): retry transient scope admission races (#5280)
Co-authored-by: heihutu <[email protected]>
2026-07-26 17:13:53 +08:00
058f81c61f fix(ilm): deduplicate manual transition worker results (#5278)
* fix(ilm): fail closed on unsafe manual job recovery

Mark expired manual transition jobs Unknown when recovery cannot prove queued worker outcomes are durable. Enforce ETag-guarded admission release with exact delete preconditions so stale releasers cannot remove a replacement admission, while still allowing drained cancelled jobs to terminate.

Co-Authored-By: heihutu <[email protected]>

* style(ilm): format manual recovery imports

Apply rustfmt import ordering after merging main into the manual recovery branch.

Co-Authored-By: heihutu <[email protected]>

* fix(ilm): deduplicate manual transition worker results

Persist per-task manual transition worker result markers before applying job counters so duplicate worker completion reports are no-ops. Reconcile persisted markers during drained-queue lease renewal and recovery to restore marker-before-record crash windows. Fail closed when persisted worker result markers are corrupt.

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 08:28:33 +00:00
b4e3c7117e fix(ilm): fail closed on unsafe manual recovery (#5276)
fix(ilm): fail closed on unsafe manual job recovery

Mark expired manual transition jobs Unknown when recovery cannot prove queued worker outcomes are durable. Enforce ETag-guarded admission release with exact delete preconditions so stale releasers cannot remove a replacement admission, while still allowing drained cancelled jobs to terminate.

Co-authored-by: heihutu <[email protected]>
2026-07-26 07:36:58 +00:00
23f4683f20 test(ilm): cover queue terminal partial reports (#5277)
Cover manual transition terminal job records for queue closed and queue send timeout outcomes so backpressure summaries remain partial with the expected counters and queue snapshots.

Co-authored-by: heihutu <[email protected]>
2026-07-26 07:21:37 +00:00
a539b33583 test(perf): tolerate empty paired runner node args (#5275)
Co-authored-by: heihutu <[email protected]>
2026-07-26 07:06:27 +00:00
4e63ee962f test(perf): preflight GET smoke buckets (#5274)
Co-authored-by: heihutu <[email protected]>
2026-07-26 07:01:35 +00:00
12b7f22fca test(ilm): cover stale transition admission reclaim (#5273)
Co-authored-by: heihutu <[email protected]>
2026-07-26 06:55:36 +00:00
a047bbfcfb test(ilm): cover manual transition worker failure summary (#5272)
Co-authored-by: heihutu <[email protected]>
2026-07-26 06:45:06 +00:00
housemeandGitHub 556f8ed62f chore(deps): update flake.lock (#5271)
Flake lock file updates:

• Updated input 'nixpkgs':
    'github:NixOS/nixpkgs/20535e4' (2026-07-18)
  → 'github:NixOS/nixpkgs/335f073' (2026-07-24)
• Updated input 'rust-overlay':
    'github:oxalica/rust-overlay/afacd68' (2026-07-19)
  → 'github:oxalica/rust-overlay/fe21243' (2026-07-26)
2026-07-26 06:40:33 +00:00
02ad75e552 test(tier): cover committed prepare replay fanout (#5270)
Co-authored-by: heihutu <[email protected]>
2026-07-26 13:41:37 +08:00
21c85481b8 test(ilm): cover unknown manual transition worker loss (#5269)
test(ilm): cover unknown state after lost worker result

Co-authored-by: heihutu <[email protected]>
2026-07-26 13:41:26 +08:00
d5409845e2 test(perf): add exact 1MiB ABBA benchmark drivers (#5260)
* test(perf): add exact 1mib get abba harness

Add a backlog#1434 exact-1MiB GET attribution wrapper around the codec streaming smoke runner. The harness fixes the legacy versus codec-legacy ABBA profile order, the outer ReaderStream buffer axis, path-proof artifacts, and GET stage-metrics capture so reviewers can reproduce isolated-host attribution without drifting the experiment matrix.

Verification:

- scripts/test_get_1mib_abba_stage_metrics.sh

- bash -n scripts/run_get_1mib_abba_stage_metrics.sh scripts/test_get_1mib_abba_stage_metrics.sh

- git diff --check

Co-Authored-By: heihutu <[email protected]>

* test(perf): add exact 1MiB handoff ABBA driver

Add a backlog#1434 benchmark orchestrator for isolated-host exact-1MiB handoff evidence. The runner records A/B/B/A and C/D/D/C legs, server provenance, expected reader path labels, inner and outer buffer capacity labels, and stage metrics capture arguments while delegating workload execution to the existing enhanced batch benchmark driver.

Verification:

- scripts/test_exact_1mib_handoff_abba.sh

- bash -n scripts/run_exact_1mib_handoff_abba.sh scripts/test_exact_1mib_handoff_abba.sh

- make script-tests

- git diff --check

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 13:41:00 +08:00
7667b7aaf8 feat(admin): expose ILM expiry status (#5268)
Co-authored-by: heihutu <[email protected]>
2026-07-26 05:32:28 +00:00
29b4a98e74 test(ilm): cover same-scope async transition conflict (#5267)
Add a black-box e2e for concurrent manual transition durable jobs with the same bucket and prefix. The test asserts that exactly one request is accepted, the other returns 409 with the active job status and cancel endpoint, and the accepted job reaches a completed terminal status after queued transitions settle.

Verification:

- cargo fmt --all --check

- git diff --check

- CARGO_TARGET_DIR=/private/tmp/rustfs-target-1481-same-scope cargo test -p e2e_test --lib reliant::tiering::test_manual_transition_async_same_scope_conflict_reports_active_job -- --exact --nocapture

Co-authored-by: heihutu <[email protected]>
2026-07-26 04:51:51 +00:00
fa7499ce1c fix: treat blank console address as disabled (#5266)
Keep startup validation and console server config consistent for whitespace-only console listener addresses.

Co-authored-by: heihutu <[email protected]>
2026-07-26 04:35:42 +00:00
1397a4e7ca feat(ilm): expose lifecycle expiry scanner counters (#5262)
Co-authored-by: heihutu <[email protected]>
2026-07-26 12:11:03 +08:00
afaea2a3ec test(ilm): cover noncurrent version expiry e2e (#5264)
Co-authored-by: heihutu <[email protected]>
2026-07-26 12:10:34 +08:00
78dd2d40d3 test(ilm): cover deterministic manual transition cancel (#5263)
Add a focused ecstore regression that exercises active manual transition cancellation through the existing cancel_check hook after scan progress has been made. The test verifies the cancelled report, dry-run counters, and opaque resume cursor without relying on wall-clock timing.

Co-authored-by: heihutu <[email protected]>
2026-07-26 04:03:19 +00:00
342f9f94bc test(ilm): cover manual transition queue pressure status (#5265)
Co-authored-by: heihutu <[email protected]>
2026-07-26 04:02:44 +00:00
d887e7e31d test(internode): pin msgpack rollout gates (#5261)
Extend the internode gRPC benchmark driver with P2 request-only, canary, after, and rollback phases. The request-only phase proves that requesting msgpack-only without fleet confirmation keeps compatibility JSON fields, while canary and rollback materialize the operator states needed for mixed-version convergence without claiming real fleet soak evidence.

Verification:

- scripts/test_internode_grpc_ab_bench.sh

- bash -n scripts/run_internode_grpc_ab_bench.sh scripts/test_internode_grpc_ab_bench.sh

- git diff --check

Co-authored-by: heihutu <[email protected]>
2026-07-26 03:58:47 +00:00
0eb9dd5bdc test(perf): add pinned paired ABBA benchmark (#5259)
test(perf): add pinned paired abba bench

Add a backlog#1432 paired benchmark orchestrator that runs MinIO/RustFS in an A1/B1/B2/A2 schedule while requiring immutable server identity, source revision or release, and ACK contract labels. The runner delegates actual workload execution to run_object_batch_bench_enhanced.sh so node metrics, resource captures, and provenance stay in the shared artifact format.

Verification:

- scripts/test_pinned_paired_abba_bench.sh

- bash -n scripts/run_pinned_paired_abba_bench.sh scripts/test_pinned_paired_abba_bench.sh

- git diff --check

Co-authored-by: heihutu <[email protected]>
2026-07-26 03:51:35 +00:00
bdf3f0484d test(ilm): cover manual job status after restart (#5256)
* test(ilm): cover manual job status after restart

Co-Authored-By: heihutu <[email protected]>

* test(ilm): retry job status recovery after restart

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-26 03:29:47 +00:00
e897b2d7bb fix: reject overlapping console listener address (#5257)
Fail startup when the configured console listener resolves to the same listener port covered by the S3 address. This keeps SO_REUSEPORT from hiding an intra-process S3/console endpoint collision.

Co-authored-by: heihutu <[email protected]>
2026-07-26 03:27:13 +00:00
92f72c3912 fix(ilm): normalize cancelled manual job reports (#5255)
Ensure cancelled durable manual transition jobs expose a cancelled report both when worker results drain after a cancel request and when legacy persisted records are decoded.

Co-authored-by: heihutu <[email protected]>
2026-07-26 03:18:53 +00:00
6fa2d06731 fix(ilm): honor explicit object lock metadata (#5253)
Co-authored-by: heihutu <[email protected]>
2026-07-26 02:57:37 +00:00
18ff36c22d test(ilm): cover manual transition job auth matrix (#5254)
Co-authored-by: heihutu <[email protected]>
2026-07-26 02:55:38 +00:00
42fc840630 test(e2e): cover manual transition active cancel (#5252)
Co-authored-by: heihutu <[email protected]>
2026-07-26 02:51:24 +00:00
3fe935982f test(e2e): assert msgpack decode-error controls (#5251)
Extend the inline fast-path mixed-msgpack E2E collector to capture msgpack/json decode-error counters by direction, message, and codec. Assert those counters remain unchanged for the multipart, part-number, SSE, compression, and transition fallback-control scenarios.

Co-authored-by: heihutu <[email protected]>
2026-07-26 02:07:39 +00:00
6d8e196f36 feat(ilm): trace lifecycle expiry execution (#5250)
Co-authored-by: heihutu <[email protected]>
2026-07-26 01:58:48 +00:00
77b5e1b64c fix(ilm): report manual transition tier failures (#5238)
Co-authored-by: heihutu <[email protected]>
2026-07-25 18:02:37 +00:00
23a5db4012 fix(ilm): preserve lifecycle version groups (#5239)
* fix(ilm): evaluate complete version groups

Co-Authored-By: heihutu <[email protected]>

* feat(ilm): log replication expiry blocks

Co-Authored-By: heihutu <[email protected]>

* fix(ilm): diagnose incomplete noncurrent chains

Co-Authored-By: heihutu <[email protected]>

* test(ilm): cover purge-pending version groups

Add regression coverage for lifecycle-only version listing so purge-pending versions stay present for ILM evaluation while the public ListObjectVersions projection remains filtered.

Refs rustfs/backlog#1500

Co-Authored-By: heihutu <[email protected]>

* feat(ilm): log lifecycle evaluation failures

Emit structured lifecycle_evaluation_failed events when version group loading or evaluation fails during immediate and existing-object expiry scans.

Refs rustfs/backlog#1503

Co-Authored-By: heihutu <[email protected]>

* test(ilm): cover incomplete noncurrent chains

Pin the fail-closed behavior for noncurrent expiration when successor_mod_time is missing and reuse a stable structured event name for that skip path.

Refs rustfs/backlog#1502

Co-Authored-By: heihutu <[email protected]>

* test(ilm): cover one-day noncurrent expiry boundary

Add a runtime regression test proving NoncurrentVersionExpiration Days=1 stays inactive before expected_expiry_time and deletes exactly at the computed due boundary.

Refs rustfs/backlog#1504

Co-Authored-By: heihutu <[email protected]>

* fix(ilm): keep transition checks after incomplete expiry

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-25 17:42:02 +00:00
516f7fecc1 fix(tier): converge config after peer recovery (#5240)
Retry peer tier config reloads after committed mutations so recovered nodes converge without requiring a second admin change.

Co-authored-by: heihutu <[email protected]>
2026-07-25 17:25:37 +00:00
1e95e6d311 fix(ilm): harden durable transition admission (#5235)
Co-authored-by: heihutu <[email protected]>
2026-07-25 15:46:55 +00:00
3cbe3d6b94 fix(tier): reconcile committed mutation replay (#5230)
Co-authored-by: heihutu <[email protected]>
2026-07-25 15:20:54 +00:00
6974963e20 feat(ilm): add durable manual transition job store (#5229)
* feat(ilm): add manual transition job route contract

Refs #1479

Co-Authored-By: heihutu <[email protected]>

* feat(ilm): add durable manual transition job store

Co-Authored-By: heihutu <[email protected]>

* fix(ilm): harden durable transition job cancellation

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-25 14:54:14 +00:00
7ab0955f8b test(e2e): stabilize tier and storage class checks (#5228)
Co-authored-by: heihutu <[email protected]>
2026-07-25 14:21:52 +00:00
2cf5fd6bfc fix(getobject): avoid duplicate downstream-close metrics (#5231)
Co-authored-by: heihutu <[email protected]>
2026-07-25 14:13:47 +00:00
de2c337fae test(e2e): cover async transition limit partial (#5233)
Cover async manual transition jobs that finish as partial because maxObjects truncates the scan, including terminal cancel idempotence and unchanged report counters.

Co-authored-by: heihutu <[email protected]>
2026-07-25 14:05:47 +00:00
5988606e68 test(internode): extend fallback and transition coverage (#5232)
Add decode-error metrics for internode msgpack/json compatibility paths, extend the mixed fallback e2e assertions for transitioned multipart partNumber reads, and cover manual transition async status polling plus inactive-owner status behavior.

Co-authored-by: heihutu <[email protected]>
2026-07-25 13:26:23 +00:00
ffde6c43ee feat(ilm): add manual transition job route contract (#5221)
Refs #1479

Co-authored-by: heihutu <[email protected]>
2026-07-25 12:22:46 +00:00
8e83087ba4 fix(tier): handle mutation intent CAS races (#5227)
* test(scripts): expand internode grpc ab env coverage

* fix(tier): handle mutation intent CAS races

Make tier mutation intent advancement retry idempotently when an If-Match CAS loses to a matching committed peer update.

Expand four-node inline fallback E2E coverage for mixed msgpack controls, transition readiness evidence, and per-node environment overrides.

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-25 11:10:13 +00:00
2dc4d0b651 refactor(getobject): scope downstream close tagging (#5224)
Co-authored-by: heihutu <[email protected]>
2026-07-25 09:36:19 +00:00
2ee111ad8b feat(ilm): add durable manual transition jobs (#5223)
Refs #1479

Co-authored-by: heihutu <[email protected]>
2026-07-25 09:12:44 +00:00
9ddb30139d fix(getobject): distinguish downstream output closure (#5220)
fix(getobject): preserve internal broken pipe failures

Co-authored-by: heihutu <[email protected]>
2026-07-25 08:22:20 +00:00
ce41adfa9b test(ilm): cover manual transition e2e gaps (#5219)
* test(ilm): cover manual transition queue pressure

Co-Authored-By: heihutu <[email protected]>

* test(protos): serialize msgpack-only env tests

Co-Authored-By: heihutu <[email protected]>

---------

Co-authored-by: heihutu <[email protected]>
2026-07-25 07:00:24 +00:00
housemeandGitHub dfb0a20048 test(rpc): add corrupt-json decode coverage (#5216)
* test(rpc): add corrupt-json decode coverage

* test(ilm): assert manual transition status-less contract
2026-07-25 01:03:59 +00:00
187a060919 test(internode): pin msgpack gate rollback coverage (#5203)
Add test coverage for the msgpack-only request/fleet confirmation truth table and exact request JSON policy manifest.

Pin request and response rollback behavior so removing either gate restores JSON compatibility while both gates enter msgpack-only for eligible fields.

Co-authored-by: heihutu <[email protected]>
2026-07-24 15:16:23 +00:00
cda443bd81 feat(ilm): reject overlapping manual transition runs (#5202)
Co-authored-by: heihutu <[email protected]>
2026-07-24 14:56:42 +00:00
44b1916103 fix(getobject): enrich stream error context (#5201)
Co-authored-by: heihutu <[email protected]>
2026-07-24 14:47:56 +00:00
housemeandGitHub 20c4ea864a fix(ecstore): fix wide-prefix listing stalls and decode downstream logging (#5198)
* fix(ecstore): handle list stall and downstream decode logs

* docs(ecstore): keep wide-directory stall context for list_dir
2026-07-24 14:05:27 +00:00
d1c2c42c90 fix(internode): align msgpack benchmark gates (#5197)
Update the internode gRPC benchmark P2 env output to require both the msgpack-only request flag and the fleet-confirmed gate before measuring a true msgpack-only phase.

Document the dual-gate rollback semantics and add a dry-run script test so the benchmark driver cannot silently regress to the single-flag flow.

Co-authored-by: heihutu <[email protected]>
2026-07-24 13:32:44 +00:00
dd46de0945 fix(heal): report no-parity bitrot as unrecoverable (#5192)
Keep corrupted no-parity heal results on the integrity-failure path, preserve the object geometry in operator output, and document the recovery boundary for historical bad shards.

Co-authored-by: heihutu <[email protected]>
2026-07-24 20:20:40 +08:00