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.
199 lines
5.1 KiB
RPMSpec
199 lines
5.1 KiB
RPMSpec
Name: vitastor
|
|
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.12.el10.tar.gz
|
|
|
|
BuildRequires: gperftools-devel
|
|
BuildRequires: gcc-c++
|
|
BuildRequires: nodejs >= 10
|
|
BuildRequires: jerasure-devel
|
|
BuildRequires: isa-l-devel
|
|
BuildRequires: gf-complete-devel
|
|
BuildRequires: rdma-core-devel
|
|
BuildRequires: cmake
|
|
BuildRequires: libnl3-devel
|
|
Requires: vitastor-osd = %{version}-%{release}
|
|
Requires: vitastor-mon = %{version}-%{release}
|
|
Requires: vitastor-client = %{version}-%{release}
|
|
Requires: vitastor-client-devel = %{version}-%{release}
|
|
Requires: vitastor-fio = %{version}-%{release}
|
|
|
|
%description
|
|
Vitastor is a small, simple and fast clustered block storage (storage for VM drives),
|
|
architecturally similar to Ceph which means strong consistency, primary-replication,
|
|
symmetric clustering and automatic data distribution over any number of drives of any
|
|
size with configurable redundancy (replication or erasure codes/XOR).
|
|
|
|
|
|
%package -n vitastor-osd
|
|
Summary: Vitastor - OSD
|
|
Requires: vitastor-client = %{version}-%{release}
|
|
Requires: util-linux
|
|
Requires: parted
|
|
|
|
|
|
%description -n vitastor-osd
|
|
Vitastor object storage daemon, i.e. server program that stores data.
|
|
|
|
|
|
%package -n vitastor-mon
|
|
Summary: Vitastor - monitor
|
|
Requires: nodejs >= 10
|
|
Requires: lpsolve
|
|
|
|
|
|
%description -n vitastor-mon
|
|
Vitastor monitor, i.e. server program responsible for watching cluster state and
|
|
scheduling cluster-level operations.
|
|
|
|
|
|
%package -n vitastor-client
|
|
Summary: Vitastor - client
|
|
|
|
|
|
%description -n vitastor-client
|
|
Vitastor client library and command-line interface.
|
|
|
|
|
|
%package -n vitastor-client-devel
|
|
Summary: Vitastor - development files
|
|
Group: Development/Libraries
|
|
Requires: vitastor-client = %{version}-%{release}
|
|
|
|
|
|
%description -n vitastor-client-devel
|
|
Vitastor library headers for development.
|
|
|
|
|
|
%package -n vitastor-fio
|
|
Summary: Vitastor - fio drivers
|
|
Group: Development/Libraries
|
|
Requires: vitastor-client = %{version}-%{release}
|
|
Requires: fio = 3.36-5.el10
|
|
|
|
|
|
%description -n vitastor-fio
|
|
Vitastor fio drivers for benchmarking.
|
|
|
|
|
|
%package -n vitastor-opennebula
|
|
Summary: Vitastor for OpenNebula
|
|
Group: Development/Libraries
|
|
Requires: vitastor-client
|
|
Requires: jq
|
|
Requires: python3-lxml
|
|
Requires: patch
|
|
Requires: qemu-kvm-block-vitastor
|
|
|
|
|
|
%description -n vitastor-opennebula
|
|
Vitastor storage plugin for OpenNebula.
|
|
|
|
|
|
%prep
|
|
%setup -q
|
|
|
|
|
|
%build
|
|
%cmake
|
|
%cmake_build
|
|
|
|
|
|
%install
|
|
rm -rf $RPM_BUILD_ROOT
|
|
%cmake_install
|
|
cd mon
|
|
npm install --production
|
|
cd ..
|
|
mkdir -p %buildroot/usr/lib/vitastor
|
|
cp -r mon %buildroot/usr/lib/vitastor
|
|
mv %buildroot/usr/lib/vitastor/mon/scripts/make-etcd %buildroot/usr/lib/vitastor/mon/
|
|
mkdir -p %buildroot/lib/systemd/system
|
|
cp mon/scripts/vitastor.target mon/scripts/vitastor-mon.service mon/scripts/vitastor-osd@.service %buildroot/lib/systemd/system
|
|
mkdir -p %buildroot/lib/udev/rules.d
|
|
cp mon/scripts/90-vitastor.rules %buildroot/lib/udev/rules.d
|
|
mkdir -p %buildroot/var/lib/one
|
|
cp -r opennebula/remotes %buildroot/var/lib/one
|
|
cp opennebula/install.sh %buildroot/var/lib/one/remotes/datastore/vitastor/
|
|
mkdir -p %buildroot/etc/
|
|
cp -r opennebula/sudoers.d %buildroot/etc/
|
|
|
|
|
|
%files
|
|
%doc GPL-2.0.txt VNPL-1.1.txt README.md README-ru.md
|
|
|
|
|
|
%files -n vitastor-osd
|
|
%_bindir/vitastor-osd
|
|
%_bindir/vitastor-disk
|
|
%_bindir/vitastor-dump-journal
|
|
/lib/systemd/system/vitastor-osd@.service
|
|
/lib/systemd/system/vitastor.target
|
|
/lib/udev/rules.d/90-vitastor.rules
|
|
|
|
|
|
%pre -n vitastor-osd
|
|
groupadd -r -f vitastor 2>/dev/null ||:
|
|
useradd -r -g vitastor -s /sbin/nologin -c "Vitastor daemons" -M -d /nonexistent vitastor 2>/dev/null ||:
|
|
install -o vitastor -g vitastor -d /var/log/vitastor
|
|
mkdir -p /etc/vitastor
|
|
|
|
|
|
%files -n vitastor-mon
|
|
/usr/lib/vitastor/mon
|
|
/lib/systemd/system/vitastor-mon.service
|
|
|
|
|
|
%pre -n vitastor-mon
|
|
groupadd -r -f vitastor 2>/dev/null ||:
|
|
useradd -r -g vitastor -s /sbin/nologin -c "Vitastor daemons" -M -d /nonexistent vitastor 2>/dev/null ||:
|
|
mkdir -p /etc/vitastor
|
|
mkdir -p /var/lib/vitastor
|
|
chown vitastor:vitastor /var/lib/vitastor
|
|
|
|
|
|
%files -n vitastor-client
|
|
%_bindir/vitastor-nbd
|
|
%_bindir/vitastor-ublk
|
|
%_bindir/vitastor-nfs
|
|
%_bindir/vitastor-cli
|
|
%_bindir/vitastor-rm
|
|
%_bindir/vitastor-kv
|
|
%_bindir/vitastor-kv-stress
|
|
%_bindir/vita
|
|
%_libdir/libvitastor_client.so*
|
|
%_libdir/libvitastor_kv.so*
|
|
|
|
|
|
%files -n vitastor-client-devel
|
|
%_includedir/vitastor_c.h
|
|
%_includedir/vitastor_kv.h
|
|
%_libdir/pkgconfig
|
|
|
|
|
|
%files -n vitastor-fio
|
|
%_libdir/libfio_vitastor.so
|
|
%_libdir/libfio_vitastor_blk.so
|
|
%_libdir/libfio_vitastor_sec.so
|
|
|
|
|
|
%files -n vitastor-opennebula
|
|
/var/lib/one
|
|
/etc/sudoers.d/opennebula-vitastor
|
|
|
|
|
|
%triggerin -n vitastor-opennebula -- opennebula
|
|
[ $2 = 0 ] || exit 0
|
|
/var/lib/one/remotes/datastore/vitastor/install.sh
|
|
|
|
|
|
# Turn off the brp-python-bytecompile script
|
|
%global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
|
|
|
|
|
|
%changelog
|