本文整理汇总了C++中xstrdup_printf函数的典型用法代码示例。如果您正苦于以下问题:C++ xstrdup_printf函数的具体用法?C++ xstrdup_printf怎么用?C++ xstrdup_printf使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了xstrdup_printf函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: as_mysql_job_complete
extern 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);
//.........这里部分代码省略.........
示例2: as_mysql_remove_qos
extern 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]);
//.........这里部分代码省略.........
示例3: archive_write_file
extern 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;
}
示例4: _cluster_remove_wckeys
static 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;
}
示例5: slurm_jobcomp_log_record
extern 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,
//.........这里部分代码省略.........
示例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;
//.........这里部分代码省略.........
示例7: _isdefault
static 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;
}
示例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;
}
示例9: as_mysql_remove_clusters
extern 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;
}
//.........这里部分代码省略.........
示例10: as_mysql_fini_ctld
extern 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;
}
示例11: as_mysql_cluster_tres
extern 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;
}
//.........这里部分代码省略.........
示例12: as_mysql_node_down
extern 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;
}
示例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,
示例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;
}
示例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);