[sheepdog] [PATCH 2/2] sheep: abort when disk store is meta-store

Liu Yuan namei.unix at gmail.com
Sun May 5 12:51:10 CEST 2013


From: Liu Yuan <tailai.ly at taobao.com>

This can stop sheep from rebooting when disk store is a meta-store, such as in a
disordered path parameter

$ sheep /disk1,/disk2,/meta-store # abort

We can only reboot when first component is meta-store to avoid mess-up.

Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
 sheep/store.c |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/sheep/store.c b/sheep/store.c
index 174ee32..28e2ab7 100644
--- a/sheep/store.c
+++ b/sheep/store.c
@@ -253,6 +253,19 @@ static inline int check_path_len(const char *path)
 	return 0;
 }
 
+static int is_meta_store(const char *path)
+{
+	char conf[PATH_MAX];
+	char epoch[PATH_MAX];
+
+	snprintf(conf, PATH_MAX, "%s/config", path);
+	snprintf(epoch, PATH_MAX, "%s/epoch", path);
+	if (!access(conf, R_OK) && !access(epoch, R_OK))
+		return true;
+
+	return false;
+}
+
 static int init_obj_path(const char *base_path, char *argp)
 {
 	char *p;
@@ -278,6 +291,10 @@ static int init_obj_path(const char *base_path, char *argp)
 		md_add_disk(obj_path);
 	} else {
 		do {
+			if (is_meta_store(p)) {
+				sd_eprintf("%s is meta-store, abort", p);
+				return -1;
+			}
 			md_add_disk(p);
 		} while ((p = strtok(NULL, ",")));
 	}
-- 
1.7.9.5




More information about the sheepdog mailing list