From 278852b4d59903a3d6af3e034a9818072b8a7d31 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sun, 21 Jun 2026 17:49:58 +0300 Subject: [PATCH] Release 3.0.14 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit How many (bugs!) I've knifed, how many I've slit! General note: most bug fixes now include regression tests to verify that they don't repeat in the future. Most bugs fixed in this release were detected by using LLM analysis (Claude Opus/Fable, GPT 5.5). OSD: - Fix OSD hanging with an infinite loop when setting autosync_interval to 0 at runtime - (IMPORTANT) Fix EC PGs hanging in REPEERING when the last final commit/rollback in a batch completes with an error - Limit pg_size by 64 because peering doesn't handle larger values with EC — they just lead to 'incomplete' objects - Fix OSD crash with an "assertion failed" error on EIO retry in snapshot chain read (i.e. when some chunks belong to a corrupted replica with checksum mismatch) - (IMPORTANT) Disable chunked PG count resharding due to possible interference with compaction changes (will be re-enabled after fixes) - (IMPORTANT) Fix incorrect snapshot allocation bitmap recovery during EC chained read - Add on-wire request size validation to prevent possible OOM/DoS/heap corruption on receiving invalid data from the network - (IMPORTANT) Fix parity-less EC writes destroying snapshot allocation bitmaps (i.e. when all parity OSDs in a PG are missing) - (IMPORTANT) Fix EC N+K, K>=2 recovery destroying snapshot allocation bitmaps of live parity chunks - (IMPORTANT) Fix a possible OSD crash during EC misplaced object scrubbing - (IMPORTANT) Verify object bitmap consistency during scrub (only data was checked previously) - (IMPORTANT) Fix corrupted object chunks incorrectly marked as non-corrupted on the second scrub - (IMPORTANT) Fix cached EC decoding of multiple stripes with ISA-L (ISA-L is the default) New store: - Fix a theoretically possible OSD crash on startup when using the previously added workaround for the "double-claim" problem - Remove theoretically possible incorrect metadata block writes during batch EC COMMITs restarted due to a full metadata area - Fix incorrect compaction counter tracking after OSD restart (could probably lead to compaction not restarted correctly after a restart) - (IMPORTANT) Fix some of parallel big_writes possibly not waiting for data fsync, thus not providing durability - Fix possible OSD crash on sync retry when io_uring is full - Fix a possible crash during startup on corrupted on-disk data with too small entry sizes Old store: - Prevent loading extra garbage metadata entries from the last 4 MB of metadata area - Fix read operations possibly crashing if a metadata read (with inmemory_metadata=false) was restarted due to a full io_uring - Fix a possible memory leak of temporary buffers and bitmaps/checksums when a read was restarted due to a full io_uring (reproducible with either inmemory_metadata=false or block_size>256k) - Fix a possible OSD crash during padded checksum reads if buffer count exceeded 1024 (IOV_MAX) (reproducible only with csum_block_size > 4k and block_size >= 4M) - (IMPORTANT) Fix partial padded read journal checksum verification with csum_block_size > 4k - Fix incorrect marking of corrupted objects as non-corrupted after flushing data from journal (with inmemory_journal=false) - (IMPORTANT) Fix deferred freeing of a different block when a block was used by a parallel read - Fix per-inode statistics not being disabled for FS and S3 pools correctly, leading to etcd overload with unneeded per-inode statistics, slower etcd operation, increased memory usage, and too many Prometheus statistics exported by the monitor Both stores: - Fix possibly left garbage in the metadata area if the first OSD startup was interrupted — metadata header is now written only after initializating metadata - Check for short reads during initialization (just in case, doesn't happen in real life) Clients: - Fix write-back queue item split in case when write-back is enabled at runtime - Implement bdrv_detach_aio_context & bdrv_attach_aio_context in the QEMU driver (should fix migration with iothread) - Do not crash on full io_uring in ublk server - Fix missing --readonly option handling in NBD server - Stop gracefully on NBD_CMD_DISC instead of just exit(0) in NBD server - Fix writeback detection in ublk server for --image mode - Limit the amount of incoming data for NFS clients to prevent choking on memory in async mount mode Tools (vitastor-disk/vitastor-cli): - Prevent vitastor-cli merge possibly exiting before completing the last sync/delete operations - Fix vitastor-disk incorrectly validating too large small_write entry length - Fix vitastor-cli merge ignoring input option validation errors - Fix vitastor-cli rm-data always skipping the final fsync - Fix vitastor-disk resize not moving the last used data block - Fix vitastor-disk write-meta incorrectly importing new store small_write entries - Fix vitastor-disk write-journal and write-meta importing old store data incorrectly when csum_block_size is > 4k - Support --io option for vitastor-disk dump-journal/write-journal - Fix vitastor-disk resize crash when converting from very old (0.5.x) metadata - Fix vitastor-disk trim incorrectly rounding block ranges with --discard_granularity option explicitly set to a value > 4k, possibly leading to discarding live data - Fix vitastor-disk write-meta importing new store metadata incorrectly with > 4 GB metadata area size - (IMPORTANT) Fix vitastor-cli modify --resize to a smaller size clearing all image data O_o Other: - Do not crash with an uncaught exception when an invalid /osd/state/ with a non-numeric suffix is present in etcd (in OSD and all client services) - Fix possible crash in vitastor-kv when handling a corrupted DB due to a uint32 overflow - Fix NFS-RDMA memory allocator crashing in some situations - Fix small shared file extend-write potentially reading unallocated memory (NFS) - Add bounds checks to prevent uint32 overflows in NFS/XDR - Re-enable accidentally disabled safety checks (asserts) in files with included cpp-btree - Fix too small memory allocation in NFS portmap --- CMakeLists.txt | 2 +- csi/Makefile | 2 +- csi/deploy/004-csi-nodeplugin.yaml | 2 +- csi/deploy/007-csi-provisioner.yaml | 2 +- csi/src/config.go | 2 +- debian/changelog | 2 +- docker/Makefile | 2 +- docker/etc/vitastor/docker.conf | 2 +- docs/installation/docker.en.md | 4 ++-- docs/installation/docker.ru.md | 4 ++-- mon/package.json | 2 +- node-binding/package.json | 2 +- patches/cinder-vitastor.py | 2 +- rpm/vitastor-el10.spec | 4 ++-- rpm/vitastor-el7.spec | 4 ++-- rpm/vitastor-el8.spec | 4 ++-- rpm/vitastor-el9.spec | 4 ++-- src/CMakeLists.txt | 2 +- src/client/vitastor.pc.in | 2 +- 19 files changed, 25 insertions(+), 25 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 538e706b..22a42edb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8...3.30) project(vitastor) -set(VITASTOR_VERSION "3.0.13") +set(VITASTOR_VERSION "3.0.14") include(CTest) diff --git a/csi/Makefile b/csi/Makefile index 534765a5..f0c4b8b6 100644 --- a/csi/Makefile +++ b/csi/Makefile @@ -1,4 +1,4 @@ -VITASTOR_VERSION ?= v3.0.13 +VITASTOR_VERSION ?= v3.0.14 all: build push diff --git a/csi/deploy/004-csi-nodeplugin.yaml b/csi/deploy/004-csi-nodeplugin.yaml index 6ca8de7c..62c0a127 100644 --- a/csi/deploy/004-csi-nodeplugin.yaml +++ b/csi/deploy/004-csi-nodeplugin.yaml @@ -49,7 +49,7 @@ spec: capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true - image: vitalif/vitastor-csi:v3.0.13 + image: vitalif/vitastor-csi:v3.0.14 args: - "--node=$(NODE_ID)" - "--endpoint=$(CSI_ENDPOINT)" diff --git a/csi/deploy/007-csi-provisioner.yaml b/csi/deploy/007-csi-provisioner.yaml index 78ebcaf6..a3d3fee0 100644 --- a/csi/deploy/007-csi-provisioner.yaml +++ b/csi/deploy/007-csi-provisioner.yaml @@ -121,7 +121,7 @@ spec: privileged: true capabilities: add: ["SYS_ADMIN"] - image: vitalif/vitastor-csi:v3.0.13 + image: vitalif/vitastor-csi:v3.0.14 args: - "--node=$(NODE_ID)" - "--endpoint=$(CSI_ENDPOINT)" diff --git a/csi/src/config.go b/csi/src/config.go index 7db29105..caa1c53f 100644 --- a/csi/src/config.go +++ b/csi/src/config.go @@ -5,7 +5,7 @@ package vitastor const ( vitastorCSIDriverName = "csi.vitastor.io" - vitastorCSIDriverVersion = "3.0.13" + vitastorCSIDriverVersion = "3.0.14" ) // Config struct fills the parameters of request or user input diff --git a/debian/changelog b/debian/changelog index 1b390e9d..9c92f6fe 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -vitastor (3.0.13-1) unstable; urgency=medium +vitastor (3.0.14-1) unstable; urgency=medium * Bugfixes diff --git a/docker/Makefile b/docker/Makefile index 88c8aba7..ad350b01 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,4 +1,4 @@ -VITASTOR_VERSION ?= v3.0.13 +VITASTOR_VERSION ?= v3.0.14 all: build push diff --git a/docker/etc/vitastor/docker.conf b/docker/etc/vitastor/docker.conf index a57ca89a..d3dcbe6b 100644 --- a/docker/etc/vitastor/docker.conf +++ b/docker/etc/vitastor/docker.conf @@ -4,7 +4,7 @@ # # Desired Vitastor version -VITASTOR_VERSION=v3.0.13 +VITASTOR_VERSION=v3.0.14 # Additional arguments for all containers # For example, you may want to specify a custom logging driver here diff --git a/docs/installation/docker.en.md b/docs/installation/docker.en.md index 0c9319f5..07943b52 100644 --- a/docs/installation/docker.en.md +++ b/docs/installation/docker.en.md @@ -26,9 +26,9 @@ at Vitastor Kubernetes operator: https://github.com/Antilles7227/vitastor-operat The instruction is very simple. 1. Download a Docker image of the desired version: \ - `docker pull vitalif/vitastor:v3.0.13` + `docker pull vitalif/vitastor:v3.0.14` 2. Install scripts to the host system: \ - `docker run --rm -it -v /etc:/host-etc -v /usr/bin:/host-bin vitalif/vitastor:v3.0.13 install.sh` + `docker run --rm -it -v /etc:/host-etc -v /usr/bin:/host-bin vitalif/vitastor:v3.0.14 install.sh` 3. Reload udev rules: \ `udevadm control --reload-rules` 4. Enable the vitastor-host service: \ diff --git a/docs/installation/docker.ru.md b/docs/installation/docker.ru.md index d565db6b..dc4e697d 100644 --- a/docs/installation/docker.ru.md +++ b/docs/installation/docker.ru.md @@ -25,9 +25,9 @@ Vitastor можно установить в Docker/Podman. При этом etcd, Инструкция по установке максимально простая. 1. Скачайте Docker-образ желаемой версии: \ - `docker pull vitalif/vitastor:v3.0.13` + `docker pull vitalif/vitastor:v3.0.14` 2. Установите скрипты в хост-систему командой: \ - `docker run --rm -it -v /etc:/host-etc -v /usr/bin:/host-bin vitalif/vitastor:v3.0.13 install.sh` + `docker run --rm -it -v /etc:/host-etc -v /usr/bin:/host-bin vitalif/vitastor:v3.0.14 install.sh` 3. Перезагрузите правила udev: \ `udevadm control --reload-rules` 4. Включите сервис vitastor-host: \ diff --git a/mon/package.json b/mon/package.json index b8d1a3e1..46984d7e 100644 --- a/mon/package.json +++ b/mon/package.json @@ -1,6 +1,6 @@ { "name": "vitastor-mon", - "version": "3.0.13", + "version": "3.0.14", "description": "Vitastor SDS monitor service", "main": "mon-main.js", "scripts": { diff --git a/node-binding/package.json b/node-binding/package.json index cb5b63cb..dd4d2ceb 100644 --- a/node-binding/package.json +++ b/node-binding/package.json @@ -1,6 +1,6 @@ { "name": "vitastor", - "version": "3.0.13", + "version": "3.0.14", "description": "Low-level native bindings to Vitastor client library", "main": "index.js", "keywords": [ diff --git a/patches/cinder-vitastor.py b/patches/cinder-vitastor.py index ce4ce266..a5359901 100644 --- a/patches/cinder-vitastor.py +++ b/patches/cinder-vitastor.py @@ -50,7 +50,7 @@ from cinder.volume import configuration from cinder.volume import driver from cinder.volume import volume_utils -VITASTOR_VERSION = '3.0.13' +VITASTOR_VERSION = '3.0.14' LOG = logging.getLogger(__name__) diff --git a/rpm/vitastor-el10.spec b/rpm/vitastor-el10.spec index eba56aa3..99ce6259 100644 --- a/rpm/vitastor-el10.spec +++ b/rpm/vitastor-el10.spec @@ -1,11 +1,11 @@ Name: vitastor -Version: 3.0.13 +Version: 3.0.14 Release: 1%{?dist} Summary: Vitastor, a fast software-defined clustered block storage License: Vitastor Network Public License 1.1 URL: https://vitastor.io/ -Source0: vitastor-3.0.13.el10.tar.gz +Source0: vitastor-3.0.14.el10.tar.gz BuildRequires: gperftools-devel BuildRequires: gcc-c++ diff --git a/rpm/vitastor-el7.spec b/rpm/vitastor-el7.spec index b7c08224..3ca110be 100644 --- a/rpm/vitastor-el7.spec +++ b/rpm/vitastor-el7.spec @@ -1,11 +1,11 @@ Name: vitastor -Version: 3.0.13 +Version: 3.0.14 Release: 1%{?dist} Summary: Vitastor, a fast software-defined clustered block storage License: Vitastor Network Public License 1.1 URL: https://vitastor.io/ -Source0: vitastor-3.0.13.el7.tar.gz +Source0: vitastor-3.0.14.el7.tar.gz BuildRequires: gperftools-devel BuildRequires: devtoolset-9-gcc-c++ diff --git a/rpm/vitastor-el8.spec b/rpm/vitastor-el8.spec index 81becd8d..1067389a 100644 --- a/rpm/vitastor-el8.spec +++ b/rpm/vitastor-el8.spec @@ -1,11 +1,11 @@ Name: vitastor -Version: 3.0.13 +Version: 3.0.14 Release: 1%{?dist} Summary: Vitastor, a fast software-defined clustered block storage License: Vitastor Network Public License 1.1 URL: https://vitastor.io/ -Source0: vitastor-3.0.13.el8.tar.gz +Source0: vitastor-3.0.14.el8.tar.gz BuildRequires: gperftools-devel BuildRequires: gcc-toolset-9-gcc-c++ diff --git a/rpm/vitastor-el9.spec b/rpm/vitastor-el9.spec index f68ce62e..18591d25 100644 --- a/rpm/vitastor-el9.spec +++ b/rpm/vitastor-el9.spec @@ -1,11 +1,11 @@ Name: vitastor -Version: 3.0.13 +Version: 3.0.14 Release: 1%{?dist} Summary: Vitastor, a fast software-defined clustered block storage License: Vitastor Network Public License 1.1 URL: https://vitastor.io/ -Source0: vitastor-3.0.13.el9.tar.gz +Source0: vitastor-3.0.14.el9.tar.gz BuildRequires: gperftools-devel BuildRequires: gcc-c++ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a1191515..9d585225 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,7 +20,7 @@ if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$") endif() set(ENABLE_COVERAGE false CACHE BOOL "Enable code coverage") -add_definitions(-DVITASTOR_VERSION="3.0.13") +add_definitions(-DVITASTOR_VERSION="3.0.14") add_definitions(-D_GNU_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -Wno-sign-compare -Wno-comment -Wno-parentheses -Wno-pointer-arith -fdiagnostics-color=always -fno-omit-frame-pointer -fvisibility=hidden -I ${CMAKE_SOURCE_DIR}/src) add_link_options(-fno-omit-frame-pointer) if (${WITH_ASAN}) diff --git a/src/client/vitastor.pc.in b/src/client/vitastor.pc.in index 1dc231dd..47544a78 100644 --- a/src/client/vitastor.pc.in +++ b/src/client/vitastor.pc.in @@ -6,7 +6,7 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ Name: Vitastor Description: Vitastor client library -Version: 3.0.13 +Version: 3.0.14 Libs: -L${libdir} -lvitastor_client Cflags: -I${includedir}