blob: 862ad5208cb2dcb899dae44c68ae27921c56c55c [file] [log] [blame]
#include <errno.h>
#include <getopt.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "backfill.h"
#include "slurm/slurm.h"
#include "slurm/slurm_errno.h"
#include "src/common/hostlist.h"
#include "src/common/job_features.h"
#include "src/common/log.h"
#include "src/common/macros.h"
#include "src/common/read_config.h"
#include "src/common/run_in_daemon.h"
#include "src/common/timers.h"
#include "src/common/xmalloc.h"
#include "src/common/xstring.h"
#include "src/interfaces/burst_buffer.h"
#include "src/interfaces/node_features.h"
#include "src/interfaces/switch.h"
#include "src/interfaces/topology.h"
#include "src/slurmctld/locks.h"
#include "src/slurmctld/slurmctld.h"
uint32_t slurm_daemon = IS_SLURMCTLD;
bool avail_front_end(job_record_t *job_ptr)
{
return true;
}
void job_set_alloc_tres(job_record_t *job_ptr, bool assoc_mgr_locked)
{
uint32_t alloc_nodes = 0;
xfree(job_ptr->tres_alloc_str);
xfree(job_ptr->tres_alloc_cnt);
xfree(job_ptr->tres_fmt_alloc_str);
job_ptr->tres_alloc_cnt = xcalloc(slurmctld_tres_cnt, sizeof(uint64_t));
job_ptr->tres_alloc_cnt[TRES_ARRAY_CPU] =
(uint64_t) job_ptr->total_cpus;
alloc_nodes = job_ptr->node_cnt;
job_ptr->tres_alloc_cnt[TRES_ARRAY_NODE] = (uint64_t) alloc_nodes;
job_ptr->tres_alloc_cnt[TRES_ARRAY_MEM] =
job_ptr->details->pn_min_memory;
job_ptr->tres_alloc_cnt[TRES_ARRAY_ENERGY] = NO_VAL64;
}
int job_test_resv(job_record_t *job_ptr, time_t *when, bool move_time,
bitstr_t **node_bitmap, resv_exc_t *resv_exc_ptr,
bool *resv_overlap, bool reboot)
{
debug("%s %pJ", __func__, job_ptr);
*node_bitmap = node_conf_get_active_bitmap();
return SLURM_SUCCESS;
}
int job_test_lic_resv(job_record_t *job_ptr, licenses_id_t id, time_t when,
bool reboot)
{
debug("%s %pJ", __func__, job_ptr);
return SLURM_SUCCESS;
}
void resv_replace_update(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
}
void job_time_adj_resv(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
}
bool job_independent(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
return true;
}
uint64_t job_get_tres_mem(struct job_resources *job_res, uint64_t pn_min_memory,
uint32_t cpu_cnt, uint32_t node_cnt,
part_record_t *part_ptr, list_t *gres_list,
bool user_set_mem, uint16_t min_sockets_per_node,
uint32_t num_tasks)
{
uint64_t mem_total = 0;
return mem_total;
}
uint16_t job_get_sockets_per_node(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
return 1;
}
void job_state_set(job_record_t *job_ptr, uint32_t state)
{
debug("%s %pJ %u", __func__, job_ptr, state);
job_ptr->job_state = state;
}
void job_state_unset_flag(job_record_t *job_ptr, uint32_t flag)
{
uint32_t job_state;
job_state = job_ptr->job_state & ~flag;
job_ptr->job_state = job_state;
}
void launch_job(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
}
void gres_stepmgr_set_job_tres_cnt(list_t *gres_list, uint32_t node_cnt,
uint64_t *tres_cnt, bool locked)
{
;
}
extern void gres_stepmgr_set_node_tres_cnt(list_t *gres_list,
uint64_t *tres_cnt, bool locked)
{
;
}
void gres_stepmgr_job_clear_alloc(list_t *job_gres_list)
{
;
}
int gres_stepmgr_job_alloc(list_t *job_gres_list, list_t **job_gres_list_alloc,
list_t *node_gres_list, int node_cnt, int node_index,
int node_offset, uint32_t job_id, char *node_name,
bitstr_t *core_bitmap, bool new_alloc)
{
debug("%s job_id:%u", __func__, job_id);
return SLURM_SUCCESS;
}
int gres_stepmgr_job_alloc_whole_node(list_t *job_gres_list,
list_t **job_gres_list_alloc,
list_t *node_gres_list, int node_cnt,
int node_index, int node_offset,
uint32_t job_id, char *node_name,
bitstr_t *core_bitmap, bool new_alloc)
{
debug("%s job_id:%u", __func__, job_id);
return SLURM_SUCCESS;
}
void gres_stepmgr_job_build_details(list_t *job_gres_list, char *nodes,
uint32_t *gres_detail_cnt,
char ***gres_detail_str,
char **total_gres_str)
{
;
}
int gres_stepmgr_job_dealloc(list_t *job_gres_list, list_t *node_gres_list,
int node_offset, uint32_t job_id, char *node_name,
bool old_job, bool resize)
{
debug("%s job_id:%u", __func__, job_id);
return SLURM_SUCCESS;
}
static int _list_find_job_id(void *job_entry, void *key)
{
job_record_t *job_ptr = (job_record_t *) job_entry;
uint32_t *job_id_ptr = (uint32_t *) key;
if (job_ptr->job_id == *job_id_ptr)
return 1;
return 0;
}
job_record_t *find_job_record(uint32_t job_id)
{
return list_find_first(job_list, _list_find_job_id, &job_id);
}
int fed_mgr_job_unlock(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
return SLURM_SUCCESS;
}
int fed_mgr_job_lock(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
return SLURM_SUCCESS;
}
int fed_mgr_job_start(job_record_t *job_ptr, time_t start_time)
{
debug("%s %pJ", __func__, job_ptr);
return SLURM_SUCCESS;
}
int fed_mgr_job_end(job_record_t *job_ptr, time_t start_time)
{
debug("%s %pJ", __func__, job_ptr);
return SLURM_SUCCESS;
}
bool fed_mgr_sibs_synced(void)
{
return true;
}
void srun_allocate(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
}
void acct_policy_add_job_submit(job_record_t *job_ptr, bool assoc_locked)
{
debug("%s %pJ", __func__, job_ptr);
}
void acct_policy_job_fini(job_record_t *job_ptr, bool assoc_locked)
{
debug("%s %pJ", __func__, job_ptr);
}
void acct_policy_job_begin(job_record_t *job_ptr, bool assoc_locked)
{
debug("%s %pJ", __func__, job_ptr);
}
bool acct_policy_job_runnable_post_select(job_record_t *job_ptr,
uint64_t *tres_req_cnt,
bool assoc_mgr_locked)
{
debug("%s %pJ", __func__, job_ptr);
return true;
}
bool acct_policy_job_runnable_pre_select(job_record_t *job_ptr,
bool assoc_mgr_locked)
{
debug("%s %pJ", __func__, job_ptr);
return true;
}
int acct_policy_handle_accrue_time(job_record_t *job_ptr, bool assoc_mgr_locked)
{
debug("%s %pJ", __func__, job_ptr);
return SLURM_SUCCESS;
}
void acct_policy_alter_job(job_record_t *job_ptr, uint32_t new_time_limit)
{
debug("%s %pJ", __func__, job_ptr);
}
uint32_t acct_policy_get_prio_thresh(job_record_t *job_ptr,
bool assoc_mgr_locked)
{
debug("%s %pJ", __func__, job_ptr);
return 0;
}
uint32_t acct_policy_get_max_nodes(job_record_t *job_ptr, uint32_t *wait_reason)
{
debug("%s %pJ", __func__, job_ptr);
return (uint32_t) (INFINITE64);
}
void job_completion_logger(job_record_t *job_ptr, bool requeue)
{
debug("%s %pJ", __func__, job_ptr);
}
extern void build_cg_bitmap(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
}
void reservation_delete_resv_exc_parts(resv_exc_t *resv_exc)
{
debug("%s", __func__);
}
list_t *slurm_find_preemptable_jobs(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
return NULL;
}
uint16_t slurm_job_preempt_mode(job_record_t *job_ptr)
{
return PREEMPT_MODE_OFF;
}
bool slurm_preemption_enabled(void)
{
return false;
}
int bb_g_load_state(bool init_config)
{
return SLURM_SUCCESS;
}
int bb_g_job_test_stage_in(job_record_t *job_ptr, bool test_only)
{
return 1;
}
int bb_g_job_begin(job_record_t *job_ptr)
{
return SLURM_SUCCESS;
}
int validate_group(part_record_t *part_ptr, uid_t run_uid)
{
return 1;
}
void set_job_failed_assoc_qos_ptr(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
return;
}
int part_policy_valid_qos(part_record_t *part_ptr, slurmdb_qos_rec_t *qos_ptr,
uid_t submit_uid, job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
return SLURM_SUCCESS;
}
int part_policy_valid_acct(part_record_t *part_ptr, char *acct,
job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
return SLURM_SUCCESS;
}
int list_find_part(void *x, void *key)
{
part_record_t *part_ptr = (part_record_t *) x;
char *part = (char *) key;
return (!xstrcmp(part_ptr->name, part));
}
part_record_t *find_part_record(char *name)
{
if (!part_list) {
error("part_list is NULL");
return NULL;
}
return list_find_first(part_list, &list_find_part, name);
}
int job_limits_check(job_record_t **job_pptr, bool check_min_time)
{
debug("%s %pJ", __func__, *job_pptr);
return WAIT_NO_REASON;
}
void job_end_time_reset(job_record_t *job_ptr)
{
if (job_ptr->time_limit == INFINITE) {
job_ptr->end_time = job_ptr->start_time +
(365 * 24 * 60 * 60); /* secs in year */
} else {
job_ptr->end_time = job_ptr->start_time +
(job_ptr->time_limit * 60); /* secs */
}
job_ptr->end_time_exp = job_ptr->end_time;
}
void job_resv_append_magnetic(job_queue_req_t *job_queue_req)
{
;
}
void job_resv_clear_magnetic_flag(job_record_t *job_ptr)
{
;
}
void job_array_pre_sched(job_record_t *job_ptr)
{
return;
}
void job_array_start(job_record_t *job_ptr)
{
return;
}
job_record_t *job_array_post_sched(job_record_t *job_ptr, bool list_add)
{
debug("%s %pJ", __func__, job_ptr);
return job_ptr;
}
uint16_t job_mgr_determine_cpus_per_core(job_details_t *details, int node_inx)
{
return 1;
}
void prolog_slurmctld(job_record_t *job_ptr)
{
debug("%s %pJ", __func__, job_ptr);
}
bool power_save_test(void)
{
return false;
}
void make_node_alloc(node_record_t *node_ptr, job_record_t *job_ptr)
{
uint32_t node_flags;
(node_ptr->run_job_cnt)++;
bit_clear(idle_node_bitmap, node_ptr->index);
node_flags = node_ptr->node_state & NODE_STATE_FLAGS;
node_ptr->node_state = NODE_STATE_ALLOCATED | node_flags;
}
void node_mgr_make_node_blocked(job_record_t *job_ptr, bool set)
{
return;
}
void gs_job_start(job_record_t *job_ptr)
{
return;
}
void lock_slurmctld(slurmctld_lock_t lock_levels)
{
return;
}
void unlock_slurmctld(slurmctld_lock_t lock_levels)
{
return;
}