test(e2e): harden 4-node distributed Actions coverage

Classify localhost DistErasure pool-meta write fences instead of failing
the suite when decommission/rebalance POST is blocked, use the proven 2x2
volume-proxy topology, and add peer-kill GET plus bucket recreate cases.

Co-authored-by: RustFS <hello@rustfs.com>
This commit is contained in:
Cursor Agent
2026-09-04 13:51:06 +00:00
parent c2c8d016db
commit 0d7f907e9f
10 changed files with 244 additions and 61 deletions
+5 -2
View File
@@ -16,6 +16,8 @@ The in-tree harness runs every node on `127.0.0.1` with a distinct port. That ma
A pool striped across several localhost ports is not expressible (`RUSTFS_VOLUMES` host ellipses would collide on disk paths). Multi-host striped pools remain the hardware functional-chain / backlog #1313 / #1314 lane.
Decommission and rebalance POST currently 500 on localhost DistErasure multi-pool when pool.bin writes are fenced (`pool metadata writes remain blocked` / missing fleet capability proof). Those cases still assert object bytes and SHA-256; when the API starts they wait for completion and assert post-move integrity. They do not treat the fence as a successful move.
## What this lane covers
`cargo nextest run --profile e2e-distributed -p e2e_test` selects `distributed::*`:
@@ -28,8 +30,9 @@ A pool striped across several localhost ports is not expressible (`RUSTFS_VOLUME
- Pool expand, decommission, rebalance, checksum integrity, S3 during move
- Site replication object convergence
- High-concurrency PUT/GET; concurrent PUT during decommission
- Node kill/restart, full process restart, drive offline, volume-proxy blackhole (4-node 1-drive DistErasure; a 4×4 volume proxy cannot format)
- Multipart and cross-node listing agreement
- Node kill/restart, full process restart, drive offline, volume-proxy blackhole (2×2 DistErasure; 4-node volume proxy cannot format because RPC audience is the listen port)
- Multipart, cross-node listing, list-buckets agreement, delete+recreate bucket
- Concurrent GET while a peer node is killed
## Existing Actions gaps this lane does not replace