Выпущена версия Vitastor 3.2.3
01.11.2026
Очередной корректирующий релиз, главное нововведение - в дополнение к хаос-тесту блочного хранилища добавлен хаос-тест PG, то есть логики OSD, выполняемой на одной PG. Тест проверяет консистентность данных по модели, корректной для блочных хранилищ, так как стандартные модели изоляции транзакций для них не всегда применимы. Подробное описание логики теста PG можно прочитать в документации.
Осталось добавить хаос-тесты клиентской библиотеки и сетевого слоя, и Vitastor будет полностью покрыт хаос-тестами!
Помимо нового хаос-теста и исправлений проблем, найденных им, релиз также содержит исправления от Changwei Ye, Юрия Лунева и Алексея Шабалина - спасибо за вклад в проект.
- Корректность данных
- Исправлены повторы фиксации данных на стороне клиента в узких кейсах при падениях OSD и одновременной переконфигурации PG (применимо к конфигурациям с явными fsync).
- Исправлена возможная некорректная пометка реплицированных объектов как HAS_INCOMPLETE при частично успешной записи с перемещением объекта.
- Исправлена, по-видимому, очень старая и назойливая проблема зависания PG в EC-пулах в состоянии STOPPING/REPEERING - PG зависали, если в очереди одновременно была активная операция записи и начального коммита/отката прошлой незавершённой записи объекта.
- Исправлен некорректный расчёт состояний EC-объектов при запуске PG, в редких ситуациях приводящий к HAS_INCOMPLETE или к оставлению мусорных частей объектов на OSD.
- Исправлен возможные ошибки чтения при параллельной записи или удалении того же объекта, выглядящие, как будто объект повреждён.
- Исправлены возможные крайне редкие ошибки отправки состояний PG в etcd, если запуск PG обгонял взятие блокировки OSD (lease) в etcd.
- Исправлен теоретически некорректная пометка реплицированных объектов всегда как DEGRADED при изменениях состояния объекта, что, однако, не приводило к реальным проблемам по причине использования только в scrub и пометке записи как частично успешной, где объект, как правило, действительно являлся DEGRADED.
- Исправлены ошибки чтения с падением соединения из образов с больше, чем 255 снимками.
- Параллельное удаление нескольких снимков одного и того же образа из двух процессов теперь завершается ошибкой, а не порчей цепочки снимков.
- Новое и старое хранилища
- В новом хранилище исправлена регрессия 3.2.0 с зависанием больших записей после одной redirect_intent записи с ожиданием fsync в конфигурациях без immediate_commit.
- В новом хранилище исправлено несколько ошибок потенциальной потери данных в узких случаях, найденных хаос-тестами - некорректная обработка контрольных сумм пустых записей, некорректная запись объекта после его отката до нулевой версии, переиспользование после перезапуска номеров последовательности, меньших, чем completed_lsn в заголовке.
- В старом хранилище исправлено редкое зависание OSD при удалении объекта.
- Сеть и безопасность
- Исправлена совместимость транспортного шифрования с некоторыми версиями OpenSSL, содержащими неисправленный баг 27302, из-за которого соль могла не сбрасываться и новые подключения могли ломаться с ошибкой «Handshake decryption failed» до перезапуска OSD.
- TCP-сокеты теперь закрываются с помощью трёх вызовов
SO_LINGER(1,0)+shutdown()+close(), чтобы точно гарантировать их очистку, т.к. предыдущий подход с однимclose()снова оказался недостаточно стабильным - активные на сокете запросы в io_uring не очищаются приclose(). - Добавлены опции для QoS в RDMA-сетях с PFC: rdma_traffic_class, rdma_sl и rdma_set_flow_label.
- Vault: при ошибках загрузки ключей из Vault клиент теперь предпринимает повторные попытки загрузки автоматически после таймаута, а не только при переконфигурировании пула.
- Vault: исправлена ошибка чтения из клонов зашифрованных образов из-за того, что ключ родительского образа не загружался.
- При включённом контроле доступа при создании клона теперь проверяется доступ на чтение к родительскому образу.
- Клиент теперь предпринимает повторные попытки разрешения адресов etcd при ошибках DNS в рамках общих лимитов на повторы, а не убивает клиентский процесс.
- VitastorFS
- Ускорено удаление каталога, из которого ранее удалили много файлов, из-за сканирования избыточного числа ключей в БД.
- Исправлена ошибка при перемещении каталога поверх другого пустого каталога.
- vitastor-cli
fixиdescribeбольше не зависают, если один из OSD недоступен: такой OSD пропускается с предупреждением, а код возврата говорит о неполном результате.describe --inodeпоказывает все объекты образа, а не один.osd-treeпадал при ошибке etcd.ls --treeскрывал образы с отфильтрованным родителем.ls-pgsпечатал пустую таблицу вместо настоящей ошибки и показывал misplaced как degraded.dd: копирование pipe’а безcount=копировало только 1 МБ, не работалoflag=append,status=noneиstatus=noxferигнорировались, устройства вида /dev/mem не читались.create-pool/modify-poolтеперь отклоняют pg_size > 64 и переименование пула в занятое имя; правилаlevel_placementможно сбросить пустым значением.modify --resizeмолча принимал некорректный размер вроде «1.5G».rm-dataне проверял границы смещений.- Исправлены мелкие расхождения справки и документации с фактическим поведением.
- Развёртывание
- Принадлежность пользователю vitastor теперь выставляется для всех разделов с типом Vitastor, даже если они ещё не содержат корректный суперблок.
- Исправлена сборка драйвера QEMU на версии QEMU с патчами из RHEL 9.1.
- Исправлена мелкая утечка памяти при уничтожении драйвера QEMU.
- Клиент теперь имеет режим работы с обработкой фатальных ошибок вместо молчаливого убийства всего клиентского процесса через exit(1). Новые версии драйвера QEMU используют этот режим и не должны ронять процесс QEMU при неудачном подключении диска; поведение старых версий оставлено без изменений.
Ссылки
- Git: https://git.yourcmc.ru/vitalif/vitastor/releases/tag/v3.2.3
- Инструкции по установке: https://vitastor.io/docs/installation/packages.html