[sheepdog] [PATCH 1/2] sheep, dog: make recycling VID selectable
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Mon Mar 16 07:24:31 CET 2015
This patch adds a new option -R to "dog cluster format". If user
specifies the option during cluster format, the cluster will enable
recycling VID (disabled in default).
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
dog/cluster.c | 9 ++++++++-
include/internal_proto.h | 1 +
sheep/ops.c | 4 +++-
sheep/vdi.c | 2 +-
4 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/dog/cluster.c b/dog/cluster.c
index e252316..bb61fcc 100644
--- a/dog/cluster.c
+++ b/dog/cluster.c
@@ -25,6 +25,7 @@ static struct sd_option cluster_options[] = {
{'l', "lock", false, "Lock vdi to exclude multiple users"},
{'m', "multithread", false,
"use multi-thread for 'cluster snapshot save'"},
+ {'R', "recyclevid", false, "enable recycling of VID"},
{'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"
@@ -43,6 +44,7 @@ static struct cluster_cmd_data {
char name[STORE_LEN];
bool fixed_vnodes;
bool use_lock;
+ bool recycle_vid;
} cluster_cmd_data;
#define DEFAULT_STORE "plain"
@@ -169,6 +171,8 @@ static int cluster_format(int argc, char **argv)
hdr.cluster.flags |= SD_CLUSTER_FLAG_STRICT;
if (cluster_cmd_data.use_lock)
hdr.cluster.flags |= SD_CLUSTER_FLAG_USE_LOCK;
+ if (cluster_cmd_data.recycle_vid)
+ hdr.cluster.flags |= SD_CLUSTER_FLAG_RECYCLE_VID;
#ifdef HAVE_DISKVNODES
hdr.cluster.flags |= SD_CLUSTER_FLAG_DISKMODE;
@@ -820,7 +824,7 @@ failure:
static struct subcommand cluster_cmd[] = {
{"info", NULL, "aprhvT", "show cluster information",
NULL, CMD_NEED_NODELIST, cluster_info, cluster_options},
- {"format", NULL, "bcltaphzTV", "create a Sheepdog store",
+ {"format", NULL, "bcltaphzTVR", "create a Sheepdog store",
NULL, CMD_NEED_NODELIST, cluster_format, cluster_options},
{"shutdown", NULL, "aphT", "stop Sheepdog",
NULL, 0, cluster_shutdown, cluster_options},
@@ -890,6 +894,9 @@ static int cluster_parser(int ch, const char *opt)
case 'V':
cluster_cmd_data.fixed_vnodes = true;
break;
+ case 'R':
+ cluster_cmd_data.recycle_vid = true;
+ break;
}
return 0;
diff --git a/include/internal_proto.h b/include/internal_proto.h
index defbe6d..3a370b6 100644
--- a/include/internal_proto.h
+++ b/include/internal_proto.h
@@ -157,6 +157,7 @@
#define SD_CLUSTER_FLAG_DISKMODE 0x0002 /* Disk mode for cluster */
#define SD_CLUSTER_FLAG_AUTO_VNODES 0x0004 /* Cluster vnodes strategy */
#define SD_CLUSTER_FLAG_USE_LOCK 0x0008 /* Lock/Unlock vdi */
+#define SD_CLUSTER_FLAG_RECYCLE_VID 0x0010 /* Enable recycling of VID */
enum sd_status {
diff --git a/sheep/ops.c b/sheep/ops.c
index 0e5ac64..8c79a84 100644
--- a/sheep/ops.c
+++ b/sheep/ops.c
@@ -198,7 +198,9 @@ static int post_cluster_del_vdi(const struct sd_req *req, struct sd_rsp *rsp,
if (ret == SD_RES_SUCCESS) {
atomic_set_bit(vid, sys->vdi_deleted);
vdi_mark_deleted(vid);
- run_vid_gc(vid);
+
+ if (sys->cinfo.flags & SD_CLUSTER_FLAG_RECYCLE_VID)
+ run_vid_gc(vid);
}
if (!sys->enable_object_cache)
diff --git a/sheep/vdi.c b/sheep/vdi.c
index 8114fb5..c2b9fdc 100644
--- a/sheep/vdi.c
+++ b/sheep/vdi.c
@@ -384,7 +384,7 @@ static int do_add_vdi_state(uint32_t vid, int nr_copies, bool snapshot,
already_exists = true;
}
- if (!already_exists)
+ if (!already_exists && sys->cinfo.flags & SD_CLUSTER_FLAG_RECYCLE_VID)
update_vdi_family(parent_vid, entry, unordered);
sd_rw_unlock(&vdi_state_lock);
--
1.9.1
More information about the sheepdog
mailing list