Zhengchao An
31df11beb7
refactor(replication): isolate multipart and target adapters ( #4211 )
...
* refactor(replication): isolate multipart part planning
* refactor(replication): isolate target head adapters
2026-07-03 08:06:17 +08:00
cxymds
83c32a7a40
fix(lifecycle): avoid blocking expiry enqueue ( #4197 )
2026-07-03 00:45:34 +08:00
Zhengchao An
dd6b5525e4
fix(ecstore): remove reachable panics in tiering, replication, and heal paths ( #4205 )
...
* fix(ecstore): remove reachable panics in tiering, replication, and heal paths
- Parse x-amz-expiration leniently in tier PUT responses; any lifecycle
rule on the remote tier bucket returns an RFC1123 date that the previous
ISO8601 unwrap turned into a panic of the ILM transition worker
- Skip invalid user-metadata header values (with a warning) when building
tier and replication PUT headers instead of panicking on non-ASCII input
- Heal: tolerate absent data_dir for delete markers and remote objects
- transition_object: don't unwrap version_id on unversioned buckets when
recording partial writes for offline disks
- Admin server info: use port_or_known_default() so default-port (80/443)
endpoints don't panic is_server_resolvable
- Tier ListObjectsV2 client: decode response body with from_utf8_lossy
- walk_internal: log merge_entry_channels errors instead of dropping them
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* fix(ecstore): fail heal explicitly when data_dir is missing
Address review feedback: unwrap_or_default() silently substituted a nil
UUID when latest metadata lacked data_dir. Delete markers and remote
objects legitimately have no data_dir and skip the data-heal block, but
for a regular object a missing data_dir means corrupt metadata — return
FileCorrupt with a descriptive log instead of building part paths under
a nil UUID directory.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-07-03 00:14:11 +08:00
Zhengchao An
29899f4731
refactor(replication): isolate queue backpressure decisions ( #4202 )
2026-07-02 23:28:45 +08:00
cxymds
f9cf4ff2bf
fix(ecstore): surface multipart cleanup delete errors ( #4198 )
2026-07-02 22:36:48 +08:00
cxymds
5404ab155b
fix(ecstore): precheck decommission capacity ( #4196 )
2026-07-02 22:36:29 +08:00
cxymds
cf33bcc742
fix(ecstore): hold read locks for streaming readers ( #4195 )
2026-07-02 22:36:12 +08:00
cxymds
91a02914cc
fix(ecstore): retry multipart abort cleanup ( #4194 )
2026-07-02 22:35:56 +08:00
cxymds
d1a6033191
fix(ecstore): recheck source cleanup under lock ( #4193 )
2026-07-02 22:35:31 +08:00
cxymds
4dc75b8760
fix: backpressure replication mrf saves ( #4180 )
2026-07-02 22:34:30 +08:00
cxymds
c7a0178994
fix: honor replication status metadata ( #4178 )
...
Co-authored-by: overtrue <anzhengchao@gmail.com >
2026-07-02 22:33:41 +08:00
cxymds
6ed5c8fcd6
fix: fail unsupported replication actions ( #4182 )
...
Co-authored-by: overtrue <anzhengchao@gmail.com >
2026-07-02 22:33:16 +08:00
Zhengchao An
902bfa554b
fix: collapse nested if to satisfy clippy::collapsible_if lint ( #4190 )
2026-07-02 17:15:15 +08:00
cxymds
71e9e81257
fix: finalize replication resync workers ( #4175 )
2026-07-02 16:32:33 +08:00
Zhengchao An
f0adabbe90
refactor(replication): move object config bridge ( #4188 )
...
* refactor(replication): move object config bridge
* refactor(replication): centralize log constants
2026-07-02 16:32:02 +08:00
Zhengchao An
1a9952c3fe
refactor(replication): move target option builders ( #4186 )
2026-07-02 15:54:48 +08:00
Zhengchao An
008b7fcb6f
refactor(replication): move heal queue routing contracts ( #4176 )
...
* refactor(replication): move heal queue routing contracts
* fix(replication): satisfy feature clippy
2026-07-02 15:15:08 +08:00
Zhengchao An
98a0cca4a2
refactor(replication): move resync decision contracts ( #4173 )
...
* refactor(replication): move resync decision contracts
* fix(replication): avoid resync status clones
2026-07-02 14:13:05 +08:00
Zhengchao An
48f8443626
refactor(replication): move object compare contracts ( #4171 )
2026-07-02 13:19:47 +08:00
Zhengchao An
d666028cdc
refactor(replication): move resync classifiers into crate ( #4170 )
2026-07-02 12:57:59 +08:00
Zhengchao An
953a080b37
refactor(replication): move runtime sizing contracts ( #4169 )
2026-07-02 12:33:11 +08:00
Zhengchao An
473132f36b
refactor(replication): move stats contracts into crate ( #4168 )
2026-07-02 12:14:36 +08:00
Zhengchao An
8ce0f824cf
refactor(replication): move queue contracts into crate ( #4167 )
2026-07-02 11:40:49 +08:00
Zhengchao An
2cf856a51d
Move replication delete worker contract into crate ( #4166 )
...
refactor(replication): move delete worker contract into crate
2026-07-02 11:03:24 +08:00
Zhengchao An
df6ce41acd
Move replication operation contracts into crate ( #4165 )
...
refactor(replication): move operation contracts into crate
2026-07-02 10:48:02 +08:00
Zhengchao An
b57820a486
refactor(replication): move config contracts into crate ( #4162 )
2026-07-02 10:17:48 +08:00
Zhengchao An
18b79ccc2a
refactor(replication): route filemeta paths through crate ( #4161 )
2026-07-02 09:08:47 +08:00
houseme
7a075c91da
perf: avoid eager parity reader setup ( #4133 )
2026-07-02 08:49:08 +08:00
Zhengchao An
18d89d1e31
refactor(replication): route metadata contracts through crate ( #4160 )
2026-07-02 08:48:42 +08:00
Zhengchao An
0f4f4a6367
fix(replication): avoid target status map allocation ( #4159 )
2026-07-02 05:08:42 +08:00
Zhengchao An
e05c281176
refactor(replication): centralize object replication state parsing ( #4158 )
...
* refactor(replication): centralize object replication state parsing
* fix(replication): gate test-only msgpack import
2026-07-02 04:41:54 +08:00
Zhengchao An
2de38d3e5c
refactor(replication): move mrf wire format to replication crate ( #4157 )
...
* refactor(replication): move mrf wire format to replication crate
* refactor(replication): match re-exported error variants
2026-07-02 04:27:53 +08:00
Zhengchao An
e80391f1aa
refactor(replication): extract resync contracts crate ( #4154 )
2026-07-02 01:30:01 +08:00
GatewayJ
7728c9f203
fix(ecstore): require commit quorum for latest metadata ( #4117 )
2026-07-02 00:41:11 +08:00
GatewayJ
f7769884ff
fix(lifecycle): honor expired delete marker semantics ( #4124 )
2026-07-01 22:31:08 +08:00
GatewayJ
a60b6310a7
fix(lifecycle): block actions on replication state ( #4125 )
2026-07-01 22:31:00 +08:00
Zhengchao An
22cbd41ee9
refactor(ecstore): add replication owner bridges ( #4141 )
...
* refactor(ecstore): add replication owner bridges
* fix(ecstore): tighten replication owner guards
2026-07-01 21:51:26 +08:00
Zhengchao An
c0dfc260ca
refactor(ecstore): add replication object bridge ( #4140 )
2026-07-01 19:24:20 +08:00
Zhengchao An
e5ab6ee8e4
refactor(ecstore): make replication facade explicit ( #4139 )
2026-07-01 18:54:05 +08:00
Zhengchao An
fc806679fb
refactor(ecstore): add replication work bridges ( #4137 )
2026-07-01 18:37:01 +08:00
Zhengchao An
28e87c1cab
refactor(ecstore): name replication boundary contracts ( #4134 )
2026-07-01 17:55:12 +08:00
Zhengchao An
f5adb5abc1
fix: bypass OnceLock in test for metadata early-stop gates ( #4135 )
2026-07-01 17:51:06 +08:00
houseme
b16120dbcc
feat: optimize small GET read paths ( #4022 )
2026-07-01 15:40:00 +08:00
Zhengchao An
b0f491549a
refactor(ecstore): hide replication runtime types ( #4131 )
2026-07-01 15:39:02 +08:00
Zhengchao An
8fd532ebb7
refactor(ecstore): use local replication paths ( #4130 )
2026-07-01 15:08:26 +08:00
Zhengchao An
7cb42529fc
refactor(ecstore): route replication config access ( #4128 )
2026-07-01 09:30:25 +08:00
cxymds
6e5c58ca3f
fix(replication): harden bucket replication correctness ( #4116 )
2026-07-01 09:21:30 +08:00
Zhengchao An
722c0805ce
refactor(ecstore): route replication errors ( #4127 )
2026-07-01 08:13:57 +08:00
Zhengchao An
50a3ed8bf3
refactor(ecstore): route replication event host ( #4126 )
2026-07-01 06:00:50 +08:00
Zhengchao An
e917f1f4be
refactor(ecstore): route replication filemeta contracts ( #4122 )
2026-07-01 01:01:01 +08:00