Commit Graph
100 Commits
Author SHA1 Message Date
Vitaliy Filippov 5248d7f324 Fix 2 bugs in NFS-RDMA allocator, add a test for both
1) alloc() could add the region start into freelist instead of its free part
2) free() was merging freed buffers incorrectly both forward and backward
2026-06-19 02:08:41 +03:00
Vitaliy Filippov 4161f0bd01 Remove doubtful metadata block write logic from blockstore_stable on metadata ENOSPC 2026-06-18 00:55:57 +03:00
Vitaliy Filippov 5627977a9b Limit pg_size by 64 2026-06-18 00:24:48 +03:00
Vitaliy Filippov ec9cfa76c1 Fix to_compact_count tracking on load in the new store 2026-06-18 00:21:03 +03:00
Vitaliy Filippov 0c88884576 Fix incorrect batch big_write fsync logic in the new store 2026-06-18 00:04:15 +03:00
Vitaliy Filippov ba7637d9ad Add a test for incorrect batch big_write fsync logic in the new store 2026-06-18 00:04:15 +03:00
Vitaliy Filippov ac1025c7a5 Fix read small_write.len before init 2026-06-17 17:41:51 +03:00
Vitaliy Filippov 2a81cef78a Fix crash on EIO retry in chained read 2026-06-17 16:38:20 +03:00
Vitaliy Filippov bcf6a7c7d1 Fix write-back queued items split in the client 2026-06-17 16:15:39 +03:00
Vitaliy Filippov 85c4be3957 Clear lsn on sync retry to prevent possible crash on full io_uring 2026-06-17 15:40:05 +03:00
Vitaliy Filippov cf2ba05e4b Disable chunked resharding -- it may interfere with journal flushing; will be re-enabled after fixes 2026-06-17 15:35:19 +03:00
Vitaliy Filippov 04c2f8d408 Stop gracefully on NBD_CMD_DISC instead of just exit(0) 2026-06-17 12:46:03 +03:00
Vitaliy Filippov 0e528ca8f3 Fix missing start_merge() error check 2026-06-17 12:42:23 +03:00
Vitaliy Filippov c6f733b96a Fix final sync in vitastor-cli rm-data 2026-06-17 12:41:22 +03:00
Vitaliy Filippov 938ac09248 Fix small shared file extend-write potentially reading unallocated memory 2026-06-17 12:36:04 +03:00
Vitaliy Filippov 3becdbf5b9 Add bounds checks to prevent uint32 overflows in NFS/XDR 2026-06-17 12:04:50 +03:00
Vitaliy Filippov 9c49315fdf Fix moving of the last block in vitastor-disk resize 2026-06-17 01:19:12 +03:00
Vitaliy Filippov 430d3cfb6f Add a dump|load test, fix multiple bugs in both new&old dump/load utils
Details:
- New store dump/write-meta didn't use actual metadata parameters from the header
- New store write-meta calculated small entry sizes incorrectly
- Old store write-journal imported entries with checksums incorrectly
- Old store write-meta didn't import block_csums at all (it was using a wrong json key)
2026-06-17 01:19:12 +03:00
Vitaliy Filippov c491db699c Implement bdrv_detach_aio_context & bdrv_attach_aio_context (should fix migration with iothread) 2026-06-17 00:39:28 +03:00
Vitaliy Filippov e9d053e30f Support --io option for vitastor-disk dump-journal/write-journal 2026-06-17 00:39:28 +03:00
Vitaliy Filippov 1be51f903c Check entry sizes in blockstore_heap during loading 2026-06-16 20:34:52 +03:00
Vitaliy Filippov cd51f14a90 Fix incorrect chained_read bitmap recovery 2026-06-15 21:10:44 +03:00
Vitaliy Filippov 9b8107875f Add a regression test for incorrect chained_read bitmap recovery 2026-06-15 21:10:44 +03:00
Vitaliy Filippov ca606570f7 Add request size validation 2026-06-15 01:56:54 +03:00
Vitaliy Filippov 22d094ccc6 Add a regression test to check that parity-less EC writes do not destroy bitmaps 2026-06-15 01:56:54 +03:00
Vitaliy Filippov fd84d84279 Add a regression test for scrub bitmap comparison (EC 3+3, only chunk 1 written and lost) 2026-06-15 01:52:04 +03:00
Vitaliy Filippov af2b1e28e3 Add a regression test for EC bitmap recovery losing a parity chunk 2026-06-15 01:52:04 +03:00
Vitaliy Filippov 9dda449f48 Fix fully-degraded EC writes destroying bitmaps 2026-06-15 01:52:04 +03:00
Vitaliy Filippov e6d4b32629 Also check padded small_write 2026-06-15 01:31:19 +03:00
Vitaliy Filippov 4de22a08e2 Fix partial padded read checksum verification 2026-06-15 01:31:19 +03:00
Vitaliy Filippov a403de46b3 Test partial padded read 2026-06-15 01:31:19 +03:00
Vitaliy Filippov ac20f605f6 Fix scrub bitmap comparison 2026-06-15 01:31:19 +03:00
Vitaliy Filippov 51ecbadb12 Only update bitmaps when writing data in primary subops
Fixes fully degraded EC writes and recovering EC writes corrupting bitmaps
2026-06-15 01:31:19 +03:00
Vitaliy Filippov 6a4627b625 Write a test for store v1 & journal corruption preservation, fix MULTIPLE bugs 2026-06-14 11:23:36 +03:00
Vitaliy Filippov fd2b8b8792 Fix ec_check_combination more correctly (fixes osd_rmw_test_je) 2026-06-13 19:56:06 +03:00
Vitaliy Filippov f3d662bac7 Verify bitmaps during scrub 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 553cc8ef87 Add a test for replicated bitmap scrub 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 67fdf1142b Fix vitastor-disk crash when converting from 0.5.x metadata 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 02f6e564a6 Old store - write header on init only after clearing metadata 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 33d14061d6 New store - write header on init only after clearing metadata 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 677e755e4e Replace VLA with a vector and also fix invalid dangling pointer warnings 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 11a972cbfb Delete pg.peering_state when it is not needed 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 1834743a0e Fix incorrect clearing of LOC_CORRUPTED on the second scrub 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 213f76c66c Add a regression test for LOC_CORRUPTED cleared on second scrub 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 91698404a7 Add a basic OSD test as an example 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 27bd38d95e Allow to create OSD with mocked blockstore and network 2026-06-13 19:56:06 +03:00
Vitaliy Filippov ef0e61be1b Split and mock etcd_state_client_t for testing 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 26fb08d7da Change st_cli to pointer 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 80fa3094b3 Fix cpp-btree disabling asserts everywhere it is included to! 2026-06-13 19:56:06 +03:00
Vitaliy Filippov df931b1e17 Check for short reads in blockstore init 2026-06-13 19:56:06 +03:00
Vitaliy Filippov 906294ae9a Fix ec_check_combination() short tmp_buf allocation 2026-06-13 19:56:05 +03:00
Vitaliy Filippov 15f69719e4 Not an actual bug, clean up fsync conditions for clarity
It could be a bug if data_fd could be equal to journal_fd but not to meta_fd,
but it can't.
2026-06-13 19:55:47 +03:00
Vitaliy Filippov 43aa4cfff6 Fix incorrect deferred freeing of block used by a parallel read in the old store 2026-06-13 19:55:47 +03:00
Vitaliy Filippov 6901227390 Fix cached EC decoding of multiple stripes with ISA-L 2026-06-10 02:07:58 +03:00
Vitaliy Filippov 7f718feaf6 Fix alloc in nfs_portmap 2026-06-10 01:02:30 +03:00
Vitaliy Filippov 236ffbb24e Fix multilist_alloc_t bug (not triggerable in real operation but still a bug) 2026-06-10 01:01:20 +03:00
Vitaliy Filippov 0e300f4c50 Fix incorrect rounding in vitastor-disk trim when --discard_granularity option is passed 2026-06-10 00:38:34 +03:00
Vitaliy Filippov 6d82a3daa3 Fix fill_block_empty_space argument type (ui32 -> ui64) 2026-06-10 00:33:31 +03:00
Vitaliy Filippov c0c01a8e57 Fix writeback detection in ublk server for --image mode 2026-06-10 00:31:48 +03:00
Vitaliy Filippov 334755e912 Fix vitastor-disk resize to smaller size clearing all data O_o, add a test for it 2026-06-10 00:30:42 +03:00
Vitaliy Filippov c16f955a51 Limit the amount of incoming data for NFS clients to prevent choking on memory 2026-06-06 13:56:20 +03:00
Vitaliy Filippov c1dc14f5ee Fix old store no_inode_stats not working 2026-06-05 00:50:53 +03:00
Vitaliy Filippov ec6a70bbd3 Release 3.0.13
- New store fixes:
  - Fix repeated rollback logic
  - Fix crash on rolled back object compaction
  - Fix postpone_load possibly merging different object chains
  - Fix block_csums import in vitastor-disk write-meta
  - Fix header checksum after vitastor-disk write-meta
- Old store fixes:
  - Fix batched fsync possibly skipped by some flush coroutines
- Improve ENOSPC test, fix possible crash on ENOSPC
- Add fsyncs to vitastor-disk prepare
- Fix possible crash on pg_lock check failure in sec_read_bmp
- Fix VitastorFS initialization when local_reads are enabled
2026-05-31 12:22:43 +03:00
Vitaliy Filippov f236ed895a Rename parameter to reflect actual semantics 2026-05-31 12:03:49 +03:00
Vitaliy Filippov 7d70c90196 Save osd_num for locally submitted writes for mark_partial_write (still needs osd unit tests :)) 2026-05-31 11:47:48 +03:00
Vitaliy Filippov 0a04490043 Fix repeated rollbacks in bs_heap 2026-05-31 11:43:56 +03:00
Vitaliy Filippov dce7ffde6f Fix compaction with do_delete 2026-05-31 11:27:19 +03:00
Vitaliy Filippov f6bd1ff0e5 Fix postpone_load in the new blockstore 2026-05-31 10:52:11 +03:00
Vitaliy Filippov ac00a06757 Make fsync batch members actually wait for fsync completion (found by kimi k2.6) 2026-05-30 16:38:02 +03:00
Vitaliy Filippov 155cfb3c73 Add fsyncs to vitastor-disk prepare (cosmetic) 2026-05-30 16:16:31 +03:00
Vitaliy Filippov 126891126a Do not use unneeded uint64 -> unsigned conversion 2026-05-30 16:14:01 +03:00
Vitaliy Filippov 547a394be6 Fix another unused piece of code 2026-05-30 16:09:48 +03:00
Vitaliy Filippov 1a511acead Do not ignore nfs_do_fsync result 2026-05-30 15:58:46 +03:00
Vitaliy Filippov 5576a0d9ff Detect checksums by csum_block_size in vitastor-disk 2026-05-30 02:36:08 +03:00
Vitaliy Filippov 879e9a32d1 Fix unused code in make_cyclic 2026-05-30 02:31:02 +03:00
Vitaliy Filippov 747fd5c121 Add count >= maxn assert 2026-05-30 02:27:39 +03:00
Vitaliy Filippov b4aab7a78e Fix block_csums import in write-meta heap 2026-05-28 02:05:03 +03:00
Vitaliy Filippov de26a995fc Fix possible null deref on pg_lock check failure in sec_read_bmp 2026-05-28 00:58:02 +03:00
Vitaliy Filippov 8418a9ad7b Fix create_root() retries 2026-05-24 17:25:47 +03:00
Vitaliy Filippov 27be4ee2fa Followup to mark_partial_write fix - also free subops in other branch to prevent assert on ENOSPC 2026-05-20 22:04:28 +03:00
Vitaliy Filippov 00517e2bac Fix header checksum after new store write-meta 2026-05-19 12:30:21 +03:00
Vitaliy Filippov e0a2615cbc Fix test build 2026-05-19 02:27:03 +03:00
Vitaliy Filippov 63fe3c323a 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.
2026-05-18 02:24:22 +03:00
Vitaliy Filippov a88465df05 Fix build under older gcc 2026-05-18 01:17:56 +03:00
Vitaliy Filippov ad24be717a Wrap delete rdma_conn into destroy_rdma_conn 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 648e3b12f0 Replace public/protected ifdef with a friend class 2026-05-18 01:17:56 +03:00
Vitaliy Filippov a675993c74 Remove unused osd_test.cpp and mock/ringloop.h, move epmgr out of osd_t 2026-05-18 01:17:56 +03:00
Vitaliy Filippov c9dfd0f67d Fix possible buffer overflow in NFS-RDMA 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 84919a10a9 Extract msgr_iothread to separate .{cpp,h} 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 51ae4d6e24 Remove extra assert in heap after reworking recheck 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 572b20fedc Fix mark_partial_write for replicas (TODO: try to write an OSD unit test for it) 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 4e2724b28f Remove duplicate subop submit/fail code 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 768b1675f8 Do not use ISA-L in test_crc32c 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 38fa722725 Remove the rest of tcmalloc from build 2026-05-18 01:17:56 +03:00
Vitaliy Filippov e56d83fb7f Remove heap->v1 conversion code (untested, unused and probably buggy) 2026-05-18 01:17:56 +03:00
Vitaliy Filippov ff95a85875 Add bound check to je_crc32 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 98203568a8 Handle ENOENT from add_commit 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 89df98ee08 Deep copy pg_history and prev_pgs before mutation 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 0007a831b6 Add return to handle_flush_op when stopping the PG 2026-05-18 01:17:56 +03:00
Vitaliy Filippov 40517c335f Fix absolute bmp_end 2026-05-18 01:17:56 +03:00