static int node_kill(int argc, char **argv) { char host[128]; int node_id, ret; struct sd_node_req req; const char *p = argv[optind++]; if (!is_numeric(p)) { fprintf(stderr, "Invalid node id '%s', " "please specify a numeric value\n", p); exit(EXIT_USAGE); } node_id = strtol(p, NULL, 10); if (node_id < 0 || node_id >= sd_nodes_nr) { fprintf(stderr, "Invalid node id '%d'\n", node_id); exit(EXIT_USAGE); } addr_to_str(host, sizeof(host), sd_nodes[node_id].nid.addr, 0); sd_init_req((struct sd_req *)&req, SD_OP_KILL_NODE); ret = send_light_req((struct sd_req *)&req, host, sd_nodes[node_id].nid.port); if (ret) { fprintf(stderr, "Failed to execute request\n"); exit(EXIT_FAILURE); } return EXIT_SUCCESS; }
static int node_kill(int argc, char **argv) { int node_id, ret; struct sd_req req; const char *p = argv[optind++]; if (!is_numeric(p)) { sd_err("Invalid node id '%s', please specify a numeric value", p); exit(EXIT_USAGE); } node_id = strtol(p, NULL, 10); if (node_id < 0 || node_id >= sd_nodes_nr) { sd_err("Invalid node id '%d'", node_id); exit(EXIT_USAGE); } sd_init_req(&req, SD_OP_KILL_NODE); ret = send_light_req(&req, sd_nodes[node_id].nid.addr, sd_nodes[node_id].nid.port); if (ret) { sd_err("Failed to execute request"); exit(EXIT_FAILURE); } return EXIT_SUCCESS; }
static int node_info(int argc, char **argv) { int i, ret, success = 0; uint64_t total_size = 0, total_avail = 0, total_vdi_size = 0; char total_str[UINT64_DECIMAL_SIZE], avail_str[UINT64_DECIMAL_SIZE], vdi_size_str[UINT64_DECIMAL_SIZE]; if (!raw_output) printf("Id\tSize\tUsed\tUse%%\n"); for (i = 0; i < sd_nodes_nr; i++) { char host[128]; struct sd_node_req req; struct sd_node_rsp *rsp = (struct sd_node_rsp *)&req; char store_str[UINT64_DECIMAL_SIZE], free_str[UINT64_DECIMAL_SIZE]; addr_to_str(host, sizeof(host), sd_nodes[i].nid.addr, 0); sd_init_req((struct sd_req *)&req, SD_OP_STAT_SHEEP); req.epoch = sd_epoch; ret = send_light_req((struct sd_req *)&req, host, sd_nodes[i].nid.port); size_to_str(rsp->store_size, store_str, sizeof(store_str)); size_to_str(rsp->store_size - rsp->store_free, free_str, sizeof(free_str)); if (!ret) { printf(raw_output ? "%d %s %s %d%%\n" : "%2d\t%s\t%s\t%3d%%\n", i, store_str, free_str, rsp->store_size == 0 ? 0 : (int)(((double)(rsp->store_size - rsp->store_free) / rsp->store_size) * 100)); success++; } total_size += rsp->store_size; total_avail += rsp->store_free; } if (success == 0) { fprintf(stderr, "Cannot get information from any nodes\n"); return EXIT_SYSFAIL; } if (parse_vdi(cal_total_vdi_size, SD_INODE_HEADER_SIZE, &total_vdi_size) < 0) return EXIT_SYSFAIL; size_to_str(total_size, total_str, sizeof(total_str)); size_to_str(total_size - total_avail, avail_str, sizeof(avail_str)); size_to_str(total_vdi_size, vdi_size_str, sizeof(vdi_size_str)); printf(raw_output ? "Total %s %s %d%% %s\n" : "Total\t%s\t%s\t%3d%%\n\nTotal virtual image size\t%s\n", total_str, avail_str, (int)(((double)(total_size - total_avail) / total_size) * 100), vdi_size_str); return EXIT_SUCCESS; }
static int trace_stop(int argc, char **argv) { int ret; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; sd_init_req(&hdr, SD_OP_TRACE); hdr.data_length = 0; ret = send_light_req(&hdr, sdhost, sdport); if (ret) { fprintf(stderr, "Trace stop failed: %s\n", sd_strerror(rsp->result)); return EXIT_FAILURE; } return trace_read_buffer(); }
static int trace_start(int argc, char **argv) { int ret; struct sd_req hdr; struct sd_rsp *rsp = (struct sd_rsp *)&hdr; sd_init_req(&hdr, SD_OP_TRACE); hdr.epoch = sd_epoch; hdr.data_length = 1; ret = send_light_req(&hdr, sdhost, sdport); if (ret) { fprintf(stderr, "Trace start failed: %s\n", sd_strerror(rsp->result)); return EXIT_FAILURE; } return EXIT_SUCCESS; }