Commit Graph
100 Commits
Author SHA1 Message Date
Vitaliy Filippov 55e2c65848 xxhash3 bench 2026-04-04 13:47:40 +03:00
Vitaliy Filippov 7eb8a66d0e Include xxhash3 x86dispatch 2026-04-04 13:42:05 +03:00
Vitaliy Filippov e14231e263 Implement protocol-level checksums (xxhash3) 2026-04-03 21:26:25 +03:00
Vitaliy Filippov 435c43e4c8 Do not use scrap_buffer in the client (it would block protocol checksum support) 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 3d6e804437 Support TLS CN authentication and per-image permissions in vitastor-cli serve 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 3fa75dfa6a Add VitastorAuthFilter 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 231d18438e Implement vitastor-cli ls-user, modify-user, remove-user commands 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 7be6fcd27e Add image owner/owner_group/reader_group support (for antietcd VitastorAuthFilter) 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 9101ec1754 Add security parameter documentation 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 8966cac272 Support inline (string PEM) certificates and pkeys 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 8e5592cd24 Show encryption keys (only IDs) in the listing 2026-04-03 21:22:42 +03:00
Vitaliy Filippov a83687ea1d Support storing image encryption keys in Vault 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 9825606fde Prefer local etcd addresses and correctly cycle over them even when they need resolving
Seems slightly overcomplicated...
2026-04-03 21:22:42 +03:00
Vitaliy Filippov 4accce43d8 Support DNS resolving via libc-ares 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 1eec28bc65 Batch handle_immediate_ops more 2026-04-03 21:22:42 +03:00
Vitaliy Filippov ea280609ce Add vitastor-cli create & modify --enc-key parameter 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 2e2ae066b2 Support reading from snapshots encrypted with different keys 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 2ba4be470f Support decryption with multiple keys 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 23463ec4cd Allow to return chain_info in response to reads 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 1f5a832e28 Add basic AES-XTS client-side encryption support 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 73e9de5143 Rework msgr send/receive to allow encryption support 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 9cf30f286e Move fromhexstr() to str_util 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 264b9dbfa9 Add openapi description 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 0ee005bf23 Slightly fix API return and input types 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 227c4c3bcf Implement vitastor-cli serve command to serve simple HTTP API 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 85b762db2c Implement HTTP server support O_o 2026-04-03 21:22:42 +03:00
Vitaliy Filippov aaecf332f1 Rename http_response_t to http_message_t 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 1dc8e82f37 Extract common HTTP context 2026-04-03 21:22:42 +03:00
Vitaliy Filippov afa9fe92ff Support xxhash 32-bit checksums (data_csum_type=xxh3_32) 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 32d0e474ec Detect block checksums using csum_block_size, not data_csum_type 2026-04-03 21:22:42 +03:00
Vitaliy Filippov ff225534f1 Add client certificate support 2026-04-03 21:22:42 +03:00
Vitaliy Filippov 7d9124b63a Do not re-initialize TLS context every connection 2026-04-03 21:22:42 +03:00
Vitaliy Filippov b09b48c061 Add https support to antietcd 2026-04-03 21:22:42 +03:00
Vitaliy Filippov e896b2ed30 Implement etcd SSL support via OpenSSL
Maybe I should remove all of this and use libwebsockets :)
2026-04-03 21:22:42 +03:00
Vitaliy Filippov e5c505eaf4 Write 1 entry to blocks to collect garbage 2026-04-03 18:08:12 +00:00
Vitaliy Filippov c1d244d4f0 Fix init metadata entry loading logging 2026-04-03 18:08:12 +00:00
Vitaliy Filippov 9b264a212f Do full metadata GC on start (new store) 2026-04-03 18:08:12 +00:00
Vitaliy Filippov ff7f5cb4f4 Report live & garbage entry count / memory with log_level > 1 2026-04-02 23:45:13 +00:00
Vitaliy Filippov 25ecca7625 Fix use-after-free in OSD ops (ooops) 2026-04-02 13:48:17 +00:00
Vitaliy Filippov 99c4244004 Try to write into blocks with more garbage first 2026-04-02 13:48:17 +00:00
Vitaliy Filippov 9949b9fb4e Fix incorrect reads from snapshots on retries 2026-03-31 02:06:53 +03:00
Vitaliy Filippov e6881ad1d5 Fix read_bitmap from deleted objects with the new store 2026-03-31 01:59:53 +03:00
Vitaliy Filippov b30635b932 Release 3.0.8
- Surrogate increment-only peer IDs are now used instead of file descriptor numbers,
  and client cleanup sequence is reworked in another attempt to fix a possible PG hang
  in 'peering' states. The history of this bug is still unclear and it still hasn't been
  reproduced in tests, but several users have reported it since 3.0.4 (only with enabled RDMA).
- Fix a minor bug where an OSD could skip reporting misplaced PG state when moving
  an object in non-immediate_commit mode.
- Add Ubuntu 26.04 (Resolute Raccoon) support and patches for qemu 10.2 and libvirt 12.0
2026-03-30 02:09:02 +03:00
Vitaliy Filippov 0c1154833c Add Ubuntu 26.04 support 2026-03-30 02:06:10 +03:00
Vitaliy Filippov c227bb05b6 Fix incorrect patch contents for qemu 10.1, add patch for qemu 10.2 2026-03-30 02:06:10 +03:00
Vitaliy Filippov dd85315f22 Update CMake supported versions 2026-03-30 02:06:10 +03:00
Vitaliy Filippov 47d2f4e0be Add patch for libvirt 12.0 2026-03-30 02:06:10 +03:00
Vitaliy Filippov 2a5028d17f Use robin_hood_map in messenger 2026-03-30 02:06:10 +03:00
Vitaliy Filippov 07915c2881 Use surrogate peer IDs instead of FDs 2026-03-30 02:06:10 +03:00
Vitaliy Filippov 79141eb383 Fix commented out //this->pg_state_dirty.insert 2026-03-28 20:08:52 +03:00
Vitaliy Filippov f7cbb6ed56 Remove FD from the event loop in destroy_client, not in stop_client 2026-03-28 14:18:20 +03:00
Vitaliy Filippov 8f8172db99 clear_immediate_ops is now done by stop_client 2026-03-26 01:08:23 +03:00
Vitaliy Filippov 94be147e80 Clear received_ops - they are already freed 2026-03-26 01:08:02 +03:00
Vitaliy Filippov 538620b400 Release 3.0.6
- Fix one more bug in old store checksums O_o - checksum verification wasn't
  working correctly on reads quickly after small initial offsetted writes
  (when a BIG_WRITE was read from the journal).
- Fix clients possibly not destroyed after being switched to RDMA. Not 100%
  verified, but in theory it could rarely lead to PGs hanging in peering/stopping
  states with RDMA enabled.
- Use vitastor-cli in the Cinder driver for modifications instead of direct etcd
  interaction.
- Fix mon_https_ca parsing.
- Fix Docker install.sh, add instructions for Podman.
2026-03-22 22:49:51 +03:00
Vitaliy Filippov 4c34a47179 Fix str_replace 2026-03-19 01:19:29 +03:00
Vitaliy Filippov df16ab627a Fix another bug in old store checksums O_o
Checksum verification wasn't working correctly on reads of small initial offsetted writes
from the journal (until the write was flushed to "clean" metadata).
2026-03-17 22:26:38 +00:00
Vitaliy Filippov 44c895dc30 Fix clients possibly not destroyed after being switched to RDMA
It could in theory lead to hung operations on RDMA client disconnections.

Workflow (probable):
* OSD switches an outbound connection to PEER_RDMA and removes the FD from epoll
* But a receive request in io_uring is still active
* Receive response is never handled, refs remains > 0
* The connection is dropped, but osd_client_t is not destroyed because refs > 0
* Outbound ops are not canceled, suboperations hang, primary operations hang too
2026-03-17 01:04:17 +03:00
Vitaliy Filippov fdea595913 Use vitastor-cli in the Cinder driver for modifications instead of direct etcd interaction 2026-03-15 01:44:30 +03:00
Vitaliy Filippov ef4c91ecc8 Fix mon_https_ca parsing 2026-03-15 01:01:41 +03:00
Vitaliy Filippov 5192c6cf50 Fix Docker install.sh, add instructions for Podman 2026-03-13 20:08:18 +03:00
Vitaliy Filippov cb639a130d Release 3.0.5
A single urgent fix for the new store: metadata was written incorrectly when
filled metadata area exceeded 4 GB due to a simple & stupid 32-bit integer overflow.
This was leading to OSDs corrupting metadata and being unable to start on the next
run.

The bug affected only the new store (meta_format=3) and OSDs with metadata area size
larger than 4 GB. You can check your OSD metadata area size by checking `data_offset`
in `vitastor-disk read-sb /dev/vitastor/osdXX-data` for single-disk OSDs or
`blockdev --getsize64 /dev/vitastor/osdXX-meta` for hybrid OSDs.

If you're affected, it's highly recommended to:
- Install updated packages without restarting OSDs
- Restart OSDs **one by one**
- If a restart of an OSD triggers "has_degraded" rebalance - wait for it to finish
  before restarting another OSD
- If an OSD fails to start with "double-claimed" errors in the log - purge and recreate it,
  and again wait for "has_degraded" rebalance to finish before proceeding to the next OSD
2026-03-07 13:54:44 +03:00
Vitaliy Filippov 892e3a8b6d Add Ubuntu 26.04 build 2026-03-07 13:54:44 +03:00
Vitaliy Filippov 0bd9c26620 Make block_sizes uint64_t to prevent other integer overflow errors in the future 2026-03-07 12:02:57 +03:00
Vitaliy Filippov ae2b1f7802 Some useless code changes for beauty 2026-03-07 00:15:16 +03:00
Vitaliy Filippov 883b2e45da Fix uint32 overflow in the new store :-X 2026-03-06 17:21:22 +03:00
Vitaliy Filippov 09df74cfac Release 3.0.4
New store bug fixes:

- Fix very slow OSD startup (hours) possible in unlucky cases
- Fix incorrect garbage entry validation on start in some cases, preventing OSD startup
- Fix small_write_throttling not functioning and either hanging or crashing OSDs
- Fix "different fact_versions returned from subops" error possible with EC in some cases
- Add a recovery option for the new store: skip_corrupted_meta_entries
- Disable intent writes (even 4k) for hybrid OSDs by default for better write buffering

Other changes:

- Fix chmod/chown of a new empty VitastorFS root directory not working
- Fix vitastor-dd treating all < 32k reads as always empty
- Fix vitastor-disk always setting 32k csum_block_size for HDDs when checksums are enabled
- Fix OSD missing PG state updates and PGs hanging in "starting" in rare cases
- Fix a possible OSD crash with "map::at" message in rare cases when stopping a client
- Fix a possible OSD crash on start when RDMA is available but fails to initialize
- Fix removal and overwriting of totaled objects (objects with all corrupted copies)
- Do not allow data_block_size < 8*bitmap_granularity
- Remove RDMA ODP (On-Demand Paging) support
- Update antietcd to 1.2.4
- Update Docker build to Debian Trixie
- Add packages for AlmaLinux 10
2026-03-03 20:12:31 +03:00
Vitaliy Filippov 2ef3f012c9 Fix Docker builds 2026-03-03 20:09:23 +03:00
Vitaliy Filippov 7175d99c64 Add packages for Alma 10 to docs 2026-03-03 11:17:20 +03:00
Vitaliy Filippov 230a26772e Do not allow data_block_size < 8*bitmap_granularity 2026-03-03 02:09:16 +03:00
Vitaliy Filippov 637684c579 Fix chmod/chown of empty NFS root directory 2026-03-03 02:05:37 +03:00
Vitaliy Filippov c541dd422f Add skip_corrupted_meta_entries docs 2026-03-03 01:52:22 +03:00
Vitaliy Filippov 22c39561cf Add a recovery option for the new store: skip_corrupted_meta_entries 2026-03-02 02:51:09 +03:00
Vitaliy Filippov d4c67b4879 Ignore array-bounds warning in bs_heap 2026-03-02 02:49:56 +03:00
Vitaliy Filippov d1b7167861 Fix vitastor-disk always overwriting csum_block_size with 32k, add default atomic_write_size 0 for hybrid OSDs 2026-03-01 23:47:35 +00:00
Vitaliy Filippov 33b561b73a Fix throttling with the new store 2026-03-01 23:46:30 +00:00
Vitaliy Filippov a95a60c600 Add sudo -E to preserve asan suppressions 2026-03-02 01:48:50 +03:00
Vitaliy Filippov b3bc815354 Sorry, udevadm trigger --settle sometimes just fails in docker :-( 2026-03-02 01:48:50 +03:00
Vitaliy Filippov 42fc45d6da Use iterate_with_stable in list_objects too
Fixes "different fact_versions returned from subops" with EC in some cases
2026-03-02 01:48:33 +03:00
Vitaliy Filippov 3fbe2e7f8a Add more details for "different fact_versions" 2026-03-02 01:48:33 +03:00
Vitaliy Filippov 310c512b43 Correctly delete handle_immediate_ops when stopping a client
Fixes map::at crash in some cases
2026-03-02 01:48:19 +03:00
Vitaliy Filippov fd3e3b4ef0 Update buildenv to bookworm 2026-03-02 01:47:05 +03:00
Vitaliy Filippov 93cf69f89f Merge osd_id.h into object_id.h 2026-03-02 01:46:17 +03:00
Vitaliy Filippov a8dd8bf06c Update antietcd to 1.2.4 2026-03-02 01:45:56 +03:00
Vitaliy Filippov 7e23b57014 Do not save watch revision from initial created: true messages 2026-02-27 01:11:18 +03:00
Vitaliy Filippov b2427836a1 Fix dd treating all < 32k reads as always empty :-X 2026-02-22 14:19:13 +03:00
Vitaliy Filippov 2ed6760447 Remove ODP support 2026-02-17 02:35:46 +03:00
Vitaliy Filippov a1d215ea2f Fix garbage validation, skip garbage entries on load 2026-02-17 01:12:26 +03:00
Vitaliy Filippov 4fa442a5de Sort items on load to fix O(N^2) startup 2026-02-17 01:12:26 +03:00
Vitaliy Filippov 3a057ed5af Update docker to trixie 2026-02-13 01:09:34 +03:00
Vitaliy Filippov 0ad042b28b Add packages for Alma 10 2026-02-12 02:11:06 +03:00
Vitaliy Filippov 4d75c6c8f9 Fix removal and overwriting of totaled objects (objects with all corrupted copies) 2026-02-11 01:24:58 +03:00
Vitaliy Filippov 9ec18f0aa1 Fix double ibv_close_device on RDMA init failure 2026-02-11 00:32:12 +03:00
Vitaliy Filippov facaa2cc6a Release 3.0.3
- Fix csum_block_size > 0 unusable with atomic writes in the new store
  (almost all atomic write requests generated invalid checksums with csum_block_size > 0)
- Fix monitor sometimes randomly failing to optimize PGs with the "problem is
  infeasible or unbounded" message due to not waiting to read full stdout of lp_solve
- Remove reshard_abort optimisation to fix chunked resharding introduced in 3.0.2 possibly
  corrupting in-memory OSD state when handling multiple rapid PG count change requests
- Fix removed inodes not disappearing from OSD statistics in the new store, leading to
  bloating of the statistics with old inodes
- Increase test coverage for the new store and fix several minor bugs:
  - Enabling/disabling of used_for_app was recalculating inode space statistics incorrectly
  - Fix object metadata validation on OSD startup rejecting some correct sequences of entries,
    possibly leading to OSD being unable to start
  - Fix PG activation with EC failing in rare cases with EBUSY when requesting to commit an
    already committed write
  - Fix a theoretically possible metadata writeback issue on ENOSPC during commit
- Fix monitor failing to optimize PGs in presence of a host with name convertible to
  js Number (like 04e278988710) :D
- Fix vitastor-cli dd sometimes (rarely) truncating the image when writing to stdout
- Fix a theoretically possible client connection object leak when io_uring is full
- Fix a leak of RDMA-CM connection objects
- Fix crashes with data_block_size < 32KB (useless setup, but anyway) (#113)
2026-02-08 01:39:57 +03:00
Vitaliy Filippov d2ac8e3827 Fix block writeback on enospc during commit 2026-02-07 16:27:26 +03:00
Vitaliy Filippov d6dacc67db Do not return EBUSY when already stable in the new store 2026-02-07 16:10:39 +03:00
Vitaliy Filippov cbe51595cb Remove reshard_abort 2026-02-07 16:05:40 +03:00
Vitaliy Filippov 6bd0830ab8 Add a test for chunked resharding 2026-02-07 16:02:17 +03:00
Vitaliy Filippov 796e82f34d Check get_compacted_count and get_compact_queue_size 2026-02-07 15:44:54 +03:00
Vitaliy Filippov db39283970 Add a test for complete_lsn_write 2026-02-07 15:36:46 +03:00
Vitaliy Filippov 9f8c686321 Add a test for redirect_intent 2026-02-07 15:09:58 +03:00