int main(int argc, char **argv) { log_options_t opts = LOG_OPTS_STDERR_ONLY; update_block_msg_t msg; ListIterator itr = NULL; char *block_name = NULL; int rc = SLURM_SUCCESS; log_init(xbasename(argv[0]), opts, SYSLOG_FACILITY_DAEMON, NULL); parse_command_line(argc, argv); memset(&msg, 0, sizeof(update_block_msg_t)); if (!all_blocks && (!block_list || !list_count(block_list))) { error("you need at least one block to remove."); exit(1); } if (all_blocks) { int i=0; block_info_msg_t *block_ptr = NULL; _get_new_info_block(&block_ptr); if (!block_ptr) { error("there was no block_ptr filled in."); return 1; } if (block_list) list_flush(block_list); else block_list = list_create(slurm_destroy_char); for (i=0; i<block_ptr->record_count; i++) { list_append(block_list, xstrdup(block_ptr-> block_array[i].bg_block_id)); } } itr = list_iterator_create(block_list); while ((block_name = list_next(itr))) { if (remove_blocks) msg.state = BG_BLOCK_NAV; else msg.state = BG_BLOCK_FREE; msg.bg_block_id = block_name; rc = slurm_update_block(&msg); if (rc != SLURM_SUCCESS) error("Error trying to free block %s: %s", block_name, slurm_strerror(rc)); } list_iterator_destroy(itr); if (wait_full) _check_status(); FREE_NULL_LIST(block_list); info("done"); return 0; }
extern int update_state_block(GtkDialog *dialog, const char *blockid, const char *type) { int i = 0; int rc = SLURM_SUCCESS; char tmp_char[100]; update_block_msg_t block_msg; GtkWidget *label = NULL; int no_dialog = 0; if (!dialog) { dialog = GTK_DIALOG( gtk_dialog_new_with_buttons( type, GTK_WINDOW(main_window), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, NULL)); no_dialog = 1; } slurm_init_update_block_msg(&block_msg); block_msg.bg_block_id = (char *)blockid; label = gtk_dialog_add_button(dialog, GTK_STOCK_YES, GTK_RESPONSE_OK); gtk_window_set_default(GTK_WINDOW(dialog), label); gtk_dialog_add_button(dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); if (!xstrcasecmp("Error", type) || !xstrcasecmp("Put block in error state", type)) { snprintf(tmp_char, sizeof(tmp_char), "Are you sure you want to put block %s " "in an error state?", blockid); block_msg.state = BG_BLOCK_ERROR_FLAG; } else if (!xstrcasecmp("Recreate block", type)) { snprintf(tmp_char, sizeof(tmp_char), "Are you sure you want to recreate block %s?", blockid); block_msg.state = BG_BLOCK_BOOTING; } else if (!xstrcasecmp("Remove block", type)) { snprintf(tmp_char, sizeof(tmp_char), "Are you sure you want to remove block %s?", blockid); block_msg.state = BG_BLOCK_NAV; } else if (!xstrcasecmp("Resume block", type)) { snprintf(tmp_char, sizeof(tmp_char), "Are you sure you want to resume block %s?", blockid); block_msg.state = BG_BLOCK_TERM; } else { snprintf(tmp_char, sizeof(tmp_char), "Are you sure you want to put block %s " "in a free state?", blockid); block_msg.state = BG_BLOCK_FREE; } label = gtk_label_new(tmp_char); gtk_box_pack_start(GTK_BOX(dialog->vbox), label, FALSE, FALSE, 0); gtk_widget_show_all(GTK_WIDGET(dialog)); i = gtk_dialog_run(dialog); if (i == GTK_RESPONSE_OK) { if (slurm_update_block(&block_msg) == SLURM_SUCCESS) { snprintf(tmp_char, sizeof(tmp_char), "Block %s updated successfully", blockid); } else { snprintf(tmp_char, sizeof(tmp_char), "Problem updating block %s.", blockid); } display_edit_note(tmp_char); } if (no_dialog) gtk_widget_destroy(GTK_WIDGET(dialog)); return rc; }