From d8feb129d7201e4e15db91e79bdfe61a26542ef4 Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Fri, 29 Feb 2008 18:22:41 +0000 Subject: [PATCH] gang3.patch from Chris Holmes, hp --- doc/html/schedplugins.shtml | 8 +++++++ src/plugins/sched/backfill/backfill_wrapper.c | 9 +++++++ src/plugins/sched/builtin/builtin_wrapper.c | 9 +++++++ src/plugins/sched/gang/gang.c | 24 +++++++++++++++++++ src/plugins/sched/gang/sched_gang.c | 13 +++++++++- src/plugins/sched/hold/hold_wrapper.c | 9 +++++++ src/plugins/sched/wiki/sched_wiki.c | 8 +++++++ src/plugins/sched/wiki2/sched_wiki.c | 8 +++++++ src/slurmctld/node_scheduler.c | 2 ++ src/slurmctld/sched_plugin.c | 14 +++++++++++ src/slurmctld/sched_plugin.h | 5 ++++ 11 files changed, 108 insertions(+), 1 deletion(-) diff --git a/doc/html/schedplugins.shtml b/doc/html/schedplugins.shtml index 4de969fca64..11272733826 100644 --- a/doc/html/schedplugins.shtml +++ b/doc/html/schedplugins.shtml @@ -100,6 +100,14 @@ get partition, allocated resources, time limit, etc.</p> the plugin should return SLURM_ERROR and set the errno to an appropriate value to indicate the reason for failure.</p> +<p class="commandline">int slurm_sched_plugin_freealloc (void);</p> +<p style="margin-left:.2in"><b>Description</b>: Note the successful release of resources for a job.</p> +<p style="margin-left:.2in"><b>Arguments</b>: Pointer to the slurmctld job structure. This can be used to +get partition, allocated resources, time limit, etc.</p> +<p style="margin-left:.2in"><b>Returns</b>: SLURM_SUCCESS if successful. On failure, +the plugin should return SLURM_ERROR and set the errno to an appropriate value +to indicate the reason for failure.</p> + <p class="commandline">uint32_t slurm_sched_plugin_initial_priority ( uint32_t last_prio, struct job_record *job_ptr);</p> <p style="margin-left:.2in"><b>Description</b>: Establish the initial priority of a new job.</p> diff --git a/src/plugins/sched/backfill/backfill_wrapper.c b/src/plugins/sched/backfill/backfill_wrapper.c index 9f211250393..0d235cd6745 100644 --- a/src/plugins/sched/backfill/backfill_wrapper.c +++ b/src/plugins/sched/backfill/backfill_wrapper.c @@ -146,6 +146,15 @@ slurm_sched_plugin_newalloc( struct job_record *job_ptr ) return SLURM_SUCCESS; } +/***************************************************************************/ +/* TAG( slurm_sched_plugin_freealloc ) */ +/***************************************************************************/ +int +slurm_sched_plugin_freealloc( struct job_record *job_ptr ) +{ + return SLURM_SUCCESS; +} + /**************************************************************************/ /* TAG( slurm_sched_plugin_initial_priority ) */ diff --git a/src/plugins/sched/builtin/builtin_wrapper.c b/src/plugins/sched/builtin/builtin_wrapper.c index c81c12e34c1..fb66522cf02 100644 --- a/src/plugins/sched/builtin/builtin_wrapper.c +++ b/src/plugins/sched/builtin/builtin_wrapper.c @@ -92,6 +92,15 @@ slurm_sched_plugin_newalloc( struct job_record *job_ptr ) return SLURM_SUCCESS; } +/***************************************************************************/ +/* TAG( slurm_sched_plugin_freealloc ) */ +/***************************************************************************/ +int +slurm_sched_plugin_freealloc( struct job_record *job_ptr ) +{ + return SLURM_SUCCESS; +} + /**************************************************************************/ /* TAG( slurm_sched_plugin_initial_priority ) */ diff --git a/src/plugins/sched/gang/gang.c b/src/plugins/sched/gang/gang.c index a97be206c94..b54b3f9bcb0 100644 --- a/src/plugins/sched/gang/gang.c +++ b/src/plugins/sched/gang/gang.c @@ -966,6 +966,30 @@ gs_job_scan(void) return SLURM_SUCCESS; } +extern int +gs_job_fini(struct job_record *job_ptr) +{ + int i; + struct gs_part *p_ptr; + + debug3("sched/gang: entering gs_job_fini"); + pthread_mutex_lock(&data_mutex); + p_ptr = _find_gs_part(job_ptr->partition); + if (!p_ptr) { + pthread_mutex_unlock(&data_mutex); + debug3("sched/gang: leaving gs_job_fini"); + return SLURM_SUCCESS; + } + + /*remove job from the partition */ + _remove_job_from_part(job_ptr->job_id, p_ptr); + _update_active_row(p_ptr); + pthread_mutex_unlock(&data_mutex); + debug3("sched/gang: leaving gs_job_fini"); + + return SLURM_SUCCESS; +} + /* rebuild from scratch */ /* A reconfigure can affect this plugin in these ways: * - partitions can be added or removed diff --git a/src/plugins/sched/gang/sched_gang.c b/src/plugins/sched/gang/sched_gang.c index 6a43d503881..620ebfc8cb6 100644 --- a/src/plugins/sched/gang/sched_gang.c +++ b/src/plugins/sched/gang/sched_gang.c @@ -39,7 +39,7 @@ const char plugin_name[] = "Gang Scheduler plugin"; const char plugin_type[] = "sched/gang"; -const uint32_t plugin_version = 100; +const uint32_t plugin_version = 101; /* A plugin-global errno. */ static int plugin_errno = SLURM_SUCCESS; @@ -90,6 +90,17 @@ extern int slurm_sched_plugin_newalloc( struct job_record *job_ptr ) return gs_job_start(job_ptr); } +/***************************************************************************/ +/* TAG( slurm_sched_plugin_freealloc ) */ +/***************************************************************************/ +extern int slurm_sched_plugin_freealloc( struct job_record *job_ptr ) +{ + if (!job_ptr) + return SLURM_ERROR; + debug3("sched/gang: slurm_sched_freealloc called"); + return gs_job_fini(job_ptr); +} + /**************************************************************************/ /* TAG( slurm_sched_plugin_initial_priority ) */ diff --git a/src/plugins/sched/hold/hold_wrapper.c b/src/plugins/sched/hold/hold_wrapper.c index cc06452f56c..aa87fe81ea6 100644 --- a/src/plugins/sched/hold/hold_wrapper.c +++ b/src/plugins/sched/hold/hold_wrapper.c @@ -97,6 +97,15 @@ slurm_sched_plugin_newalloc( struct job_record *job_ptr ) return SLURM_SUCCESS; } +/***************************************************************************/ +/* TAG( slurm_sched_plugin_freealloc ) */ +/***************************************************************************/ +int +slurm_sched_plugin_freealloc( struct job_record *job_ptr ) +{ + return SLURM_SUCCESS; +} + /**************************************************************************/ /* TAG( slurm_sched_plugin_initial_priority ) */ diff --git a/src/plugins/sched/wiki/sched_wiki.c b/src/plugins/sched/wiki/sched_wiki.c index 3bd61ab4d39..881c7b5fbfc 100644 --- a/src/plugins/sched/wiki/sched_wiki.c +++ b/src/plugins/sched/wiki/sched_wiki.c @@ -84,6 +84,14 @@ extern int slurm_sched_plugin_newalloc( struct job_record *job_ptr ) return SLURM_SUCCESS; } +/***************************************************************************/ +/* TAG( slurm_sched_plugin_freealloc ) */ +/***************************************************************************/ +extern int slurm_sched_plugin_freealloc( struct job_record *job_ptr ) +{ + return SLURM_SUCCESS; +} + /**************************************************************************/ /* TAG( slurm_sched_plugin_initial_priority ) */ diff --git a/src/plugins/sched/wiki2/sched_wiki.c b/src/plugins/sched/wiki2/sched_wiki.c index 2d8aa93d57b..cbafc576704 100644 --- a/src/plugins/sched/wiki2/sched_wiki.c +++ b/src/plugins/sched/wiki2/sched_wiki.c @@ -83,6 +83,14 @@ extern int slurm_sched_plugin_newalloc( struct job_record *job_ptr ) return SLURM_SUCCESS; } +/***************************************************************************/ +/* TAG( slurm_sched_plugin_freealloc ) */ +/***************************************************************************/ +extern int slurm_sched_plugin_freealloc( struct job_record *job_ptr ) +{ + return SLURM_SUCCESS; +} + /**************************************************************************/ /* TAG( slurm_sched_plugin_initial_priority ) */ diff --git a/src/slurmctld/node_scheduler.c b/src/slurmctld/node_scheduler.c index f0904115cac..f2489ee3d31 100644 --- a/src/slurmctld/node_scheduler.c +++ b/src/slurmctld/node_scheduler.c @@ -152,6 +152,8 @@ extern void deallocate_nodes(struct job_record *job_ptr, bool timeout, xassert(job_ptr); xassert(job_ptr->details); + if (slurm_sched_freealloc(job_ptr) != SLURM_SUCCESS) + error("slurm_sched_freealloc(%u): %m", job_ptr->job_id); if (select_g_job_fini(job_ptr) != SLURM_SUCCESS) error("select_g_job_fini(%u): %m", job_ptr->job_id); diff --git a/src/slurmctld/sched_plugin.c b/src/slurmctld/sched_plugin.c index 58448d47bcd..6b2f9f3fe67 100644 --- a/src/slurmctld/sched_plugin.c +++ b/src/slurmctld/sched_plugin.c @@ -53,6 +53,7 @@ typedef struct slurm_sched_ops { int (*schedule) ( void ); int (*newalloc) ( struct job_record * ); + int (*freealloc) ( struct job_record * ); uint32_t (*initial_priority) ( uint32_t, struct job_record * ); void (*job_is_pending) ( void ); @@ -93,6 +94,7 @@ slurm_sched_get_ops( slurm_sched_context_t *c ) static const char *syms[] = { "slurm_sched_plugin_schedule", "slurm_sched_plugin_newalloc", + "slurm_sched_plugin_freealloc", "slurm_sched_plugin_initial_priority", "slurm_sched_plugin_job_is_pending", "slurm_sched_plugin_reconfig", @@ -279,6 +281,18 @@ slurm_sched_newalloc( struct job_record *job_ptr ) return (*(g_sched_context->ops.newalloc))( job_ptr ); } +/* *********************************************************************** */ +/* TAG( slurm_sched_freealloc ) */ +/* *********************************************************************** */ +int +slurm_sched_freealloc( struct job_record *job_ptr ) +{ + if ( slurm_sched_init() < 0 ) + return SLURM_ERROR; + + return (*(g_sched_context->ops.freealloc))( job_ptr ); +} + /* *********************************************************************** */ /* TAG( slurm_sched_initital_priority ) */ diff --git a/src/slurmctld/sched_plugin.h b/src/slurmctld/sched_plugin.h index 7ff27f020c3..d5e6adf7ff8 100644 --- a/src/slurmctld/sched_plugin.h +++ b/src/slurmctld/sched_plugin.h @@ -76,6 +76,11 @@ int slurm_sched_schedule( void ); */ int slurm_sched_newalloc( struct job_record *job_ptr ); +/* + * Note the successful release of resources to a job. + */ +int slurm_sched_freealloc( struct job_record *job_ptr ); + /* * Supply the initial SLURM priority for a newly-submitted job. */ -- GitLab