[sheepdog] [PATCH] collie: add comfirm for cluster format when cluster is not empty
Liu Yuan
namei.unix at gmail.com
Fri Dec 14 05:02:47 CET 2012
From: Liu Yuan <tailai.ly at taobao.com>
Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
collie/cluster.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/collie/cluster.c b/collie/cluster.c
index 065d2ac..917e190 100644
--- a/collie/cluster.c
+++ b/collie/cluster.c
@@ -73,6 +73,14 @@ static int list_store(void)
return EXIT_SYSFAIL;
}
+#define FORMAT_PRINT \
+"\
+ __ \n\
+ ()'`; \n\
+ /\\|` \n\
+ / | Caution! The cluster is not empty.\n\
+(/_)_|_ Are you sure you want to continue? [yes/no]: "
+
static int cluster_format(int argc, char **argv)
{
int fd, ret;
@@ -80,11 +88,43 @@ static int cluster_format(int argc, char **argv)
struct sd_so_rsp *rsp = (struct sd_so_rsp *)&hdr;
struct timeval tv;
char store_name[STORE_LEN];
+ DECLARE_BITMAP(vdi_inuse, SD_NR_VDIS);
+ unsigned long nr;
fd = connect_to(sdhost, sdport);
if (fd < 0)
return EXIT_SYSFAIL;
+ sd_init_req((struct sd_req *)&hdr, SD_OP_READ_VDIS);
+ hdr.data_length = sizeof(vdi_inuse);
+
+ ret = exec_req(fd, (struct sd_req *)&hdr, &vdi_inuse);
+ if (ret < 0) {
+ fprintf(stderr, "Failed to read VDIs from %s:%d\n",
+ sdhost, sdport);
+ close(fd);
+ return EXIT_SYSFAIL;
+ }
+
+ for (nr = 0; nr < SD_NR_VDIS; nr++)
+ if (test_bit(nr, vdi_inuse))
+ break;
+
+ if (nr != SD_NR_VDIS) {
+ int i, l;
+ char str[123] = {'\0'};
+
+ printf(FORMAT_PRINT);
+ ret = scanf("%s", str);
+ if (ret < 0)
+ return EXIT_SYSFAIL;
+ l = strlen(str);
+ for (i = 0; i < l; i++)
+ str[i] = tolower(str[i]);
+ if (strncmp(str, "yes", 3) != 0)
+ return EXIT_SUCCESS;
+ }
+
gettimeofday(&tv, NULL);
sd_init_req((struct sd_req *)&hdr, SD_OP_MAKE_FS);
--
1.7.9.5
More information about the sheepdog
mailing list