Commit Graph
3403 Commits
Author SHA1 Message Date
Henry GuoandGitHub b5d19e6595 test(scanner): close parity validation harness (#3486) 2026-06-16 08:46:22 +08:00
Adnan Hussain TurkiandGitHub 401e876209 fix(admin): reject access keys and names containing any whitespace (#3488) 2026-06-16 08:46:05 +08:00
cxymdsandGitHub 156e21c90e fix(lifecycle): make tier cleanup recoverable (#3491) 2026-06-16 08:45:49 +08:00
d23ed02b3f feat(table-catalog): add parquet compaction commit (#3487)
Co-authored-by: Henry Guo <[email protected]>
2026-06-16 08:02:18 +08:00
安正超andGitHub 0baf90ee88 refactor: remove storage api facade (#3490) 2026-06-16 07:46:32 +08:00
安正超andGitHub c26593fa7a refactor: clean config storage boundaries (#3489) 2026-06-16 06:35:32 +08:00
安正超andGitHub fbab160c2b refactor: narrow replication storage consumers (#3485) 2026-06-15 22:29:38 +08:00
65c724c786 feat(table-catalog): add manifest reachability cleanup (#3484)
Co-authored-by: Henry Guo <[email protected]>
2026-06-15 22:29:23 +08:00
b387689f26 feat(heal): expose scanner-aware operations status (#3483)
Co-authored-by: Henry Guo <[email protected]>
2026-06-15 22:28:53 +08:00
956bd19417 perf(ecstore): reuse erasure-decode shard buffers across stripes (#3482)
* perf(ecstore): reuse erasure-decode shard buffers across stripes

ParallelReader::read allocated and zero-filled a fresh
`vec![0u8; shard_size]` per shard on every erasure stripe. Erasure::decode
builds one ParallelReader and loops stripes, so those buffers can be
reused: BitrotReader::read overwrites buf[..n] and the caller truncates to
n, so leftover bytes from the prior stripe are never observed. The decode
loop now hands each stripe's shard buffers back to the reader, which
reuses them (resized to shard_size) on the next stripe. The heal path,
which consumes its buffers into Bytes, never hands them back and is
unchanged.

This path runs on every object GET. Streaming-decode benchmark
(Erasure::decode end-to-end, median):

  4+2 16MiB 1MiB-block:  -9.6% verify-on,  -23.8% verify-off
  6+3 24MiB 1MiB-block:  -9.7% verify-on,  -22.5% verify-off
  4+2  4MiB 64KiB-block: -5.5% verify-on,  -16.3% verify-off

Adds a streaming-decode benchmark covering the ParallelReader path and a
regression test that decodes a multi-stripe object with missing data
shards (so reconstructed buffers are recycled) with bitrot verification
both on and off, asserting byte-exact output.

Co-authored-by: Copilot <[email protected]>

* perf(ecstore): tighten decode buffer reuse and bench harness

Address PR review feedback on the erasure-decode buffer-reuse change:

- Only claim a recycled shard buffer inside the `Some(reader)` branch of
  `ParallelReader::read`, so the take is co-located with the read that
  uses it and missing shards no longer touch the recycle slot.
- Move per-shard `BitrotReader` construction into Criterion `iter_batched`
  setup so reader/UUID construction stays out of the timed decode path,
  and assert decode success plus full output length each iteration.

Re-measured with the cleaner harness (median, before -> after, all
p < 0.05): verify-on -5.3%..-11.7%, verify-off -15.8%..-25.3%.

Co-authored-by: Copilot <[email protected]>

* perf(ecstore): drop dead recycle slots and tidy decode bench

Address the second PR review pass:

- In `Erasure::decode`, clear recycled slots for missing-shard (None-reader)
  indices before handing buffers back. `ParallelReader::read` only reuses
  slots with an active reader, and `decode_data` always re-allocates the
  reconstructed shard, so retaining those buffers only held memory that could
  never be reused in degraded reads.
- Move the output sink into the benchmark's `iter_batched` setup and validate
  decode success/output length once per config instead of inside the timed
  loop, so neither sink construction nor assertions touch the measurement.

Re-measured with the final harness (median, before -> after, all p < 0.05):
verify-on -5.2%..-9.8%, verify-off -19.4%..-25.8%.

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
2026-06-15 22:28:39 +08:00
49c0f13120 Update podman instructions in README (#3479)
Added correct volume mounting option in rootless podman command.

Signed-off-by: Hamza <[email protected]>
Co-authored-by: houseme <[email protected]>
2026-06-15 19:18:17 +08:00
housemeandGitHub adec195486 chore(scanner): enable pulsar telemetry feature (#3481) 2026-06-15 18:43:14 +08:00
Henry GuoandGitHub 7ce9838027 feat(table-catalog): add maintenance worker runtime (#3480) 2026-06-15 18:42:29 +08:00
安正超andGitHub f782f94f6a refactor: narrow storage namespace consumers (#3477) 2026-06-15 18:32:21 +08:00
Henry GuoandGitHub 307d788da1 feat(table-catalog): add production iceberg surfaces (#3473) 2026-06-15 16:53:14 +08:00
Henry GuoandGitHub d28aedfbb3 feat(scanner): expose replication repair kind metrics (#3476) 2026-06-15 16:52:39 +08:00
安正超andGitHub 5063524b36 ci: guard migration loss-prevention coverage (#3475) 2026-06-15 16:32:41 +08:00
dd6b4c35ad fix(scanner): harden lifecycle and tiering backlog (#3469)
* fix(scanner): expose lifecycle transition backlog

* fix(scanner): expose lifecycle expiry backlog

* fix(scanner): preserve lifecycle backlog states

---------

Co-authored-by: Henry Guo <[email protected]>
2026-06-15 15:01:21 +08:00
安正超andGitHub 57260c8314 refactor: centralize startup command bootstrap (#3471) 2026-06-15 14:55:33 +08:00
941b8afee8 feat(table-catalog): add snapshot maintenance foundation (#3470)
Co-authored-by: Henry Guo <[email protected]>
2026-06-15 14:08:28 +08:00
housemeandGitHub 73a48c06e5 refactor(logging): align API response boundary events (#3466)
* refactor(logging): align api response boundary events

* refactor(logging): align heal admin boundary events

* refactor(logging): restore admin callsite line numbers

* refactor(logging): simplify audit target error logging

* refactor(logging): restore rpc callsite line numbers
2026-06-15 14:07:54 +08:00
安正超andGitHub 218f473fb5 refactor: centralize startup lifecycle runtime (#3468) 2026-06-15 14:07:24 +08:00
安正超andGitHub e26eea7f36 refactor: centralize startup runtime services (#3467) 2026-06-15 13:24:17 +08:00
安正超andGitHub 3e723a2476 refactor: centralize startup storage runtime (#3465) 2026-06-15 12:12:27 +08:00
46fb4bdc2f feat(scanner): add source-aware maintenance controls (#3461)
* feat(scanner): add source-aware maintenance controls

* fix(scanner): preserve source control between cycles

---------

Co-authored-by: Henry Guo <[email protected]>
2026-06-15 12:12:05 +08:00
f68967de7a feat(table-catalog): add maintenance reachability reports (#3462)
Co-authored-by: Henry Guo <[email protected]>
2026-06-15 12:11:53 +08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>houseme
fbf1f9e5b8 build(deps): bump brotli from 8.0.3 to 8.0.4 in the dependencies group (#3458)
* build(deps): bump brotli from 8.0.3 to 8.0.4 in the dependencies group

Bumps the dependencies group with 1 update: [brotli](https://github.com/dropbox/rust-brotli).


Updates `brotli` from 8.0.3 to 8.0.4
- [Release notes](https://github.com/dropbox/rust-brotli/releases)
- [Commits](https://github.com/dropbox/rust-brotli/compare/8.0.3...8.0.4)

---
updated-dependencies:
- dependency-name: brotli
  dependency-version: 8.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: dependencies
...

Signed-off-by: dependabot[bot] <[email protected]>

* build(deps): bump s3s from cf4c3346 to c59b62f7ba in the dependencies group

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: houseme <[email protected]>
2026-06-15 12:06:01 +08:00
a19560da41 fix(bucket-repl): persist MRF retry queue to disk and reload on startup (#3456)
* fix(bucket-repl): persist MRF retry queue to disk and reload on startup

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* fix(bucket-repl): address three blocking MRF issues from review

1. MRF replay loses delete operations — add `MrfOpKind` discriminator to
   `MrfReplicateEntry` (Object | Delete, default=Object for backward
   compat).  `DeletedObjectReplicationInfo::to_mrf_entry` now persists
   `op=Delete`, `version_id`, `delete_marker_version_id`, and
   `delete_marker`.  `start_mrf_processor` branches on `op`: delete
   entries skip `get_object_info` and replay via
   `schedule_replication_delete` with `ReplicationType::Heal`; object
   entries follow the existing heal path.

2. `flush_mrf_to_disk` cleared the in-memory batch even on encode/write
   failure — changed return type to `bool` and callers now only
   `pending.clear()` on `true`, so a transient storage error retries
   on the next tick instead of silently dropping the batch.

3. Add focused tests: encode/decode roundtrips for object, delete-marker,
   versioned-delete, and mixed-batch entries; a routing test confirming
   op-kind propagates correctly and that the default is Object for
   legacy files; a legacy-compat test verifying old entries round-trip
   cleanly through the new format.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* style: fix clippy redundant-clone in MRF tests

Replace &[entry.clone()] with std::slice::from_ref(&entry) in two
encode_mrf_file call sites flagged by clippy's redundant_clone lint
under --all-targets --features rio-v2.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

* test(bucket-repl): strengthen legacy MRF compat test with hand-built msgpack

The previous mrf_legacy_file_without_op_field_decoded_as_object test
round-tripped through encode_mrf_file, so it exercised the new format
and never touched a truly-legacy payload.

Replace it with a hand-built msgpack payload that genuinely omits the
"op", "deleteMarker", and "deleteMarkerVersionID" keys — exactly what
the old binary would have written before MrfOpKind existed.  The test
now fails if #[serde(default)] is removed from the op field, which
proves real backward compatibility rather than round-trip stability.

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>

---------

Co-authored-by: Claude Sonnet 4.6 <[email protected]>
Co-authored-by: houseme <[email protected]>
2026-06-15 11:56:50 +08:00
安正超andGitHub c99d6086cd refactor: centralize startup storage bootstrap (#3464) 2026-06-15 11:23:16 +08:00
安正超andGitHub 6508f88d3a refactor: centralize startup listen bootstrap (#3460) 2026-06-15 09:41:11 +08:00
c2e0792f6f fix(scanner): skip startup delay when replication is active so failed… (#3455)
fix(scanner): skip startup delay when replication is active so failed objects heal promptly after restart

Co-authored-by: houseme <[email protected]>
2026-06-15 09:02:21 +08:00
安正超andGitHub 513f06f268 refactor: centralize startup server preflight (#3459) 2026-06-15 08:32:44 +08:00
安正超andGitHub 2288b1bb63 refactor: centralize startup runtime bootstrap (#3457) 2026-06-15 07:57:36 +08:00
73e534682e feat(table-catalog): add catalog recovery diagnostics (#3444)
* feat(table-catalog): add commit recovery observability

* feat(table-catalog): harden catalog recovery diagnostics

* test(table-catalog): cover recovery admin route policy

* test(table-catalog): update recovery route count

* fix(table-catalog): satisfy duration clippy lint

* fix(obs): promote span request id field

* Update local.rs

Signed-off-by: houseme <[email protected]>

---------

Signed-off-by: houseme <[email protected]>
Co-authored-by: Henry Guo <[email protected]>
Co-authored-by: houseme <[email protected]>
2026-06-15 07:06:29 +08:00
2c5615d2ea feat(scanner): expose distributed metrics (#3452)
* feat(scanner): expose distributed metrics

* docs(scanner): clarify distributed metrics collection

---------

Co-authored-by: Henry Guo <[email protected]>
Co-authored-by: houseme <[email protected]>
2026-06-15 07:05:43 +08:00
Ramakrishna ChilakaandGitHub e4c1ee9941 fix(server): actionable 501 for virtual-hosted-style S3 requests (#3442) 2026-06-15 06:49:31 +08:00
安正超andGitHub f8e300bf3b refactor: centralize startup protocol bootstrap (#3450) 2026-06-15 06:48:55 +08:00
036741cb1c refactor(request-id): align contracts and lock field names (#3454)
* refactor(request-id): align header log and trace contracts

* test(contract): lock external request-id field names

* chore(deps): drop unused rustfs-ecstore links

Co-Authored-By: heihutu <[email protected]>
2026-06-15 01:59:11 +08:00
housemeandGitHub efaf07d323 feat: preserve request ids across async recovery logs (#3451)
* feat(obs): promote request ids in structured logs

* refactor(tracing): propagate spans into request tasks

* test(ecstore): baseline recovery monitor log chains

* fix(replication): reduce startup resync log noise

* chore(docs): stop tracking local recovery baseline

* chore(obs): polish request id logging cleanup
2026-06-14 23:16:04 +08:00
安正超andGitHub 9499391370 refactor: centralize startup service bootstrap (#3448) 2026-06-14 21:59:17 +08:00
安正超andGitHub b2e6cc520b docs: update security advisory lessons (#3447) 2026-06-14 21:51:54 +08:00
安正超andGitHub b49057c8e3 refactor: centralize startup readiness bootstrap (#3446) 2026-06-14 21:24:07 +08:00
安正超andGitHub 8d23ce06c6 refactor: consolidate app object store fallback (#3445) 2026-06-14 20:43:42 +08:00
housemeandGitHub fc894c9b50 fix(obs): harden startup and shutdown logging (#3443) 2026-06-14 20:16:00 +08:00
安正超andGitHub 323302255c refactor: route ecstore internals through object resolver (#3441) 2026-06-14 19:55:21 +08:00
cxymdsandGitHub bf3a3a6189 fix(rebalance): ignore source cleanup failures (#3440) 2026-06-14 19:50:26 +08:00
cxymdsandGitHub 8f6b1d47b5 chore(obs): standardize runtime logging batch one (#3438) 2026-06-14 18:55:14 +08:00
安正超andGitHub bed4c7288b refactor: route server storage lookups through resolver (#3439) 2026-06-14 18:42:21 +08:00
9372ee7032 feat(table-catalog): bridge table data-plane policy (#3436)
* feat(table-catalog): bridge table data-plane policy

* test(table-catalog): harden vended credential smoke

* test(table-catalog): cover data-plane policy denials

* fix(table-catalog): protect relocated warehouse scope

* fix(table-catalog): skip invalid warehouse entries

---------

Co-authored-by: Henry Guo <[email protected]>
2026-06-14 18:13:02 +08:00
GatewayJandGitHub e29c136ad5 fix(table-catalog): stabilize standard commit metadata names (#3435) 2026-06-14 18:03:42 +08:00