[sheepdog] [PATCH UPDATE] collie: add node cache command to set max cache size

levin li levin108 at gmail.com
Mon Jul 30 07:07:21 CEST 2012


From: levin li <xingke.lwp at taobao.com>


Signed-off-by: levin li <xingke.lwp at taobao.com>
---
 collie/node.c            |   45 +++++++++++++++++++++++++++++++++++++++++++++
 include/internal_proto.h |    1 +
 2 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/collie/node.c b/collie/node.c
index df841a0..af0b4f0 100644
--- a/collie/node.c
+++ b/collie/node.c
@@ -139,6 +139,49 @@ static int node_recovery(int argc, char **argv)
 	return EXIT_SUCCESS;
 }
 
+static int node_cache(int argc, char **argv)
+{
+	char *p;
+	int fd, ret, cache_size;
+	unsigned int wlen, rlen = 0;
+	struct sd_req hdr;
+	struct sd_rsp *rsp = (struct sd_rsp *)&hdr;
+
+	cache_size = strtol(argv[optind++], &p, 10);
+	if (argv[optind] == p || cache_size < 0) {
+		fprintf(stderr, "Invalid cache size %d\n", cache_size);
+		return EXIT_FAILURE;
+	}
+
+	fd = connect_to(sdhost, sdport);
+	if (fd < 0)
+		return EXIT_FAILURE;
+
+	wlen = sizeof(cache_size);
+
+	sd_init_req(&hdr, SD_OP_SET_CACHE_SIZE);
+	hdr.flags = SD_FLAG_CMD_WRITE;
+	hdr.data_length = wlen;
+
+	ret = exec_req(fd, &hdr, (void *)&cache_size, &wlen, &rlen);
+	close(fd);
+
+	if (ret) {
+		fprintf(stderr, "Failed to connect\n");
+		return EXIT_FAILURE;
+	}
+
+	if (rsp->result != SD_RES_SUCCESS) {
+		fprintf(stderr, "specify max cache size failed: %s\n",
+				sd_strerror(rsp->result));
+		return EXIT_FAILURE;
+	}
+
+	printf("Max cache size set to %dM\n", cache_size);
+
+	return EXIT_SUCCESS;
+}
+
 static int node_kill(int argc, char **argv)
 {
 	char host[128];
@@ -174,6 +217,8 @@ static struct subcommand node_cmd[] = {
 	 SUBCMD_FLAG_NEED_NODELIST, node_info},
 	{"recovery", NULL, "aprh", "show nodes in recovery",
 	 SUBCMD_FLAG_NEED_NODELIST, node_recovery},
+	{"cache", "<cache size>", "aprh", "specify max cache size",
+	 SUBCMD_FLAG_NEED_NODELIST|SUBCMD_FLAG_NEED_THIRD_ARG, node_cache},
 	{NULL,},
 };
 
diff --git a/include/internal_proto.h b/include/internal_proto.h
index a296217..3e22124 100644
--- a/include/internal_proto.h
+++ b/include/internal_proto.h
@@ -60,6 +60,7 @@
 #define SD_OP_READ_PEER      0xA4
 #define SD_OP_WRITE_PEER     0xA5
 #define SD_OP_REMOVE_PEER    0xA6
+#define SD_OP_SET_CACHE_SIZE 0xA7
 
 /* internal flags for hdr.flags, must be above 0x80 */
 #define SD_FLAG_CMD_RECOVERY 0x0080
-- 
1.7.1




More information about the sheepdog mailing list