- Antietcd is now officially safe to use: the release includes a fixed version of antietcd
which passes Jepsen transaction serializability tests.
- Fix a huge checksum bug in the old store: incorrect checksums for small initial writes.
The bug affected writes of exactly csum_block_size (4k by default) into new (unallocated)
objects and generated invalid checksums in the store for the written 4k block. Moreover,
generation of these invalid checksums was very slow because it was calculating CRC32
for 4 GB of zeroes. If the block wasn't then overwritten as a part of a larger write
request it became unreadable even though the stored data was correct. The bug affected
all versions since 1.0.0, or since 2.3.0 because vitastor-disk didn't allow to enable
checksums prior to 2.3.0 because of another bug. O:-)
- Prevent OSD disconnections due to long blocking of event-loop caused by PG resharding
(moving objects between old and new PGs in memory) when changing pool PG count or
just on restart of an OSD with a large database (for example, with a filled 8 TB SSD).
The issue should now be fixed because OSD now performs resharding in chunks with pauses
between chunks.
- Prevent pools stuck in paused state on an aborted PG count change.
- Fix a possible OSD crash with "division by zero" when trying to handle an operation
before pool PG count is applied to the in-memory store.
Details:
- Write size should be exactly csum_block_size (4k by default)
- Write should be made into a new object (unallocated space)
- In this case, the checksum of the block was calculated as if the block was
padded with extra (2^32 - size) zero bytes due to a simple integer overflow
- As a cherry on the cake, such calculation was 'slightly' slow because it
was processing almost 4 GB of zeroes for a small write
Important fixes:
- Disable RWF_ATOMIC by default because Linux incorrectly requires all atomic
writes to be power-of-2-sized and length-aligned. Details: [use_atomic_flag](https://vitastor.io/en/docs/config/osd.html#use_atomic_flag)
- Fix cross-pool snapshots not working at all - always reading old data after taking the snapshot
- Fix level_placement (broken in 2.2.0)
- Fix CAS write return values in the client library (broken in 2.4.4), also breaking unaligned writes in VitastorFS
- Fix VitastorFS possibly losing some of intersecting parallel unaligned writes
- Prevent possible reads of the old data during unfinished intent writes in the new store
- Tests added for all of above problems to prevent future regressions
Other fixes:
- Allow to specify OSD tags and weights during prepare
- Only clear the first block instead of whole OSD metadata and journal areas during vitastor-disk
prepare - OSD anyway clears them on the first run
- Fix vitastor-cli dd non-seekable detection and error status
- Do not stop OSD on zero-copy tcp short send errors - these aren't a bug, but just caused
by TCP client disconnections
- Fix modify-osd not working after deleting the OSD configuration key from etcd
- Fix regular antietcd websocket disconnections in OSD due to lack of WS_PONG responses to WS_PING
- Reduce the number of allocated RDMA memory regions
- Allow routed RoCE
A single new feature: the new log-structured metadata store implementation, described
in the presentation from Moscow Highload'2025 (check it out [here](https://vitastor.io/en/docs/#talks-and-presentations)).
It's now the default store for new OSDs. The support for the old store is also left in place,
you can still choose it for new OSDs with `vitastor-disk prepare --meta_format 2`.
OSDs from previous versions with the old store format will also continue to operate just like before.