houseme
27468ebfa9
feat(get): consolidate GET performance optimization ( #3972 )
...
* feat(get): consolidate GET performance optimization
Consolidated implementation of all GET performance optimizations into
a single, well-organized commit replacing the previous patch-on-patch
approach.
## Changes
### Configuration (set_disk/mod.rs)
- Consolidated all GET optimization flags into a single organized section
- Enabled by default: codec streaming, metadata early-stop, page cache reclaim
- Added codec streaming multipart flag (default: disabled)
- Added version-aware early-stop flag (default: disabled)
- Added adaptive duplex buffer sizing based on object size
- All flags use OnceLock caching with rollout percentage support
### Metadata Early-Stop (set_disk/read.rs)
- Delete marker early-stop when quorum agrees
- Version-aware early-stop for versioned GET requests
- MetadataQuorumAccumulator enhanced with:
- delete_marker_votes tracking
- requested_version_id and matching_version_votes tracking
- version_early_stop_decision() method
- 6 new tests for version early-stop scenarios
### Codec Streaming (erasure/coding/decode_reader.rs)
- DualInFlight (2-stripe lookahead) enabled by default
### Decode Pipeline (erasure/coding/decode.rs)
- Stripe prefetch count configuration
- Bitrot-decode overlap configuration
### Disk Layer (disk/local.rs)
- O_DIRECT read configuration constants (preparation)
### Metrics (io-metrics/lib.rs)
- BytesPool acquisition/return metrics
- Metadata phase duration with early-stop label
- Total duration with reader_path label
### Diagnostics (diagnostics/)
- Early-stop reason constants
- Pool tier/outcome label constants
### Observability (.docker/observability/)
- 3 Grafana dashboards for GET optimization monitoring
- Prometheus alert rules (6 alerts: 3 critical, 3 warning)
- Updated README.md and README_ZH.md with usage docs
### Config (config/src/constants/runtime.rs)
- Page cache reclaim read enabled by default
## Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| RUSTFS_GET_CODEC_STREAMING_ENABLE | true | Codec streaming base flag |
| RUSTFS_GET_CODEC_STREAMING_ROLLOUT_PCT | 100 | Codec streaming rollout % |
| RUSTFS_GET_CODEC_STREAMING_MULTIPART_ENABLE | false | Multipart codec streaming |
| RUSTFS_GET_METADATA_EARLY_STOP_ENABLE | true | Early-stop base flag |
| RUSTFS_GET_METADATA_EARLY_STOP_ROLLOUT_PCT | 100 | Early-stop rollout % |
| RUSTFS_GET_METADATA_VERSION_EARLY_STOP_ENABLE | false | Version-aware early-stop |
| RUSTFS_OBJECT_FILE_CACHE_RECLAIM_READ_ENABLE | true | Page cache reclaim |
| RUSTFS_OBJECT_DIRECT_IO_READ_ENABLE | false | O_DIRECT (preparation) |
| RUSTFS_GET_DECODE_STRIPE_PREFETCH_COUNT | 1 | Stripe prefetch |
| RUSTFS_GET_BITROT_DECODE_OVERLAP_ENABLE | false | Bitrot-decode overlap |
| RUSTFS_GET_CODEC_STREAMING_MAX_INFLIGHT | 2 | DualInFlight stripes |
## Rollback
All optimizations can be disabled via environment variables:
RUSTFS_GET_CODEC_STREAMING_ENABLE=false
RUSTFS_GET_METADATA_EARLY_STOP_ENABLE=false
RUSTFS_OBJECT_FILE_CACHE_RECLAIM_READ_ENABLE=false
Co-Authored-By: heihutu <heihutu@gmail.com >
* test(get): add stress test scripts for GET optimization validation
- quick-validate-get-optimization.sh: Quick 5-minute validation
- stress-test-get-optimization.sh: Full 30+ minute stress test
- README-stress-test.md: Usage documentation
Co-Authored-By: heihutu <heihutu@gmail.com >
* test(ecstore): align file cache reclaim defaults
* chore(deps): update redis and erasure codec
* test(ecstore): align decode fill policy default
* test(ecstore): align metadata early-stop default
* fix(ecstore): keep metadata early stop opt-in
---------
Co-authored-by: heihutu <heihutu@gmail.com >
2026-06-28 07:14:07 +08:00
Zhengchao An
82bbef0b60
test: cover runtime and repair preservation ( #3964 )
2026-06-27 23:34:59 +08:00
Zhengchao An
1b3dea012e
refactor: route ecstore runtime globals through facade ( #3941 )
2026-06-27 12:27:03 +08:00
GatewayJ
675597ec16
fix(ecstore): handle stalled recovery reads and listings ( #3790 )
...
* fix(ecstore): handle stalled recovery reads and listings
* fix(rio): start HTTP stall timeout on read
* fix(ecstore): handle stalled reads and partial lists
* fix(ecstore): retire stalled shards and list errors
* fix(ecstore): preserve list merge lookahead entries
* fix(ecstore): bound zero-copy shard reads
* fix(ecstore): hedge stalled shard reads
* fix(ecstore): retire abandoned shard reads
* fix(ecstore): include part identity in metadata quorum
* fix(ecstore): validate heal shard sources
* fix(ecstore): verify reconstructed read shards
* chore(ecstore): log slow object read stages
* fix(heal): throttle auto heal during recovery
* fix(scanner): yield to foreground reads
* fix(scanner): track streaming object reads
* fix(ecstore): avoid false read heal fanout
* fix(ecstore): verify codec streaming reconstruction sources
* fix(ecstore): preserve quorum progress on slow shards
* fix(storage): restore read timeout facade
* fix(ecstore): retain fallback readers after quorum
* chore: allow decode helper argument lists
---------
Co-authored-by: overtrue <anzhengchao@gmail.com >
2026-06-27 10:21:09 +08:00
cxymds
7820a55fdc
fix: decouple readiness from cluster health ( #3912 )
...
* fix: include foreground write pressure
* fix: split readiness and cluster health probes
* fix: publish ready on node readiness
* fix: bound cluster health collection
* test: pin health probe collector routing
* fix: qualify app storage ECStore type
* test(admin): narrow runtime capabilities topology assertion
---------
Co-authored-by: houseme <housemecn@gmail.com >
2026-06-26 21:55:18 +08:00
Zhengchao An
72ae43cb90
refactor: segment external storage contract imports ( #3908 )
2026-06-26 16:44:59 +08:00
cxymds
ae641a33ac
feat(admin): expose global heal progress ( #3897 )
2026-06-26 15:19:48 +08:00
cxymds
90638bfc19
fix(heal): add backpressure to repair admission ( #3900 )
2026-06-26 15:19:37 +08:00
Zhengchao An
1f7e159388
refactor: segment external storage api boundaries ( #3903 )
2026-06-26 15:10:49 +08:00
cxymds
0b9c8a7731
fix(heal): align scanner repair safety with quorum errors ( #3887 )
...
* fix(heal): avoid task-level delete on repair failure
* fix(scanner): avoid recreate for scanner heal checks
* fix(heal): preserve typed quorum failures
* test(heal): satisfy clippy bool assertion
2026-06-26 08:58:27 +08:00
Zhengchao An
4d6ea453a7
refactor: route scanner heal storage boundaries ( #3888 )
2026-06-26 05:24:41 +08:00
cxymds
86e9362459
fix(heal): canonicalize scanner object-dir repairs ( #3864 )
2026-06-25 22:07:38 +08:00
cxymds
55cbfe256b
fix(heal): skip scanner object-dir recreate misses ( #3839 )
2026-06-25 14:52:24 +08:00
cxymds
e6f04bed47
fix(heal): skip missing object-dir candidates ( #3834 )
2026-06-25 09:38:08 +08:00
cxymds
eef8f43251
fix: harden lock timeouts, health, and heal paths ( #3815 )
2026-06-24 15:48:06 +08:00
cxymds
5eda332fee
fix(heal): recover shards after node rejoin ( #3814 )
2026-06-24 12:51:16 +08:00
houseme
a6878e8fce
fix(runtime): remove startup panic fallbacks ( #3754 )
...
* fix(runtime): remove startup panic fallbacks
* test(runtime): cover buffer profile fallback safety
* test(runtime): reduce panic-style assertions
* fix(runtime): expose fallible env config setup
* test(runtime): simplify permit acquisition assertion
* test(runtime): tighten operation helper assertions
* fix(filemeta): stop panicking on invalid free version ids
* fix(init): satisfy buffer profile clippy lints
* fix(lock): harden fast lock config construction
* chore(checks): refresh layer dependency baseline
---------
Signed-off-by: houseme <housemecn@gmail.com >
2026-06-23 12:31:26 +08:00
Zhengchao An
30559f7e1b
refactor: collapse test fuzz ecstore thin bridges ( #3765 )
2026-06-23 07:04:51 +08:00
Zhengchao An
198fd4f150
refactor(runtime): route RustFS runtime consumers through storage owner ( #3756 )
2026-06-23 05:17:56 +08:00
Zhengchao An
e0b79aa00c
refactor: expose test fuzz owner symbols ( #3752 )
2026-06-23 01:11:46 +08:00
Zhengchao An
6da61b44e5
refactor: expose remaining external owner symbols ( #3751 )
2026-06-22 23:35:50 +08:00
Zhengchao An
88a87b3e8f
refactor: centralize external ECStore facade aliases ( #3746 )
2026-06-22 20:37:13 +08:00
Zhengchao An
d3796d6c10
refactor: remove external owner compat bridges ( #3741 )
2026-06-22 18:28:35 +08:00
Zhengchao An
b63b076275
refactor: remove remaining compatibility bridges ( #3738 )
2026-06-22 16:53:14 +08:00
安正超
7d81183cf1
refactor: use relative heal test compat consumers ( #3733 )
2026-06-22 14:55:12 +08:00
安正超
de158743c3
refactor: split compat facade imports ( #3716 )
2026-06-22 09:53:22 +08:00
安正超
c13f42e9a0
refactor: wrap disk rpc compat trait methods ( #3707 )
2026-06-22 06:31:24 +08:00
安正超
d39815470e
refactor: prune consumer storage compat paths ( #3704 )
2026-06-22 02:31:30 +08:00
安正超
6b3d96fde3
refactor: prune trait import compat re-exports ( #3699 )
2026-06-21 23:17:58 +08:00
安正超
0cf9d07e40
refactor: prune test protocol compat aliases ( #3693 )
2026-06-21 18:09:39 +08:00
安正超
0985225448
refactor: consolidate ecstore public facade ( #3678 )
...
* refactor: expand ecstore compatibility facade
* test: enforce ecstore api facade imports
* refactor: hide legacy ecstore layout modules
* refactor: hide ecstore facade root modules
2026-06-21 09:09:11 +08:00
安正超
9b3fda9e30
refactor: route ecstore public surfaces through api ( #3673 )
2026-06-21 05:23:23 +08:00
Henry Guo
2052336a53
fix(heal): track root erasure-set rebuild status ( #3625 )
2026-06-19 21:33:58 +08:00
安正超
afe46c01e7
refactor: prune consumer ecstore object aliases ( #3622 )
2026-06-19 21:33:00 +08:00
安正超
54ffbedbc8
refactor: remove ecstore operation compat facades ( #3608 )
2026-06-19 17:01:12 +08:00
安正超
ada6f7587e
refactor: flatten test harness storage compat aliases ( #3596 )
...
* refactor: flatten test harness storage compat aliases
* refactor: flatten rustfs storage compat aliases (#3597 )
* refactor: prune runtime storage compat surface (#3598 )
* refactor: flatten runtime secondary storage compat (#3599 )
* docs: add scheduler placement profiling baselines (#3600 )
* feat: add observability topology capability contracts (#3601 )
2026-06-19 08:30:47 +08:00
安正超
b1c6578df1
refactor: narrow test harness compatibility surfaces ( #3592 )
2026-06-19 07:10:52 +08:00
安正超
b14e49e84e
refactor: narrow IAM and Swift compatibility surfaces ( #3587 )
...
* refactor: narrow IAM and Swift compatibility surfaces
* refactor: narrow heal and scanner compatibility surfaces (#3588 )
* refactor: narrow RustFS runtime compatibility surfaces (#3591 )
2026-06-19 03:06:57 +08:00
安正超
205f964dc5
refactor: tighten storage compat store_api aliases ( #3582 )
...
* refactor: collapse storage compat store_api modules
* chore: guard storage compat store_api aliases
2026-06-18 22:50:02 +08:00
安正超
c28fee0013
refactor: continue storage api contract cleanup ( #3580 )
...
* refactor: move delete object contracts to storage api
* refactor: narrow store api compatibility exports
* refactor: route table catalog test through storage compat
2026-06-18 22:42:02 +08:00
安正超
7b0cb9e725
refactor: prune storage compatibility re-export allowances ( #3579 )
...
* refactor: prune storage compatibility re-export allowances
* fix: reject whitespace-padded dot path segments
2026-06-18 21:14:24 +08:00
安正超
f3fcdd4ba2
refactor: narrow remaining storage compatibility exports ( #3578 )
2026-06-18 19:18:32 +08:00
安正超
08371a6e09
refactor: narrow storage compatibility exports ( #3576 )
2026-06-18 18:31:14 +08:00
安正超
c098184c49
refactor: clean runtime and test storage boundaries ( #3573 )
...
* refactor: clean runtime observability select boundaries
* refactor: clean test harness fuzz storage boundaries
2026-06-18 18:09:25 +08:00
安正超
bdb2461b55
refactor: clean scanner heal runtime boundaries ( #3571 )
2026-06-18 16:12:27 +08:00
安正超
0e7e2660bb
refactor: clean remaining storage DTO imports ( #3568 )
2026-06-18 14:44:46 +08:00
安正超
acdf439371
refactor: clean external DTO consumers ( #3566 )
...
* refactor: clean external DTO consumers
* fix: handle empty erasure shard recovery
2026-06-18 14:22:44 +08:00
安正超
57403525ee
refactor: move heal and namespace contracts ( #3560 )
2026-06-18 11:00:21 +08:00
安正超
e5cad7ed20
refactor: move object operation contracts ( #3559 )
2026-06-18 09:48:13 +08:00
安正超
3fb4cb3d65
refactor: move list operations contract ( #3550 )
2026-06-18 08:48:18 +08:00