From 63fe3c323a896a14d9ae6ac8bd022ce2fea941a4 Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Mon, 18 May 2026 00:39:59 +0300 Subject: [PATCH] Release 3.0.12 Important fixes (except the new store): - Fixed a possible use-after-free in the OSD during error handling of initial commit/rollback of objects in EC pools. - Fixed a possible free of an invalid pointer in the OSD during read errors from snapshot/clone chains in EC pools. - Fixed possibly incorrect handling of commit/rollback operations in EC pools during pool PG count changes. - Fixed the inverted fsync enable parameter in the ublk driver (fsync was not enabled on pools without immediate_commit). - Added the raw-ls command for debugging purposes to find object versions in the cluster using listing operations. New store fixes: - Improved startup speed by using LSN-based sorting only for objects with a large number of intermediate versions. - Added skip_double_claim option as a temporary workaround to fix the rare OSD startup error with the "double claimed block" message, observed by several users. This option does not affect data integrity. - Fixed incorrect rechecking of small writes during startup, which in theory could lead to duplicate small write object entries on the OSD. - Fixed fsync operation for disks with a writeback cache (without capacitors): - Fixed incorrect semantics of consecutive fsyncs (next fsync was not blocked by the previous one). - Added fsync when copying small writes from the buffer to the data device (somehow forgotten during initial development). - Added fsync after the initial garbage collection during OSD startup. - Fixed incorrect cast of LSN from uint64 to uint32, breaking fsync when reaching LSN 2^32. - Added missing verification of the metadata header checksum during startup. - Fixed incorrect updating of object checksums in perfect_csum_update=true mode. - Fixed a possible OSD crash with "assertion failed" when processing a malformed EC STABILIZE operation. - Fixed the accounting of active compactor coroutines. - Removed broken and untested new->old store conversion support. Minor issues fixed: - Incorrect accounting of OSD local operation statistics in replicated pools. - Missing non-zero exitcodes on vitastor-disk resize command errors. - Missing reset of the list of inconsistent objects during PG restarts. - Theoretically possible hangs of various OSD operations when working with completely corrupted objects (without a single available copy), and possibly in some other very rare situations. - Incorrect fsyncs when deleting objects from pools without immediate_commit (on disks with a writeback cache), which previously could leave garbage when deleting misplaced objects. - Possible crash/memory corruption of the NFS server during a targeted attack on NFS-RDMA. - Possibly incorrect handling of ENOSPC/EIO write errors in replicated pools, leading to inability to retry the write later. - Possible crash instead of a clean error exit when starting an OSD with the old storage engine on a disk with corrupted journal data. - Shallow copying of PG configuration in the monitor, however, not related to actual bugs. - Incorrect checking of allocated blocks in the QEMU driver in an unused code branch (without the BDRV_WANT_ZERO flag). - Possible memory leak on read errors of corrupted objects. - Possible incorrect PG states when corrupted objects are detected. - Possible failure to mark all "bad" copies of an object during scrubs without checksums and with a large number of replicas (> 4). - Incorrect checksum calculation in the old storage engine when bitmap_granularity < 4096 (a practically unused configuration). - Theoretically possible OSD crash in rare cases during a scrub and simultaneous object recovery. - Theoretically possible OSD crash when handling PING operation errors. - Slightly suboptimal logic for reusing the RDMA send buffer. - Possible memory leak when canceling an already running scrub via no_scrub. - Possible memory corruption when a client (e.g., QEMU code) passes invalid buffers and the writeback cache is enabled. - Potentially incorrect search for corrupted parts of EC objects (inability to find a "good" combination) during a scrub with checksums disabled. - Possible additional memory usage on the OSD side when handling failed reads from snapshots (not a leak however - the memory was freed upon client disconnection). - Potential sudden write slowdown at certain pg epoch values due to incorrect epoch update logic in etcd. --- 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 9049c448..d7fe95e6 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.11") +set(VITASTOR_VERSION "3.0.12") include(CTest) diff --git a/csi/Makefile b/csi/Makefile index 8bf0eb92..7e48623c 100644 --- a/csi/Makefile +++ b/csi/Makefile @@ -1,4 +1,4 @@ -VITASTOR_VERSION ?= v3.0.11 +VITASTOR_VERSION ?= v3.0.12 all: build push diff --git a/csi/deploy/004-csi-nodeplugin.yaml b/csi/deploy/004-csi-nodeplugin.yaml index 29751802..d02cec10 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.11 + image: vitalif/vitastor-csi:v3.0.12 args: - "--node=$(NODE_ID)" - "--endpoint=$(CSI_ENDPOINT)" diff --git a/csi/deploy/007-csi-provisioner.yaml b/csi/deploy/007-csi-provisioner.yaml index 2c9fb1c3..e0608668 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.11 + image: vitalif/vitastor-csi:v3.0.12 args: - "--node=$(NODE_ID)" - "--endpoint=$(CSI_ENDPOINT)" diff --git a/csi/src/config.go b/csi/src/config.go index 54eddcb8..d55cfad0 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.11" + vitastorCSIDriverVersion = "3.0.12" ) // Config struct fills the parameters of request or user input diff --git a/debian/changelog b/debian/changelog index ac6035e4..039357e7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -vitastor (3.0.11-1) unstable; urgency=medium +vitastor (3.0.12-1) unstable; urgency=medium * Bugfixes diff --git a/docker/Makefile b/docker/Makefile index 2fdb46db..872d66d3 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,4 +1,4 @@ -VITASTOR_VERSION ?= v3.0.11 +VITASTOR_VERSION ?= v3.0.12 all: build push diff --git a/docker/etc/vitastor/docker.conf b/docker/etc/vitastor/docker.conf index c0470973..46328254 100644 --- a/docker/etc/vitastor/docker.conf +++ b/docker/etc/vitastor/docker.conf @@ -4,7 +4,7 @@ # # Desired Vitastor version -VITASTOR_VERSION=v3.0.11 +VITASTOR_VERSION=v3.0.12 # 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 3c3d17cc..ece87c1e 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.11` + `docker pull vitalif/vitastor:v3.0.12` 2. Install scripts to the host system: \ - `docker run --rm -it -v /etc:/host-etc -v /usr/bin:/host-bin vitalif/vitastor:v3.0.11 install.sh` + `docker run --rm -it -v /etc:/host-etc -v /usr/bin:/host-bin vitalif/vitastor:v3.0.12 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 d21d384e..b0008306 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.11` + `docker pull vitalif/vitastor:v3.0.12` 2. Установите скрипты в хост-систему командой: \ - `docker run --rm -it -v /etc:/host-etc -v /usr/bin:/host-bin vitalif/vitastor:v3.0.11 install.sh` + `docker run --rm -it -v /etc:/host-etc -v /usr/bin:/host-bin vitalif/vitastor:v3.0.12 install.sh` 3. Перезагрузите правила udev: \ `udevadm control --reload-rules` 4. Включите сервис vitastor-host: \ diff --git a/mon/package.json b/mon/package.json index cc71b273..105f8fcf 100644 --- a/mon/package.json +++ b/mon/package.json @@ -1,6 +1,6 @@ { "name": "vitastor-mon", - "version": "3.0.11", + "version": "3.0.12", "description": "Vitastor SDS monitor service", "main": "mon-main.js", "scripts": { diff --git a/node-binding/package.json b/node-binding/package.json index 4f83b590..102063ae 100644 --- a/node-binding/package.json +++ b/node-binding/package.json @@ -1,6 +1,6 @@ { "name": "vitastor", - "version": "3.0.11", + "version": "3.0.12", "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 55505d61..8acda757 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.11' +VITASTOR_VERSION = '3.0.12' LOG = logging.getLogger(__name__) diff --git a/rpm/vitastor-el10.spec b/rpm/vitastor-el10.spec index 15f4115c..1d415f2c 100644 --- a/rpm/vitastor-el10.spec +++ b/rpm/vitastor-el10.spec @@ -1,11 +1,11 @@ Name: vitastor -Version: 3.0.11 +Version: 3.0.12 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.11.el10.tar.gz +Source0: vitastor-3.0.12.el10.tar.gz BuildRequires: gperftools-devel BuildRequires: gcc-c++ diff --git a/rpm/vitastor-el7.spec b/rpm/vitastor-el7.spec index 888e957a..6f84427b 100644 --- a/rpm/vitastor-el7.spec +++ b/rpm/vitastor-el7.spec @@ -1,11 +1,11 @@ Name: vitastor -Version: 3.0.11 +Version: 3.0.12 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.11.el7.tar.gz +Source0: vitastor-3.0.12.el7.tar.gz BuildRequires: gperftools-devel BuildRequires: devtoolset-9-gcc-c++ diff --git a/rpm/vitastor-el8.spec b/rpm/vitastor-el8.spec index af9993f2..e48c11e5 100644 --- a/rpm/vitastor-el8.spec +++ b/rpm/vitastor-el8.spec @@ -1,11 +1,11 @@ Name: vitastor -Version: 3.0.11 +Version: 3.0.12 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.11.el8.tar.gz +Source0: vitastor-3.0.12.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 cb39ab96..3f3e1d95 100644 --- a/rpm/vitastor-el9.spec +++ b/rpm/vitastor-el9.spec @@ -1,11 +1,11 @@ Name: vitastor -Version: 3.0.11 +Version: 3.0.12 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.11.el9.tar.gz +Source0: vitastor-3.0.12.el9.tar.gz BuildRequires: gperftools-devel BuildRequires: gcc-c++ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5dd3482d..c8af6852 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.11") +add_definitions(-DVITASTOR_VERSION="3.0.12") 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 90a452e3..82342f26 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.11 +Version: 3.0.12 Libs: -L${libdir} -lvitastor_client Cflags: -I${includedir}