Fix vitastor-disk resize to smaller size clearing all data O_o, add a test for it

This commit is contained in:
Vitaliy Filippov
2026-06-10 00:30:42 +03:00
parent c16f955a51
commit 334755e912
4 changed files with 23 additions and 9 deletions
+2 -2
View File
@@ -97,9 +97,9 @@ struct snap_flattener_t
{ "from", top_parent_name }, { "from", top_parent_name },
{ "to", target_name }, { "to", target_name },
{ "target", target_name }, { "target", target_name },
{ "delete-source", false }, { "delete_source", false },
{ "cas", use_cas }, { "cas", use_cas },
{ "fsync-interval", fsync_interval }, { "fsync_interval", fsync_interval },
}); });
// Wait for it // Wait for it
resume_1: resume_1:
+3 -3
View File
@@ -110,9 +110,9 @@ struct image_changer_t
cb = parent->start_rm_data(json11::Json::object { cb = parent->start_rm_data(json11::Json::object {
{ "inode", INODE_NO_POOL(inode_num) }, { "inode", INODE_NO_POOL(inode_num) },
{ "pool", (uint64_t)INODE_POOL(inode_num) }, { "pool", (uint64_t)INODE_POOL(inode_num) },
{ "fsync-interval", fsync_interval }, { "fsync_interval", fsync_interval },
{ "min-offset", ((new_size+4095)/4096)*4096 }, { "min_offset", ((new_size+4095)/4096)*4096 },
{ "down-ok", down_ok }, { "down_ok", down_ok },
}); });
resume_1: resume_1:
while (!cb(result)) while (!cb(result))
+4 -4
View File
@@ -636,9 +636,9 @@ resume_100:
{ "from", from_name }, { "from", from_name },
{ "to", child_it->second.name }, { "to", child_it->second.name },
{ "target", target_it->second.name }, { "target", target_it->second.name },
{ "delete-source", false }, { "delete_source", false },
{ "cas", use_cas }, { "cas", use_cas },
{ "fsync-interval", fsync_interval }, { "fsync_interval", fsync_interval },
}); });
} }
@@ -677,8 +677,8 @@ resume_100:
cb = parent->start_rm_data(json11::Json::object { cb = parent->start_rm_data(json11::Json::object {
{ "inode", inode }, { "inode", inode },
{ "pool", (uint64_t)INODE_POOL(inode) }, { "pool", (uint64_t)INODE_POOL(inode) },
{ "fsync-interval", fsync_interval }, { "fsync_interval", fsync_interval },
{ "down-ok", down_ok }, { "down_ok", down_ok },
}); });
} }
}; };
+14
View File
@@ -10,4 +10,18 @@ $ETCDCTL get --prefix '/vitastor/pg/state'
$VITASTOR_CLI rm-data --pool 1 --inode 1 $VITASTOR_CLI rm-data --pool 1 --inode 1
# test resize with partial data removal
$VITASTOR_CLI create -s 128M testimg
$VITASTOR_FIO -bs=4M -direct=1 -iodepth=1 -end_fsync=1 -fsync=1 -rw=write -image=testimg
$VITASTOR_CLI modify --resize 64M testimg
$VITASTOR_CLI dd iimg=testimg of=./testdata/bin/testimg.bin
sz=$(stat -c %s ./testdata/bin/testimg.bin)
[[ "$sz" = 67108864 ]] || format_error "File size is $sz bytes after resize to 64 M"
format_green OK format_green OK