Skip to content

v2.0.28

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Jul 20:09

What's Changed since v2.0.27

This release is a hardening pass from a full code review of the disk I/O and cache modules: four fixes, three cleanups, no behavior change on the hot I/O paths.

Fixes

  • gRPC server startup failure is now detected: if the listen address cannot be bound (BuildAndStart() returns null), ezio logs a critical error and exits with code 1, instead of logging "Server listening", running the whole session without a control interface, and crashing at shutdown. (#150)
  • Session teardown no longer stalls up to 30 s: the cache-stats thread's fixed 30 s sleep is now an interruptible condition-variable wait; measured shutdown 30 s -> 0.06 s. (#151)
  • cache: partition max_entries is atomic, closing the data race between settings_updated (network thread) and the eviction loop in insert() (worker thread). (#148)
  • cache: eviction drops stale LRU nodes (map/list inconsistency) instead of re-logging the same error on every pass — log once, self-heal. Defense-in-depth; the condition remains should-not-happen. (#152)

Refactor

  • cache: removed the dead write-back-era dirty-block collectors; get_dirty_count() looked like a query but cleared dirty flags cache-wide as a side effect. (#144)
  • cache: get2() now asserts both blocks map to the same partition, replacing an unreachable cross-partition path that would have become a cross-thread race if piece routing ever changed. (#146)
  • Removed the unused global raw_disk_io instance pointer (dangling after session shutdown). (#147)

Docs

  • Buffer pool comments and CLAUDE.md synced with the code: split read/write pools at 512 MB each (not the old "unified 256 MB"), write-through cache, soft-limit watermark semantics. (#149)
  • BEP52/v2 hashing load analysis on the single network thread; Go-rewrite effort estimate.

Known issues (tracked, not in this release)

  • partition_storage does not check pread/pwrite results; see #145 for the analysis and the coupled prefetch error-path fix.

Full diff: v2.0.27...v2.0.28