New store bug fixes:
- Fix very slow OSD startup (hours) possible in unlucky cases
- Fix incorrect garbage entry validation on start in some cases, preventing OSD startup
- Fix small_write_throttling not functioning and either hanging or crashing OSDs
- Fix "different fact_versions returned from subops" error possible with EC in some cases
- Add a recovery option for the new store: skip_corrupted_meta_entries
- Disable intent writes (even 4k) for hybrid OSDs by default for better write buffering
Other changes:
- Fix chmod/chown of a new empty VitastorFS root directory not working
- Fix vitastor-dd treating all < 32k reads as always empty
- Fix vitastor-disk always setting 32k csum_block_size for HDDs when checksums are enabled
- Fix OSD missing PG state updates and PGs hanging in "starting" in rare cases
- Fix a possible OSD crash with "map::at" message in rare cases when stopping a client
- Fix a possible OSD crash on start when RDMA is available but fails to initialize
- Fix removal and overwriting of totaled objects (objects with all corrupted copies)
- Do not allow data_block_size < 8*bitmap_granularity
- Remove RDMA ODP (On-Demand Paging) support
- Update antietcd to 1.2.4
- Update Docker build to Debian Trixie
- Add packages for AlmaLinux 10
- Fix csum_block_size > 0 unusable with atomic writes in the new store
(almost all atomic write requests generated invalid checksums with csum_block_size > 0)
- Fix monitor sometimes randomly failing to optimize PGs with the "problem is
infeasible or unbounded" message due to not waiting to read full stdout of lp_solve
- Remove reshard_abort optimisation to fix chunked resharding introduced in 3.0.2 possibly
corrupting in-memory OSD state when handling multiple rapid PG count change requests
- Fix removed inodes not disappearing from OSD statistics in the new store, leading to
bloating of the statistics with old inodes
- Increase test coverage for the new store and fix several minor bugs:
- Enabling/disabling of used_for_app was recalculating inode space statistics incorrectly
- Fix object metadata validation on OSD startup rejecting some correct sequences of entries,
possibly leading to OSD being unable to start
- Fix PG activation with EC failing in rare cases with EBUSY when requesting to commit an
already committed write
- Fix a theoretically possible metadata writeback issue on ENOSPC during commit
- Fix monitor failing to optimize PGs in presence of a host with name convertible to
js Number (like 04e278988710) :D
- Fix vitastor-cli dd sometimes (rarely) truncating the image when writing to stdout
- Fix a theoretically possible client connection object leak when io_uring is full
- Fix a leak of RDMA-CM connection objects
- Fix crashes with data_block_size < 32KB (useless setup, but anyway) (#113)
- 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.