Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
4f222d5
MES-710: Add an async icache
markovejnovic Feb 10, 2026
60d09c1
feat(icache): add needs_resolve to IcbLike trait
markovejnovic Feb 10, 2026
88d313b
feat(icache): extend IcbResolver with stub+cache params, handle stubs…
markovejnovic Feb 10, 2026
c3af0b7
feat(icache): make InodeFactory atomic
markovejnovic Feb 10, 2026
ee8507a
feat(mescloud): rewrite MescloudICache as generic over IcbResolver
markovejnovic Feb 10, 2026
eed06ad
feat(mescloud): implement RepoResolver, update RepoFs to use async ic…
markovejnovic Feb 10, 2026
8de5693
feat(mescloud): implement OrgResolver, update OrgFs to use async icache
markovejnovic Feb 10, 2026
a93a327
feat(mescloud): implement MesaResolver, update MesaFS to use async ic…
markovejnovic Feb 10, 2026
b29ea2e
CLAUDE.md
markovejnovic Feb 10, 2026
883c14a
chore: clean up async icache migration
markovejnovic Feb 10, 2026
3aead5c
better claude
markovejnovic Feb 10, 2026
7dca312
deslop
markovejnovic Feb 10, 2026
d259805
remove dead code
markovejnovic Feb 10, 2026
598ac67
feat: add FileTable type for file handle allocation
markovejnovic Feb 10, 2026
80688b9
refactor: move file handle allocation from icaches to FileTable on ea…
markovejnovic Feb 10, 2026
4f74200
chore: update cache.rs module doc to reflect removed file handle allo…
markovejnovic Feb 10, 2026
7ab6c78
chore: add #[must_use] to FileTable per project conventions
markovejnovic Feb 10, 2026
849f789
feat: add children field to InodeControlBlock for directory caching
markovejnovic Feb 10, 2026
d649cbd
feat: add From<LookupError> for ReadDirError conversion
markovejnovic Feb 10, 2026
3454ec3
feat: populate children in RepoResolver for directory inodes
markovejnovic Feb 10, 2026
32e9517
feat: readdir reads from icache instead of querying API directly
markovejnovic Feb 10, 2026
7f0e387
refactor: add CompositeFs and ChildSlot structs for shared delegation
markovejnovic Feb 10, 2026
ca69df2
refactor: extract InodeCachePeek trait from inode_table_get_attr
markovejnovic Feb 10, 2026
fb930e3
refactor: implement delegation methods on CompositeFs
markovejnovic Feb 10, 2026
2d72138
refactor: MesaFS now delegates to CompositeFs
markovejnovic Feb 10, 2026
16865d5
refactor: OrgFs now delegates to CompositeFs
markovejnovic Feb 10, 2026
1ce84d5
chore: add #[must_use] to OrgFs and MesaFS constructors and accessors
markovejnovic Feb 10, 2026
985bb10
uv.lock
markovejnovic Feb 10, 2026
32639e6
chore: remove dead code from icache refactoring
markovejnovic Feb 10, 2026
f3ae87c
chore: add explicit span names to all #[instrument] attributes
markovejnovic Feb 10, 2026
7d09f40
more telemetry
markovejnovic Feb 11, 2026
76265aa
revert bad deletion
markovejnovic Feb 11, 2026
df6fbcc
refactor(icache): add IcbState::into_available() helper
markovejnovic Feb 11, 2026
26b2721
refactor(icache): replace unreachable! with descriptive messages in e…
markovejnovic Feb 11, 2026
19d84f2
feat: make opentelemetry deps optional behind __otlp_export feature
markovejnovic Feb 11, 2026
e6e8bad
feat: gate OTLP tracing code behind __otlp_export feature flag
markovejnovic Feb 11, 2026
92391cd
refactor(icache): replace unreachable! with descriptive messages in g…
markovejnovic Feb 11, 2026
02052fc
deslop
markovejnovic Feb 11, 2026
ef0eaaa
cargo fmt
markovejnovic Feb 11, 2026
3211ca5
clippy
markovejnovic Feb 11, 2026
1ed29f8
fix(icache): handle inc_rc race conditions gracefully instead of pani…
markovejnovic Feb 11, 2026
dd0a6fe
fix spurious bugs
markovejnovic Feb 11, 2026
df348b4
fix(icache): prevent upsert_async from resurrecting evicted entries
markovejnovic Feb 11, 2026
48d1f2c
fix(icache): loop in wait_for_available and get_icb on re-encounterin…
markovejnovic Feb 11, 2026
695d0ba
fix(repo): return error instead of panicking on missing stub in RepoR…
markovejnovic Feb 11, 2026
2f475a2
fix(mescloud): return ENOENT for unclassifiable inodes instead of fal…
markovejnovic Feb 11, 2026
db1c0c1
fix(mescloud): handle evicted ICBs in ensure_owner_inode/ensure_org_i…
markovejnovic Feb 11, 2026
2f7aa58
fix(icache): use iter_async instead of iter_sync for for_each
markovejnovic Feb 11, 2026
8a51f42
fix(deps): use async reqwest client for OTLP export to avoid blocking…
markovejnovic Feb 11, 2026
adfb976
fix(repo): remove redundant cache_attr after get_or_resolve in lookup
markovejnovic Feb 11, 2026
ef50487
fix(composite): target single slot in delegated_forget instead of ite…
markovejnovic Feb 11, 2026
89ef0ff
fix(repo): don't cache placeholder file attrs in readdir
markovejnovic Feb 11, 2026
e996b78
fix(composite): skip inner forget for child-root inodes
markovejnovic Feb 11, 2026
8bc3316
fix(icache): clean up bridge and inode_to_slot on evict_zero_rc_children
markovejnovic Feb 11, 2026
37ec291
fix(bridge): warn on missing inode mapping in attr_backward
markovejnovic Feb 11, 2026
42fff57
chore: add defensive warnings and guards for potential issues
markovejnovic Feb 11, 2026
6b0d351
deslop
markovejnovic Feb 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
## Verify Changes

After making code changes, always run this sequence:

```
cargo fmt --all && cargo clippy --all-targets --all-features -- -D warnings && cargo test --quiet
```

## Code Style & Conventions

- Use `thiserror` for errors.
- Prefer `Result<T, E>` over `.unwrap()` / `.expect()` - handle errors explicitly
- Use `impl Trait` in argument position for simple generic bounds
- Prefer iterators and combinators over manual loops where readable
- Destructure structs at use sites when accessing multiple fields
- Use `#[must_use]` on functions whose return values should not be ignored
- You are NOT ALLOWED to add useless code separators like this:

```rust
// ---------------------------------------------------------------------------
// Some section
// ---------------------------------------------------------------------------
```

These are considered bad practice and indicate that the code is not
well-structured. Prefer using functions and modules to organize your code.

If you feel the need to add such separators, it likely means that your code
is too long and should be refactored into smaller, more manageable pieces.

## Module Organization

- One public type per file when the type is complex
- Re-export public API from `lib.rs` / `mod.rs`
- Keep `mod` declarations in parent, not via `mod.rs` in subdirectories (2018 edition style)
- Group imports: std → external crates → crate-internal (`use crate::...`)

## Async / Concurrency

- Runtime: tokio (multi-threaded)
- Prefer `tokio::spawn` for concurrent tasks; use `JoinSet` for structured concurrency
- Use `tokio::select!` for racing futures; always include cancellation safety notes
- Channels: `tokio::sync::mpsc` for multi-producer, `tokio::sync::oneshot` for request-response
- Never block the async runtime — offload blocking work with `tokio::task::spawn_blocking`

## Dependencies

- Check for existing deps with `cargo tree` before adding new crates
- Pin major versions in `Cargo.toml` (e.g., `serde = "1"`)
- Minimize feature flags — only enable what you use
- Audit new deps: check download counts, maintenance status, and `cargo audit`
201 changes: 199 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ clap = { version = "4.5.54", features = ["derive", "env"] }
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
fuser = { version = "0.16.0", features = ["libfuse"] }
libc = "0.2"
mesa-dev = "1.8.0"
mesa-dev = "1.11.0"
num-traits = "0.2"
reqwest = { version = "0.12", default-features = false }
reqwest-middleware = "0.4"
Expand Down Expand Up @@ -42,10 +42,15 @@ semver = "1.0"
shellexpand = "3.1"
inquire = "0.9.2"
tracing-indicatif = "0.3.14"
opentelemetry = { version = "0.29", optional = true }
opentelemetry_sdk = { version = "0.29", features = ["rt-tokio"], optional = true }
opentelemetry-otlp = { version = "0.29", features = ["http-proto", "trace", "reqwest-client"], optional = true }
tracing-opentelemetry = { version = "0.30", optional = true }

[features]
default = []
staging = []
__otlp_export = ["opentelemetry", "opentelemetry_sdk", "opentelemetry-otlp", "tracing-opentelemetry"]

[build-dependencies]
vergen-gitcl = { version = "1", features = [] }
Expand Down
Loading