From: levin li <[email protected]>
Signed-off-by: levin li <[email protected]> --- collie/node.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/collie/node.c b/collie/node.c index 2af4eb3..ccdf58e 100644 --- a/collie/node.c +++ b/collie/node.c @@ -119,15 +119,28 @@ static int node_recovery(int argc, char **argv) for (i = 0; i < sd_nodes_nr; i++) { char host[128]; - struct sd_node_req req; + struct sd_req hdr; + struct sd_rsp *rsp = (struct sd_rsp *)&hdr; + unsigned rlen = 0, wlen = 0; + int fd; addr_to_str(host, sizeof(host), sd_nodes[i].nid.addr, 0); - sd_init_req((struct sd_req *)&req, SD_OP_STAT_RECOVERY); + fd = connect_to(host, sd_nodes[i].nid.port); + if (fd < 0) + return -1; - ret = send_light_req((struct sd_req *)&req, host, - sd_nodes[i].nid.port); - if (!ret) { + sd_init_req((struct sd_req *)&hdr, SD_OP_STAT_RECOVERY); + ret = exec_req(fd, &hdr, NULL, &wlen, &rlen); + close(fd); + + if (ret) { + fprintf(stderr, "failed to connect to %s:%d\n", + host, sd_nodes[i].nid.port); + return -1; + } + + if (rsp->result == SD_RES_SUCCESS) { addr_to_str(host, sizeof(host), sd_nodes[i].nid.addr, sd_nodes[i].nid.port); printf(raw_output ? "%d %s %d %d\n" : "%4d %-20s%5d%11d\n", -- 1.7.10 -- sheepdog mailing list [email protected] http://lists.wpkg.org/mailman/listinfo/sheepdog
