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
205 lines
5.3 KiB
RPMSpec
205 lines
5.3 KiB
RPMSpec
Name: vitastor
|
|
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.14.el7.tar.gz
|
|
|
|
BuildRequires: gperftools-devel
|
|
BuildRequires: devtoolset-9-gcc-c++
|
|
BuildRequires: rh-nodejs12
|
|
BuildRequires: rh-nodejs12-npm
|
|
BuildRequires: jerasure-devel
|
|
BuildRequires: libisa-l-devel
|
|
BuildRequires: gf-complete-devel
|
|
BuildRequires: rdma-core-devel
|
|
BuildRequires: cmake3
|
|
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: libJerasure2
|
|
Requires: libisa-l
|
|
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: rh-nodejs12
|
|
Requires: rh-nodejs12-npm
|
|
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.7-2.el7
|
|
|
|
|
|
%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
|
|
. /opt/rh/devtoolset-9/enable
|
|
%cmake3 .
|
|
%make_build
|
|
|
|
|
|
%install
|
|
rm -rf $RPM_BUILD_ROOT
|
|
%make_install
|
|
. /opt/rh/rh-nodejs12/enable
|
|
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
|