Интересное — последние записи

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

Очередной корректирующий релиз, главное нововведение - в дополнение к хаос-тесту блочного хранилища добавлен хаос-тест 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 при неудачном подключении диска; поведение старых версий оставлено без изменений.

01.11.2026 Читать далее →

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

Небольшой релиз с исправлениями ошибок.

  • Новое хранилище (спасибо Changwei Ye)
    • Исправлены ошибки отклонения компактизации в редких случаях, когда объект уже успели перезаписать снова
    • Снижена амплификация ввода-вывода суперблока, возникшая после предыдущих исправлений корректности
  • Исправлено возможное падение vitastor-cli rm с assert(rwo->todo == 1), появившееся в 3.2.1
  • Исправлен некорректный переход реплицируемых объектов в состояние INCOMPLETE после нескольких неудачных частичных записей
  • Исправлена ошибка “operation sequencing broken … expected num 2, got 3, stopping client”, возникающая при перегрузке кластера из-за флапов OSD

27.09.2026 Читать далее →

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

  • Блочные хранилища
    • В хаос-тест добавлено больше асинхронности, чтобы выявить больше проблем…
    • …и они исправлены (~6 в старом хранилище, ~9 в новом)
    • Исправлена проверка размера для journal_offset при разделяемом meta-устройстве (спасибо Changwei Ye)
  • Сетевой слой
    • Исправлена обработка zero-copy уведомлений, приходящих не по порядку (редкая, но в теории возможная ситуация)
    • Исправлено двойное вычисление контрольной суммы заголовка в режиме proto_checksums=full
    • Добавлена опция rxbounce для Windows-виртуалок с TCP и включёнными контрольными суммами
    • Сокеты остановленных соединений теперь закрываются раньше, чтобы предотвратить зависшие zerocopy-уведомления и медленное переключение при отказе (~15 мин вместо ~10 сек)
  • OSD
    • Убрано аварийное завершени при ошибках модификации локального хранилища (неактуально после добавления обработки ошибок записи)
  • CSI
    • Исправлен жизненный цикл NFS-демона VitastorFS (спасибо Дмитрию Наумову)
    • В CSI теперь используется более новый qemu-storage-daemon
  • vitastor-cli
    • Добавлена опция opool для dd
    • Исправлено: rm с «обратной» оптимизацией неверно удалял данные слоя перед переименованием, что могло приводить к некорректному чтению из дочерних образов при удалении снапшота старше последнего
    • Исправлено возможное зависание в merge и производных командах (rm, flatten)
    • Исправлены ошибки в OpenAPI-спецификации serve (спасибо Степану Работкину)
    • Исправлены возможные сегфолты в serve из-за некорректного разбора запроса (спасибо Vincent Schweiger)
    • Исправлен режим serve без HTTPS (спасибо обоим :))
  • Сборка
    • Исправлены сборки для не-x86, падавшие из-за неподдерживаемого xxhash x86dispatch
    • Во всех сборках принудительно включаются assert’ы, чтобы убрать зависимость от профиля сборки
    • Исправлена сборка драйвера QEMU с QEMU < 10.2

13.09.2026 Читать далее →

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

Это корректирующий релиз, и большая часть исправлений внесена благодаря новому подходу к тестированию: хаос-тесту блочного хранилища, который теперь запускается в CI при каждом изменении.

Также спасибо Юрию Лунёву из MIND Software за другую часть исправлений.

31.08.2026 Читать далее →

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

Наконец, релиз на тему безопасности!

Новые функции:

  • Полная поддержка функций безопасности:
    • Транспортное шифрование etcd (TLS/mTLS)
    • Транспортное шифрование OSD (AES-GCM), по умолчанию только для заголовков, поэтому очень быстрое
    • Сквозное шифрование данных образов (AES-XTS)
    • Опциональная поддержка хранения ключей AES-XTS во внешнем Vault
    • Аутентификация по сертификатам
    • Опциональная поддержка прав доступа пользователей с контролем доступа на стороне etcd и OSD
    • Транспортные контрольные суммы xxhash3 (по умолчанию только для данных)
  • Новая опция контрольных сумм на диске: xxh3_32 - xxhash3, суженный до 32 бит
  • Поддержка DNS-имён для адресов etcd и Vault
  • Режим HTTP API-сервера vitastor-cli serve
  • Смесь CAS и не-CAS записей в рамках одного экземпляра клиента теперь разрешена и работает корректно
  • make-etcd теперь может инициализировать весь кластер, копируя конфигурацию и запуская все ноды через ssh
  • Закончена поддержка Debian 10 (Buster) и CentOS 7, пакеты более обновляться не будут

Читайте подробную документацию функций безопасности по ссылке: https://vitastor.io/docs/usage/security.html

24.07.2026 Читать далее →

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

Много исправлений, но мелких. :-)

Наиболее интересные исправления связаны с пулами без immediate_commit (для настольных SSD): исправлены граничные случаи операции фиксации изменений (sync) и работа CAS-записей (используемых, например, в VitastorFS).

Также исправлен баг “double-claim” в новом хранилище и внесены изменения, снижающие нагрузку на etcd во время активных переключений состояний PG.

Подробнее читайте ниже.

19.07.2026 Читать далее →

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

На этот раз исправления мелкие:

  • Найдено и внесено корректное исправление для миграции виртуальных дисков QEMU при включённом iothread. Проверено, теперь миграция работает. Пакеты QEMU пока обновлены только для Proxmox 9, через некоторое время будут пересобраны остальные.
  • Внесены исправления для корректной работы ВМ в Proxmox с swTPM (например, Windows ВМ) без включения монтирования всех дисков через NBD (спасибо пользователям из чата).
  • В последних релизах во все Debian-пакеты (но не RPM) прокралась версия Antietcd со сломанным кластерным режимом - из-за того, что при сборке использовалась версия Antietcd из master, а не из стабильного тега. Теперь это исправлено, Debian-пакеты снова собираются со стабильной версией Antietcd, а в самом Antietcd исправлена кластеризация. Симптомом проблемы была невозможность выбрать лидера в кластере Antietcd.
  • Исправлен запуск монитора со встроенным Antietcd при использовании IPv6.
  • Исправлен подсчёт статистики места в ФС и S3-пулах в новом хранилище (PR #127).

28.06.2026 Читать далее →

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

Сколько (багов!) я зарезал, сколько перерезал! (более 50)

Общее замечание: большинство исправлений ошибок теперь сопровождаются регрессионными тестами, проверяющими, что они не повторятся в будущем. Большинство ошибок, исправленных в этом релизе, было обнаружено с помощью анализа LLM (Claude Opus/Fable, GPT 5.5).

21.06.2026 Читать далее →

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

  • Исправления нового хранилища:
    • Исправлена логика нескольких повторных откатов
    • Исправлено падение при компактизации полностью откаченного объекта
    • Исправлено возможное слияние цепочек разных объектов при загрузке с postpone_load
    • Исправлен импорт блочных контрольных сумм в vitastor-disk write-meta
    • Исправлен расчёт контрольной суммы заголовка в vitastor-disk write-meta
  • Исправлена старого хранилища:
    • Исправлен возможный пропуск ожидания пакетного fsync частью корутин
  • Улучшен тест ENOSPC, исправлено возможное падение при ENOSPC
  • На всякий случай добавлен fsync при записи суперблока в vitastor-disk prepare
  • Исправлено возможное падение OSD при включённых pg_locks и ошибке их проверки в sec_read_bmp
  • Исправлена инициализация VitastorFS при включённых local_reads

31.05.2026 Читать далее →

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

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

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

17.05.2026 Читать далее →

Более старые записи →