diff --git a/src/plugins/accounting_storage/mysql/as_mysql_convert.c b/src/plugins/accounting_storage/mysql/as_mysql_convert.c index 69d97723e7d393753e3a44b7b4b51e6bb3b10090..6f29935d6d2665f14ae6d5b85598cc99616ae96c 100644 --- a/src/plugins/accounting_storage/mysql/as_mysql_convert.c +++ b/src/plugins/accounting_storage/mysql/as_mysql_convert.c @@ -1,6 +1,6 @@ /*****************************************************************************\ * as_mysql_convert.c - functions dealing with converting from tables in - * slurm <= 14.11. + * slurm <= 17.02. ***************************************************************************** * * Copyright (C) 2015 SchedMD LLC. @@ -38,669 +38,6 @@ #include "as_mysql_convert.h" -static int _rename_usage_columns(mysql_conn_t *mysql_conn, char *table) -{ - MYSQL_ROW row; - MYSQL_RES *result = NULL; - char *query = NULL; - int rc = SLURM_SUCCESS; - - query = xstrdup_printf( - "show columns from %s where field like '%%cpu_%%' " - "|| field like 'id_assoc' || field like 'id_wckey';", - table); - - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - result = mysql_db_query_ret(mysql_conn, query, 0); - xfree(query); - - if (!result) - return SLURM_ERROR; - - while ((row = mysql_fetch_row(result))) { - char *new_char = xstrdup(row[0]); - xstrsubstitute(new_char, "cpu_", ""); - xstrsubstitute(new_char, "_assoc", ""); - xstrsubstitute(new_char, "_wckey", ""); - - if (!query) - query = xstrdup_printf("alter table %s ", table); - else - xstrcat(query, ", "); - - if (!xstrcmp("id", new_char)) - xstrfmtcat(query, "change %s %s int unsigned not null", - row[0], new_char); - else - xstrfmtcat(query, - "change %s %s bigint unsigned default " - "0 not null", - row[0], new_char); - xfree(new_char); - } - mysql_free_result(result); - - if (query) { - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - if ((rc = mysql_db_query(mysql_conn, query)) != SLURM_SUCCESS) - error("Can't update %s %m", table); - xfree(query); - } - - return rc; -} - -static int _update_old_cluster_tables(mysql_conn_t *mysql_conn, - char *cluster_name, - char *count_col_name) -{ - /* These tables are the 14_11 defs plus things we added in 15.08 */ - storage_field_t assoc_usage_table_fields_14_11[] = { - { "creation_time", "int unsigned not null" }, - { "mod_time", "int unsigned default 0 not null" }, - { "deleted", "tinyint default 0 not null" }, - { "id_assoc", "int not null" }, - { "id_tres", "int default 1 not null" }, - { "time_start", "int unsigned not null" }, - { "alloc_cpu_secs", "bigint default 0 not null" }, - { "consumed_energy", "bigint unsigned default 0 not null" }, - { NULL, NULL} - }; - - storage_field_t cluster_usage_table_fields_14_11[] = { - { "creation_time", "int unsigned not null" }, - { "mod_time", "int unsigned default 0 not null" }, - { "deleted", "tinyint default 0 not null" }, - { "id_tres", "int default 1 not null" }, - { "time_start", "int unsigned not null" }, - { count_col_name, "int default 0 not null" }, - { "alloc_cpu_secs", "bigint default 0 not null" }, - { "down_cpu_secs", "bigint default 0 not null" }, - { "pdown_cpu_secs", "bigint default 0 not null" }, - { "idle_cpu_secs", "bigint default 0 not null" }, - { "resv_cpu_secs", "bigint default 0 not null" }, - { "over_cpu_secs", "bigint default 0 not null" }, - { "consumed_energy", "bigint unsigned default 0 not null" }, - { NULL, NULL} - }; - - storage_field_t event_table_fields_14_11[] = { - { "time_start", "int unsigned not null" }, - { "time_end", "int unsigned default 0 not null" }, - { "node_name", "tinytext default '' not null" }, - { "cluster_nodes", "text not null default ''" }, - { count_col_name, "int not null" }, - { "reason", "tinytext not null" }, - { "reason_uid", "int unsigned default 0xfffffffe not null" }, - { "state", "smallint unsigned default 0 not null" }, - { "tres", "text not null default ''" }, - { NULL, NULL} - }; - - storage_field_t job_table_fields_14_11[] = { - { "job_db_inx", "int not null auto_increment" }, - { "mod_time", "int unsigned default 0 not null" }, - { "deleted", "tinyint default 0 not null" }, - { "account", "tinytext" }, - { "array_task_str", "text" }, - { "array_max_tasks", "int unsigned default 0 not null" }, - { "array_task_pending", "int unsigned default 0 not null" }, - { "cpus_req", "int unsigned not null" }, - { "cpus_alloc", "int unsigned not null" }, - { "derived_ec", "int unsigned default 0 not null" }, - { "derived_es", "text" }, - { "exit_code", "int unsigned default 0 not null" }, - { "job_name", "tinytext not null" }, - { "id_assoc", "int unsigned not null" }, - { "id_array_job", "int unsigned default 0 not null" }, - { "id_array_task", "int unsigned default 0xfffffffe not null" }, - { "id_block", "tinytext" }, - { "id_job", "int unsigned not null" }, - { "id_qos", "int unsigned default 0 not null" }, - { "id_resv", "int unsigned not null" }, - { "id_wckey", "int unsigned not null" }, - { "id_user", "int unsigned not null" }, - { "id_group", "int unsigned not null" }, - { "kill_requid", "int default -1 not null" }, - { "mem_req", "int unsigned default 0 not null" }, - { "nodelist", "text" }, - { "nodes_alloc", "int unsigned not null" }, - { "node_inx", "text" }, - { "partition", "tinytext not null" }, - { "priority", "int unsigned not null" }, - { "state", "smallint unsigned not null" }, - { "timelimit", "int unsigned default 0 not null" }, - { "time_submit", "int unsigned default 0 not null" }, - { "time_eligible", "int unsigned default 0 not null" }, - { "time_start", "int unsigned default 0 not null" }, - { "time_end", "int unsigned default 0 not null" }, - { "time_suspended", "int unsigned default 0 not null" }, - { "gres_req", "text not null default ''" }, - { "gres_alloc", "text not null default ''" }, - { "gres_used", "text not null default ''" }, - { "wckey", "tinytext not null default ''" }, - { "track_steps", "tinyint not null" }, - { "tres_alloc", "text not null default ''" }, - { NULL, NULL} - }; - - storage_field_t resv_table_fields_14_11[] = { - { "id_resv", "int unsigned default 0 not null" }, - { "deleted", "tinyint default 0 not null" }, - { "assoclist", "text not null default ''" }, - { "cpus", "int unsigned not null" }, - { "flags", "smallint unsigned default 0 not null" }, - { "nodelist", "text not null default ''" }, - { "node_inx", "text not null default ''" }, - { "resv_name", "text not null" }, - { "time_start", "int unsigned default 0 not null"}, - { "time_end", "int unsigned default 0 not null" }, - { "tres", "text not null default ''" }, - { NULL, NULL} - }; - - storage_field_t step_table_fields_14_11[] = { - { "job_db_inx", "int not null" }, - { "deleted", "tinyint default 0 not null" }, - { "cpus_alloc", "int unsigned not null" }, - { "exit_code", "int default 0 not null" }, - { "id_step", "int not null" }, - { "kill_requid", "int default -1 not null" }, - { "nodelist", "text not null" }, - { "nodes_alloc", "int unsigned not null" }, - { "node_inx", "text" }, - { "state", "smallint unsigned not null" }, - { "step_name", "text not null" }, - { "task_cnt", "int unsigned not null" }, - { "task_dist", "smallint default 0 not null" }, - { "time_start", "int unsigned default 0 not null" }, - { "time_end", "int unsigned default 0 not null" }, - { "time_suspended", "int unsigned default 0 not null" }, - { "user_sec", "int unsigned default 0 not null" }, - { "user_usec", "int unsigned default 0 not null" }, - { "sys_sec", "int unsigned default 0 not null" }, - { "sys_usec", "int unsigned default 0 not null" }, - { "max_pages", "int unsigned default 0 not null" }, - { "max_pages_task", "int unsigned default 0 not null" }, - { "max_pages_node", "int unsigned default 0 not null" }, - { "ave_pages", "double unsigned default 0.0 not null" }, - { "max_rss", "bigint unsigned default 0 not null" }, - { "max_rss_task", "int unsigned default 0 not null" }, - { "max_rss_node", "int unsigned default 0 not null" }, - { "ave_rss", "double unsigned default 0.0 not null" }, - { "max_vsize", "bigint unsigned default 0 not null" }, - { "max_vsize_task", "int unsigned default 0 not null" }, - { "max_vsize_node", "int unsigned default 0 not null" }, - { "ave_vsize", "double unsigned default 0.0 not null" }, - { "min_cpu", "int unsigned default 0xfffffffe not null" }, - { "min_cpu_task", "int unsigned default 0 not null" }, - { "min_cpu_node", "int unsigned default 0 not null" }, - { "ave_cpu", "double unsigned default 0.0 not null" }, - { "act_cpufreq", "double unsigned default 0.0 not null" }, - { "consumed_energy", "double unsigned default 0.0 not null" }, - { "req_cpufreq", "int unsigned default 0 not null" }, - { "max_disk_read", "double unsigned default 0.0 not null" }, - { "max_disk_read_task", "int unsigned default 0 not null" }, - { "max_disk_read_node", "int unsigned default 0 not null" }, - { "ave_disk_read", "double unsigned default 0.0 not null" }, - { "max_disk_write", "double unsigned default 0.0 not null" }, - { "max_disk_write_task", "int unsigned default 0 not null" }, - { "max_disk_write_node", "int unsigned default 0 not null" }, - { "ave_disk_write", "double unsigned default 0.0 not null" }, - { "tres_alloc", "text not null default ''" }, - { NULL, NULL} - }; - - storage_field_t wckey_usage_table_fields_14_11[] = { - { "creation_time", "int unsigned not null" }, - { "mod_time", "int unsigned default 0 not null" }, - { "deleted", "tinyint default 0 not null" }, - { "id_wckey", "int not null" }, - { "id_tres", "int default 1 not null" }, - { "time_start", "int unsigned not null" }, - { "alloc_cpu_secs", "bigint default 0" }, - { "resv_cpu_secs", "bigint default 0" }, - { "over_cpu_secs", "bigint default 0" }, - { "consumed_energy", "bigint unsigned default 0 not null" }, - { NULL, NULL} - }; - - char table_name[200]; - - xassert(cluster_name); - xassert(count_col_name); - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, assoc_day_table); - if (mysql_db_create_table(mysql_conn, table_name, - assoc_usage_table_fields_14_11, - ", primary key (id_assoc, " - "id_tres, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, assoc_hour_table); - if (mysql_db_create_table(mysql_conn, table_name, - assoc_usage_table_fields_14_11, - ", primary key (id_assoc, " - "id_tres, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, assoc_month_table); - if (mysql_db_create_table(mysql_conn, table_name, - assoc_usage_table_fields_14_11, - ", primary key (id_assoc, " - "id_tres, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, cluster_day_table); - if (mysql_db_create_table(mysql_conn, table_name, - cluster_usage_table_fields_14_11, - ", primary key (id_tres, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, cluster_hour_table); - if (mysql_db_create_table(mysql_conn, table_name, - cluster_usage_table_fields_14_11, - ", primary key (id_tres, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, cluster_month_table); - if (mysql_db_create_table(mysql_conn, table_name, - cluster_usage_table_fields_14_11, - ", primary key (id_tres, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, event_table); - if (mysql_db_create_table(mysql_conn, table_name, - event_table_fields_14_11, - ", primary key (node_name(20), time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, job_table); - if (mysql_db_create_table(mysql_conn, table_name, - job_table_fields_14_11, - ", primary key (job_db_inx), " - "unique index (id_job, " - "id_assoc, time_submit), " - "key rollup (time_eligible, time_end), " - "key wckey (id_wckey), " - "key qos (id_qos), " - "key association (id_assoc), " - "key array_job (id_array_job), " - "key reserv (id_resv), " - "key sacct_def (id_user, time_start, " - "time_end))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, resv_table); - if (mysql_db_create_table(mysql_conn, table_name, - resv_table_fields_14_11, - ", primary key (id_resv, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, step_table); - if (mysql_db_create_table(mysql_conn, table_name, - step_table_fields_14_11, - ", primary key (job_db_inx, id_step))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, wckey_day_table); - if (mysql_db_create_table(mysql_conn, table_name, - wckey_usage_table_fields_14_11, - ", primary key (id_wckey, " - "id_tres, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, wckey_hour_table); - if (mysql_db_create_table(mysql_conn, table_name, - wckey_usage_table_fields_14_11, - ", primary key (id_wckey, " - "id_tres, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, wckey_month_table); - if (mysql_db_create_table(mysql_conn, table_name, - wckey_usage_table_fields_14_11, - ", primary key (id_wckey, " - "id_tres, time_start))") - == SLURM_ERROR) - return SLURM_ERROR; - - return SLURM_SUCCESS; -} - -static int _update2_old_cluster_tables(mysql_conn_t *mysql_conn, - char *cluster_name) -{ - /* These tables are the 14_11 defs plus things we added in 15.08 */ - - storage_field_t assoc_table_fields_14_11[] = { - { "creation_time", "int unsigned not null" }, - { "mod_time", "int unsigned default 0 not null" }, - { "deleted", "tinyint default 0 not null" }, - { "is_def", "tinyint default 0 not null" }, - { "id_assoc", "int not null auto_increment" }, - { "user", "tinytext not null default ''" }, - { "acct", "tinytext not null" }, - { "partition", "tinytext not null default ''" }, - { "parent_acct", "tinytext not null default ''" }, - { "lft", "int not null" }, - { "rgt", "int not null" }, - { "shares", "int default 1 not null" }, - { "max_jobs", "int default NULL" }, - { "max_submit_jobs", "int default NULL" }, - { "max_cpus_pj", "int default NULL" }, - { "max_nodes_pj", "int default NULL" }, - { "max_tres_pj", "text not null default ''" }, - { "max_tres_mins_pj", "text not null default ''" }, - { "max_tres_run_mins", "text not null default ''" }, - { "max_wall_pj", "int default NULL" }, - { "max_cpu_mins_pj", "bigint default NULL" }, - { "max_cpu_run_mins", "bigint default NULL" }, - { "grp_jobs", "int default NULL" }, - { "grp_submit_jobs", "int default NULL" }, - { "grp_cpus", "int default NULL" }, - { "grp_mem", "int default NULL" }, - { "grp_nodes", "int default NULL" }, - { "grp_tres", "text not null default ''" }, - { "grp_tres_mins", "text not null default ''" }, - { "grp_tres_run_mins", "text not null default ''" }, - { "grp_wall", "int default NULL" }, - { "grp_cpu_mins", "bigint default NULL" }, - { "grp_cpu_run_mins", "bigint default NULL" }, - { "def_qos_id", "int default NULL" }, - { "qos", "blob not null default ''" }, - { "delta_qos", "blob not null default ''" }, - { NULL, NULL} - }; - - char table_name[200]; - - snprintf(table_name, sizeof(table_name), "\"%s_%s\"", - cluster_name, assoc_table); - if (mysql_db_create_table(mysql_conn, table_name, - assoc_table_fields_14_11, - ", primary key (id_assoc), " - "unique index (user(20), acct(20), " - "`partition`(20)), " - "key lft (lft), key account (acct(20)))") - == SLURM_ERROR) - return SLURM_ERROR; - - return SLURM_SUCCESS; -} - -static int _update2_old_tables(mysql_conn_t *mysql_conn) -{ - /* These tables are the 14_11 defs plus things we added in 15.08 */ - storage_field_t qos_table_fields_14_11[] = { - { "creation_time", "int unsigned not null" }, - { "mod_time", "int unsigned default 0 not null" }, - { "deleted", "tinyint default 0" }, - { "id", "int not null auto_increment" }, - { "name", "tinytext not null" }, - { "description", "text" }, - { "flags", "int unsigned default 0" }, - { "grace_time", "int unsigned default NULL" }, - { "max_jobs_per_user", "int default NULL" }, - { "max_submit_jobs_per_user", "int default NULL" }, - { "max_tres_pj", "text not null default ''" }, - { "max_tres_pu", "text not null default ''" }, - { "max_tres_mins_pj", "text not null default ''" }, - { "max_tres_run_mins_pu", "text not null default ''" }, - { "min_tres_pj", "text not null default ''" }, - { "max_cpus_per_job", "int default NULL" }, - { "max_cpus_per_user", "int default NULL" }, - { "max_nodes_per_job", "int default NULL" }, - { "max_nodes_per_user", "int default NULL" }, - { "max_wall_duration_per_job", "int default NULL" }, - { "max_cpu_mins_per_job", "bigint default NULL" }, - { "max_cpu_run_mins_per_user", "bigint default NULL" }, - { "grp_jobs", "int default NULL" }, - { "grp_submit_jobs", "int default NULL" }, - { "grp_tres", "text not null default ''" }, - { "grp_tres_mins", "text not null default ''" }, - { "grp_tres_run_mins", "text not null default ''" }, - { "grp_cpus", "int default NULL" }, - { "grp_mem", "int default NULL" }, - { "grp_nodes", "int default NULL" }, - { "grp_wall", "int default NULL" }, - { "grp_cpu_mins", "bigint default NULL" }, - { "grp_cpu_run_mins", "bigint default NULL" }, - { "preempt", "text not null default ''" }, - { "preempt_mode", "int default 0" }, - { "priority", "int unsigned default 0" }, - { "usage_factor", "double default 1.0 not null" }, - { "usage_thres", "double default NULL" }, - { "min_cpus_per_job", "int unsigned default 1 not null" }, - { NULL, NULL} - }; - - if (mysql_db_create_table(mysql_conn, qos_table, - qos_table_fields_14_11, - ", primary key (id), " - "unique index (name(20)))") - == SLURM_ERROR) - return SLURM_ERROR; - - return SLURM_SUCCESS; -} - -static int _convert_assoc_table(mysql_conn_t *mysql_conn, char *cluster_name) -{ - char *query = NULL; - int rc; - - query = xstrdup_printf( - "update \"%s_%s\" set grp_tres=concat_ws(',', " - "concat('%d=', grp_cpus), concat('%d=', grp_mem), " - "concat('%d=', grp_nodes)), " - "grp_tres_mins=concat_ws(',', concat('%d=', grp_cpu_mins)), " - "grp_tres_run_mins=concat_ws(',', " - "concat('%d=', grp_cpu_run_mins)), " - "max_tres_pj=concat_ws(',', concat('%d=', max_cpus_pj), " - "concat('%d=', max_nodes_pj)), " - "max_tres_mins_pj=concat_ws(',', " - "concat('%d=', max_cpu_mins_pj)), " - "max_tres_run_mins=concat_ws(',', " - "concat('%d=', max_cpu_run_mins)); ", - cluster_name, assoc_table, - TRES_CPU, TRES_MEM, TRES_NODE, TRES_CPU, TRES_CPU, - TRES_CPU, TRES_NODE, TRES_CPU, TRES_CPU); - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - if ((rc = mysql_db_query(mysql_conn, query)) != SLURM_SUCCESS) - error("Can't convert assoc_table for %s: %m", cluster_name); - xfree(query); - - return rc; -} - -static int _convert_qos_table(mysql_conn_t *mysql_conn) -{ - char *query = NULL; - int rc; - - query = xstrdup_printf( - "update %s set grp_tres=concat_ws(',', " - "concat('%d=', grp_cpus), concat('%d=', grp_mem), " - "concat('%d=', grp_nodes)), " - "grp_tres_mins=concat_ws(',', concat('%d=', grp_cpu_mins)), " - "grp_tres_run_mins=concat_ws(',', " - "concat('%d=', grp_cpu_run_mins)), " - "max_tres_pj=concat_ws(',', concat('%d=', max_cpus_per_job), " - "concat('%d=', max_nodes_per_job)), " - "max_tres_pu=concat_ws(',', concat('%d=', max_cpus_per_user), " - "concat('%d=', max_nodes_per_user)), " - "min_tres_pj=concat_ws(',', concat('%d=', min_cpus_per_job)), " - "max_tres_mins_pj=concat_ws(',', " - "concat('%d=', max_cpu_mins_per_job)), " - "max_tres_run_mins_pu=concat_ws(',', " - "concat('%d=', max_cpu_run_mins_per_user)); ", - qos_table, - TRES_CPU, TRES_MEM, TRES_NODE, TRES_CPU, TRES_CPU, - TRES_CPU, TRES_NODE, TRES_CPU, TRES_NODE, TRES_CPU, - TRES_CPU, TRES_CPU); - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - if ((rc = mysql_db_query(mysql_conn, query)) != SLURM_SUCCESS) - error("Can't convert qos_table: %m"); - xfree(query); - - return rc; -} - -static int _convert_event_table(mysql_conn_t *mysql_conn, char *cluster_name, - char *count_col_name) -{ - int rc = SLURM_SUCCESS; - char *query = xstrdup_printf( - "update \"%s_%s\" set tres=concat('%d=', %s);", - cluster_name, event_table, TRES_CPU, count_col_name); - - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - if ((rc = mysql_db_query(mysql_conn, query)) != SLURM_SUCCESS) - error("Can't convert %s_%s info: %m", - cluster_name, event_table); - xfree(query); - - return rc; -} - -static int _convert_cluster_usage_table(mysql_conn_t *mysql_conn, - char *table) -{ - char *query = NULL; - int rc; - - if ((rc = _rename_usage_columns(mysql_conn, table)) != SLURM_SUCCESS) - return rc; - - query = xstrdup_printf("insert into %s (creation_time, mod_time, " - "deleted, id_tres, time_start, alloc_secs) " - "select creation_time, mod_time, deleted, " - "%d, time_start, consumed_energy from %s where " - "consumed_energy != 0 on duplicate key update " - "mod_time=%ld, alloc_secs=VALUES(alloc_secs);", - table, TRES_ENERGY, table, time(NULL)); - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - if ((rc = mysql_db_query(mysql_conn, query)) != SLURM_SUCCESS) - error("Can't convert %s info: %m", table); - xfree(query); - - return rc; -} - -static int _convert_id_usage_table(mysql_conn_t *mysql_conn, char *table) -{ - char *query = NULL; - int rc; - - if ((rc = _rename_usage_columns(mysql_conn, table)) != SLURM_SUCCESS) - return rc; - - query = xstrdup_printf("insert into %s (creation_time, mod_time, " - "deleted, id, id_tres, time_start, alloc_secs) " - "select creation_time, mod_time, deleted, id, " - "%d, time_start, consumed_energy from %s where " - "consumed_energy != 0 on duplicate key update " - "mod_time=%ld, alloc_secs=VALUES(alloc_secs);", - table, TRES_ENERGY, table, time(NULL)); - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - if ((rc = mysql_db_query(mysql_conn, query)) != SLURM_SUCCESS) - error("Can't convert %s info: %m", table); - xfree(query); - - return rc; -} - -static int _convert_cluster_usage_tables(mysql_conn_t *mysql_conn, - char *cluster_name) -{ - char table[200]; - int rc; - - snprintf(table, sizeof(table), "\"%s_%s\"", - cluster_name, cluster_day_table); - if ((rc = _convert_cluster_usage_table(mysql_conn, table)) - != SLURM_SUCCESS) - return rc; - - snprintf(table, sizeof(table), "\"%s_%s\"", - cluster_name, cluster_hour_table); - if ((rc = _convert_cluster_usage_table(mysql_conn, table)) - != SLURM_SUCCESS) - return rc; - - snprintf(table, sizeof(table), "\"%s_%s\"", - cluster_name, cluster_month_table); - if ((rc = _convert_cluster_usage_table(mysql_conn, table)) - != SLURM_SUCCESS) - return rc; - - /* assoc tables */ - snprintf(table, sizeof(table), "\"%s_%s\"", - cluster_name, assoc_day_table); - if ((rc = _convert_id_usage_table(mysql_conn, table)) - != SLURM_SUCCESS) - return rc; - - snprintf(table, sizeof(table), "\"%s_%s\"", - cluster_name, assoc_hour_table); - if ((rc = _convert_id_usage_table(mysql_conn, table)) - != SLURM_SUCCESS) - return rc; - - snprintf(table, sizeof(table), "\"%s_%s\"", - cluster_name, assoc_month_table); - if ((rc = _convert_id_usage_table(mysql_conn, table)) - != SLURM_SUCCESS) - return rc; - - /* wckey tables */ - snprintf(table, sizeof(table), "\"%s_%s\"", - cluster_name, wckey_day_table); - if ((rc = _convert_id_usage_table(mysql_conn, table)) - != SLURM_SUCCESS) - return rc; - - snprintf(table, sizeof(table), "\"%s_%s\"", - cluster_name, wckey_hour_table); - if ((rc = _convert_id_usage_table(mysql_conn, table)) - != SLURM_SUCCESS) - return rc; - - snprintf(table, sizeof(table), "\"%s_%s\"", - cluster_name, wckey_month_table); - if ((rc = _convert_id_usage_table(mysql_conn, table)) - != SLURM_SUCCESS) - return rc; - - return rc; -} - static int _convert_job_table(mysql_conn_t *mysql_conn, char *cluster_name) { int rc = SLURM_SUCCESS; @@ -733,127 +70,16 @@ static int _convert_step_table(mysql_conn_t *mysql_conn, char *cluster_name) return rc; } -static int _convert_resv_table(mysql_conn_t *mysql_conn, char *cluster_name) -{ - int rc = SLURM_SUCCESS; - char *query = xstrdup_printf( - "update \"%s_%s\" set tres=concat('%d=', cpus);", - cluster_name, resv_table, TRES_CPU); - - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - if ((rc = mysql_db_query(mysql_conn, query)) != SLURM_SUCCESS) - error("Can't convert %s_%s info: %m", - cluster_name, resv_table); - xfree(query); - - return rc; -} - -static int _convert2_tables(mysql_conn_t *mysql_conn) -{ - char *query; - MYSQL_RES *result = NULL; - int i = 0, rc = SLURM_SUCCESS; - ListIterator itr; - char *cluster_name; - - /* no valid clusters, just return */ - if (!(cluster_name = list_peek(as_mysql_total_cluster_list))) - return SLURM_SUCCESS; - - /* See if the old table exist first. If already ran here - default_acct and default_wckey won't exist. - */ - query = xstrdup_printf("show columns from \"%s_%s\" where " - "Field='grp_cpus';", - cluster_name, assoc_table); - - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - if (!(result = mysql_db_query_ret(mysql_conn, query, 0))) { - xfree(query); - return SLURM_ERROR; - } - xfree(query); - i = mysql_num_rows(result); - mysql_free_result(result); - result = NULL; - - if (!i) - return 2; - - info("Updating database tables, this may take some time, " - "do not stop the process."); - - /* make it up to date */ - itr = list_iterator_create(as_mysql_total_cluster_list); - while ((cluster_name = list_next(itr))) { - query = xstrdup_printf("show columns from \"%s_%s\" where " - "Field='grp_cpus';", - cluster_name, assoc_table); - - debug4("(%s:%d) query\n%s", THIS_FILE, __LINE__, query); - if (!(result = mysql_db_query_ret(mysql_conn, query, 0))) { - xfree(query); - error("QUERY BAD: No count col name for cluster %s, " - "this should never happen", cluster_name); - continue; - } - xfree(query); - - if (!mysql_num_rows(result)) { - error("No grp_cpus col name in assoc_table " - "for cluster %s, this should never happen", - cluster_name); - mysql_free_result(result); - continue; - } - - /* make sure old tables are up to date */ - if ((rc = _update2_old_cluster_tables(mysql_conn, cluster_name) - != SLURM_SUCCESS)) { - mysql_free_result(result); - break; - } - - /* Convert the event table first */ - info("converting assoc table for %s", cluster_name); - if ((rc = _convert_assoc_table(mysql_conn, cluster_name) - != SLURM_SUCCESS)) { - mysql_free_result(result); - break; - } - mysql_free_result(result); - } - list_iterator_destroy(itr); - - /* make sure old non-cluster tables are up to date */ - if ((rc = _update2_old_tables(mysql_conn)) != SLURM_SUCCESS) - return rc; - - if ((rc = _convert_qos_table(mysql_conn)) != SLURM_SUCCESS) - return rc; - - return rc; -} - extern int as_mysql_convert_tables(mysql_conn_t *mysql_conn) { char *query; MYSQL_RES *result = NULL; - MYSQL_ROW row; int i = 0, rc = SLURM_SUCCESS; ListIterator itr; char *cluster_name; xassert(as_mysql_total_cluster_list); - if ((rc = _convert2_tables(mysql_conn)) == 2) { - debug2("It appears the table conversions have already " - "taken place, hooray!"); - return SLURM_SUCCESS; - } else if (rc != SLURM_SUCCESS) - return rc; - /* no valid clusters, just return */ if (!(cluster_name = list_peek(as_mysql_total_cluster_list))) return SLURM_SUCCESS; @@ -897,35 +123,18 @@ extern int as_mysql_convert_tables(mysql_conn_t *mysql_conn) } xfree(query); - if (!(row = mysql_fetch_row(result)) || !row[0] || !row[0][0]) { + if (!mysql_num_rows(result)) { error("No count col name for cluster %s, " "this should never happen", cluster_name); mysql_free_result(result); continue; } - - /* make sure old tables are up to date */ - if ((rc = _update_old_cluster_tables(mysql_conn, cluster_name, - row[0]) - != SLURM_SUCCESS)) { - mysql_free_result(result); - break; - } - - /* Convert the event table first */ - info("converting event table for %s", cluster_name); - if ((rc = _convert_event_table(mysql_conn, cluster_name, row[0]) - != SLURM_SUCCESS)) { - mysql_free_result(result); - break; - } mysql_free_result(result); - /* Now convert the cluster usage tables */ - info("converting cluster usage tables for %s", cluster_name); - if ((rc = _convert_cluster_usage_tables( - mysql_conn, cluster_name) != SLURM_SUCCESS)) + info("converting step table for %s", cluster_name); + if ((rc = _convert_step_table(mysql_conn, cluster_name) + != SLURM_SUCCESS)) break; /* Now convert the job tables */ @@ -933,18 +142,6 @@ extern int as_mysql_convert_tables(mysql_conn_t *mysql_conn) if ((rc = _convert_job_table(mysql_conn, cluster_name) != SLURM_SUCCESS)) break; - - /* Now convert the reservation tables */ - info("converting reservation table for %s", cluster_name); - if ((rc = _convert_resv_table(mysql_conn, cluster_name) - != SLURM_SUCCESS)) - break; - - /* Now convert the step tables */ - info("converting step table for %s", cluster_name); - if ((rc = _convert_step_table(mysql_conn, cluster_name) - != SLURM_SUCCESS)) - break; } list_iterator_destroy(itr); diff --git a/src/plugins/accounting_storage/mysql/as_mysql_convert.h b/src/plugins/accounting_storage/mysql/as_mysql_convert.h index 94275edbfc8a51dd0497fa48b5e5e7edbd6ac7b6..ccac6a33f0eb0d6a3ae2acd374f277fb3b1622a0 100644 --- a/src/plugins/accounting_storage/mysql/as_mysql_convert.h +++ b/src/plugins/accounting_storage/mysql/as_mysql_convert.h @@ -1,9 +1,9 @@ /*****************************************************************************\ * as_mysql_convert.h - functions dealing with converting from tables in - * slurm <= 14.11. + * slurm <= 17.02. ***************************************************************************** * - * Copyright (C) 2015 SchedMD LLC. + * Copyright (C) 2015-2017 SchedMD LLC. * Written by Danny Auble <da@schedmd.com> * * This file is part of SLURM, a resource management program. @@ -41,10 +41,6 @@ #include "accounting_storage_mysql.h" -extern int as_mysql_convert_event_table(mysql_conn_t *mysql_conn, char *table); - -extern int as_mysql_convert_usage_table(mysql_conn_t *mysql_conn, char *table); - extern int as_mysql_convert_tables(mysql_conn_t *mysql_conn); #endif