At Mon, 30 Jul 2012 12:21:19 +0800, levin li wrote: > > From: levin li <xingke.lwp at taobao.com> > > > Signed-off-by: levin li <xingke.lwp at taobao.com> > --- > collie/node.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > include/internal_proto.h | 1 + > 2 files changed, 45 insertions(+), 0 deletions(-) > > diff --git a/collie/node.c b/collie/node.c > index df841a0..e6bcab8 100644 > --- a/collie/node.c > +++ b/collie/node.c > @@ -139,6 +139,48 @@ static int node_recovery(int argc, char **argv) > return EXIT_SUCCESS; > } > > +static int node_cache(int argc, char **argv) > +{ > + 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++], NULL, 10); > + if (cache_size < 0) { > + fprintf(stderr, "Invalid cache size %d\n", cache_size); > + return EXIT_FAILURE; > + } We should check the cache size more strictly. For example, char *p; cache_size = strtol(argv[optind], &p, 10); if (argv[optind] == p || cache_size < 0) { fprintf(stderr, "Invalid cache size %s\n", argv[optind]); return EXIT_FAILURE; } optind++; Thanks, Kazutaka > + > + 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 +216,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 > > -- > sheepdog mailing list > sheepdog at lists.wpkg.org > http://lists.wpkg.org/mailman/listinfo/sheepdog |