[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