[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