[sheepdog] [PATCH 3/4] cluster snapshot load with specified vdi, deleted vdi object not loaded
Ruoyu
liangry at ucweb.com
Wed Sep 10 09:51:57 CEST 2014
When we executing a cluster snapshot load command with specified vdi,
deleted vdi object should be also loaded for the reason of keeping
cluster consistancy.
Signed-off-by: Ruoyu <liangry at ucweb.com>
---
dog/farm/farm.c | 5 +++++
dog/farm/farm.h | 1 +
2 files changed, 6 insertions(+)
diff --git a/dog/farm/farm.c b/dog/farm/farm.c
index 83c297f..c87d488 100644
--- a/dog/farm/farm.c
+++ b/dog/farm/farm.c
@@ -487,6 +487,9 @@ static int visit_vdi_obj_entry(struct trunk_entry *entry, void *data)
if (opt->count == 0) {
if (opt->enable_if_blank)
opt->func(inode);
+ } else if (inode->name[0] == '\0') {
+ if (opt->enable_if_deleted)
+ opt->func(inode);
} else {
for (int i = 0; i < opt->count; i++)
if (!strcmp(inode->name, opt->name[i])) {
@@ -541,6 +544,7 @@ int farm_load_snapshot(uint32_t idx, const char *tag, int count, char **name)
opt.name = name;
opt.func = register_obj;
opt.enable_if_blank = false;
+ opt.enable_if_deleted = true;
if (for_each_entry_in_trunk(trunk_sha1, visit_vdi_obj_entry, &opt) < 0)
goto out;
@@ -592,6 +596,7 @@ int farm_show_snapshot(uint32_t idx, const char *tag, int count, char **name)
opt.name = name;
opt.func = print_vdi;
opt.enable_if_blank = true;
+ opt.enable_if_deleted = false;
if (for_each_entry_in_trunk(trunk_sha1, visit_vdi_obj_entry, &opt) < 0)
goto out;
diff --git a/dog/farm/farm.h b/dog/farm/farm.h
index f4ec47f..0b86c0a 100644
--- a/dog/farm/farm.h
+++ b/dog/farm/farm.h
@@ -55,6 +55,7 @@ struct vdi_option {
char **name;
void (*func)(struct sd_inode *inode);
bool enable_if_blank;
+ bool enable_if_deleted;
};
/* farm.c */
--
1.8.3.2
More information about the sheepdog
mailing list