Vitastor 3.0.16 released

2026-07-19

Quite a bit of fixes, but mostly small. :-)

Most interesting fix affect pools without immediate_commit (for desktop SSDs): fixed corner cases in the commit (sync) operation and CAS write operation (used, for example, in VitastorFS).

Other notable changes: “double-claim” bug is fixed in the new store, and changes are made to reduce etcd load during active PG state switching.

You can read the details below.

New store

  • Finally fix the source of ‘double-claim’ errors worked around in 3.0.12 - delete entry removal on restart possibly happening before the removal of the masked big_write
  • Fix padded checksum (csum_block_size > 4k) verification during some partial reads
  • Fix truncated unstable object list responses in limited listing requests (sent by scrub)
  • OSD should now stop with an error on data fsync error during batched big_writes, like on other disk errors
  • Add missing disable_meta_fsync check for enabling immediate_commit

Client

  • Fix CAS writes skipping their built-in fsync (for pools without immediate_commit)
  • Validate show_config, sec_list and sec_read_bmp reply sizes
  • Fix show_config reply parsed as a null terminated string without taking length into account

Old store

  • Skip too small (corrupted) journal entries

OSD

  • Forbid pools with block_size*pg_size larger than UINT32_MAX
  • Do not forcibly report OSD statistics after reporting PG states (should reduce etcd load)
  • Prevent repeated reporting of PG epoch bump on multiple writes possibly leading to spurious PG state reporting errors, extra PG repeers and increased etcd load
  • Fix handling of PGs with pg_size between 32 and 64 (more than 64 is forbidden)
  • Add safety checks for ENOENT (missing objects) during read/write operations
  • Abort primary writes with a retriable error code when the PG becomes inactive during write instead of trying to finish it cleanly
  • Fix sync operation correctness and add tests to verify it:
    • Drop dirty PG connections when repeering PG before waiting for actual peering, like in stop
    • Complete sync with an error if PGs dirtied by the client become inactive
    • Skip inactive PGs during sync (double-check). Without this fix and write error handling changes inflight operation counter could be incremented on offline PGs and lead to use-after-free
    • Drop client’s connection instead of returning SYNC error
  • Several scrub fixes:
    • Check bitmaps when grouping identical EC chunks in scrub
    • Fix scrub possibly trying too many combinations in EC pools with large k+n
    • Fix reads from degraded objects marked as inconsistent after scrub not taking actual object state into account and possibly returning zeros
    • Fix incorrect array indexing in scrub (possibly affecting scrub results)