From: Liu Yuan <tailai.ly at taobao.com> - also move it out of lib/net.c since only collie use it, thus we can use fprintf(stderr, ...) inside to indicate which phase to fail. Signed-off-by: Liu Yuan <tailai.ly at taobao.com> --- collie/cluster.c | 18 +++++++++++++----- collie/collie.h | 1 + collie/common.c | 32 ++++++++++++++++++++++++++++++++ collie/debug.c | 2 +- include/net.h | 1 - lib/net.c | 28 ---------------------------- 6 files changed, 47 insertions(+), 35 deletions(-) diff --git a/collie/cluster.c b/collie/cluster.c index 45d39a4..e70e7a4 100644 --- a/collie/cluster.c +++ b/collie/cluster.c @@ -211,8 +211,10 @@ static int cluster_shutdown(int argc, char **argv) hdr.epoch = sd_epoch; ret = send_light_req(&hdr, sdhost, sdport); - if (ret) + if (ret) { + fprintf(stderr, "failed to execute request\n"); return EXIT_FAILURE; + } return EXIT_SUCCESS; } @@ -226,8 +228,10 @@ static int restore_snap(uint32_t epoch) hdr.obj.tgt_epoch = epoch; ret = send_light_req(&hdr, sdhost, sdport); - if (ret) + if (ret) { + fprintf(stderr, "failed to execute request\n"); return EXIT_FAILURE; + } printf("Cluster restore to the snapshot %d\n", epoch); return EXIT_SUCCESS; @@ -297,8 +301,10 @@ static int do_snapshot(void) sd_init_req(&hdr, SD_OP_SNAPSHOT); ret = send_light_req(&hdr, sdhost, sdport); - if (ret) + if (ret) { + fprintf(stderr, "failed to execute request\n"); return EXIT_FAILURE; + } return EXIT_SUCCESS; } @@ -323,8 +329,10 @@ static int cluster_cleanup(int argc, char **argv) sd_init_req(&hdr, SD_OP_CLEANUP); ret = send_light_req(&hdr, sdhost, sdport); - if (ret) + if (ret) { + fprintf(stderr, "failed to execute request\n"); return EXIT_FAILURE; + } return EXIT_SUCCESS; } @@ -361,7 +369,7 @@ static int cluster_recover(int argc, char **argv) ret = send_light_req(&hdr, sdhost, sdport); if (ret) { - fprintf(stderr, "Recovery failed\n"); + fprintf(stderr, "failed to execute request\n"); return EXIT_FAILURE; } diff --git a/collie/collie.h b/collie/collie.h index 3657232..75a675c 100644 --- a/collie/collie.h +++ b/collie/collie.h @@ -71,6 +71,7 @@ int sd_read_object(uint64_t oid, void *data, unsigned int datalen, uint64_t offset); int sd_write_object(uint64_t oid, uint64_t cow_oid, void *data, unsigned int datalen, uint64_t offset, uint32_t flags, int copies, int create); +int send_light_req(struct sd_req *hdr, const char *host, int port); extern struct command vdi_command; extern struct command node_command; diff --git a/collie/common.c b/collie/common.c index 2918773..b93bbd4 100644 --- a/collie/common.c +++ b/collie/common.c @@ -191,3 +191,35 @@ int parse_vdi(vdi_parser_func_t func, size_t size, void *data) return 0; } + +/* + * Light request only contains header, without body content. + */ +int send_light_req(struct sd_req *hdr, const char *host, int port) +{ + int fd, ret; + struct sd_rsp *rsp = (struct sd_rsp *)hdr; + unsigned rlen, wlen; + + fd = connect_to(host, port); + if (fd < 0) + return -1; + + rlen = 0; + wlen = 0; + ret = exec_req(fd, hdr, NULL, &wlen, &rlen); + close(fd); + if (ret) { + fprintf(stderr, "failed to connect to %s:%d\n", + host, port); + return -1; + } + + if (rsp->result != SD_RES_SUCCESS) { + fprintf(stderr, "Response's result: %s\n", + sd_strerror(rsp->result)); + return -1; + } + + return 0; +} diff --git a/collie/debug.c b/collie/debug.c index d016e85..1339db8 100644 --- a/collie/debug.c +++ b/collie/debug.c @@ -101,7 +101,7 @@ static int debug_trace(int argc, char **argv) hdr.epoch = sd_epoch; hdr.data_length = enabled; - ret = send_light_req(&hdr, sdhost, sdport); + ret = end_light_req(&hdr, sdhost, sdport); if (ret) { fprintf(stderr, "Trace failed: %s\n", sd_strerror(rsp->result)); diff --git a/include/net.h b/include/net.h index 42c3620..4ee0eb6 100644 --- a/include/net.h +++ b/include/net.h @@ -41,7 +41,6 @@ int do_read(int sockfd, void *buf, int len); int rx(struct connection *conn, enum conn_state next_state); int tx(struct connection *conn, enum conn_state next_state, int flags); int connect_to(const char *name, int port); -int send_light_req(struct sd_req *hdr, const char *host, int port); int send_req(int sockfd, struct sd_req *hdr, void *data, unsigned int *wlen); int exec_req(int sockfd, struct sd_req *hdr, void *data, unsigned int *wlen, unsigned int *rlen); diff --git a/lib/net.c b/lib/net.c index a832244..6ed046a 100644 --- a/lib/net.c +++ b/lib/net.c @@ -371,34 +371,6 @@ int exec_req(int sockfd, struct sd_req *hdr, void *data, return 0; } -/* - * Light request only contains header, without body content. - */ -int send_light_req(struct sd_req *hdr, const char *host, int port) -{ - int fd, ret; - struct sd_rsp *rsp = (struct sd_rsp *)hdr; - unsigned rlen, wlen; - - fd = connect_to(host, port); - if (fd < 0) - return -1; - - rlen = 0; - wlen = 0; - ret = exec_req(fd, hdr, NULL, &wlen, &rlen); - close(fd); - if (ret) - return -1; - - if (rsp->result != SD_RES_SUCCESS) { - eprintf("Response's result: %s\n", sd_strerror(rsp->result)); - return -1; - } - - return 0; -} - char *addr_to_str(char *str, int size, uint8_t *addr, uint16_t port) { int af = AF_INET6; -- 1.7.10.2 |