Support xxhash 32-bit checksums (data_csum_type=xxh3_32)

This commit is contained in:
Vitaliy Filippov
2026-07-05 14:10:10 +03:00
parent 1a14301c50
commit 4feabc4ab6
19 changed files with 7689 additions and 65 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ add_executable(vitastor-disk
disk_tool.cpp disk_simple_offsets.cpp
disk_tool_discard.cpp disk_tool_journal.cpp disk_tool_meta.cpp disk_tool_prepare.cpp disk_tool_resize.cpp
disk_tool_resize_auto.cpp disk_tool_udev.cpp disk_tool_utils.cpp disk_tool_upgrade.cpp
../util/crc32c.c ../util/str_util.cpp ../util/json_util.cpp ../../json11/json11.cpp ../util/rw_blocking.cpp ../util/allocator.cpp ../util/ringloop.cpp
../util/crc32c.c ../util/xxhash.c ../util/str_util.cpp ../util/json_util.cpp ../../json11/json11.cpp ../util/rw_blocking.cpp ../util/allocator.cpp ../util/ringloop.cpp
../blockstore/blockstore_disk.cpp ../blockstore/blockstore_heap.cpp ../blockstore/multilist.cpp
)
target_link_libraries(vitastor-disk
+2 -2
View File
@@ -135,8 +135,8 @@ struct disk_tool_t
void choose_journal_block(uint32_t je_size);
int resize_rebuild_journal();
int resize_write_new_journal();
void remap_big_write(heap_entry_t *wr);
void remap_small_write(heap_entry_t *wr);
void remap_big_write(blockstore_heap_t *heap, heap_entry_t *wr);
void remap_small_write(blockstore_heap_t *heap, heap_entry_t *wr);
int resize_rebuild_meta();
int resize_write_new_meta();
void free_new_meta();
+3 -3
View File
@@ -765,7 +765,7 @@ close_err0:
{
*wr->get_checksum(&heap) = sscanf_json("%jx", write_entry["data_crc32c"]);
}
wr->crc32c = wr->calc_crc32c();
wr->checksum = wr->calc_checksum(&heap);
assert((uint8_t*)wr + wr->size == new_meta_buf + meta_offset + used_space);
}
}
@@ -808,7 +808,7 @@ close_err:
fromhexstr(meta_entry["ext_bitmap"].string_value(), new_clean_entry_bitmap_size, wr->get_ext_bitmap(&heap));
if (new_data_csum_size)
fromhexstr(meta_entry["block_csums"].string_value(), new_data_csum_size, wr->get_checksums(&heap));
wr->crc32c = wr->calc_crc32c();
wr->checksum = wr->calc_checksum(&heap);
assert((uint8_t*)wr + wr->size == new_meta_buf + meta_offset + used_space);
auto j_it = journal_by_object.find(oid);
if (j_it != journal_by_object.end())
@@ -874,7 +874,7 @@ close_err:
assert(0);
}
wr->size = wr->get_size(&heap);
wr->crc32c = wr->calc_crc32c();
wr->checksum = wr->calc_checksum(&heap);
assert((uint8_t*)wr + wr->size == new_meta_buf + meta_offset + used_space);
}
}
+7 -7
View File
@@ -526,7 +526,7 @@ int disk_tool_t::resize_write_new_journal()
return 0;
}
void disk_tool_t::remap_big_write(heap_entry_t *wr)
void disk_tool_t::remap_big_write(blockstore_heap_t *heap, heap_entry_t *wr)
{
uint64_t block_num = wr->big().block_num;
auto remap_it = data_remap.find(block_num);
@@ -539,10 +539,10 @@ void disk_tool_t::remap_big_write(heap_entry_t *wr)
}
block_num += data_idx_diff;
wr->big().block_num = block_num;
wr->crc32c = wr->calc_crc32c();
wr->checksum = wr->calc_checksum(heap);
}
void disk_tool_t::remap_small_write(heap_entry_t *wr)
void disk_tool_t::remap_small_write(blockstore_heap_t *heap, heap_entry_t *wr)
{
if (new_meta_format == BLOCKSTORE_META_FORMAT_HEAP && wr->small().len > 0)
{
@@ -554,7 +554,7 @@ void disk_tool_t::remap_small_write(heap_entry_t *wr)
memcpy(new_journal_ptr, buffer_area+wr->small().location, wr->small().len);
wr->small().location = new_journal_ptr-new_journal_buf;
new_journal_ptr += wr->small().len;
wr->crc32c = wr->calc_crc32c();
wr->checksum = wr->calc_checksum(heap);
}
}
@@ -601,11 +601,11 @@ int disk_tool_t::resize_rebuild_meta()
{
if (wr->type() == BS_HEAP_BIG_WRITE || wr->type() == BS_HEAP_BIG_INTENT)
{
remap_big_write(wr);
remap_big_write(heap, wr);
}
else if (wr->type() == BS_HEAP_SMALL_WRITE)
{
remap_small_write(wr);
remap_small_write(heap, wr);
}
// New -> New
if ((new_meta_pos % dsk.meta_block_size) + wr->size > dsk.meta_block_size)
@@ -666,7 +666,7 @@ int disk_tool_t::resize_rebuild_meta()
memcpy(((uint8_t*)wr) + sizeof(heap_big_write_t) + new_clean_entry_bitmap_size, bitmap+new_clean_entry_bitmap_size, new_clean_entry_bitmap_size);
memcpy(((uint8_t*)wr) + sizeof(heap_big_write_t) + 2*new_clean_entry_bitmap_size, bitmap+2*new_clean_entry_bitmap_size, new_data_csum_size);
}
wr->crc32c = wr->calc_crc32c();
wr->checksum = wr->calc_checksum(&dsk);
new_meta_pos += wr->size;
}
else