This patch adds a new option "-s <bits>" to dog cluster format to
specify the VID space size.
"dog cluster info -v" shows the specified VID space size.

Signed-off-by: Takafumi Fujieda <fujieda.takaf...@lab.ntt.co.jp>
---
 dog/cluster.c |   28 +++++++++++++++++++++++++++-
 1 files changed, 27 insertions(+), 1 deletions(-)

diff --git a/dog/cluster.c b/dog/cluster.c
index d4a45ec..97c5b3b 100644
--- a/dog/cluster.c
+++ b/dog/cluster.c
@@ -24,6 +24,7 @@ static struct sd_option cluster_options[] = {
        {'f', "force", false, "do not prompt for confirmation"},
        {'m', "multithread", false,
         "use multi-thread for 'cluster snapshot save'"},
+       {'s', "vid_space", true, "specify the VID space size"},
        {'t', "strict", false,
         "do not serve write request if number of nodes is not sufficient"},
        {'z', "block_size_shift", true, "specify the shift num of default"
@@ -96,6 +97,10 @@ static int cluster_format(int argc, char **argv)
        uint32_t old_nr_vdis;
        unsigned long *vdi_inuse = NULL;
        size_t bmp_size;
+       if (!cluster_cmd_data.vid_space)
+               new_space = SD_VID_SPACE;
+       else
+               new_space = (uint8_t)cluster_cmd_data.vid_space;
 
        rb_for_each_entry(n, &sd_nroot, rb) {
                struct sd_req info_req;
@@ -177,6 +182,7 @@ static int cluster_format(int argc, char **argv)
        hdr.cluster.copies = cluster_cmd_data.copies;
        hdr.cluster.copy_policy = cluster_cmd_data.copy_policy;
        hdr.cluster.block_size_shift = cluster_cmd_data.block_size_shift;
+       hdr.cluster.vid_space = new_space;
        hdr.cluster.ctime = (uint64_t) tv.tv_sec << 32 | tv.tv_usec * 1000;
 
        if (strlen(cluster_cmd_data.name))
@@ -281,6 +287,12 @@ retry:
                printf("%s\n", sd_strerror(rsp->result));
 
        if (verbose) {
+               /* show cluster vid space size */
+               if (logs->vid_space) {
+                       if (!raw_output)
+                               printf("Cluster VID space size: ");
+                       printf("%d\n", logs->vid_space);
+               }
                /* show cluster backend store */
                if (!raw_output)
                        printf("Cluster store: ");
@@ -841,7 +853,7 @@ failure:
 static struct subcommand cluster_cmd[] = {
        {"info", NULL, "aprhvT", "show cluster information",
         NULL, CMD_NEED_NODELIST, cluster_info, cluster_options},
-       {"format", NULL, "bctaphzTV", "create a Sheepdog store",
+       {"format", NULL, "bctaphzsTV", "create a Sheepdog store",
         NULL, CMD_NEED_NODELIST, cluster_format, cluster_options},
        {"shutdown", NULL, "aphT", "stop Sheepdog",
         NULL, 0, cluster_shutdown, cluster_options},
@@ -865,6 +877,7 @@ static struct subcommand cluster_cmd[] = {
 static int cluster_parser(int ch, const char *opt)
 {
        uint32_t block_size_shift;
+       uint32_t vid_space;
        switch (ch) {
        case 'b':
                pstrcpy(cluster_cmd_data.name, sizeof(cluster_cmd_data.name),
@@ -889,6 +902,19 @@ static int cluster_parser(int ch, const char *opt)
                break;
        case 'm':
                cluster_cmd_data.multithread = true;
+       case 's':
+               vid_space = (uint32_t)atoi(opt);
+               if (vid_space > 26) {
+                       sd_err("VID space size is limited to 26 bits."
+                       " Please set VID space size lower than 26");
+                       exit(EXIT_FAILURE);
+               } else if (vid_space < 24) {
+                       sd_err("VID space size is larger than 24 bits."
+                       " Please set VID space size larger than 24");
+                       exit(EXIT_FAILURE);
+               }
+               cluster_cmd_data.vid_space = vid_space;
+               break;
        case 't':
                cluster_cmd_data.strict = true;
                break;
-- 
1.7.1

-- 
sheepdog mailing list
sheepdog@lists.wpkg.org
https://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to