diff --git a/src/common/slurm_protocol_api.c b/src/common/slurm_protocol_api.c index 139b8e4445462058b045a5644eed5b843ddcf13b..f3edea12da942b98e02d9f48f0c8e6e2128a5fce 100644 --- a/src/common/slurm_protocol_api.c +++ b/src/common/slurm_protocol_api.c @@ -593,6 +593,24 @@ char *slurm_get_accounting_storage_loc(void) return storage_loc; } +/* slurm_get_accounting_storage_enforce + * returns whether or not to enforce associations + */ +int slurm_get_accounting_storage_enforce(void) +{ + int enforce = 0; + slurm_ctl_conf_t *conf; + + if(slurmdbd_conf) { + } else { + conf = slurm_conf_lock(); + enforce = conf->accounting_storage_enforce; + slurm_conf_unlock(); + } + return enforce; + +} + /* slurm_set_accounting_storage_loc * IN: char *loc (name of file or database) * RET 0 or error code diff --git a/src/common/slurm_protocol_api.h b/src/common/slurm_protocol_api.h index 8c2fbabefe3d476aff70c5a08f42087de5461515..f632101828ae4964f7d6adde928a2dd9ada78338 100644 --- a/src/common/slurm_protocol_api.h +++ b/src/common/slurm_protocol_api.h @@ -245,6 +245,11 @@ char *slurm_get_accounting_storage_host(void); */ char *slurm_get_accounting_storage_loc(void); +/* slurm_get_accounting_storage_enforce + * returns whether or not to enforce associations + */ +int slurm_get_accounting_storage_enforce(void); + /* slurm_set_accounting_storage_loc * IN: char *loc (name of file or database) * RET 0 or error code diff --git a/src/common/slurmdbd_defs.c b/src/common/slurmdbd_defs.c index 25818bcf52f3ad330d0d289162f6d68a700ec18c..c12cbb8f53ab42b51822d31287138326bcb6fa21 100644 --- a/src/common/slurmdbd_defs.c +++ b/src/common/slurmdbd_defs.c @@ -441,9 +441,10 @@ extern Buf pack_slurmdbd_msg(slurmdbd_msg_t *req) req->data, buffer); break; default: - error("slurmdbd: Invalid message type pack %u(%s)", + error("slurmdbd: Invalid message type pack %u(%s:%u)", req->msg_type, - slurmdbd_msg_type_2_str(req->msg_type)); + slurmdbd_msg_type_2_str(req->msg_type, 1), + req->msg_type); free_buf(buffer); return NULL; } @@ -571,7 +572,8 @@ extern int unpack_slurmdbd_msg(slurmdbd_msg_t *resp, Buf buffer) default: error("slurmdbd: Invalid message type unpack %u(%s)", resp->msg_type, - slurmdbd_msg_type_2_str(resp->msg_type)); + slurmdbd_msg_type_2_str(resp->msg_type, 1), + resp->msg_type); return SLURM_ERROR; } return rc; @@ -693,161 +695,314 @@ extern slurmdbd_msg_type_t str_2_slurmdbd_msg_type(char *msg_type) return NO_VAL; } -extern char *slurmdbd_msg_type_2_str(slurmdbd_msg_type_t msg_type) +extern char *slurmdbd_msg_type_2_str(slurmdbd_msg_type_t msg_type, int get_enum) { switch(msg_type) { case DBD_INIT: - return "Init"; + if(get_enum) { + return "DBD_INIT"; + } else + return "Init"; break; case DBD_FINI: - return "Fini"; + if(get_enum) { + return "DBD_FINI"; + } else + return "Fini"; break; case DBD_ADD_ACCOUNTS: - return "Add Accounts"; + if(get_enum) { + return "DBD_ADD_ACCOUNTS"; + } else + return "Add Accounts"; break; case DBD_ADD_ACCOUNT_COORDS: - return "Add Account Coord"; + if(get_enum) { + return "DBD_ADD_ACCOUNT_COORDS"; + } else + return "Add Account Coord"; break; case DBD_ADD_ASSOCS: - return "Add Associations"; + if(get_enum) { + return "DBD_ADD_ASSOCS"; + } else + return "Add Associations"; break; case DBD_ADD_CLUSTERS: - return "Add Clusters"; + if(get_enum) { + return "DBD_ADD_CLUSTERS"; + } else + return "Add Clusters"; break; case DBD_ADD_USERS: - return "Add Users"; + if(get_enum) { + return "DBD_ADD_USERS"; + } else + return "Add Users"; break; case DBD_CLUSTER_PROCS: - return "Cluster Processors"; + if(get_enum) { + return "DBD_CLUSTER_PROCS"; + } else + return "Cluster Processors"; break; case DBD_FLUSH_JOBS: - return "Flush Jobs"; + if(get_enum) { + return "DBD_FLUSH_JOBS"; + } else + return "Flush Jobs"; break; case DBD_GET_ACCOUNTS: - return "Get Accounts"; + if(get_enum) { + return "DBD_GET_ACCOUNTS"; + } else + return "Get Accounts"; break; case DBD_GET_ASSOCS: - return "Get Associations"; + if(get_enum) { + return "DBD_GET_ASSOCS"; + } else + return "Get Associations"; break; case DBD_GET_ASSOC_USAGE: - return "Get Association Usage"; + if(get_enum) { + return "DBD_GET_ASSOC_USAGE"; + } else + return "Get Association Usage"; break; case DBD_GET_CLUSTERS: - return "Get Clusters"; + if(get_enum) { + return "DBD_GET_CLUSTERS"; + } else + return "Get Clusters"; break; case DBD_GET_CLUSTER_USAGE: - return "Get Cluster Usage"; + if(get_enum) { + return "DBD_GET_CLUSTER_USAGE"; + } else + return "Get Cluster Usage"; break; case DBD_GET_JOBS: - return "Get Jobs"; + if(get_enum) { + return "DBD_GET_JOBS"; + } else + return "Get Jobs"; break; case DBD_GET_USERS: - return "Get Users"; + if(get_enum) { + return "DBD_GET_USERS"; + } else + return "Get Users"; break; case DBD_GOT_ACCOUNTS: - return "Got Accounts"; + if(get_enum) { + return "DBD_GOT_ACCOUNTS"; + } else + return "Got Accounts"; break; case DBD_GOT_ASSOCS: - return "Got Associations"; + if(get_enum) { + return "DBD_GOT_ASSOCS"; + } else + return "Got Associations"; break; case DBD_GOT_ASSOC_USAGE: - return "Got Association Usage"; + if(get_enum) { + return "DBD_GOT_ASSOC_USAGE"; + } else + return "Got Association Usage"; break; case DBD_GOT_CLUSTERS: - return "Got Clusters"; + if(get_enum) { + return "DBD_GOT_CLUSTERS"; + } else + return "Got Clusters"; break; case DBD_GOT_CLUSTER_USAGE: - return "Got Cluster Usage"; + if(get_enum) { + return "DBD_GOT_CLUSTER_USAGE"; + } else + return "Got Cluster Usage"; break; case DBD_GOT_JOBS: - return "Got Jobs"; + if(get_enum) { + return "DBD_GOT_JOBS"; + } else + return "Got Jobs"; break; case DBD_GOT_LIST: - return "Got List"; + if(get_enum) { + return "DBD_GOT_LIST"; + } else + return "Got List"; break; case DBD_GOT_USERS: - return "Got Users"; + if(get_enum) { + return "DBD_GOT_USERS"; + } else + return "Got Users"; break; case DBD_JOB_COMPLETE: - return "Job Complete"; + if(get_enum) { + return "DBD_JOB_COMPLETE"; + } else + return "Job Complete"; break; case DBD_JOB_START: - return "Job Start"; + if(get_enum) { + return "DBD_JOB_START"; + } else + return "Job Start"; break; case DBD_JOB_START_RC: - return "Job Start RC"; + if(get_enum) { + return "DBD_JOB_START_RC"; + } else + return "Job Start RC"; break; case DBD_JOB_SUSPEND: - return "Job Suspend"; + if(get_enum) { + return "DBD_JOB_SUSPEND"; + } else + return "Job Suspend"; break; case DBD_MODIFY_ACCOUNTS: - return "Modify Accounts"; + if(get_enum) { + return "DBD_MODIFY_ACCOUNTS"; + } else + return "Modify Accounts"; break; case DBD_MODIFY_ASSOCS: - return "Modify Associations"; + if(get_enum) { + return "DBD_MODIFY_ASSOCS"; + } else + return "Modify Associations"; break; case DBD_MODIFY_CLUSTERS: - return "Modify Clusters"; + if(get_enum) { + return "DBD_MODIFY_CLUSTERS"; + } else + return "Modify Clusters"; break; case DBD_MODIFY_USERS: - return "Modify Users"; + if(get_enum) { + return "DBD_MODIFY_USERS"; + } else + return "Modify Users"; break; case DBD_NODE_STATE: - return "Node State"; + if(get_enum) { + return "DBD_NODE_STATE"; + } else + return "Node State"; break; case DBD_RC: - return "RC"; + if(get_enum) { + return "DBD_RC"; + } else + return "Return Code"; break; case DBD_REGISTER_CTLD: - return "Register Cluster"; + if(get_enum) { + return "DBD_REGISTER_CTLD"; + } else + return "Register Cluster"; break; case DBD_REMOVE_ACCOUNTS: - return "Remove Accounts"; + if(get_enum) { + return "DBD_REMOVE_ACCOUNTS"; + } else + return "Remove Accounts"; break; case DBD_REMOVE_ACCOUNT_COORDS: - return "Remove Account Coords"; + if(get_enum) { + return "DBD_REMOVE_ACCOUNT_COORDS"; + } else + return "Remove Account Coords"; break; case DBD_REMOVE_ASSOCS: - return "Remove Associations"; + if(get_enum) { + return "DBD_REMOVE_ASSOCS"; + } else + return "Remove Associations"; break; case DBD_REMOVE_CLUSTERS: - return "Remove Clusters"; + if(get_enum) { + return "DBD_REMOVE_CLUSTERS"; + } else + return "Remove Clusters"; break; case DBD_REMOVE_USERS: - return "Remove Users"; + if(get_enum) { + return "DBD_REMOVE_USERS"; + } else + return "Remove Users"; break; case DBD_ROLL_USAGE: - return "Roll Usage"; + if(get_enum) { + return "DBD_ROLL_USAGE"; + } else + return "Roll Usage"; break; case DBD_STEP_COMPLETE: - return "Step Complete"; + if(get_enum) { + return "DBD_STEP_COMPLETE"; + } else + return "Step Complete"; break; case DBD_STEP_START: - return "Step Start"; + if(get_enum) { + return "DBD_STEP_START"; + } else + return "Step Start"; break; case DBD_UPDATE_SHARES_USED: - return "Update Shares Used"; + if(get_enum) { + return "DBD_UPDATE_SHARES_USED"; + } else + return "Update Shares Used"; break; case DBD_GET_JOBS_COND: - return "Get Jobs Conditional"; + if(get_enum) { + return "DBD_GET_JOBS_COND"; + } else + return "Get Jobs Conditional"; break; case DBD_GET_TXN: - return "Get Transations"; + if(get_enum) { + return "DBD_GET_TXN"; + } else + return "Get Transations"; break; case DBD_GOT_TXN: - return "Got Transations"; + if(get_enum) { + return "DBD_GOT_TXN"; + } else + return "Got Transations"; break; case DBD_ADD_QOS: - return "Add QOS"; + if(get_enum) { + return "DBD_ADD_QOS"; + } else + return "Add QOS"; break; case DBD_GET_QOS: - return "Get QOS"; + if(get_enum) { + return "DBD_GET_QOS"; + } else + return "Get QOS"; break; case DBD_GOT_QOS: - return "Got QOS"; + if(get_enum) { + return "DBD_GOT_QOS"; + } else + return "Got QOS"; break; case DBD_REMOVE_QOS: - return "Remove QOS"; + if(get_enum) { + return "DBD_REMOVE_QOS"; + } else + return "Remove QOS"; break; default: return "Unknown"; @@ -985,9 +1140,20 @@ static int _get_return_code(void) case DBD_RC: if (slurmdbd_unpack_rc_msg(&msg, buffer) == SLURM_SUCCESS) { rc = msg->return_code; - if (rc != SLURM_SUCCESS) - error("slurmdbd: DBD_RC is %d from %u: %s", - rc, msg->sent_type, msg->comment); + if (rc != SLURM_SUCCESS) { + error("slurmdbd: DBD_RC is %d from %s(%u): %s", + rc, + slurmdbd_msg_type_2_str(msg->sent_type, + 1), + msg->sent_type, + msg->comment); + if(msg->sent_type == DBD_REGISTER_CTLD && + slurm_get_accounting_storage_enforce()) + fatal("You need to add this cluster " + "to accounting if you want to " + "enforce associations, or no " + "jobs will ever run."); + } slurmdbd_free_rc_msg(msg); } else error("slurmdbd: unpack message error"); diff --git a/src/common/slurmdbd_defs.h b/src/common/slurmdbd_defs.h index 8fa02c7841b285491c6866e5973932325d05b247..4ddc042644ab138aaa4d1afabbd36661c655c10b 100644 --- a/src/common/slurmdbd_defs.h +++ b/src/common/slurmdbd_defs.h @@ -355,7 +355,8 @@ extern Buf pack_slurmdbd_msg(slurmdbd_msg_t *req); extern int unpack_slurmdbd_msg(slurmdbd_msg_t *resp, Buf buffer); extern slurmdbd_msg_type_t str_2_slurmdbd_msg_type(char *msg_type); -extern char *slurmdbd_msg_type_2_str(slurmdbd_msg_type_t msg_type); +extern char *slurmdbd_msg_type_2_str(slurmdbd_msg_type_t msg_type, + int get_enum); /*****************************************************************************\ * Free various SlurmDBD message structures diff --git a/src/sacctmgr/txn_functions.c b/src/sacctmgr/txn_functions.c index b98286b01d77331c41951c3e44677b2d7c9a6e42..17ea28bd8a321df15688b88e5ffae71060e14611 100644 --- a/src/sacctmgr/txn_functions.c +++ b/src/sacctmgr/txn_functions.c @@ -204,7 +204,8 @@ extern int sacctmgr_list_txn(int argc, char *argv[]) case PRINT_ACTION: field->print_routine( field, - slurmdbd_msg_type_2_str(txn->action)); + slurmdbd_msg_type_2_str(txn->action, + 0)); break; case PRINT_ACTOR: field->print_routine(field, diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c index b6903a886f404426a9f774435b89e87b2302f09c..140d8af2cb497192a82afa25a6fb840892758852 100644 --- a/src/slurmctld/controller.c +++ b/src/slurmctld/controller.c @@ -419,10 +419,11 @@ int main(int argc, char *argv[]) &thread_attr, _slurmctld_rpc_mgr, NULL)) fatal("pthread_create error %m"); slurm_attr_destroy(&thread_attr); - clusteracct_storage_g_register_ctld( - slurmctld_conf.cluster_name, - slurmctld_conf.slurmctld_port); + clusteracct_storage_g_register_ctld( + slurmctld_conf.cluster_name, + slurmctld_conf.slurmctld_port); + /* * create attached thread for signal handling */