cxymds
ddd35badad
fix(ecstore): avoid offline disks on admin timeout ( #3263 )
...
* fix(ecstore): avoid offline disks on admin timeout
* fix(ecstore): handle poisoned admin cache locks
* fix(ecstore): recover poisoned admin cache on success
---------
Co-authored-by: houseme <housemecn@gmail.com >
Co-authored-by: 安正超 <anzhengchao@gmail.com >
2026-06-08 08:35:36 +00:00
安正超
78df276d25
fix: return 503 on lock contention instead of 500 ( #3274 )
...
* fix(ecstore): skip hidden metadata in walk limit
* fix(ecstore): match walk limit to visible versions
* fix(ecstore): avoid decoding all versions for limit
* fix: return 503 on lock contention instead of 500
When concurrent PUTs to the same key contend for the namespace write
lock, lock timeout and conflict errors were wrapped as
StorageError::other(...) → StorageError::Io(...), which fell through
to S3ErrorCode::InternalError (500) in the error mapping.
Only QuorumNotReached was correctly mapped to ServiceUnavailable (503);
all other lock errors (Timeout, AlreadyLocked, etc.) became 500.
Fix: map_namespace_lock_error now returns StorageError::Lock(err) for
non-quorum lock errors, and StorageError::Lock is mapped to
S3ErrorCode::ServiceUnavailable in the HTTP error conversion.
Affected paths:
- crates/ecstore/src/set_disk/lock.rs
- crates/ecstore/src/store/object.rs
- crates/ecstore/src/store/bucket.rs (make_bucket, delete_bucket)
- rustfs/src/app/object_usecase.rs (copy_object)
Regression test: test_concurrent_put_same_key_never_returns_500
* test: fail on unexpected lock contention errors
---------
Co-authored-by: houseme <housemecn@gmail.com >
2026-06-08 02:20:21 +00:00
cxymds
61f0dfbc40
fix(ecstore): invalidate wiped disk id cache ( #3251 )
2026-06-07 04:25:38 +00:00
安正超
60f14cb0f1
fix(bucket-encryption): populate default KMS key for SSE-KMS without key ID ( #3225 )
...
* fix(bucket-encryption): populate default KMS key for SSE-KMS without key ID
When PutBucketEncryption receives SSE-KMS configuration without a specific
KMS key ID, query the KMS service for the default key and populate
KMSMasterKeyID before storing. This ensures GetBucketEncryption responses
include the key ID, which S3 clients like mc rely on to distinguish SSE-KMS
from SSE-S3 in their display logic.
Fixes #3039
* test(kms): cover empty bucket encryption key ID
* fix(bucket-encryption): require default KMS key
2026-06-06 02:57:48 +00:00
houseme
2b82432f9e
fix(ecstore): send valid ping body in remote locker ( #3112 )
...
* fix(ecstore): send valid ping body in remote locker
Build ping requests with a flatbuffer payload so health checks remain compatible with the ping response parser after restart.
* fix(bench): use multi-host warp target during failover
Normalize comma-separated warp host lists in run_object_batch_bench and let four-node failover bench pass BENCH_WARP_HOSTS so rolling restart does not pin load to a single restarting node.
* feat(health): add compat health probes with busy/KMS checks
- Add /health/live liveness probe endpoint
- Add busy protection (429) for readiness probes, gated by RUSTFS_HEALTH_COMPAT_BUSY_CHECK_ENABLE
- Add KMS readiness check for /health/ready, gated by RUSTFS_HEALTH_COMPAT_KMS_READY_CHECK_ENABLE
- Add lock quorum status caching with TTL to reduce RPC pressure
- Consolidate health response building into build_health_response_parts
- Register /health/live in console router and readiness gate
- Remove MinIO references from newly added health code
* fix(health): decouple kms readiness from lock quorum
2026-05-29 08:02:50 +00:00
安正超
b436272642
fix: tolerate stalled listing readers after quorum ( #3110 )
...
Co-authored-by: loverustfs <hello@rustfs.com >
2026-05-29 08:57:57 +08:00
安正超
d9c683decc
fix: retry namespace lock quorum contention ( #3098 )
...
* fix: retry namespace lock quorum contention
* fix(lock): treat remote lock rpc failures as hard
* fix(lock): classify lock contention timeout and avoid hard rollback blocks
* fix(lock): handle namespace lock quorum timeouts
* fix(lock): refine quorum contention handling
* fix(lock): refine unrecoverable quorum handling logs
* fix: address namespace lock quorum review feedback
* test: stabilize batch quorum timing tests
* fix(lock): classify remote quorum failures
* fix: drop remote lock timeout grace period
* fix: satisfy clippy on lock quorum error
* fix: classify remote lock rpc timeouts as hard failures
* fix: fast fail impossible lock quorum attempts
* fix: retry on transient timeout with pending cleanup
* fix: evict remote lock timeout connections
* refactor: avoid duplicate timeout eviction warning
---------
Co-authored-by: houseme <housemecn@gmail.com >
2026-05-28 01:35:00 +00:00
overtrue
f77e979e4a
fix: satisfy clippy for Snowball traversal test
2026-05-28 09:16:00 +08:00
overtrue
95836a0a4d
fix: reject Snowball extract path traversal
2026-05-28 08:32:13 +08:00
安正超
0875f09a39
fix: rebuild wiped disks during admin heal ( #3084 )
...
* fix: rebuild wiped disks during admin heal
* Preserve forceStart heal admission semantics
* Address heal regression test review comments
* fix(heal): address admin heal review comments
* fix(heal): fix force-start dedup and test polling
* fix(heal): address unresolved review comments
* fix(heal): simplify dedup key for clippy
---------
Co-authored-by: houseme <housemecn@gmail.com >
2026-05-26 21:54:29 +08:00
Demo Macro
5f5b1207e0
fix(ecstore): correct is_truncated logic in ListObjectsV2 pagination ( #2997 )
2026-05-25 14:59:19 +08:00
houseme
73bde843d6
refactor(s3): consolidate semantic boundaries and remove s3-common ( #3012 )
...
* refactor(common): introduce rustfs-data-usage core crate
* refactor(concurrency): migrate workers crate into concurrency
* refactor(crypto): migrate appauth token APIs into crypto
* fix docs urls
* remove unused crate
* refactor(data-usage): switch consumers to rustfs-data-usage
* chore(fmt): apply cargo fmt and lockfile sync
* refactor(common): remove data_usage compatibility re-export
* refactor(capacity): move capacity_scope to object-capacity
* refactor(io-metrics): relocate internode metrics from common
* refactor(common): decouple scanner report from madmin
* chore(fmt): normalize import ordering after pre-commit
* refactor(s3): split s3 types and ops crates
* refactor(s3): centralize event version and safe parsing
* refactor(s3): add op-event compatibility guardrails
* refactor(s3): add runtime op-event mismatch observability
* refactor(s3): extract delete event mapping helper
* refactor(s3): extract put event mapping helper
* refactor(s3): consolidate remaining event semantic helpers
* refactor(s3): add op-event coverage checks and observability alerts
* refactor(s3-ops): consolidate op-event semantic mapping
* refactor(scanner): remove last_minute wrapper module
* refactor(scanner): consolidate duplicated data usage models
2026-05-19 12:50:25 +00:00
GatewayJ
e0729f5f4d
fix(policy): align action-family validation and defaults ( #2984 )
...
* fix(policy): align action-family validation and defaults
* test(e2e): add accountinfo service-account roundtrip
* test(policy): add mixed action family cases
2026-05-16 11:19:04 +00:00
yihong
824c4f7673
docs: fix some dead links ( #2975 )
...
Signed-off-by: yihong0618 <zouzou0208@gmail.com >
Co-authored-by: houseme <housemecn@gmail.com >
2026-05-16 10:06:53 +08:00
escapecode
5cda460451
fix(sftp): preserve OPEN-time client attrs as object metadata ( #2913 )
...
Co-authored-by: houseme <housemecn@gmail.com >
2026-05-15 00:32:06 +00:00
Henry Guo
c1bcee327c
fix(notify): keep live listen events active when disabled ( #2952 )
...
Co-authored-by: houseme <housemecn@gmail.com >
2026-05-13 17:10:14 +00:00
Sergei Z.
8c49671161
Fix #2775 recursive list handling in LocalDisk::scan_dir() ( #2923 )
...
Co-authored-by: houseme <housemecn@gmail.com >
Co-authored-by: 安正超 <anzhengchao@gmail.com >
2026-05-13 14:36:23 +00:00
weisd
4ea805cbc0
fix: preserve pagination when max keys exceed limit ( #2943 )
...
Co-authored-by: houseme <housemecn@gmail.com >
2026-05-13 12:48:38 +00:00
houseme
129cb0f920
fix: make HeadObject consistent after write completion ( #2936 )
2026-05-13 03:27:38 +00:00
Henry Guo
941986b331
test(e2e): gate protocol runner by requested features ( #2912 )
2026-05-11 13:59:24 +00:00
houseme
53ec1b95d8
keep sftp e2e tests buildable ( #2897 )
2026-05-10 11:52:15 +00:00
安正超
c419cff348
test(sftp): cover init negotiation and platform gating ( #2896 )
2026-05-10 05:59:10 +00:00
escapecode
96b293bf8a
feat(sftp): add SFTPv3 protocol support ( #2875 )
...
Co-authored-by: houseme <housemecn@gmail.com >
2026-05-10 03:48:42 +00:00
houseme
8892cbbdd7
feat: enhance WebDAV support with features and directory operations ( #2856 ) ( #2892 )
...
Signed-off-by: giter <giter@users.noreply.github.com >
Signed-off-by: 安正超 <anzhengchao@gmail.com >
Co-authored-by: giter <giter@users.noreply.github.com >
Co-authored-by: 安正超 <anzhengchao@gmail.com >
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
Co-authored-by: Lijiajie <lijiajie@ffcode.net >
Co-authored-by: cxymds <Cxymds@qq.com >
Co-authored-by: loverustfs <hello@rustfs.com >
Co-authored-by: 唐小鸭 <tangtang1251@qq.com >
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: houseme <4829346+houseme@users.noreply.github.com >
2026-05-09 16:45:09 +00:00
Sergei Z.
6275918d92
fix: empty-body requests without content length ( #2888 )
...
Co-authored-by: houseme <housemecn@gmail.com >
Co-authored-by: OmX <omx@oh-my-codex.dev >
2026-05-09 14:05:53 +00:00
houseme
fd37a7d01e
fix(targets): probe webhook health by host port ( #2854 )
2026-05-07 11:52:45 +00:00
GatewayJ
3130670157
test(object-lock): cover default retention delete marker ( #2836 )
2026-05-06 21:14:00 +00:00
GatewayJ
9e93d3f47a
fix(object-lock): materialize default retention metadata ( #2824 )
...
Signed-off-by: houseme <housemecn@gmail.com >
Co-authored-by: cxymds <Cxymds@qq.com >
Co-authored-by: loverustfs <hello@rustfs.com >
Co-authored-by: houseme <housemecn@gmail.com >
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
2026-05-06 13:48:12 +00:00
安正超
50ddec3ffc
fix: preserve data on self metadata copy ( #2819 )
...
Co-authored-by: cxymds <Cxymds@qq.com >
2026-05-06 06:28:36 +00:00
GatewayJ
090d60e00a
fix(auth): authorize DeleteObjects per key ( #2814 )
2026-05-06 00:47:36 +00:00
安正超
3208f930c5
fix(s3): advertise byte ranges on head object ( #2802 )
2026-05-05 04:29:25 +00:00
weisd
334184b005
fix(replication): prevent target state loss across buckets ( #2704 )
2026-04-27 09:27:33 +00:00
weisd
468dc3aebd
fix(replication): fan out single-bucket rules to all targets ( #2701 )
2026-04-27 06:51:19 +00:00
cxymds
94f64acc87
fix(site-replication): sync IAM and bucket replication ( #2671 )
2026-04-25 01:33:43 +00:00
唐小鸭
d949d4e794
fix: avoid sending HEAD bodies over TLS HTTP/2 ( #2648 )
...
Signed-off-by: 唐小鸭 <tangtang1251@qq.com >
Signed-off-by: houseme <housemecn@gmail.com >
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com >
Co-authored-by: houseme <housemecn@gmail.com >
Co-authored-by: loverustfs <hello@rustfs.com >
2026-04-25 01:33:08 +00:00
weisd
f08b592c6f
fix(storage): list prefix children behind marker objects ( #2643 )
2026-04-22 11:23:27 +00:00
weisd
a0f1bb4ff0
fix(lock): prevent stale distributed object locks ( #2633 )
2026-04-22 02:12:33 +00:00
安正超
177fe2ab44
fix(replication): clean targets when deleting config ( #2599 )
2026-04-19 11:33:01 +00:00
安正超
1d1f00470d
test(s3): cover signed equals object reads ( #2598 )
2026-04-19 02:11:16 +00:00
安正超
b8c788ffca
fix: handle raw URI paths in SigV4 ( #2593 )
...
Co-authored-by: houseme <housemecn@gmail.com >
2026-04-18 17:09:00 +00:00
安正超
f9b5ad17a9
fix(s3): ignore empty conditional ETag headers ( #2592 )
...
Co-authored-by: houseme <housemecn@gmail.com >
2026-04-18 15:27:46 +00:00
houseme
6ce24f3b63
feat(lifecycle): improve ILM compatibility and scanner runtime config ( #2534 )
...
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: houseme <4829346+houseme@users.noreply.github.com >
Co-authored-by: cxymds <Cxymds@qq.com >
2026-04-16 10:28:03 +00:00
Tunglies
579b124726
lint: clippy rules or_fun_call ( #2561 )
...
Co-authored-by: houseme <housemecn@gmail.com >
2026-04-16 02:48:39 +00:00
Tunglies
f57dd5a3c7
chore(lint): clippy rules needless_collect ( #2522 )
2026-04-15 10:00:03 +00:00
安正超
68d3dba9fc
fix: revert standalone #2351 artifacts (phase 5) ( #2535 )
2026-04-14 22:35:05 +08:00
安正超
458086dc80
fix(get): remove GET chunk fast path ( #2507 )
2026-04-12 23:12:23 +08:00
houseme
64508ae770
fix(storage): align archive content-encoding with S3 semantics ( #2496 )
2026-04-12 02:14:52 +08:00
Mohamed Zenadi
c8c71e34b6
fix(storage): fix critical bug in range calculation ( #2493 )
...
Signed-off-by: Mohamed Zenadi <zeapo@users.noreply.github.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2026-04-12 00:20:15 +08:00
houseme
b8c45fc9e3
fix(get-object): harden GET fast path against mid-stream regressions ( #2472 )
2026-04-10 21:38:29 +08:00
weisd
a8a2aaa460
fix(ecstore): avoid duplicate keys in ListObjectsV2 ( #2467 )
2026-04-10 11:29:23 +08:00