Compare commits

..

33 Commits

Author SHA1 Message Date
Vitaliy Filippov f5753a52b9 Fix eviction when random_pos selects the end
Test / test_move_reappear (push) Has been cancelled Details
Test / test_rm (push) Has been cancelled Details
Test / test_snapshot_chain (push) Has been cancelled Details
Test / test_snapshot_chain_ec (push) Has been cancelled Details
Test / test_snapshot_down (push) Has been cancelled Details
Test / test_snapshot_down_ec (push) Has been cancelled Details
Test / test_splitbrain (push) Has been cancelled Details
Test / test_rebalance_verify (push) Has been cancelled Details
Test / test_rebalance_verify_imm (push) Has been cancelled Details
Test / test_rebalance_verify_ec (push) Has been cancelled Details
Test / test_rebalance_verify_ec_imm (push) Has been cancelled Details
Test / test_switch_primary (push) Has been cancelled Details
Test / test_write (push) Has been cancelled Details
Test / test_write_xor (push) Has been cancelled Details
Test / test_write_no_same (push) Has been cancelled Details
Test / test_heal_pg_size_2 (push) Has been cancelled Details
Test / test_heal_ec (push) Has been cancelled Details
Test / test_heal_csum_32k_dmj (push) Has been cancelled Details
Test / test_heal_csum_32k_dj (push) Has been cancelled Details
Test / test_heal_csum_32k (push) Has been cancelled Details
Test / test_heal_csum_4k_dmj (push) Has been cancelled Details
Test / test_heal_csum_4k_dj (push) Has been cancelled Details
Test / test_heal_csum_4k (push) Has been cancelled Details
Test / test_scrub (push) Has been cancelled Details
Test / test_scrub_zero_osd_2 (push) Has been cancelled Details
Test / test_scrub_xor (push) Has been cancelled Details
Test / test_scrub_pg_size_3 (push) Has been cancelled Details
Test / test_scrub_pg_size_6_pg_minsize_4_osd_count_6_ec (push) Has been cancelled Details
Test / test_scrub_ec (push) Has been cancelled Details
Test / buildenv (push) Has been cancelled Details
2024-02-03 20:37:45 +03:00
Vitaliy Filippov feae754e6a Implement min/max list_count to make listings during performance test reasonable 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 08d9735efe Fix and improve parallel allocation
- Do not try to allocate more DB blocks in an inode block until it's "confirmed" and "locked" by the first write
- Do not recheck for new zero DB blocks on first write into an inode block - a CAS failure means someone else is already writing into it
- Throw new allocation blocks away regardless of whether the known_version is 0 on a CAS failure
2024-02-03 20:37:45 +03:00
Vitaliy Filippov 90e2c4ed2c Implement key_prefix for K/V stress test 2024-02-03 20:37:45 +03:00
Vitaliy Filippov c3f19f0add More fixes
- do not overwrite a block with older version if known version is newer
  (read may start before update and end after update)
- invalidated block versions can't be remembered and trusted
- right boundary for split blocks is right_half when diving down, not key_lt
- restart update also when block is "invalidated", not just on version mismatch
- copy callback in listings to avoid closure destruction bugs too
2024-02-03 20:37:45 +03:00
Vitaliy Filippov c38eb44415 Add logging and one more assert 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 8ad61a8c9a Make get_block() wait for updating when unrelated block is found along the path 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 77b06bf72f Fix a race condition where changed blocks were parsed over existing cached blocks and getting a mix of data 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 3bcd42a7b4 Simplify code by removing an unneeded "optimisation" 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 0042384517 Add kv_log_level, print warnings on level 1, trace ops on level 10 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 94ca965de7 Fix duplicate keys in listings on parallel updates -- do not rewind key "iterator position" 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 94e8a5437f Implement key suffix to avoid collisions of multiple test workers 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 3991a632be Do not complain on empty first block 2024-02-03 20:37:45 +03:00
Vitaliy Filippov b9868504de Add JSON output for stress-tester 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 777cee65da Print total stats 2024-02-03 20:37:45 +03:00
Vitaliy Filippov b22580e28d Do not send more than op_count operations (fix segfault on finish) 2024-02-03 20:37:45 +03:00
Vitaliy Filippov c75244c369 Add some more resiliency to serialize() 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 92d87cd244 Invalidate blocks being updated too 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 6543afa2ed Change new block allocation method: make each writer choose multiple empty PG blocks and place blocks in them 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 7a4e19215d Remove blocks from cache on unsuccessful updates 2024-02-03 20:37:45 +03:00
Vitaliy Filippov f2f85df200 Allow to track multiple updates per block (it should never happen though) 2024-02-03 20:37:45 +03:00
Vitaliy Filippov f7444e717d Do not call stop_updating after failed write_new_block and after clear_block (both delete the item) 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 9aba5373bb Track versions of parent blocks and recheck if changed during update 2024-02-03 20:37:45 +03:00
Vitaliy Filippov f4b85900b7 Fix resume_split condition (key_lt can also be "") 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 38e5a94feb Experiment: transform offsets for better sharding 2024-02-03 20:37:45 +03:00
Vitaliy Filippov e63d59798c More post-stress-test fixes
- Prevent _split types of new blocks
- Stop updating new blocks only after the whole update, otherwise pointers
  may become invalid
- Use recheck_none for updates initially
- Use UINT64_MAX as initial block version when postponing ops, otherwise the
  check fails when the block is initially empty. This for example leads to
  writing both leaf items & block pointers (which is incorrect) into the root
  block when starting stress-test with --parallelism 32
- Fix -EINTR comparison
2024-02-03 20:37:45 +03:00
Vitaliy Filippov a476af5bb6 Print operation statistics 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 07e8bece9b K/V fixes after stress-test :-)
- track block versions correctly - per inode block (128kb) instead of tree block (4kb)
- prevent multiple parallel CAS writes of the same inode block
- add logging for EILSEQ which means invalid data in the tree
- fix get_block updated flag which was true for blocks already in cache and was leading to infinite loops on "unrelated block" errors
- apply changes to blocks in cache only after successful writes (using "virtual changes")
- do not replace cached block with an older version from disk
- recheck "unrelated blocks" (read/update collisions) until data stops changing
- track tree path correctly - do not treat split block as parent of its right half
- correctly move blocks when finding new empty place on disk
- restart updates from the beginning when one of blocks is changed by a parallel update
- fix delete using SET opcode and setting key to the empty value instead
- prevent changing the same key more than 1 time in parallel
- fix listing verification
- resume continue_updates in update_find (required because it uses continue_update itself)
- add allow_old_cached parameter to get()
2024-02-03 20:37:45 +03:00
Vitaliy Filippov 83ba4b8277 Implement K/V DB stress tester 2024-02-03 20:37:45 +03:00
Vitaliy Filippov ff40b5da50 Evict blocks based on memory limit & block usage 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 114db95c55 Track blocks per level 2024-02-03 20:37:45 +03:00
Vitaliy Filippov c51bf90d34 Track block level 2024-02-03 20:37:45 +03:00
Vitaliy Filippov 30686933ed Experimental B-Tree Vitastor embedded K/V database implementation! 2024-02-03 20:37:45 +03:00
19 changed files with 25 additions and 27 deletions

View File

@ -2,6 +2,6 @@ cmake_minimum_required(VERSION 2.8.12)
project(vitastor)
set(VERSION "1.4.2")
set(VERSION "1.4.1")
add_subdirectory(src)

View File

@ -1,4 +1,4 @@
VERSION ?= v1.4.2
VERSION ?= v1.4.1
all: build push

View File

@ -49,7 +49,7 @@ spec:
capabilities:
add: ["SYS_ADMIN"]
allowPrivilegeEscalation: true
image: vitalif/vitastor-csi:v1.4.2
image: vitalif/vitastor-csi:v1.4.1
args:
- "--node=$(NODE_ID)"
- "--endpoint=$(CSI_ENDPOINT)"

View File

@ -121,7 +121,7 @@ spec:
privileged: true
capabilities:
add: ["SYS_ADMIN"]
image: vitalif/vitastor-csi:v1.4.2
image: vitalif/vitastor-csi:v1.4.1
args:
- "--node=$(NODE_ID)"
- "--endpoint=$(CSI_ENDPOINT)"

View File

@ -5,7 +5,7 @@ package vitastor
const (
vitastorCSIDriverName = "csi.vitastor.io"
vitastorCSIDriverVersion = "1.4.2"
vitastorCSIDriverVersion = "1.4.1"
)
// Config struct fills the parameters of request or user input

2
debian/changelog vendored
View File

@ -1,4 +1,4 @@
vitastor (1.4.2-1) unstable; urgency=medium
vitastor (1.4.1-1) unstable; urgency=medium
* Bugfixes

View File

@ -35,8 +35,8 @@ RUN set -e -x; \
mkdir -p /root/packages/vitastor-$REL; \
rm -rf /root/packages/vitastor-$REL/*; \
cd /root/packages/vitastor-$REL; \
cp -r /root/vitastor vitastor-1.4.2; \
cd vitastor-1.4.2; \
cp -r /root/vitastor vitastor-1.4.1; \
cd vitastor-1.4.1; \
ln -s /root/fio-build/fio-*/ ./fio; \
FIO=$(head -n1 fio/debian/changelog | perl -pe 's/^.*\((.*?)\).*$/$1/'); \
ls /usr/include/linux/raw.h || cp ./debian/raw.h /usr/include/linux/raw.h; \
@ -49,8 +49,8 @@ RUN set -e -x; \
rm -rf a b; \
echo "dep:fio=$FIO" > debian/fio_version; \
cd /root/packages/vitastor-$REL; \
tar --sort=name --mtime='2020-01-01' --owner=0 --group=0 --exclude=debian -cJf vitastor_1.4.2.orig.tar.xz vitastor-1.4.2; \
cd vitastor-1.4.2; \
tar --sort=name --mtime='2020-01-01' --owner=0 --group=0 --exclude=debian -cJf vitastor_1.4.1.orig.tar.xz vitastor-1.4.1; \
cd vitastor-1.4.1; \
V=$(head -n1 debian/changelog | perl -pe 's/^.*\((.*?)\).*$/$1/'); \
DEBFULLNAME="Vitaliy Filippov <vitalif@yourcmc.ru>" dch -D $REL -v "$V""$REL" "Rebuild for $REL"; \
DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage --jobs=auto -sa; \

View File

@ -1,6 +1,6 @@
{
"name": "vitastor-mon",
"version": "1.4.2",
"version": "1.4.1",
"description": "Vitastor SDS monitor service",
"main": "mon-main.js",
"scripts": {

View File

@ -8,9 +8,7 @@ PartOf=vitastor.target
LimitNOFILE=1048576
LimitNPROC=1048576
LimitMEMLOCK=infinity
# Use the following for direct logs to files
#ExecStart=bash -c 'exec vitastor-disk exec-osd /dev/vitastor/osd%i-data >>/var/log/vitastor/osd%i.log 2>&1'
ExecStart=vitastor-disk exec-osd /dev/vitastor/osd%i-data
ExecStart=bash -c 'exec vitastor-disk exec-osd /dev/vitastor/osd%i-data >>/var/log/vitastor/osd%i.log 2>&1'
ExecStartPre=+vitastor-disk pre-exec /dev/vitastor/osd%i-data
WorkingDirectory=/
User=vitastor

View File

@ -50,7 +50,7 @@ from cinder.volume import configuration
from cinder.volume import driver
from cinder.volume import volume_utils
VERSION = '1.4.2'
VERSION = '1.4.1'
LOG = logging.getLogger(__name__)

View File

@ -24,4 +24,4 @@ rm fio
mv fio-copy fio
FIO=`rpm -qi fio | perl -e 'while(<>) { /^Epoch[\s:]+(\S+)/ && print "$1:"; /^Version[\s:]+(\S+)/ && print $1; /^Release[\s:]+(\S+)/ && print "-$1"; }'`
perl -i -pe 's/(Requires:\s*fio)([^\n]+)?/$1 = '$FIO'/' $VITASTOR/rpm/vitastor-el$EL.spec
tar --transform 's#^#vitastor-1.4.2/#' --exclude 'rpm/*.rpm' -czf $VITASTOR/../vitastor-1.4.2$(rpm --eval '%dist').tar.gz *
tar --transform 's#^#vitastor-1.4.1/#' --exclude 'rpm/*.rpm' -czf $VITASTOR/../vitastor-1.4.1$(rpm --eval '%dist').tar.gz *

View File

@ -36,7 +36,7 @@ ADD . /root/vitastor
RUN set -e; \
cd /root/vitastor/rpm; \
sh build-tarball.sh; \
cp /root/vitastor-1.4.2.el7.tar.gz ~/rpmbuild/SOURCES; \
cp /root/vitastor-1.4.1.el7.tar.gz ~/rpmbuild/SOURCES; \
cp vitastor-el7.spec ~/rpmbuild/SPECS/vitastor.spec; \
cd ~/rpmbuild/SPECS/; \
rpmbuild -ba vitastor.spec; \

View File

@ -1,11 +1,11 @@
Name: vitastor
Version: 1.4.2
Version: 1.4.1
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-1.4.2.el7.tar.gz
Source0: vitastor-1.4.1.el7.tar.gz
BuildRequires: liburing-devel >= 0.6
BuildRequires: gperftools-devel

View File

@ -35,7 +35,7 @@ ADD . /root/vitastor
RUN set -e; \
cd /root/vitastor/rpm; \
sh build-tarball.sh; \
cp /root/vitastor-1.4.2.el8.tar.gz ~/rpmbuild/SOURCES; \
cp /root/vitastor-1.4.1.el8.tar.gz ~/rpmbuild/SOURCES; \
cp vitastor-el8.spec ~/rpmbuild/SPECS/vitastor.spec; \
cd ~/rpmbuild/SPECS/; \
rpmbuild -ba vitastor.spec; \

View File

@ -1,11 +1,11 @@
Name: vitastor
Version: 1.4.2
Version: 1.4.1
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-1.4.2.el8.tar.gz
Source0: vitastor-1.4.1.el8.tar.gz
BuildRequires: liburing-devel >= 0.6
BuildRequires: gperftools-devel

View File

@ -18,7 +18,7 @@ ADD . /root/vitastor
RUN set -e; \
cd /root/vitastor/rpm; \
sh build-tarball.sh; \
cp /root/vitastor-1.4.2.el9.tar.gz ~/rpmbuild/SOURCES; \
cp /root/vitastor-1.4.1.el9.tar.gz ~/rpmbuild/SOURCES; \
cp vitastor-el9.spec ~/rpmbuild/SPECS/vitastor.spec; \
cd ~/rpmbuild/SPECS/; \
rpmbuild -ba vitastor.spec; \

View File

@ -1,11 +1,11 @@
Name: vitastor
Version: 1.4.2
Version: 1.4.1
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-1.4.2.el9.tar.gz
Source0: vitastor-1.4.1.el9.tar.gz
BuildRequires: liburing-devel >= 0.6
BuildRequires: gperftools-devel

View File

@ -16,7 +16,7 @@ if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
endif()
add_definitions(-DVERSION="1.4.2")
add_definitions(-DVERSION="1.4.1")
add_definitions(-Wall -Wno-sign-compare -Wno-comment -Wno-parentheses -Wno-pointer-arith -fdiagnostics-color=always -fno-omit-frame-pointer -I ${CMAKE_SOURCE_DIR}/src)
add_link_options(-fno-omit-frame-pointer)
if (${WITH_ASAN})

View File

@ -6,7 +6,7 @@ includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
Name: Vitastor
Description: Vitastor client library
Version: 1.4.2
Version: 1.4.1
Libs: -L${libdir} -lvitastor_client
Cflags: -I${includedir}