[sheepdog] [PATCH 1/3] collie: add cache support for 'vdi write'

Liu Yuan namei.unix at gmail.com
Tue Aug 14 10:20:09 CEST 2012


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

This is for tests sciprts.

Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
---
 collie/collie.c |    1 +
 collie/vdi.c    |   12 ++++++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/collie/collie.c b/collie/collie.c
index b112b73..32c044a 100644
--- a/collie/collie.c
+++ b/collie/collie.c
@@ -38,6 +38,7 @@ static const struct sd_option collie_options[] = {
 	{'s', "snapshot", 1, "specify a snapshot id or tag name"},
 	{'x', "exclusive", 0, "write in an exclusive mode"},
 	{'d', "delete", 0, "delete a key"},
+	{'C', "cache", 0, "enable object cache"},
 
 	/* cluster options */
 	{'b', "store", 1, "specify backend store"},
diff --git a/collie/vdi.c b/collie/vdi.c
index e4f4f65..2fff634 100644
--- a/collie/vdi.c
+++ b/collie/vdi.c
@@ -23,6 +23,7 @@ struct vdi_cmd_data {
 	int exclusive;
 	int delete;
 	int prealloc;
+	int cache;
 } vdi_cmd_data = { ~0, };
 
 struct get_vdi_info {
@@ -1248,6 +1249,9 @@ static int vdi_write(int argc, char **argv)
 			flags = SD_FLAG_CMD_COW;
 		}
 
+		if (vdi_cmd_data.cache)
+			flags |= SD_FLAG_CMD_CACHE;
+
 		remain = len;
 		while (remain > 0) {
 			ret = read(STDIN_FILENO, buf + (len - remain), remain);
@@ -1281,7 +1285,8 @@ static int vdi_write(int argc, char **argv)
 
 		if (create) {
 			ret = sd_write_object(vid_to_vdi_oid(vid), 0, &vid, sizeof(vid),
-					      SD_INODE_HEADER_SIZE + sizeof(vid) * idx, 0,
+					      SD_INODE_HEADER_SIZE + sizeof(vid) * idx,
+					      flags & ~SD_FLAG_CMD_COW,
 					      inode->nr_copies, 0);
 			if (ret) {
 				ret = EXIT_FAILURE;
@@ -1505,7 +1510,7 @@ static struct subcommand vdi_cmd[] = {
 	 NULL, SUBCMD_FLAG_NEED_NODELIST|SUBCMD_FLAG_NEED_THIRD_ARG, vdi_resize},
 	{"read", "<vdiname> [<offset> [<len>]]", "saph", "read data from an image",
 	 NULL, SUBCMD_FLAG_NEED_NODELIST|SUBCMD_FLAG_NEED_THIRD_ARG, vdi_read},
-	{"write", "<vdiname> [<offset> [<len>]]", "aph", "write data to an image",
+	{"write", "<vdiname> [<offset> [<len>]]", "apCh", "write data to an image",
 	 NULL, SUBCMD_FLAG_NEED_NODELIST|SUBCMD_FLAG_NEED_THIRD_ARG, vdi_write},
 	{NULL,},
 };
@@ -1539,6 +1544,9 @@ static int vdi_parser(int ch, char *opt)
 	case 'd':
 		vdi_cmd_data.delete = 1;
 		break;
+	case 'C':
+		vdi_cmd_data.cache = 1;
+		break;
 	}
 
 	return 0;
-- 
1.7.10.2




More information about the sheepdog mailing list