static bool _check_node_state(int nid, char *nid_str, char *state) { bool node_state_ok = false; char *argv[10], *resp_msg; int i, nid_cnt, status = 0; uint32_t *nid_array; json_object *j; argv[0] = "capmc"; argv[1] = "node_status"; argv[2] = "-n"; argv[3] = nid_str; argv[4] = NULL; resp_msg = _run_script(argv, &status); if (status != 0) { error("%s: capmc(%s,%s,%s): %d %s", prog_name, argv[1], argv[2], argv[3], status, resp_msg); xfree(resp_msg); return node_state_ok; } j = json_tokener_parse(resp_msg); if (j == NULL) { error("%s: json parser failed on %s", prog_name, resp_msg); xfree(resp_msg); return node_state_ok; } xfree(resp_msg); nid_cnt = 0; nid_array = _json_parse_nids(j, "off", &nid_cnt); json_object_put(j); /* Frees json memory */ for (i = 0; i < nid_cnt; i++) { if (nid_array[i] == nid) { node_state_ok = true; break; } } xfree(nid_array); return node_state_ok; }
/* Wait for all identified computed nodes to enter "on" state */ static void _wait_all_nodes_on(void) { char *argv[10], *resp_msg; int i, nid_cnt = 0, status = 0; json_object *j; uint32_t *nid_array; time_t start_time = time(NULL); while ((difftime(time(NULL), start_time) < (30 * 60)) && (bit_set_count(node_bitmap) > 0)) { sleep(20); argv[0] = "capmc"; argv[1] = "node_status"; argv[2] = NULL; resp_msg = _run_script(argv, &status); if (status != 0) { error("%s: capmc(%s,%s,%s): %d %s", log_file, argv[1], argv[2], argv[3], status, resp_msg); break; } j = json_tokener_parse(resp_msg); if (j == NULL) { error("%s: json parser failed on %s", log_file, resp_msg); xfree(resp_msg); break; } xfree(resp_msg); nid_cnt = 0; nid_array = _json_parse_nids(j, "on", &nid_cnt); json_object_put(j); /* Frees json memory */ for (i = 0; i < nid_cnt; i++) { bit_clear(node_bitmap, nid_array[i]); } xfree(nid_array); } }