这篇教程C++ xstrdup_printf函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中xstrdup_printf函数的典型用法代码示例。如果您正苦于以下问题:C++ xstrdup_printf函数的具体用法?C++ xstrdup_printf怎么用?C++ xstrdup_printf使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了xstrdup_printf函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: as_mysql_job_completeextern int as_mysql_job_complete(mysql_conn_t *mysql_conn, struct job_record *job_ptr){ char *query = NULL; int rc = SLURM_SUCCESS, job_state; time_t submit_time, end_time; if (!job_ptr->db_index && ((!job_ptr->details || !job_ptr->details->submit_time) && !job_ptr->resize_time)) { error("as_mysql_job_complete: " "Not inputing this job, it has no submit time."); return SLURM_ERROR; } if (check_connection(mysql_conn) != SLURM_SUCCESS) return ESLURM_DB_CONNECTION; debug2("as_mysql_slurmdb_job_complete() called"); if (job_ptr->resize_time) submit_time = job_ptr->resize_time; else submit_time = job_ptr->details->submit_time; if (IS_JOB_RESIZING(job_ptr)) { end_time = job_ptr->resize_time; job_state = JOB_RESIZING; } else { /* If we get an error with this just fall through to avoid an * infinite loop */ if (job_ptr->end_time == 0) { debug("as_mysql_jobacct: job %u never started", job_ptr->job_id); return SLURM_SUCCESS; } end_time = job_ptr->end_time; job_state = job_ptr->job_state & JOB_STATE_BASE; } slurm_mutex_lock(&rollup_lock); if (end_time < global_last_rollup) { global_last_rollup = job_ptr->end_time; slurm_mutex_unlock(&rollup_lock); query = xstrdup_printf("update /"%s_%s/" set " "hourly_rollup=%ld, " "daily_rollup=%ld, monthly_rollup=%ld", mysql_conn->cluster_name, last_ran_table, end_time, end_time, end_time); debug3("%d(%s:%d) query/n%s", mysql_conn->conn, THIS_FILE, __LINE__, query); rc = mysql_db_query(mysql_conn, query); xfree(query); } else slurm_mutex_unlock(&rollup_lock); if (!job_ptr->db_index) { if (!(job_ptr->db_index = _get_db_index(mysql_conn, submit_time, job_ptr->job_id, job_ptr->assoc_id))) { /* Comment is overloaded in job_start to be the block_id, so we will need to store this for later. */ char *comment = job_ptr->comment; job_ptr->comment = NULL; /* If we get an error with this just fall * through to avoid an infinite loop */ if (as_mysql_job_start( mysql_conn, job_ptr) == SLURM_ERROR) { job_ptr->comment = comment; error("couldn't add job %u at job completion", job_ptr->job_id); return SLURM_SUCCESS; } job_ptr->comment = comment; } } /* * make sure we handle any quotes that may be in the comment */ query = xstrdup_printf("update /"%s_%s/" set " "time_end=%ld, state=%d", mysql_conn->cluster_name, job_table, end_time, job_state); if (job_ptr->derived_ec != NO_VAL) xstrfmtcat(query, ", derived_ec=%u", job_ptr->derived_ec); if (job_ptr->comment) { char *comment = slurm_add_slash_to_quotes(job_ptr->comment); xstrfmtcat(query, ", derived_es='%s'", comment); xfree(comment);//.........这里部分代码省略.........
开发者ID:BYUHPC,项目名称:slurm,代码行数:101,
示例2: as_mysql_remove_qosextern List as_mysql_remove_qos(mysql_conn_t *mysql_conn, uint32_t uid, slurmdb_qos_cond_t *qos_cond){ ListIterator itr = NULL; List ret_list = NULL; int rc = SLURM_SUCCESS; char *object = NULL; char *extra = NULL, *query = NULL, *name_char = NULL, *assoc_char = NULL; time_t now = time(NULL); char *user_name = NULL; int set = 0; MYSQL_RES *result = NULL; MYSQL_ROW row; if (!qos_cond) { error("we need something to change"); return NULL; } if (check_connection(mysql_conn) != SLURM_SUCCESS) return NULL; xstrcat(extra, "where deleted=0"); if (qos_cond->description_list && list_count(qos_cond->description_list)) { set = 0; xstrcat(extra, " && ("); itr = list_iterator_create(qos_cond->description_list); while ((object = list_next(itr))) { if (set) xstrcat(extra, " || "); xstrfmtcat(extra, "description='%s'", object); set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); } if (qos_cond->id_list && list_count(qos_cond->id_list)) { set = 0; xstrcat(extra, " && ("); itr = list_iterator_create(qos_cond->id_list); while ((object = list_next(itr))) { if (!object[0]) continue; if (set) xstrcat(extra, " || "); xstrfmtcat(extra, "id='%s'", object); set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); } if (qos_cond->name_list && list_count(qos_cond->name_list)) { set = 0; xstrcat(extra, " && ("); itr = list_iterator_create(qos_cond->name_list); while ((object = list_next(itr))) { if (!object[0]) continue; if (set) xstrcat(extra, " || "); xstrfmtcat(extra, "name='%s'", object); set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); } if (!extra) { error("Nothing to remove"); return NULL; } query = xstrdup_printf("select id, name from %s %s;", qos_table, extra); xfree(extra); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query); return NULL; } name_char = NULL; ret_list = list_create(slurm_destroy_char); while ((row = mysql_fetch_row(result))) { slurmdb_qos_rec_t *qos_rec = NULL; list_append(ret_list, xstrdup(row[1])); if (!name_char) xstrfmtcat(name_char, "id='%s'", row[0]); else xstrfmtcat(name_char, " || id='%s'", row[0]); if (!assoc_char) xstrfmtcat(assoc_char, "id_qos='%s'", row[0]); else xstrfmtcat(assoc_char, " || id_qos='%s'", row[0]);//.........这里部分代码省略.........
开发者ID:VURM,项目名称:slurm,代码行数:101,
示例3: archive_write_fileextern int archive_write_file(Buf buffer, char *cluster_name, time_t period_start, time_t period_end, char *arch_dir, char *arch_type, uint32_t archive_period){ int fd = 0; int rc = SLURM_SUCCESS; char *old_file = NULL, *new_file = NULL, *reg_file = NULL; static int high_buffer_size = (1024 * 1024); static pthread_mutex_t local_file_lock = PTHREAD_MUTEX_INITIALIZER; xassert(buffer); slurm_mutex_lock(&local_file_lock); /* write the buffer to file */ reg_file = _make_archive_name(period_start, period_end, cluster_name, arch_dir, arch_type, archive_period); debug("Storing %s archive for %s at %s", arch_type, cluster_name, reg_file); old_file = xstrdup_printf("%s.old", reg_file); new_file = xstrdup_printf("%s.new", reg_file); fd = creat(new_file, 0600); if (fd < 0) { error("Can't save archive, create file %s error %m", new_file); rc = SLURM_ERROR; } else { int pos = 0, nwrite = get_buf_offset(buffer), amount; char *data = (char *)get_buf_data(buffer); high_buffer_size = MAX(nwrite, high_buffer_size); while (nwrite > 0) { amount = write(fd, &data[pos], nwrite); if ((amount < 0) && (errno != EINTR)) { error("Error writing file %s, %m", new_file); rc = SLURM_ERROR; break; } nwrite -= amount; pos += amount; } fsync(fd); close(fd); } if (rc) (void) unlink(new_file); else { /* file shuffle */ (void) unlink(old_file); if (link(reg_file, old_file)) debug4("Link(%s, %s): %m", reg_file, old_file); (void) unlink(reg_file); if (link(new_file, reg_file)) debug4("Link(%s, %s): %m", new_file, reg_file); (void) unlink(new_file); } xfree(old_file); xfree(reg_file); xfree(new_file); slurm_mutex_unlock(&local_file_lock); return rc;}
开发者ID:Cray,项目名称:slurm,代码行数:65,
示例4: _cluster_remove_wckeysstatic int _cluster_remove_wckeys(mysql_conn_t *mysql_conn, char *extra, char *cluster_name, char *user_name, List ret_list){ int rc = SLURM_SUCCESS; MYSQL_RES *result = NULL; MYSQL_ROW row; char *assoc_char = NULL; time_t now = time(NULL); char *query = xstrdup_printf("select t1.id_wckey, t1.wckey_name " "from /"%s_%s/" as t1%s;", cluster_name, wckey_table, extra); if (!(result = mysql_db_query_ret(mysql_conn, query, 0))) { xfree(query); return SLURM_ERROR; } if (!mysql_num_rows(result)) { mysql_free_result(result); xfree(query); return SLURM_SUCCESS; } while ((row = mysql_fetch_row(result))) { slurmdb_wckey_rec_t *wckey_rec = NULL; list_append(ret_list, xstrdup(row[1])); if (!assoc_char) xstrfmtcat(assoc_char, "id_wckey='%s'", row[0]); else xstrfmtcat(assoc_char, " || id_wckey='%s'", row[0]); wckey_rec = xmalloc(sizeof(slurmdb_wckey_rec_t)); /* we only need id and cluster when removing no real need to init */ wckey_rec->id = slurm_atoul(row[0]); wckey_rec->cluster = xstrdup(cluster_name); if (addto_update_list(mysql_conn->update_list, SLURMDB_REMOVE_WCKEY, wckey_rec) != SLURM_SUCCESS) slurmdb_destroy_wckey_rec(wckey_rec); } mysql_free_result(result); if (!list_count(ret_list)) { errno = SLURM_NO_CHANGE_IN_DATA; if (debug_flags & DEBUG_FLAG_DB_WCKEY) DB_DEBUG(mysql_conn->conn, "didn't effect anything/n%s", query); xfree(query); xfree(assoc_char); return SLURM_SUCCESS; } xfree(query); rc = remove_common(mysql_conn, DBD_REMOVE_WCKEYS, now, user_name, wckey_table, assoc_char, assoc_char, cluster_name, NULL, NULL); xfree(assoc_char); if (rc == SLURM_ERROR) { list_destroy(ret_list); return SLURM_ERROR; } return SLURM_SUCCESS;}
开发者ID:sblanton,项目名称:slurm,代码行数:69,
示例5: slurm_jobcomp_log_recordextern int slurm_jobcomp_log_record(struct job_record *job_ptr){ int rc = SLURM_SUCCESS; char *usr_str = NULL, *grp_str = NULL, lim_str[32]; char *connect_type = NULL, *reboot = NULL, *rotate = NULL, *geometry = NULL, *start = NULL, *blockid = NULL; enum job_states job_state; char *query = NULL; uint32_t time_limit, start_time, end_time; if(!jobcomp_pgsql_db || PQstatus(jobcomp_pgsql_db) != CONNECTION_OK) { char *loc = slurm_get_jobcomp_loc(); if(slurm_jobcomp_set_location(loc) == SLURM_ERROR) { xfree(loc); return SLURM_ERROR; } xfree(loc); } usr_str = _get_user_name(job_ptr->user_id); grp_str = _get_group_name(job_ptr->group_id); if ((job_ptr->time_limit == NO_VAL) && job_ptr->part_ptr) time_limit = job_ptr->part_ptr->max_time; else time_limit = job_ptr->time_limit; if (time_limit == INFINITE) strcpy(lim_str, "UNLIMITED"); else { snprintf(lim_str, sizeof(lim_str), "%lu", (unsigned long) time_limit); } /* Job will typically be COMPLETING when this is called. * We remove the flags to get the eventual completion state: * JOB_FAILED, JOB_TIMEOUT, etc. */ if (IS_JOB_RESIZING(job_ptr)) { job_state = JOB_RESIZING; if (job_ptr->resize_time) start_time = job_ptr->resize_time; else start_time = job_ptr->start_time; end_time = time(NULL); } else { job_state = job_ptr->job_state & JOB_STATE_BASE; if (job_ptr->resize_time) start_time = job_ptr->resize_time; else if (job_ptr->start_time > job_ptr->end_time) { /* Job cancelled while pending and * expected start time is in the future. */ start_time = 0; } else start_time = job_ptr->start_time; end_time = job_ptr->end_time; } connect_type = select_g_select_jobinfo_xstrdup(job_ptr->select_jobinfo, SELECT_PRINT_CONNECTION); reboot = select_g_select_jobinfo_xstrdup(job_ptr->select_jobinfo, SELECT_PRINT_REBOOT); rotate = select_g_select_jobinfo_xstrdup(job_ptr->select_jobinfo, SELECT_PRINT_ROTATE); geometry = select_g_select_jobinfo_xstrdup(job_ptr->select_jobinfo, SELECT_PRINT_GEOMETRY); start = select_g_select_jobinfo_xstrdup(job_ptr->select_jobinfo, SELECT_PRINT_START);#ifdef HAVE_BG blockid = select_g_select_jobinfo_xstrdup(job_ptr->select_jobinfo, SELECT_PRINT_BG_ID);#else blockid = select_g_select_jobinfo_xstrdup(job_ptr->select_jobinfo, SELECT_PRINT_RESV_ID);#endif query = xstrdup_printf( "insert into %s (jobid, uid, user_name, gid, group_name, " "name, state, proc_cnt, partition, timelimit, " "starttime, endtime, nodecnt", jobcomp_table); if(job_ptr->nodes) xstrcat(query, ", nodelist"); if(connect_type) xstrcat(query, ", connect_type"); if(reboot) xstrcat(query, ", reboot"); if(rotate) xstrcat(query, ", rotate"); if(job_ptr->details && (job_ptr->details->max_cpus != NO_VAL)) xstrcat(query, ", maxprocs"); if(geometry) xstrcat(query, ", geometry"); if(start) xstrcat(query, ", start"); if(blockid) xstrcat(query, ", blockid"); xstrfmtcat(query, ") values (%u, %u, '%s', %u, '%s', /"%s/", %d, %u, " "'%s', /"%s/", %u, %u, %u", job_ptr->job_id, job_ptr->user_id, usr_str,//.........这里部分代码省略.........
开发者ID:Xarthisius,项目名称:slurm,代码行数:101,
示例6: _process_grouped_report/* FIXME: This only works for CPUS now */static List _process_grouped_report( void *db_conn, slurmdb_job_cond_t *job_cond, List grouping_list, bool flat_view, bool wckey_type, bool both){ int exit_code = 0; void *object = NULL, *object2 = NULL; ListIterator itr = NULL, itr2 = NULL; ListIterator cluster_itr = NULL; ListIterator local_itr = NULL; ListIterator acct_itr = NULL; ListIterator group_itr = NULL; slurmdb_job_rec_t *job = NULL; slurmdb_report_cluster_grouping_t *cluster_group = NULL; slurmdb_report_acct_grouping_t *acct_group = NULL; slurmdb_report_job_grouping_t *job_group = NULL; List job_list = NULL; List cluster_list = NULL; List object_list = NULL, object2_list = NULL; List tmp_acct_list = NULL; bool destroy_job_cond = 0; bool destroy_grouping_list = 0; bool individual = 0; uint32_t tres_id = TRES_CPU; uid_t my_uid = getuid(); /* we don't want to actually query by accounts in the jobs here since we may be looking for sub accounts of a specific account. */ if (!job_cond) { destroy_job_cond = 1; job_cond = xmalloc(sizeof(slurmdb_job_cond_t)); } if (!grouping_list) { destroy_grouping_list = 1; grouping_list = list_create(slurm_destroy_char); slurm_addto_char_list(grouping_list, "50,250,500,1000"); } tmp_acct_list = job_cond->acct_list; job_cond->acct_list = NULL; job_list = jobacct_storage_g_get_jobs_cond(db_conn, my_uid, job_cond); job_cond->acct_list = tmp_acct_list; tmp_acct_list = NULL; if (!job_list) { exit_code=1; fprintf(stderr, " Problem with job query./n"); goto end_it; } group_itr = list_iterator_create(grouping_list); /* make a group for each job size we find. */ if (!list_count(grouping_list)) { char *group = NULL; individual = 1; itr = list_iterator_create(job_list); while ((job = list_next(itr))) { char *tmp = NULL; uint64_t count; if (!job->elapsed) continue; if ((count = slurmdb_find_tres_count_in_string( job->tres_alloc_str, tres_id)) == INFINITE64) continue; tmp = xstrdup_printf("%"PRIu64, count); while ((group = list_next(group_itr))) { if (!strcmp(group, tmp)) { break; } } if (!group) list_append(grouping_list, tmp); else xfree(tmp); list_iterator_reset(group_itr); } list_iterator_destroy(itr); list_sort(grouping_list, (ListCmpF)_sort_group_asc); } cluster_list = list_create(slurmdb_destroy_report_cluster_grouping); cluster_itr = list_iterator_create(cluster_list); if (flat_view) goto no_objects;//.........这里部分代码省略.........
开发者ID:FredHutch,项目名称:slurm,代码行数:101,
示例7: _isdefaultstatic bool _isdefault(List qos_list){ int rc = 0; slurmdb_association_cond_t assoc_cond; slurmdb_association_rec_t *assoc = NULL; ListIterator itr; List ret_list = NULL; char *name = NULL; if (!qos_list || !list_count(qos_list)) return rc; /* this needs to happen before any removing takes place so we can figure out things correctly */ xassert(g_qos_list); memset(&assoc_cond, 0, sizeof(slurmdb_association_cond_t)); assoc_cond.without_parent_info = 1; assoc_cond.def_qos_id_list = list_create(slurm_destroy_char); itr = list_iterator_create(qos_list); while ((name = list_next(itr))) { uint32_t id = str_2_slurmdb_qos(g_qos_list, name); if (id == NO_VAL) continue; list_append(assoc_cond.def_qos_id_list, xstrdup_printf("%u", id)); } list_iterator_destroy(itr); ret_list = acct_storage_g_get_associations( db_conn, my_uid, &assoc_cond); list_destroy(assoc_cond.def_qos_id_list); if (!ret_list || !list_count(ret_list)) goto end_it; fprintf(stderr," Associations listed below have these " "as their Default QOS./n"); itr = list_iterator_create(ret_list); while((assoc = list_next(itr))) { name = slurmdb_qos_str(g_qos_list, assoc->def_qos_id); if (!assoc->user) { // see if this isn't a user fprintf(stderr, " DefQOS = %-10s C = %-10s A = %-20s/n", name, assoc->cluster, assoc->acct); } else if (assoc->partition) { // see if there is a partition name fprintf(stderr, " DefQOS = %-10s C = %-10s A = %-20s " "U = %-9s P = %s/n", name, assoc->cluster, assoc->acct, assoc->user, assoc->partition); } else { fprintf(stderr, " DefQOS = %-10s C = %-10s A = %-20s " "U = %-9s/n", name, assoc->cluster, assoc->acct, assoc->user); } } list_iterator_destroy(itr); rc = 1;end_it: if (ret_list) list_destroy(ret_list); return rc;}
开发者ID:schelcj,项目名称:slurm,代码行数:69,
示例8: as_mysql_modify_clusters//.........这里部分代码省略......... if (cluster->dimensions) { xstrfmtcat(vals, ", dimensions=%u", cluster->dimensions); clust_reg = true; } if (cluster->plugin_id_select) { xstrfmtcat(vals, ", plugin_id_select=%u", cluster->plugin_id_select); clust_reg = true; } if (cluster->flags != NO_VAL) { xstrfmtcat(vals, ", flags=%u", cluster->flags); clust_reg = true; } if (cluster->classification) { xstrfmtcat(vals, ", classification=%u", cluster->classification); } if (!vals) { xfree(extra); errno = SLURM_NO_CHANGE_IN_DATA; error("Nothing to change"); return NULL; } else if (clust_reg && (set != 3)) { xfree(vals); xfree(extra); errno = EFAULT; error("Need control host, port and rpc version " "to register a cluster"); return NULL; } xstrfmtcat(query, "select name, control_port from %s%s;", cluster_table, extra); if (debug_flags & DEBUG_FLAG_DB_ASSOC) DB_DEBUG(mysql_conn->conn, "query/n%s", query); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query); xfree(vals); error("no result given for %s", extra); xfree(extra); return NULL; } xfree(extra); rc = 0; ret_list = list_create(slurm_destroy_char); while ((row = mysql_fetch_row(result))) { object = xstrdup(row[0]); list_append(ret_list, object); if (!rc) { xstrfmtcat(name_char, "name='%s'", object); rc = 1; } else { xstrfmtcat(name_char, " || name='%s'", object); } } mysql_free_result(result); if (!list_count(ret_list)) { errno = SLURM_NO_CHANGE_IN_DATA; if (debug_flags & DEBUG_FLAG_DB_ASSOC) DB_DEBUG(mysql_conn->conn, "didn't effect anything/n%s", query); xfree(name_char); xfree(vals); xfree(query); return ret_list; } xfree(query); if (vals) { send_char = xstrdup_printf("(%s)", name_char); user_name = uid_to_string((uid_t) uid); rc = modify_common(mysql_conn, DBD_MODIFY_CLUSTERS, now, user_name, cluster_table, send_char, vals, NULL); xfree(user_name); if (rc == SLURM_ERROR) { error("Couldn't modify cluster 1"); FREE_NULL_LIST(ret_list); ret_list = NULL; goto end_it; } }end_it: xfree(name_char); xfree(vals); xfree(send_char); return ret_list;}
开发者ID:A1ve5,项目名称:slurm,代码行数:101,
示例9: as_mysql_remove_clustersextern List as_mysql_remove_clusters(mysql_conn_t *mysql_conn, uint32_t uid, slurmdb_cluster_cond_t *cluster_cond){ ListIterator itr = NULL; List ret_list = NULL; List tmp_list = NULL; int rc = SLURM_SUCCESS; char *object = NULL; char *extra = NULL, *query = NULL, *cluster_name = NULL, *name_char = NULL, *assoc_char = NULL; time_t now = time(NULL); char *user_name = NULL; slurmdb_wckey_cond_t wckey_cond; MYSQL_RES *result = NULL; MYSQL_ROW row; bool jobs_running = 0; if (!cluster_cond) { error("we need something to change"); return NULL; } if (check_connection(mysql_conn) != SLURM_SUCCESS) return NULL; if (!is_user_min_admin_level( mysql_conn, uid, SLURMDB_ADMIN_SUPER_USER)) { errno = ESLURM_ACCESS_DENIED; return NULL; } /* force to only do non-deleted clusters */ cluster_cond->with_deleted = 0; _setup_cluster_cond_limits(cluster_cond, &extra); if (!extra) { error("Nothing to remove"); return NULL; } query = xstrdup_printf("select name from %s%s;", cluster_table, extra); xfree(extra); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query); return NULL; } rc = 0; ret_list = list_create(slurm_destroy_char); if (!mysql_num_rows(result)) { mysql_free_result(result); errno = SLURM_NO_CHANGE_IN_DATA; if (debug_flags & DEBUG_FLAG_DB_ASSOC) DB_DEBUG(mysql_conn->conn, "didn't effect anything/n%s", query); xfree(query); return ret_list; } xfree(query); assoc_char = xstrdup_printf("t2.acct='root'"); user_name = uid_to_string((uid_t) uid); while ((row = mysql_fetch_row(result))) { char *object = xstrdup(row[0]); if (!jobs_running) list_append(ret_list, object); xfree(name_char); xstrfmtcat(name_char, "name='%s'", object); if (jobs_running) xfree(object); /* We should not need to delete any cluster usage just set it * to deleted */ xstrfmtcat(query, "update /"%s_%s/" set time_end=%ld where time_end=0;" "update /"%s_%s/" set mod_time=%ld, deleted=1;" "update /"%s_%s/" set mod_time=%ld, deleted=1;" "update /"%s_%s/" set mod_time=%ld, deleted=1;", object, event_table, now, object, cluster_day_table, now, object, cluster_hour_table, now, object, cluster_month_table, now); if ((rc = remove_common(mysql_conn, DBD_REMOVE_CLUSTERS, now, user_name, cluster_table, name_char, assoc_char, object, ret_list, &jobs_running)) != SLURM_SUCCESS) break; } mysql_free_result(result); xfree(user_name); xfree(name_char); xfree(assoc_char); if (rc != SLURM_SUCCESS) { FREE_NULL_LIST(ret_list); return NULL; }//.........这里部分代码省略.........
开发者ID:A1ve5,项目名称:slurm,代码行数:101,
示例10: as_mysql_fini_ctldextern int as_mysql_fini_ctld(mysql_conn_t *mysql_conn, slurmdb_cluster_rec_t *cluster_rec){ int rc = SLURM_SUCCESS; time_t now = time(NULL); char *query = NULL; bool free_it = false; if (check_connection(mysql_conn) != SLURM_SUCCESS) return ESLURM_DB_CONNECTION; /* Here we need to check make sure we are updating the entry correctly just incase the backup has already gained control. If we check the ip and port it is a pretty safe bet we have the right ctld. */ query = xstrdup_printf( "update %s set mod_time=%ld, control_host='', " "control_port=0 where name='%s' && " "control_host='%s' && control_port=%u;", cluster_table, now, cluster_rec->name, cluster_rec->control_host, cluster_rec->control_port); if (debug_flags & DEBUG_FLAG_DB_EVENT) DB_DEBUG(mysql_conn->conn, "query/n%s", query); rc = mysql_db_query(mysql_conn, query); xfree(query); if (rc != SLURM_SUCCESS) return SLURM_ERROR; if (!last_affected_rows(mysql_conn) || (slurmdbd_conf && !slurmdbd_conf->track_ctld)) return rc; /* If tres is NULL we can get the current number of tres by sending NULL for the tres param in the as_mysql_cluster_tres function. */ if (!cluster_rec->tres_str) { free_it = true; as_mysql_cluster_tres( mysql_conn, cluster_rec->control_host, &cluster_rec->tres_str, now); } /* Since as_mysql_cluster_tres could change the last_affected_rows we can't group this with the above return. */ if (!cluster_rec->tres_str) return rc; /* If we affected things we need to now drain the nodes in the * cluster. This is to give better stats on accounting that * the ctld was gone so no jobs were able to be scheduled. We * drain the nodes since the rollup functionality understands * how to deal with that and running jobs so we don't get bad * info. */ query = xstrdup_printf( "insert into /"%s_%s/" (tres, state, time_start, reason) " "values ('%s', %u, %ld, 'slurmctld disconnect');", cluster_rec->name, event_table, cluster_rec->tres_str, NODE_STATE_DOWN, (long)now); if (free_it) xfree(cluster_rec->tres_str); if (debug_flags & DEBUG_FLAG_DB_EVENT) DB_DEBUG(mysql_conn->conn, "query/n%s", query); rc = mysql_db_query(mysql_conn, query); xfree(query); return rc;}
开发者ID:A1ve5,项目名称:slurm,代码行数:75,
示例11: as_mysql_cluster_tresextern int as_mysql_cluster_tres(mysql_conn_t *mysql_conn, char *cluster_nodes, char **tres_str_in, time_t event_time){ char* query; int rc = SLURM_SUCCESS; int first = 0; MYSQL_RES *result = NULL; MYSQL_ROW row; xassert(tres_str_in); if (check_connection(mysql_conn) != SLURM_SUCCESS) return ESLURM_DB_CONNECTION; if (!mysql_conn->cluster_name) { error("%s:%d no cluster name", THIS_FILE, __LINE__); return SLURM_ERROR; } /* Record the processor count */ query = xstrdup_printf( "select tres, cluster_nodes from /"%s_%s/" where " "time_end=0 and node_name='' and state=0 limit 1", mysql_conn->cluster_name, event_table); if (!(result = mysql_db_query_ret(mysql_conn, query, 0))) { xfree(query); if (mysql_errno(mysql_conn->db_conn) == ER_NO_SUCH_TABLE) rc = ESLURM_ACCESS_DENIED; else rc = SLURM_ERROR; return rc; } xfree(query); /* we only are checking the first one here */ if (!(row = mysql_fetch_row(result))) { debug("We don't have an entry for this machine %s " "most likely a first time running.", mysql_conn->cluster_name); /* Get all nodes in a down state and jobs pending or running. * This is for the first time a cluster registers * * We will return ACCOUNTING_FIRST_REG so this * is taken care of since the message thread * may not be up when we run this in the controller or * in the slurmdbd. */ if (!*tres_str_in) { rc = 0; goto end_it; } first = 1; goto add_it; } /* If tres is NULL we want to return the tres for this cluster */ if (!*tres_str_in) { *tres_str_in = xstrdup(row[0]); goto end_it; } else if (xstrcmp(*tres_str_in, row[0])) { debug("%s has changed tres from %s to %s", mysql_conn->cluster_name, row[0], *tres_str_in); } else { if (debug_flags & DEBUG_FLAG_DB_EVENT) DB_DEBUG(mysql_conn->conn, "We have the same tres as before for %s, " "no need to update the database.", mysql_conn->cluster_name); if (cluster_nodes) { if (!row[1][0]) { debug("Adding cluster nodes '%s' to " "last instance of cluster '%s'.", cluster_nodes, mysql_conn->cluster_name); query = xstrdup_printf( "update /"%s_%s/" set " "cluster_nodes='%s' " "where time_end=0 and node_name=''", mysql_conn->cluster_name, event_table, cluster_nodes); (void) mysql_db_query(mysql_conn, query); xfree(query); goto update_it; } else if (!xstrcmp(cluster_nodes, row[1])) { if (debug_flags & DEBUG_FLAG_DB_EVENT) DB_DEBUG(mysql_conn->conn, "we have the same nodes " "in the cluster " "as before no need to " "update the database."); goto update_it; } } goto end_it; }//.........这里部分代码省略.........
开发者ID:A1ve5,项目名称:slurm,代码行数:101,
示例12: as_mysql_node_downextern int as_mysql_node_down(mysql_conn_t *mysql_conn, struct node_record *node_ptr, time_t event_time, char *reason, uint32_t reason_uid){ int rc = SLURM_SUCCESS; char *query = NULL; char *my_reason; MYSQL_RES *result = NULL; MYSQL_ROW row; if (check_connection(mysql_conn) != SLURM_SUCCESS) return ESLURM_DB_CONNECTION; if (!mysql_conn->cluster_name) { error("%s:%d no cluster name", THIS_FILE, __LINE__); return SLURM_ERROR; } if (!node_ptr) { error("No node_ptr given!"); return SLURM_ERROR; } if (!node_ptr->tres_str) { error("node ptr has no tres_list!"); return SLURM_ERROR; } query = xstrdup_printf("select state, reason from /"%s_%s/" where " "time_end=0 and node_name='%s';", mysql_conn->cluster_name, event_table, node_ptr->name); /* info("%d(%s:%d) query/n%s", */ /* mysql_conn->conn, THIS_FILE, __LINE__, query); */ result = mysql_db_query_ret(mysql_conn, query, 0); xfree(query); if (!result) return SLURM_ERROR; if (reason) my_reason = slurm_add_slash_to_quotes(reason); else my_reason = slurm_add_slash_to_quotes(node_ptr->reason); row = mysql_fetch_row(result); if (row && (node_ptr->node_state == slurm_atoul(row[0])) && my_reason && row[1] && !xstrcasecmp(my_reason, row[1])) { debug("as_mysql_node_down: no change needed %u == %s " "and %s == %s", node_ptr->node_state, row[0], my_reason, row[1]); xfree(my_reason); mysql_free_result(result); return SLURM_SUCCESS; } mysql_free_result(result); debug2("inserting %s(%s) with tres of '%s'", node_ptr->name, mysql_conn->cluster_name, node_ptr->tres_str); query = xstrdup_printf( "update /"%s_%s/" set time_end=%ld where " "time_end=0 and node_name='%s';", mysql_conn->cluster_name, event_table, event_time, node_ptr->name); /* If you are clean-restarting the controller over and over again you * could get records that are duplicates in the database. If * this is the case we will zero out the time_end we are * just filled in. This will cause the last time to be erased * from the last restart, but if you are restarting things * this often the pervious one didn't mean anything anyway. * This way we only get one for the last time we let it run. */ xstrfmtcat(query, "insert into /"%s_%s/" " "(node_name, state, tres, time_start, " "reason, reason_uid) " "values ('%s', %u, '%s', %ld, '%s', %u) " "on duplicate key update time_end=0;", mysql_conn->cluster_name, event_table, node_ptr->name, node_ptr->node_state, node_ptr->tres_str, event_time, my_reason, reason_uid); debug2("%d(%s:%d) query/n%s", mysql_conn->conn, THIS_FILE, __LINE__, query); rc = mysql_db_query(mysql_conn, query); xfree(query); xfree(my_reason); return rc;}
开发者ID:A1ve5,项目名称:slurm,代码行数:91,
示例13: as_mysql_step_complete//.........这里部分代码省略......... ave_vsize /= (double)tasks; ave_rss = (double)jobacct->tot_rss; ave_rss /= (double)tasks; ave_pages = (double)jobacct->tot_pages; ave_pages /= (double)tasks; ave_cpu = (double)jobacct->tot_cpu; ave_cpu /= (double)tasks; ave_disk_read = (double)jobacct->tot_disk_read; ave_disk_read /= (double)tasks; ave_disk_write = (double)jobacct->tot_disk_write; ave_disk_write /= (double)tasks; } if (!step_ptr->job_ptr->db_index) { if (!(step_ptr->job_ptr->db_index = _get_db_index(mysql_conn, submit_time, step_ptr->job_ptr->job_id, step_ptr->job_ptr->assoc_id))) { /* If we get an error with this just fall * through to avoid an infinite loop */ if (as_mysql_job_start(mysql_conn, step_ptr->job_ptr) == SLURM_ERROR) { error("couldn't add job %u " "at step completion", step_ptr->job_ptr->job_id); return SLURM_SUCCESS; } } } /* The stepid could be -2 so use %d not %u */ query = xstrdup_printf( "update /"%s_%s/" set time_end=%d, state=%d, " "kill_requid=%d, exit_code=%d, " "user_sec=%u, user_usec=%u, " "sys_sec=%u, sys_usec=%u, " "max_disk_read=%f, max_disk_read_task=%u, " "max_disk_read_node=%u, ave_disk_read=%f, " "max_disk_write=%f, max_disk_write_task=%u, " "max_disk_write_node=%u, ave_disk_write=%f, " "max_vsize=%"PRIu64", max_vsize_task=%u, " "max_vsize_node=%u, ave_vsize=%f, " "max_rss=%"PRIu64", max_rss_task=%u, " "max_rss_node=%u, ave_rss=%f, " "max_pages=%"PRIu64", max_pages_task=%u, " "max_pages_node=%u, ave_pages=%f, " "min_cpu=%u, min_cpu_task=%u, " "min_cpu_node=%u, ave_cpu=%f, " "act_cpufreq=%u, consumed_energy=%u " "where job_db_inx=%d and id_step=%d", mysql_conn->cluster_name, step_table, (int)now, comp_status, step_ptr->requid, exit_code, /* user seconds */ jobacct->user_cpu_sec, /* user microseconds */ jobacct->user_cpu_usec, /* system seconds */ jobacct->sys_cpu_sec, /* system microsecs */ jobacct->sys_cpu_usec, /* max disk_read */ jobacct->max_disk_read,
开发者ID:BYUHPC,项目名称:slurm,代码行数:67,
示例14: as_mysql_step_start//.........这里部分代码省略......... */ snprintf(node_list, BUFFER_SIZE, "%s", step_ptr->gres); nodes = cpus = tasks = 1; } else { char *ionodes = NULL, *temp_nodes = NULL; char temp_bit[BUF_SIZE]; if (step_ptr->step_node_bitmap) { node_inx = bit_fmt(temp_bit, sizeof(temp_bit), step_ptr->step_node_bitmap); }#ifdef HAVE_BG_L_P /* Only L and P use this code */ if (step_ptr->job_ptr->details) tasks = cpus = step_ptr->job_ptr->details->min_cpus; else tasks = cpus = step_ptr->job_ptr->cpu_cnt; select_g_select_jobinfo_get(step_ptr->job_ptr->select_jobinfo, SELECT_JOBDATA_NODE_CNT, &nodes); temp_nodes = step_ptr->job_ptr->nodes;#else if (!step_ptr->step_layout || !step_ptr->step_layout->task_cnt) { tasks = cpus = step_ptr->job_ptr->total_cpus; nodes = step_ptr->job_ptr->total_nodes; temp_nodes = step_ptr->job_ptr->nodes; } else { cpus = step_ptr->cpu_count; tasks = step_ptr->step_layout->task_cnt;#ifdef HAVE_BGQ select_g_select_jobinfo_get(step_ptr->select_jobinfo, SELECT_JOBDATA_NODE_CNT, &nodes);#else nodes = step_ptr->step_layout->node_cnt;#endif task_dist = step_ptr->step_layout->task_dist; temp_nodes = step_ptr->step_layout->node_list; }#endif select_g_select_jobinfo_get(step_ptr->select_jobinfo, SELECT_JOBDATA_IONODES, &ionodes); if (ionodes) { snprintf(node_list, BUFFER_SIZE, "%s[%s]", temp_nodes, ionodes); xfree(ionodes); } else snprintf(node_list, BUFFER_SIZE, "%s", temp_nodes); } if (!step_ptr->job_ptr->db_index) { if (!(step_ptr->job_ptr->db_index = _get_db_index(mysql_conn, submit_time, step_ptr->job_ptr->job_id, step_ptr->job_ptr->assoc_id))) { /* If we get an error with this just fall * through to avoid an infinite loop */ if (as_mysql_job_start(mysql_conn, step_ptr->job_ptr) == SLURM_ERROR) { error("couldn't add job %u at step start", step_ptr->job_ptr->job_id); return SLURM_SUCCESS; } } } step_name = slurm_add_slash_to_quotes(step_ptr->name); /* we want to print a -1 for the requid so leave it a %d */ /* The stepid could be -2 so use %d not %u */ query = xstrdup_printf( "insert into /"%s_%s/" (job_db_inx, id_step, time_start, " "step_name, state, " "cpus_alloc, nodes_alloc, task_cnt, nodelist, " "node_inx, task_dist, req_cpufreq) " "values (%d, %d, %d, '%s', %d, %d, %d, %d, " "'%s', '%s', %d, %u) " "on duplicate key update cpus_alloc=%d, nodes_alloc=%d, " "task_cnt=%d, time_end=0, state=%d, " "nodelist='%s', node_inx='%s', task_dist=%d, req_cpufreq=%u", mysql_conn->cluster_name, step_table, step_ptr->job_ptr->db_index, step_ptr->step_id, (int)start_time, step_name, JOB_RUNNING, cpus, nodes, tasks, node_list, node_inx, task_dist, step_ptr->cpu_freq, cpus, nodes, tasks, JOB_RUNNING, node_list, node_inx, task_dist, step_ptr->cpu_freq); debug3("%d(%s:%d) query/n%s", mysql_conn->conn, THIS_FILE, __LINE__, query); rc = mysql_db_query(mysql_conn, query); xfree(query); xfree(step_name); return rc;}
开发者ID:BYUHPC,项目名称:slurm,代码行数:101,
示例15: print_fields//.........这里部分代码省略......... field->print_routine(field, tmp_char, (curr_inx == field_count)); break; case PRINT_JOBID: if (type == JOBSTEP) job = step->job_ptr; if (job) { if (job->array_task_str) { _xlate_task_str(job); snprintf(id, FORMAT_STRING_SIZE, "%u_[%s]", job->array_job_id, job->array_task_str); } else if (job->array_task_id != NO_VAL) snprintf(id, FORMAT_STRING_SIZE, "%u_%u", job->array_job_id, job->array_task_id); else snprintf(id, FORMAT_STRING_SIZE, "%u", job->jobid); } switch (type) { case JOB: tmp_char = xstrdup(id); break; case JOBSTEP: if (step->stepid == SLURM_BATCH_SCRIPT) { tmp_char = xstrdup_printf( "%s.batch", id); } else if (step->stepid == SLURM_EXTERN_CONT) { tmp_char = xstrdup_printf( "%s.extern", id); } else { tmp_char = xstrdup_printf( "%s.%u", id, step->stepid); } break; case JOBCOMP: tmp_char = xstrdup_printf("%u", job_comp->jobid); break; default: break; } field->print_routine(field, tmp_char, (curr_inx == field_count)); xfree(tmp_char); break; case PRINT_JOBIDRAW: switch (type) { case JOB: tmp_char = xstrdup_printf("%u", job->jobid); break; case JOBSTEP: if (step->stepid == SLURM_BATCH_SCRIPT) { tmp_char = xstrdup_printf( "%u.batch", step->job_ptr->jobid);
开发者ID:RSE-Cambridge,项目名称:slurm,代码行数:67,
示例16: as_mysql_get_clustersextern List as_mysql_get_clusters(mysql_conn_t *mysql_conn, uid_t uid, slurmdb_cluster_cond_t *cluster_cond){ char *query = NULL; char *extra = NULL; char *tmp = NULL; List cluster_list = NULL; ListIterator itr = NULL; int i=0; MYSQL_RES *result = NULL; MYSQL_ROW row; slurmdb_assoc_cond_t assoc_cond; ListIterator assoc_itr = NULL; slurmdb_cluster_rec_t *cluster = NULL; slurmdb_assoc_rec_t *assoc = NULL; List assoc_list = NULL; /* if this changes you will need to edit the corresponding enum */ char *cluster_req_inx[] = { "name", "classification", "control_host", "control_port", "rpc_version", "dimensions", "flags", "plugin_id_select" }; enum { CLUSTER_REQ_NAME, CLUSTER_REQ_CLASS, CLUSTER_REQ_CH, CLUSTER_REQ_CP, CLUSTER_REQ_VERSION, CLUSTER_REQ_DIMS, CLUSTER_REQ_FLAGS, CLUSTER_REQ_PI_SELECT, CLUSTER_REQ_COUNT }; if (check_connection(mysql_conn) != SLURM_SUCCESS) return NULL; if (!cluster_cond) { xstrcat(extra, " where deleted=0"); goto empty; } _setup_cluster_cond_limits(cluster_cond, &extra);empty: xfree(tmp); i=0; xstrfmtcat(tmp, "%s", cluster_req_inx[i]); for(i=1; i<CLUSTER_REQ_COUNT; i++) { xstrfmtcat(tmp, ", %s", cluster_req_inx[i]); } query = xstrdup_printf("select %s from %s%s", tmp, cluster_table, extra); xfree(tmp); xfree(extra); if (debug_flags & DEBUG_FLAG_DB_ASSOC) DB_DEBUG(mysql_conn->conn, "query/n%s", query); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query); return NULL; } xfree(query); cluster_list = list_create(slurmdb_destroy_cluster_rec); memset(&assoc_cond, 0, sizeof(slurmdb_assoc_cond_t)); if (cluster_cond) { /* I don't think we want the with_usage flag here. * We do need the with_deleted though. */ //assoc_cond.with_usage = cluster_cond->with_usage; assoc_cond.with_deleted = cluster_cond->with_deleted; } assoc_cond.cluster_list = list_create(NULL); while ((row = mysql_fetch_row(result))) { MYSQL_RES *result2 = NULL; MYSQL_ROW row2; cluster = xmalloc(sizeof(slurmdb_cluster_rec_t)); list_append(cluster_list, cluster); cluster->name = xstrdup(row[CLUSTER_REQ_NAME]); list_append(assoc_cond.cluster_list, cluster->name); cluster->classification = slurm_atoul(row[CLUSTER_REQ_CLASS]); cluster->control_host = xstrdup(row[CLUSTER_REQ_CH]); cluster->control_port = slurm_atoul(row[CLUSTER_REQ_CP]); cluster->rpc_version = slurm_atoul(row[CLUSTER_REQ_VERSION]);//.........这里部分代码省略.........
开发者ID:A1ve5,项目名称:slurm,代码行数:101,
示例17: xmallocextern bg_record_t *create_small_record(bg_record_t *bg_record, bitstr_t *ionodes, int size){ bg_record_t *found_record = NULL; ba_mp_t *new_ba_mp = NULL; ba_mp_t *ba_mp = NULL; found_record = (bg_record_t*) xmalloc(sizeof(bg_record_t)); found_record->magic = BLOCK_MAGIC; /* This will be a list containing jobs running on this block */ if (bg_conf->sub_blocks) found_record->job_list = list_create(NULL); found_record->job_running = NO_JOB_RUNNING;#ifdef HAVE_BGL found_record->node_use = SELECT_COPROCESSOR_MODE; found_record->blrtsimage = xstrdup(bg_record->blrtsimage);#endif#ifdef HAVE_BG_L_P found_record->linuximage = xstrdup(bg_record->linuximage); found_record->ramdiskimage = xstrdup(bg_record->ramdiskimage);#endif found_record->mloaderimage = xstrdup(bg_record->mloaderimage); if (bg_record->conn_type[0] >= SELECT_SMALL) found_record->conn_type[0] = bg_record->conn_type[0]; else found_record->conn_type[0] = SELECT_SMALL; xassert(bg_conf->cpu_ratio); found_record->cpu_cnt = bg_conf->cpu_ratio * size; found_record->cnode_cnt = size; found_record->ionode_bitmap = bit_copy(ionodes); ba_set_ionode_str(found_record); found_record->ba_mp_list = list_create(destroy_ba_mp); slurm_mutex_lock(&ba_system_mutex); if (bg_record->ba_mp_list) ba_mp = list_peek(bg_record->ba_mp_list); if (!ba_mp) { if (bg_record->mp_str) { int j = 0, dim; char *nodes = bg_record->mp_str; uint16_t coords[SYSTEM_DIMENSIONS]; while (nodes[j] != '/0') { if ((nodes[j] >= '0' && nodes[j] <= '9') || (nodes[j] >= 'A' && nodes[j] <= 'Z')) { break; } j++; } if (nodes[j] && ((strlen(nodes) - (j + SYSTEM_DIMENSIONS)) >= 0)) { for (dim = 0; dim < SYSTEM_DIMENSIONS; dim++, j++) coords[dim] = select_char2coord( nodes[j]); ba_mp = coord2ba_mp(coords); } error("you gave me a list with no ba_mps using %s", ba_mp->coord_str); } else { ba_mp = coord2ba_mp(found_record->start); error("you gave me a record with no ba_mps " "and no nodes either using %s", ba_mp->coord_str); } } xassert(ba_mp); new_ba_mp = ba_copy_mp(ba_mp); slurm_mutex_unlock(&ba_system_mutex); /* We need to have this node wrapped in Q to handle wires correctly when creating around the midplane. */ ba_setup_mp(new_ba_mp, false, true); new_ba_mp->used = BA_MP_USED_TRUE; /* Create these now so we can deal with error cnodes if/when they happen. Since this is the easiest place to figure it out for blocks that don't use the entire block */ if ((new_ba_mp->cnode_bitmap = ba_create_ba_mp_cnode_bitmap(found_record))) { new_ba_mp->cnode_err_bitmap = bit_alloc(bg_conf->mp_cnode_cnt); new_ba_mp->cnode_usable_bitmap = bit_copy(new_ba_mp->cnode_bitmap); } list_append(found_record->ba_mp_list, new_ba_mp); found_record->mp_count = 1; found_record->mp_str = xstrdup_printf( "%s%s", bg_conf->slurm_node_prefix, new_ba_mp->coord_str);//.........这里部分代码省略.........
开发者ID:Cray,项目名称:slurm,代码行数:101,
示例18: as_mysql_get_cluster_events//.........这里部分代码省略......... set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); } if (event_cond->state_list && list_count(event_cond->state_list)) { set = 0; if (extra) xstrcat(extra, " && ("); else xstrcat(extra, " where ("); itr = list_iterator_create(event_cond->state_list); while ((object = list_next(itr))) { if (set) xstrcat(extra, " || "); xstrfmtcat(extra, "state='%s'", object); set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); } if (event_cond->cluster_list && list_count(event_cond->cluster_list)) use_cluster_list = event_cond->cluster_list;empty: xfree(tmp); xstrfmtcat(tmp, "%s", event_req_inx[0]); for(i=1; i<EVENT_REQ_COUNT; i++) { xstrfmtcat(tmp, ", %s", event_req_inx[i]); } if (use_cluster_list == as_mysql_cluster_list) slurm_mutex_lock(&as_mysql_cluster_list_lock); ret_list = list_create(slurmdb_destroy_event_rec); itr = list_iterator_create(use_cluster_list); while ((object = list_next(itr))) { query = xstrdup_printf("select %s from /"%s_%s/"", tmp, object, event_table); if (extra) xstrfmtcat(query, " %s", extra); if (debug_flags & DEBUG_FLAG_DB_ASSOC) DB_DEBUG(mysql_conn->conn, "query/n%s", query); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query); if (mysql_errno(mysql_conn->db_conn) != ER_NO_SUCH_TABLE) { FREE_NULL_LIST(ret_list); ret_list = NULL; } break; } xfree(query); while ((row = mysql_fetch_row(result))) { slurmdb_event_rec_t *event = xmalloc(sizeof(slurmdb_event_rec_t)); list_append(ret_list, event); event->cluster = xstrdup(object); if (row[EVENT_REQ_NODE] && row[EVENT_REQ_NODE][0]) { event->node_name = xstrdup(row[EVENT_REQ_NODE]); event->event_type = SLURMDB_EVENT_NODE; } else event->event_type = SLURMDB_EVENT_CLUSTER; event->state = slurm_atoul(row[EVENT_REQ_STATE]); event->period_start = slurm_atoul(row[EVENT_REQ_START]); event->period_end = slurm_atoul(row[EVENT_REQ_END]); if (row[EVENT_REQ_REASON] && row[EVENT_REQ_REASON][0]) event->reason = xstrdup(row[EVENT_REQ_REASON]); event->reason_uid = slurm_atoul(row[EVENT_REQ_REASON_UID]); if (row[EVENT_REQ_CNODES] && row[EVENT_REQ_CNODES][0]) event->cluster_nodes = xstrdup(row[EVENT_REQ_CNODES]); if (row[EVENT_REQ_TRES] && row[EVENT_REQ_TRES][0]) event->tres_str = xstrdup(row[EVENT_REQ_TRES]); } mysql_free_result(result); } list_iterator_destroy(itr); xfree(tmp); xfree(extra); if (use_cluster_list == as_mysql_cluster_list) slurm_mutex_unlock(&as_mysql_cluster_list_lock); return ret_list;}
开发者ID:A1ve5,项目名称:slurm,代码行数:101,
示例19: mysql_jobcomp_process_get_jobsextern List mysql_jobcomp_process_get_jobs(slurmdb_job_cond_t *job_cond){ char *query = NULL; char *extra = NULL; char *tmp = NULL; char *selected_part = NULL; slurmdb_selected_step_t *selected_step = NULL; ListIterator itr = NULL; int set = 0; MYSQL_RES *result = NULL; MYSQL_ROW row; int i; int lc = 0; jobcomp_job_rec_t *job = NULL; char time_str[32]; time_t temp_time; List job_list = list_create(jobcomp_destroy_job); if (job_cond->step_list && list_count(job_cond->step_list)) { set = 0; xstrcat(extra, " where ("); itr = list_iterator_create(job_cond->step_list); while((selected_step = list_next(itr))) { if (set) xstrcat(extra, " || "); tmp = xstrdup_printf("jobid=%d", selected_step->jobid); xstrcat(extra, tmp); set = 1; xfree(tmp); } list_iterator_destroy(itr); xstrcat(extra, ")"); } if (job_cond->partition_list && list_count(job_cond->partition_list)) { set = 0; if (extra) xstrcat(extra, " && ("); else xstrcat(extra, " where ("); itr = list_iterator_create(job_cond->partition_list); while((selected_part = list_next(itr))) { if (set) xstrcat(extra, " || "); tmp = xstrdup_printf("`partition`='%s'", selected_part); xstrcat(extra, tmp); set = 1; xfree(tmp); } list_iterator_destroy(itr); xstrcat(extra, ")"); } i = 0; while(jobcomp_table_fields[i].name) { if (i) xstrcat(tmp, ", "); xstrcat(tmp, jobcomp_table_fields[i].name); i++; } query = xstrdup_printf("select %s from %s", tmp, jobcomp_table); xfree(tmp); if (extra) { xstrcat(query, extra); xfree(extra); } //info("query = %s", query); if (!(result = mysql_db_query_ret(jobcomp_mysql_conn, query, 0))) { xfree(query); list_destroy(job_list); return NULL; } xfree(query); while((row = mysql_fetch_row(result))) { lc++; job = xmalloc(sizeof(jobcomp_job_rec_t)); if (row[JOBCOMP_REQ_JOBID]) job->jobid = slurm_atoul(row[JOBCOMP_REQ_JOBID]); job->partition = xstrdup(row[JOBCOMP_REQ_PARTITION]); temp_time = atoi(row[JOBCOMP_REQ_STARTTIME]); slurm_make_time_str(&temp_time, time_str, sizeof(time_str)); job->start_time = xstrdup(time_str); temp_time = atoi(row[JOBCOMP_REQ_ENDTIME]); slurm_make_time_str(&temp_time, time_str, sizeof(time_str));//.........这里部分代码省略.........
开发者ID:bingzhang,项目名称:slurm,代码行数:101,
示例20: _get_cluster_usagestatic int _get_cluster_usage(mysql_conn_t *mysql_conn, uid_t uid, slurmdb_cluster_rec_t *cluster_rec, slurmdbd_msg_type_t type, time_t start, time_t end){ int rc = SLURM_SUCCESS; int i=0; MYSQL_RES *result = NULL; MYSQL_ROW row; char *tmp = NULL; char *my_usage_table = cluster_day_table; char *query = NULL; char *cluster_req_inx[] = { "alloc_cpu_secs", "down_cpu_secs", "pdown_cpu_secs", "idle_cpu_secs", "resv_cpu_secs", "over_cpu_secs", "cpu_count", "time_start", "consumed_energy" }; enum { CLUSTER_ACPU, CLUSTER_DCPU, CLUSTER_PDCPU, CLUSTER_ICPU, CLUSTER_RCPU, CLUSTER_OCPU, CLUSTER_CPU_COUNT, CLUSTER_START, CLUSTER_ENERGY, CLUSTER_COUNT }; if (!cluster_rec->name || !cluster_rec->name[0]) { error("We need a cluster name to set data for"); return SLURM_ERROR; } if (set_usage_information(&my_usage_table, type, &start, &end) != SLURM_SUCCESS) { return SLURM_ERROR; } xfree(tmp); i=0; xstrfmtcat(tmp, "%s", cluster_req_inx[i]); for(i=1; i<CLUSTER_COUNT; i++) { xstrfmtcat(tmp, ", %s", cluster_req_inx[i]); } query = xstrdup_printf( "select %s from /"%s_%s/" where (time_start < %ld " "&& time_start >= %ld)", tmp, cluster_rec->name, my_usage_table, end, start); xfree(tmp); debug4("%d(%s:%d) query/n%s", mysql_conn->conn, THIS_FILE, __LINE__, query); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query); return SLURM_ERROR; } xfree(query); if (!cluster_rec->accounting_list) cluster_rec->accounting_list = list_create(slurmdb_destroy_cluster_accounting_rec); while ((row = mysql_fetch_row(result))) { slurmdb_cluster_accounting_rec_t *accounting_rec = xmalloc(sizeof(slurmdb_cluster_accounting_rec_t)); accounting_rec->alloc_secs = slurm_atoull(row[CLUSTER_ACPU]); accounting_rec->down_secs = slurm_atoull(row[CLUSTER_DCPU]); accounting_rec->pdown_secs = slurm_atoull(row[CLUSTER_PDCPU]); accounting_rec->idle_secs = slurm_atoull(row[CLUSTER_ICPU]); accounting_rec->over_secs = slurm_atoull(row[CLUSTER_OCPU]); accounting_rec->resv_secs = slurm_atoull(row[CLUSTER_RCPU]); accounting_rec->cpu_count = slurm_atoul(row[CLUSTER_CPU_COUNT]); accounting_rec->period_start = slurm_atoul(row[CLUSTER_START]); accounting_rec->consumed_energy = slurm_atoull(row[CLUSTER_ENERGY]); list_append(cluster_rec->accounting_list, accounting_rec); } mysql_free_result(result); return rc;}
开发者ID:BYUHPC,项目名称:slurm,代码行数:91,
示例21: _make_sure_users_have_default/* This needs to happen to make since 2.1 code doesn't have enough * smarts to figure out it isn't adding a default wckey if just * adding a new wckey for a user that has never been on the cluster before. */static int _make_sure_users_have_default( mysql_conn_t *mysql_conn, List user_list){ char *query = NULL, *cluster = NULL, *user = NULL; ListIterator itr = NULL, clus_itr = NULL; int rc = SLURM_SUCCESS; if (!user_list) return SLURM_SUCCESS; slurm_mutex_lock(&as_mysql_cluster_list_lock); clus_itr = list_iterator_create(as_mysql_cluster_list); itr = list_iterator_create(user_list); while ((user = list_next(itr))) { while ((cluster = list_next(clus_itr))) { MYSQL_RES *result = NULL; MYSQL_ROW row; char *wckey = NULL; /* only look at non * and non deleted ones */ query = xstrdup_printf( "select distinct is_def, wckey_name from " "/"%s_%s/" where user='%s' and wckey_name " "not like '*%%' and deleted=0 FOR UPDATE;", cluster, wckey_table, user); debug4("%d(%s:%d) query/n%s", mysql_conn->conn, THIS_FILE, __LINE__, query); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query); error("couldn't query the database"); rc = SLURM_ERROR; break; } xfree(query); /* Check to see if the user is even added to the cluster. */ if (!mysql_num_rows(result)) { mysql_free_result(result); continue; } while ((row = mysql_fetch_row(result))) { if (row[0][0] == '1') break; if (!wckey) wckey = xstrdup(row[1]); } mysql_free_result(result); /* we found one so just continue */ if (row || !wckey) { xfree(wckey); continue; } query = xstrdup_printf( "update /"%s_%s/" set is_def=1 where " "user='%s' and wckey_name='%s';", cluster, wckey_table, user, wckey); xfree(wckey); if (debug_flags & DEBUG_FLAG_DB_WCKEY) DB_DEBUG(mysql_conn->conn, "query/n%s", query); rc = mysql_db_query(mysql_conn, query); xfree(query); if (rc != SLURM_SUCCESS) { error("problem with update query"); rc = SLURM_ERROR; break; } } if (!rc != SLURM_SUCCESS) break; list_iterator_reset(clus_itr); } list_iterator_destroy(itr); list_iterator_destroy(clus_itr); slurm_mutex_unlock(&as_mysql_cluster_list_lock); return rc;}
开发者ID:sblanton,项目名称:slurm,代码行数:85,
示例22: get_usage_for_list//.........这里部分代码省略......... itr = list_iterator_create(object_list); while ((wckey = list_next(itr))) { if (id_str) xstrfmtcat(id_str, " || id_wckey=%d", wckey->id); else xstrfmtcat(id_str, "id_wckey=%d", wckey->id); } list_iterator_destroy(itr); my_usage_table = wckey_day_table; break; } default: error("Unknown usage type %d", type); return SLURM_ERROR; break; } if (set_usage_information(&my_usage_table, type, &start, &end) != SLURM_SUCCESS) { xfree(id_str); return SLURM_ERROR; } xfree(tmp); i=0; xstrfmtcat(tmp, "%s", usage_req_inx[i]); for(i=1; i<USAGE_COUNT; i++) { xstrfmtcat(tmp, ", %s", usage_req_inx[i]); } switch (type) { case DBD_GET_ASSOC_USAGE: query = xstrdup_printf( "select %s from /"%s_%s/" as t1, " "/"%s_%s/" as t2, /"%s_%s/" as t3 " "where (t1.time_start < %ld && t1.time_start >= %ld) " "&& t1.id_assoc=t2.id_assoc && (%s) && " "t2.lft between t3.lft and t3.rgt " "order by t3.id_assoc, time_start;", tmp, cluster_name, my_usage_table, cluster_name, assoc_table, cluster_name, assoc_table, end, start, id_str); break; case DBD_GET_WCKEY_USAGE: query = xstrdup_printf( "select %s from /"%s_%s/" " "where (time_start < %ld && time_start >= %ld) " "&& (%s) order by id_wckey, time_start;", tmp, cluster_name, my_usage_table, end, start, id_str); break; default: error("Unknown usage type %d", type); xfree(id_str); xfree(tmp); return SLURM_ERROR; break; } xfree(id_str); xfree(tmp); debug4("%d(%s:%d) query/n%s", mysql_conn->conn, THIS_FILE, __LINE__, query); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query);
开发者ID:BYUHPC,项目名称:slurm,代码行数:67,
示例23: _cluster_modify_wckeysstatic int _cluster_modify_wckeys(mysql_conn_t *mysql_conn, slurmdb_wckey_rec_t *wckey, char *cluster_name, char *extra, char *vals, char *user_name, List ret_list){ int rc = SLURM_SUCCESS; MYSQL_RES *result = NULL; MYSQL_ROW row; char *wckey_char = NULL; time_t now = time(NULL); char *query = NULL; query = xstrdup_printf("select t1.id_wckey, t1.wckey_name, t1.user " "from /"%s_%s/" as t1%s;", cluster_name, wckey_table, extra); if (!(result = mysql_db_query_ret(mysql_conn, query, 0))) { xfree(query); return SLURM_ERROR; } /* This key doesn't exist on this cluster, that is ok. */ if (!mysql_num_rows(result)) return SLURM_SUCCESS; while ((row = mysql_fetch_row(result))) { slurmdb_wckey_rec_t *wckey_rec = NULL; char *object = xstrdup_printf( "C = %-10s W = %-20s U = %-9s", cluster_name, row[1], row[2]); list_append(ret_list, object); if (!wckey_char) xstrfmtcat(wckey_char, "id_wckey='%s'", row[0]); else xstrfmtcat(wckey_char, " || id_wckey='%s'", row[0]); wckey_rec = xmalloc(sizeof(slurmdb_wckey_rec_t)); /* we only need id and cluster when removing no real need to init */ wckey_rec->id = slurm_atoul(row[0]); wckey_rec->cluster = xstrdup(cluster_name); wckey_rec->is_def = wckey->is_def; if (addto_update_list(mysql_conn->update_list, SLURMDB_MODIFY_WCKEY, wckey_rec) != SLURM_SUCCESS) slurmdb_destroy_wckey_rec(wckey_rec); if (wckey->is_def == 1) { /* Use fresh one here so we don't have to worry about dealing with bad values. */ slurmdb_wckey_rec_t tmp_wckey; slurmdb_init_wckey_rec(&tmp_wckey, 0); tmp_wckey.is_def = 1; tmp_wckey.cluster = cluster_name; tmp_wckey.name = row[1]; tmp_wckey.user = row[2]; if ((rc = _reset_default_wckey(mysql_conn, &tmp_wckey)) != SLURM_SUCCESS) break; } } mysql_free_result(result); if (!list_count(ret_list)) { errno = SLURM_NO_CHANGE_IN_DATA; if (debug_flags & DEBUG_FLAG_DB_WCKEY) DB_DEBUG(mysql_conn->conn, "didn't effect anything/n%s", query); xfree(query); xfree(wckey_char); return SLURM_SUCCESS; } xfree(query); rc = modify_common(mysql_conn, DBD_MODIFY_WCKEYS, now, user_name, wckey_table, wckey_char, vals, cluster_name); xfree(wckey_char); return rc;}
开发者ID:sblanton,项目名称:slurm,代码行数:82,
示例24: memsetstatic void *_cluster_rollup_usage(void *arg){ local_rollup_t *local_rollup = (local_rollup_t *)arg; int rc = SLURM_SUCCESS; char timer_str[128]; mysql_conn_t mysql_conn; MYSQL_RES *result = NULL; MYSQL_ROW row; char *query = NULL; struct tm start_tm; struct tm end_tm; time_t my_time = local_rollup->sent_end; time_t last_hour = local_rollup->sent_start; time_t last_day = local_rollup->sent_start; time_t last_month = local_rollup->sent_start; time_t hour_start; time_t hour_end; time_t day_start; time_t day_end; time_t month_start; time_t month_end; DEF_TIMERS; char *update_req_inx[] = { "hourly_rollup", "daily_rollup", "monthly_rollup" }; enum { UPDATE_HOUR, UPDATE_DAY, UPDATE_MONTH, UPDATE_COUNT }; memset(&mysql_conn, 0, sizeof(mysql_conn_t)); mysql_conn.rollback = 1; mysql_conn.conn = local_rollup->mysql_conn->conn; slurm_mutex_init(&mysql_conn.lock); /* Each thread needs it's own connection we can't use the one * sent from the parent thread. */ rc = check_connection(&mysql_conn); if (rc != SLURM_SUCCESS) goto end_it; if (!local_rollup->sent_start) { char *tmp = NULL; int i=0; xstrfmtcat(tmp, "%s", update_req_inx[i]); for(i=1; i<UPDATE_COUNT; i++) { xstrfmtcat(tmp, ", %s", update_req_inx[i]); } query = xstrdup_printf("select %s from /"%s_%s/"", tmp, local_rollup->cluster_name, last_ran_table); xfree(tmp); debug4("%d(%s:%d) query/n%s", mysql_conn.conn, THIS_FILE, __LINE__, query); if (!(result = mysql_db_query_ret(&mysql_conn, query, 0))) { xfree(query); rc = SLURM_ERROR; goto end_it; } xfree(query); row = mysql_fetch_row(result); if (row) { last_hour = slurm_atoul(row[UPDATE_HOUR]); last_day = slurm_atoul(row[UPDATE_DAY]); last_month = slurm_atoul(row[UPDATE_MONTH]); mysql_free_result(result); } else { time_t now = time(NULL); time_t lowest = now; mysql_free_result(result); query = xstrdup_printf( "select time_start from /"%s_%s/" " "where node_name='' order by " "time_start asc limit 1;", local_rollup->cluster_name, event_table); debug3("%d(%s:%d) query/n%s", mysql_conn.conn, THIS_FILE, __LINE__, query); if (!(result = mysql_db_query_ret( &mysql_conn, query, 0))) { xfree(query); rc = SLURM_ERROR; goto end_it; } xfree(query); if ((row = mysql_fetch_row(result))) { time_t check = slurm_atoul(row[0]); if (check < lowest) lowest = check;//.........这里部分代码省略.........
开发者ID:BYUHPC,项目名称:slurm,代码行数:101,
示例25: as_mysql_modify_qosextern List as_mysql_modify_qos(mysql_conn_t *mysql_conn, uint32_t uid, slurmdb_qos_cond_t *qos_cond, slurmdb_qos_rec_t *qos){ ListIterator itr = NULL; List ret_list = NULL; int rc = SLURM_SUCCESS; char *object = NULL; char *vals = NULL, *extra = NULL, *query = NULL, *name_char = NULL; time_t now = time(NULL); char *user_name = NULL; int set = 0; MYSQL_RES *result = NULL; MYSQL_ROW row; char *tmp_char1=NULL, *tmp_char2=NULL; bitstr_t *preempt_bitstr = NULL; char *added_preempt = NULL; if (!qos_cond || !qos) { error("we need something to change"); return NULL; } if (check_connection(mysql_conn) != SLURM_SUCCESS) return NULL; xstrcat(extra, "where deleted=0"); if (qos_cond->description_list && list_count(qos_cond->description_list)) { set = 0; xstrcat(extra, " && ("); itr = list_iterator_create(qos_cond->description_list); while ((object = list_next(itr))) { if (set) xstrcat(extra, " || "); xstrfmtcat(extra, "description='%s'", object); set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); } if (qos_cond->id_list && list_count(qos_cond->id_list)) { set = 0; xstrcat(extra, " && ("); itr = list_iterator_create(qos_cond->id_list); while ((object = list_next(itr))) { if (set) xstrcat(extra, " || "); xstrfmtcat(extra, "id='%s'", object); set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); } if (qos_cond->name_list && list_count(qos_cond->name_list)) { set = 0; xstrcat(extra, " && ("); itr = list_iterator_create(qos_cond->name_list); while ((object = list_next(itr))) { if (set) xstrcat(extra, " || "); xstrfmtcat(extra, "name='%s'", object); set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); } _setup_qos_limits(qos, &tmp_char1, &tmp_char2, &vals, &added_preempt, 0); if (added_preempt) { preempt_bitstr = bit_alloc(g_qos_count); bit_unfmt(preempt_bitstr, added_preempt+1); xfree(added_preempt); } xfree(tmp_char1); xfree(tmp_char2); if (!extra || !vals) { errno = SLURM_NO_CHANGE_IN_DATA; FREE_NULL_BITMAP(preempt_bitstr); error("Nothing to change"); return NULL; } query = xstrdup_printf("select name, preempt, id from %s %s;", qos_table, extra); xfree(extra); if (!(result = mysql_db_query_ret(mysql_conn, query, 0))) { xfree(query); FREE_NULL_BITMAP(preempt_bitstr); return NULL; } rc = 0; ret_list = list_create(slurm_destroy_char);//.........这里部分代码省略.........
开发者ID:VURM,项目名称:slurm,代码行数:101,
示例26: as_mysql_get_usage//.........这里部分代码省略......... if (username && !strcmp(slurmdb_assoc->user, user.name)) goto is_user; if (type != DBD_GET_ASSOC_USAGE) goto bad_user; if (!slurmdb_assoc->acct) { debug("No account name given " "in association."); goto bad_user; } if (!is_user_any_coord(mysql_conn, &user)) { debug4("This user is not a coordinator."); goto bad_user; } /* Existance of user.coord_accts is checked in is_user_any_coord. */ itr = list_iterator_create(user.coord_accts); while ((coord = list_next(itr))) if (!strcasecmp(coord->name, slurmdb_assoc->acct)) break; list_iterator_destroy(itr); if (coord) goto is_user; bad_user: errno = ESLURM_ACCESS_DENIED; return SLURM_ERROR; } }is_user: if (set_usage_information(&my_usage_table, type, &start, &end) != SLURM_SUCCESS) { return SLURM_ERROR; } xfree(tmp); i=0; xstrfmtcat(tmp, "%s", usage_req_inx[i]); for(i=1; i<USAGE_COUNT; i++) { xstrfmtcat(tmp, ", %s", usage_req_inx[i]); } switch (type) { case DBD_GET_ASSOC_USAGE: query = xstrdup_printf( "select %s from /"%s_%s/" as t1, " "/"%s_%s/" as t2, /"%s_%s/" as t3 " "where (t1.time_start < %ld && t1.time_start >= %ld) " "&& t1.id_assoc=t2.id_assoc && t3.id_assoc=%d && " "t2.lft between t3.lft and t3.rgt " "order by t3.id_assoc, time_start;", tmp, cluster_name, my_usage_table, cluster_name, cluster_name, assoc_table, assoc_table, end, start, id); break; case DBD_GET_WCKEY_USAGE: query = xstrdup_printf( "select %s from /"%s_%s/" " "where (time_start < %ld && time_start >= %ld) " "&& id_wckey=%d order by id_wckey, time_start;", tmp, cluster_name, my_usage_table, end, start, id); break; default: error("Unknown usage type %d", type); return SLURM_ERROR; break; } xfree(tmp); debug4("%d(%s:%d) query/n%s", mysql_conn->conn, THIS_FILE, __LINE__, query); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query); return SLURM_ERROR; } xfree(query); if (!(*my_list)) (*my_list) = list_create(slurmdb_destroy_accounting_rec); while ((row = mysql_fetch_row(result))) { slurmdb_accounting_rec_t *accounting_rec = xmalloc(sizeof(slurmdb_accounting_rec_t)); accounting_rec->id = slurm_atoul(row[USAGE_ID]); accounting_rec->period_start = slurm_atoul(row[USAGE_START]); accounting_rec->alloc_secs = slurm_atoull(row[USAGE_ACPU]); accounting_rec->consumed_energy = slurm_atoull(row[USAGE_ENERGY]); list_append((*my_list), accounting_rec); } mysql_free_result(result); return rc;}
开发者ID:BYUHPC,项目名称:slurm,代码行数:101,
示例27: as_mysql_get_qos//.........这里部分代码省略......... while ((object = list_next(itr))) { if (set) xstrcat(extra, " || "); xstrfmtcat(extra, "id='%s'", object); set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); } if (qos_cond->name_list && list_count(qos_cond->name_list)) { set = 0; xstrcat(extra, " && ("); itr = list_iterator_create(qos_cond->name_list); while ((object = list_next(itr))) { if (set) xstrcat(extra, " || "); xstrfmtcat(extra, "name='%s'", object); set = 1; } list_iterator_destroy(itr); xstrcat(extra, ")"); }empty: xfree(tmp); xstrfmtcat(tmp, "%s", qos_req_inx[i]); for(i=1; i<QOS_REQ_COUNT; i++) { xstrfmtcat(tmp, ", %s", qos_req_inx[i]); } query = xstrdup_printf("select %s from %s %s", tmp, qos_table, extra); xfree(tmp); xfree(extra); debug3("%d(%s:%d) query/n%s", mysql_conn->conn, THIS_FILE, __LINE__, query); if (!(result = mysql_db_query_ret( mysql_conn, query, 0))) { xfree(query); return NULL; } xfree(query); qos_list = list_create(slurmdb_destroy_qos_rec); while ((row = mysql_fetch_row(result))) { slurmdb_qos_rec_t *qos = xmalloc(sizeof(slurmdb_qos_rec_t)); list_append(qos_list, qos); if (row[QOS_REQ_DESC] && row[QOS_REQ_DESC][0]) qos->description = xstrdup(row[QOS_REQ_DESC]); qos->id = slurm_atoul(row[QOS_REQ_ID]); qos->flags = slurm_atoul(row[QOS_REQ_FLAGS]); if (row[QOS_REQ_NAME] && row[QOS_REQ_NAME][0]) qos->name = xstrdup(row[QOS_REQ_NAME]); if (row[QOS_REQ_GRACE]) qos->grace_time = slurm_atoul(row[QOS_REQ_GRACE]); else qos->grace_time = (uint32_t)NO_VAL;
开发者ID:VURM,项目名称:slurm,代码行数:67,
示例28: _set_options//.........这里部分代码省略......... break; case 'j': params.job_id = strtol(optarg, &next_str, 10); if (next_str[0] == '.') params.step_id = strtol(next_str+1, NULL, 10); break; case 'l': params.level = xstrdup(optarg); break; case 'N': params.node = xstrdup(optarg); break; case 'o': params.output = xstrdup(optarg); break; case 'p': params.dir = xstrdup(optarg); break; case 's': params.series = xstrdup(optarg); break; case 'S': params.keepfiles = 1; break; case 'u': if (uid_from_string (optarg, &uid) < 0) { error("--uid=/"%s/" invalid", optarg); exit(1); } break; case (int)'v': params.verbose++; break; case (int)'V': print_slurm_version(); exit(0); break; case ':': case '?': /* getopt() has explained it */ exit(1); } } if (params.help) { switch (params.help) { case 1: case 3: _help_msg(); break; default: fprintf(stderr, "bug: --help=%d/n", params.help); } exit(0); } if (params.job_id == -1) fatal("You need to supply a --jobs value."); if (uid == -1) uid = getuid(); params.user = uid_to_string(uid); if (!params.dir) acct_gather_profile_g_get(ACCT_GATHER_PROFILE_DIR, ¶ms.dir); if (!params.dir) fatal("You need to supply a --profiledir or be on a " "node with a valid acct_gather.conf"); if (params.verbose) { logopt.stderr_level += params.verbose; log_alter(logopt, SYSLOG_FACILITY_USER, NULL); } /* FIXME : For now all these only work for extract. Seems * like it would be easy to add the logic to "merge" as well. */ if (params.input || params.level || params.node || (params.step_id != -1) || params.series) params.mode = SH5UTIL_MODE_EXTRACT; if (params.mode == SH5UTIL_MODE_EXTRACT) { if (!params.level) params.level = xstrdup("Node:Totals"); if (!params.input) params.input = xstrdup_printf( "./job_%d.h5", params.job_id); if (!params.output) params.output = xstrdup_printf( "./extract_%d.csv", params.job_id); } if (!params.output) params.output = xstrdup_printf("./job_%d.h5", params.job_id);}
开发者ID:jsollom,项目名称:slurm,代码行数:101,
示例29: _create_front_end_info_liststatic List _create_front_end_info_list( front_end_info_msg_t *front_end_info_ptr, int changed){ char *upper = NULL; char user[32], time_str[32]; static List info_list = NULL; List last_list = NULL; ListIterator last_list_itr = NULL; int i = 0; sview_front_end_info_t *sview_front_end_info_ptr = NULL; front_end_info_t *front_end_ptr = NULL; if (!changed && info_list) goto update_color; if (info_list) last_list = info_list; info_list = list_create(_front_end_info_list_del); if (last_list) last_list_itr = list_iterator_create(last_list); for (i = 0; i < front_end_info_ptr->record_count; i++) { front_end_ptr = &(front_end_info_ptr->front_end_array[i]); sview_front_end_info_ptr = NULL; if (last_list_itr) { while ((sview_front_end_info_ptr = list_next(last_list_itr))) { if (!xstrcmp(sview_front_end_info_ptr-> front_end_name, front_end_ptr->name)) { list_remove(last_list_itr); _front_end_info_free( sview_front_end_info_ptr); break; } } list_iterator_reset(last_list_itr); } if (!sview_front_end_info_ptr) sview_front_end_info_ptr = xmalloc(sizeof(sview_front_end_info_t)); sview_front_end_info_ptr->pos = i; sview_front_end_info_ptr->front_end_name = front_end_ptr->name; sview_front_end_info_ptr->front_end_ptr = front_end_ptr; sview_front_end_info_ptr->color_inx = i % sview_colors_cnt; if (g_node_info_ptr) { sview_front_end_info_ptr->node_inx[0] = 0; sview_front_end_info_ptr->node_inx[1] = g_node_info_ptr->record_count - 1; sview_front_end_info_ptr->node_inx[2] = -1; } else sview_front_end_info_ptr->node_inx[0] = -1; if (front_end_ptr->boot_time) { slurm_make_time_str(&front_end_ptr->boot_time, time_str, sizeof(time_str)); sview_front_end_info_ptr->boot_time = xstrdup(time_str); } if (front_end_ptr->slurmd_start_time) { slurm_make_time_str(&front_end_ptr->slurmd_start_time, time_str, sizeof(time_str)); sview_front_end_info_ptr->slurmd_start_time = xstrdup(time_str); } upper = node_state_string(front_end_ptr->node_state); sview_front_end_info_ptr->state = str_tolower(upper); if (front_end_ptr->reason && front_end_ptr->reason_time && (front_end_ptr->reason_uid != NO_VAL)) { struct passwd *pw = NULL; if ((pw=getpwuid(front_end_ptr->reason_uid))) snprintf(user, sizeof(user), "%s", pw->pw_name); else snprintf(user, sizeof(user), "Unk(%u)", front_end_ptr->reason_uid); slurm_make_time_str(&front_end_ptr->reason_time, time_str, sizeof(time_str)); sview_front_end_info_ptr->reason = xstrdup_printf("%s [%[email C++ xstrerror函数代码示例 C++ xstrcpy函数代码示例
|