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; + } + + 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 |