Files
rustfs/AGENTS.md
安正超 eb7eb9c5a1 fix: resolve logic errors in ahm heal module (#788)
* fix: resolve logic errors in ahm heal module

- Fix response publishing logic in HealChannelProcessor to properly handle errors
- Fix negative index handling in DiskStatusChange event to fail fast instead of silently converting to 0
- Enhance timeout control in heal_erasure_set Step 3 loop to immediately respond to cancellation/timeout
- Add proper error propagation for task cancellation and timeout in bucket healing loop

* fix: stabilize performance impact measurement test

- Increase measurement count from 3 to 5 runs for better stability
- Increase workload from 5000 to 10000 operations for more accurate timing
- Use median of 5 measurements instead of single measurement
- Ensure with_scanner duration is at least baseline to avoid negative overhead
- Increase wait time for scanner state stabilization

* wip

* Update crates/ahm/src/heal/channel.rs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* refactor: remove redundant ok_or_else + expect in event.rs

Replace redundant ok_or_else() + expect() pattern with
unwrap_or_else() + panic!() to avoid creating unnecessary Error
type when the value will panic anyway. This also defers error
message formatting until the error actually occurs.

* Update crates/ahm/src/heal/task.rs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix(ahm): fix logic errors and add unit tests

- Fix panic in HealEvent::to_heal_request for invalid indices
- Replace unwrap() calls with proper error handling in resume.rs
- Fix race conditions and timeout calculation in task.rs
- Fix semaphore acquisition error handling in erasure_healer.rs
- Improve error message for large objects in storage.rs
- Add comprehensive unit tests for progress, event, and channel modules
- Fix clippy warning: move test module to end of file in heal_channel.rs

* style: apply cargo fmt formatting

* refactor(ahm): address copilot review suggestions

- Add comment to check_control_flags explaining why return value is discarded
- Fix hardcoded median index in performance test using constant and dynamic calculation

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-05 08:15:23 +08:00

2.9 KiB
Raw Permalink Blame History

Repository Guidelines

Communication Rules

  • Respond to the user in Chinese; use English in all other contexts.

Project Structure & Module Organization

The workspace root hosts shared dependencies in Cargo.toml. The service binary lives under rustfs/src/main.rs, while reusable crates sit in crates/ (crypto, iam, kms, and e2e_test). Local fixtures for standalone flows reside in test_standalone/, deployment manifests are under deploy/, Docker assets sit at the root, and automation lives in scripts/. Skim each crates README or module docs before contributing changes.

Build, Test, and Development Commands

Run cargo check --all-targets for fast validation. Build release binaries via cargo build --release or the pipeline-aligned make build. Use ./build-rustfs.sh --dev for iterative development and ./build-rustfs.sh --platform <target> for cross-compiles. Prefer make pre-commit before pushing to cover formatting, clippy, checks, and tests. Always ensure cargo fmt --all --check, cargo test --workspace --exclude e2e_test, and cargo clippy --all-targets --all-features -- -D warnings complete successfully after each code change to keep the tree healthy and warning-free.

Coding Style & Naming Conventions

Formatting follows the repo rustfmt.toml (130-column width). Use snake_case for items, PascalCase for types, and SCREAMING_SNAKE_CASE for constants. Avoid unwrap() or expect() outside tests; bubble errors with Result and crate-specific thiserror types. Keep async code non-blocking and offload CPU-heavy work with tokio::task::spawn_blocking when necessary.

Testing Guidelines

Co-locate unit tests with their modules and give behavior-led names such as handles_expired_token. Integration suites belong in each crates tests/ directory, while exhaustive end-to-end scenarios live in crates/e2e_test/. Run cargo test --workspace --exclude e2e_test during iteration, cargo nextest run --all --exclude e2e_test when available, and finish with cargo test --all before requesting review. Use NO_PROXY=127.0.0.1,localhost HTTP_PROXY= HTTPS_PROXY= for KMS e2e tests. When fixing bugs or adding features, include regression tests that capture the new behavior so future changes cannot silently break it.

Commit & Pull Request Guidelines

Work on feature branches (e.g., feat/...) after syncing main. Follow Conventional Commits under 72 characters (e.g., feat: add kms key rotation). Each commit must compile, format cleanly, and pass make pre-commit. Open PRs with a concise summary, note verification commands, link relevant issues, and wait for reviewer approval.

Security & Configuration Tips

Do not commit secrets or cloud credentials; prefer environment variables or vault tooling. Review IAM- and KMS-related changes with a second maintainer. Confirm proxy settings before running sensitive tests to avoid leaking traffic outside localhost.