forked from vitalif/vitastor
Fix snapshot chain "down-merge" ("up-merge" worked well...)
parent
b14220b4d0
commit
878ccbb6ea
|
@ -41,7 +41,7 @@ struct snap_merger_t
|
||||||
int fsync_interval = 128;
|
int fsync_interval = 128;
|
||||||
|
|
||||||
// -- STATE --
|
// -- STATE --
|
||||||
inode_t target;
|
inode_t target, to_num;
|
||||||
int target_rank;
|
int target_rank;
|
||||||
bool inside_continue = false;
|
bool inside_continue = false;
|
||||||
int state = 0;
|
int state = 0;
|
||||||
|
@ -98,6 +98,7 @@ struct snap_merger_t
|
||||||
state = 100;
|
state = 100;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
to_num = to_cfg->num;
|
||||||
// Check that to_cfg is actually a child of from_cfg and target_cfg is somewhere between them
|
// Check that to_cfg is actually a child of from_cfg and target_cfg is somewhere between them
|
||||||
std::vector<inode_t> chain_list;
|
std::vector<inode_t> chain_list;
|
||||||
inode_config_t *cur = to_cfg;
|
inode_config_t *cur = to_cfg;
|
||||||
|
@ -451,7 +452,7 @@ struct snap_merger_t
|
||||||
{
|
{
|
||||||
cluster_op_t *op = &rwo->op;
|
cluster_op_t *op = &rwo->op;
|
||||||
op->opcode = OSD_OP_READ;
|
op->opcode = OSD_OP_READ;
|
||||||
op->inode = target;
|
op->inode = to_num;
|
||||||
op->offset = rwo->offset;
|
op->offset = rwo->offset;
|
||||||
op->len = target_block_size;
|
op->len = target_block_size;
|
||||||
op->iov.push_back(rwo->buf, target_block_size);
|
op->iov.push_back(rwo->buf, target_block_size);
|
||||||
|
@ -483,7 +484,7 @@ struct snap_merger_t
|
||||||
{
|
{
|
||||||
// write start->end
|
// write start->end
|
||||||
rwo->todo++;
|
rwo->todo++;
|
||||||
write_subop(rwo, rwo->start*gran, rwo->end*gran, use_cas ? 1+rwo->op.version : 0);
|
write_subop(rwo, rwo->start*gran, rwo->end*gran, use_cas && to_num == target ? 1+rwo->op.version : 0);
|
||||||
rwo->start = rwo->end;
|
rwo->start = rwo->end;
|
||||||
if (use_cas)
|
if (use_cas)
|
||||||
{
|
{
|
||||||
|
@ -502,7 +503,7 @@ struct snap_merger_t
|
||||||
{
|
{
|
||||||
// write start->end
|
// write start->end
|
||||||
rwo->todo++;
|
rwo->todo++;
|
||||||
write_subop(rwo, rwo->start*gran, rwo->end*gran, use_cas ? 1+rwo->op.version : 0);
|
write_subop(rwo, rwo->start*gran, rwo->end*gran, use_cas && to_num == target ? 1+rwo->op.version : 0);
|
||||||
rwo->start = rwo->end;
|
rwo->start = rwo->end;
|
||||||
if (use_cas)
|
if (use_cas)
|
||||||
{
|
{
|
||||||
|
|
|
@ -338,7 +338,11 @@ resume_100:
|
||||||
}
|
}
|
||||||
for (auto inode_result: data["responses"].array_items())
|
for (auto inode_result: data["responses"].array_items())
|
||||||
{
|
{
|
||||||
auto kv = parent->cli->st_cli.parse_etcd_kv(inode_result["kvs"][0]);
|
if (inode_result["response_range"]["kvs"].array_items().size() == 0)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
auto kv = parent->cli->st_cli.parse_etcd_kv(inode_result["response_range"]["kvs"][0]);
|
||||||
pool_id_t pool_id = 0;
|
pool_id_t pool_id = 0;
|
||||||
inode_t inode = 0;
|
inode_t inode = 0;
|
||||||
char null_byte = 0;
|
char null_byte = 0;
|
||||||
|
|
Loading…
Reference in New Issue