Выпущена версия Vitastor 3.0.16
19.07.2026
Много исправлений, но мелких. :-)
Наиболее интересные исправления связаны с пулами без immediate_commit (для настольных SSD): исправлены граничные случаи операции фиксации изменений (sync) и работа CAS-записей (используемых, например, в VitastorFS).
Также исправлен баг “double-claim” в новом хранилище и внесены изменения, снижающие нагрузку на etcd во время активных переключений состояний PG.
Подробнее читайте ниже.
Новое хранилище
- Исправлена причина ошибок ‘double-claim’, обход которых был добавлен в 3.0.12 — удаление delete-записи при перезапуске могло происходить до удаления замаскированного ей big_write
- Исправлена проверка блочных контрольных сумм (при csum_block_size > 4k) при частичных чтениях некоторых записей
- Исправлено некорректное обрезание конца списка нестабильных объектов в лимитированных запросах листинга (отправляются scrub-ами)
- OSD теперь будет выключаться при ошибках fsync во время пакетных big_write, как и при других дисковых ошибках
- Добавлена отсутствовавшая проверка disable_meta_fsync для включения immediate_commit
Клиенты
- Исправлен пропуск встроенного fsync в CAS-записях (для пулов без immediate_commit)
- Добавлена проверка размеров ответов show_config, sec_list и sec_read_bmp
- Исправлено то, что ответ show_config обрабатывался как завершённая нулём строка без учёта длины
Старое хранилище
- Добавлен пропуск слишком маленьких (повреждённых) записей журнала
OSD
- Запрещено создание пулов с block_size*pg_size больше UINT32_MAX
- Убрана принудительная отправка статистики OSD после отправки состояний PG (должно снизить нагрузку на etcd)
- Устранены двойные попытки увеличения эпохи PG из нескольких запросов записи, которые могли приводить к ложным ошибкам обновления состояний PG, дополнительным перезапускам PG и повышенной нагрузке на etcd
- Исправлена обработка PG с pg_size между 32 и 64 (значения больше 64 запрещены ранее)
- Для надёжности добавлены проверки ошибок отсутствующих объектов (ENOENT) в операциях чтения/записи
- Первичные записи теперь прерываются с повторяемым кодом ошибки, если PG становится неактивной во время записи, вместо попытки дорабатывать их до конца
- Исправлена корректность операции фиксации (sync) и добавлены тесты для её проверки:
- Теперь соединения клиентов, писавших в PG, при её перезапуске сбрасываются сразу, а не ждут завершения всех операций, аналогично ситуации остановки PG
- Sync теперь завершается с ошибкой, если клиент писал в PG, ставшие неактивными
- Неактивные PG теперь пропускаются при sync (дополнительная проверка) — ранее без этой и изменения обработки ошибок записи счётчик запущенных операций мог увеличиваться на отключённых PG и приводить к use-after-free
- Соединения клиентов теперь просто сбрасываются вместо возврата ошибки фиксации
- Несколько исправлений скрабов:
- Добавлена проверка битмапов при группировке идентичных EC-частей во время скраба
- Исправлен возможный перебор слишком большого числа комбинаций в EC-пулах с большим k+n
- Исправлено то, что чтения из деградированных объектов, помеченных как inconsistent после скраба, не учитывали реальное состояние объекта и могли возвращать нули
- Исправлено некорректное индексирование массива в скрабе (возможно влиявшее на его результаты)
Ссылки
- Git: https://git.yourcmc.ru/vitalif/vitastor/releases/tag/v3.0.16
- Инструкции по установке: https://vitastor.io/en/docs/installation/packages.html