Implement layer merge

A new command merges multiple snapshot/clone layers into one of them,
so merged layers can be deleted after this procedure
This commit is contained in:
Vitaliy Filippov
2021-07-31 00:23:30 +03:00
parent a02b02eb04
commit acf637950c
15 changed files with 915 additions and 301 deletions
+3 -3
View File
@@ -37,11 +37,11 @@ struct inode_list_t
int done_pgs = 0;
int want = 0;
std::vector<inode_list_pg_t*> pgs;
std::function<void(std::set<object_id>&& objects, pg_num_t pg_num, osd_num_t primary_osd, int status)> callback;
std::function<void(inode_list_t* lst, std::set<object_id>&& objects, pg_num_t pg_num, osd_num_t primary_osd, int status)> callback;
};
inode_list_t* cluster_client_t::list_inode_start(inode_t inode,
std::function<void(std::set<object_id>&& objects, pg_num_t pg_num, osd_num_t primary_osd, int status)> callback)
std::function<void(inode_list_t* lst, std::set<object_id>&& objects, pg_num_t pg_num, osd_num_t primary_osd, int status)> callback)
{
int skipped_pgs = 0;
pool_id_t pool_id = INODE_POOL(inode);
@@ -264,7 +264,7 @@ void cluster_client_t::send_list(inode_list_osd_t *cur_list)
{
status |= INODE_LIST_HAS_UNSTABLE;
}
lst->callback(std::move(pg->objects), pg->pg_num, pg->cur_primary, status);
lst->callback(lst, std::move(pg->objects), pg->pg_num, pg->cur_primary, status);
lst->pgs[pg->pos] = NULL;
delete pg;
}