Выпущена версия Vitastor 3.0.12

17.05.2026

Важные исправления (кроме нового хранилища)

  • Исправлено возможное использование освобождённой памяти в OSD при ошибках начального коммита/отката объектов в EC пулах.
  • Исправлено возможное освобождение некорректного указателя в OSD при ошибках чтения из цепочек снапшотов/клонов в EC пулах.
  • Исправлена возможно некорректная обработка команд commit/rollback в EC пулах во время изменения числа PG пула.
  • Инвертирован параметр включения fsync в ublk драйвере (fsync не включался на пулах без immediate_commit).
  • В отладочных целях добавлена команда raw-ls для поиска версий объектов в кластере с помощью операций листингов.

В новом хранилище

  • Ускорен запуск путём использования сортировки по LSN только для объектов с большим числом промежуточных версий.
  • Пока не ясна судьба редкой ошибки запуска с сообщением “double claimed block”, наблюдаемой несколькими пользователями при запуске OSD с новым хранилищем, добавлен обходной манёвр для её исправления - опция skip_double_claim. На сохранность данных опция не влияет.
  • Исправлена некорректная перепроверка мелких записей при запуске, в теории возможно приводящая к появлению дубликатов мелких записей на OSD.
  • Исправлена работа fsync для дисков с writeback кэшем (без конденсаторов):
    • Исправлена некорректная семантика повторных fsync (следующий не блокировался предыдущим)
    • Добавлен fsync при копировании мелких записей из буфера на устройство данных (каким-то образом исходно забытый)
    • Добавлен fsync после начальной сборки мусора при запуске OSD
    • Исправлено некорректное приведение LSN из uint64 к uint32, ломающее fsync при достижении LSN 2^32
  • Добавлена отсутствующая проверка контрольной суммы заголовка метаданных хранилища при запуске
  • Исправлено некорректное обновление контрольных сумм объектов при включённом режиме perfect_csum_update=true
  • Исправлено возможное падение OSD с assertion failed при обработке некорректной команды EC STABILIZE
  • Исправлен учёт числа активных корутин-компакторов.
  • Удалён нерабочий код конвертации из нового в старое хранилище.

Более мелкие исправленные проблемы

  • Некорректный учёт статистики операций по локальному OSD в реплика-пулах.
  • Отсутствие индикации ошибок в коде возврата команды vitastor-disk resize.
  • Отсутствие сброса списка inconsistent объектов при перезапусках PG.
  • Теоретически возможные зависания прочих операций на OSD при работе над полностью повреждёнными объектами (без единой доступной копии), и, возможно, в каких-то других очень редких ситуациях.
  • Fsync-и при удалении объектов из пулов без immediate_commit (с дисками с writeback кэшем), ранее теоретически могущие оставлять мусор при удалении misplaced объектов.
  • Возможное падение/повреждение памяти NFS сервера при целенаправленной атаке на NFS-RDMA.
  • Потенциальная невозможность записи после обработки ошибок ENOSPC/EIO при записи в реплика-пулах.
  • Возможное падение вместо выхода с ошибкой при запуске OSD со старым хранилищем на диске с повреждёнными данными журнала.
  • Поверхностное копирование конфигурации PG в мониторе, однако, не приводящее к фактическим ошибкам.
  • Некорректная проверка выделенных блоков в QEMU драйвере, однако, только в неиспользуемой ветке кода (без флага BDRV_WANT_ZERO).
  • Возможная утечка памяти при ошибках чтения повреждённых (corrupted) объектов.
  • Возможные некорректные состояния PG при обнаружении повреждённых объектов.
  • Возможная пометка не всех “плохих” копий объекта при скрабах без контрольных сумм при большом числе реплик (> 4).
  • Некорректный расчёт контрольных сумм в старом хранилище при bitmap_granularity < 4096 (практически неиспользуемая конфигурация).
  • Теоретически возможное падение OSD в редких случаях при scrub и параллельном восстановлении объекта.
  • Теоретически возможное падение OSD при обработке ошибок операции PING.
  • Немного неоптимальная логика переиспользования RDMA-буфера отправки.
  • Возможная утечка памяти при отключении уже запущенного scrub через no_scrub.
  • Возможное повреждение памяти при передаче некорректных буферов клиентом (например, кодом qemu) при включённом writeback кэше.
  • Потенциально некорректный поиск повреждённых частей EC-объектов (невозможность найти “хорошую” комбинацию) в scrub при отключённых контрольных суммах.
  • Возможное использование лишней памяти на стороне OSD при обработке неудачных чтений из снапшотов (однако, это не утечка - в том смысле, что при отключении клиента память освобождалась).
  • Потенциальное резкое замедление записи при определённых значениях pg epoch из-за некорректной логики обновления эпохи в etcd.

Ссылки