From e7c17c70a899fb98c9054272ee078f67b2f7e4fc Mon Sep 17 00:00:00 2001
From: Morris Jette <jette@schedmd.com>
Date: Mon, 21 May 2012 13:29:43 -0700
Subject: [PATCH] Backport some performance enhancement work from serial branch

This is a backport of plugin initialization logic made in the
select/serial branch that we want to have in SLURM v2.4 and not
only in v2.5. Note the plugin logic in v2.5 is different and
this changes to not apply
---
 src/common/gres.c                     | 3 +++
 src/common/mpi.c                      | 3 +++
 src/common/node_select.c              | 3 +++
 src/common/slurm_accounting_storage.c | 3 +++
 src/common/slurm_auth.c               | 3 +++
 src/common/slurm_jobacct_gather.c     | 3 +++
 src/common/slurm_priority.c           | 3 +++
 src/common/slurm_topology.c           | 3 +++
 src/common/switch.c                   | 3 +++
 src/slurmctld/job_submit.c            | 3 +++
 src/slurmctld/sched_plugin.c          | 3 +++
 11 files changed, 33 insertions(+)

diff --git a/src/common/gres.c b/src/common/gres.c
index 798ef8c91c6..b47a3bc67a5 100644
--- a/src/common/gres.c
+++ b/src/common/gres.c
@@ -338,6 +338,9 @@ extern int gres_plugin_init(void)
 	int i, j, rc = SLURM_SUCCESS;
 	char *last = NULL, *names, *one_name, *full_name;
 
+	if (gres_context_cnt >= 0)
+		return rc;
+
 	slurm_mutex_lock(&gres_context_lock);
 	if (slurm_get_debug_flags() & DEBUG_FLAG_GRES)
 		gres_debug = true;
diff --git a/src/common/mpi.c b/src/common/mpi.c
index 9ecdf1da837..d5c2d6054e2 100644
--- a/src/common/mpi.c
+++ b/src/common/mpi.c
@@ -211,6 +211,9 @@ int _mpi_init (char *mpi_type)
 	char *full_type = NULL;
 	int got_default = 0;
 
+	if ( g_context )
+		return retval;
+
 	slurm_mutex_lock( &context_lock );
 
 	if ( g_context )
diff --git a/src/common/node_select.c b/src/common/node_select.c
index 10c6c8d2937..d2bbd0c9825 100644
--- a/src/common/node_select.c
+++ b/src/common/node_select.c
@@ -281,6 +281,9 @@ extern int slurm_select_init(bool only_default)
 	struct dirent *e;
 	char *dir_array = NULL, *head = NULL;
 
+	if ( select_context )
+		return retval;
+
 	slurm_mutex_lock( &select_context_lock );
 
 	if ( select_context )
diff --git a/src/common/slurm_accounting_storage.c b/src/common/slurm_accounting_storage.c
index eff7577f784..056c185a473 100644
--- a/src/common/slurm_accounting_storage.c
+++ b/src/common/slurm_accounting_storage.c
@@ -388,6 +388,9 @@ extern int slurm_acct_storage_init(char *loc)
 	int retval = SLURM_SUCCESS;
 	char *acct_storage_type = NULL;
 
+	if ( g_acct_storage_context )
+		return retval;
+
 	slurm_mutex_lock( &g_acct_storage_context_lock );
 
 	if ( g_acct_storage_context )
diff --git a/src/common/slurm_auth.c b/src/common/slurm_auth.c
index 264c605a712..652127f4430 100644
--- a/src/common/slurm_auth.c
+++ b/src/common/slurm_auth.c
@@ -315,6 +315,9 @@ extern int slurm_auth_init( char *auth_type )
         int retval = SLURM_SUCCESS;
 	char *auth_type_local = NULL;
 
+        if ( g_context )
+		return retval;
+
         slurm_mutex_lock( &context_lock );
 
         if ( g_context )
diff --git a/src/common/slurm_jobacct_gather.c b/src/common/slurm_jobacct_gather.c
index 66a1cef9ac5..3c07c154053 100644
--- a/src/common/slurm_jobacct_gather.c
+++ b/src/common/slurm_jobacct_gather.c
@@ -258,6 +258,9 @@ static int _slurm_jobacct_gather_init(void)
 	char	*jobacct_gather_type = NULL;
 	int	retval=SLURM_SUCCESS;
 
+	if ( g_jobacct_gather_context )
+		return(retval);
+
 	slurm_mutex_lock( &g_jobacct_gather_context_lock );
 	if ( g_jobacct_gather_context )
 		goto done;
diff --git a/src/common/slurm_priority.c b/src/common/slurm_priority.c
index ecb56b3b1ac..a86432541f5 100644
--- a/src/common/slurm_priority.c
+++ b/src/common/slurm_priority.c
@@ -198,6 +198,9 @@ extern int slurm_priority_init(void)
 	int retval = SLURM_SUCCESS;
 	char *priority_type = NULL;
 
+	if ( g_priority_context )
+		return retval;
+
 	slurm_mutex_lock( &g_priority_context_lock );
 
 	if ( g_priority_context )
diff --git a/src/common/slurm_topology.c b/src/common/slurm_topology.c
index a6ea794f6e5..8d4a265159e 100644
--- a/src/common/slurm_topology.c
+++ b/src/common/slurm_topology.c
@@ -207,6 +207,9 @@ slurm_topo_init( void )
 	int retval = SLURM_SUCCESS;
 	char *topo_type = NULL;
 
+	if ( g_topo_context )
+		return retval;
+
 	slurm_mutex_lock( &g_topo_context_lock );
 
 	if ( g_topo_context )
diff --git a/src/common/switch.c b/src/common/switch.c
index bbfc9c9ae4e..5a8ac8b16e8 100644
--- a/src/common/switch.c
+++ b/src/common/switch.c
@@ -288,6 +288,9 @@ extern int switch_init( void )
 	int retval = SLURM_SUCCESS;
 	char *switch_type = NULL;
 
+	if ( g_context )
+		return retval;
+
 	slurm_mutex_lock( &context_lock );
 
 	if ( g_context )
diff --git a/src/slurmctld/job_submit.c b/src/slurmctld/job_submit.c
index 7ded6170420..56c3e3b1467 100644
--- a/src/slurmctld/job_submit.c
+++ b/src/slurmctld/job_submit.c
@@ -196,6 +196,9 @@ extern int job_submit_plugin_init(void)
 	int rc = SLURM_SUCCESS;
 	char *last = NULL, *names, *one_name;
 
+	if (submit_context_cnt >= 0)
+		return rc;
+
 	slurm_mutex_lock(&submit_context_lock);
 	if (submit_context_cnt >= 0)
 		goto fini;
diff --git a/src/slurmctld/sched_plugin.c b/src/slurmctld/sched_plugin.c
index 55d8908a973..5b1229109b4 100644
--- a/src/slurmctld/sched_plugin.c
+++ b/src/slurmctld/sched_plugin.c
@@ -225,6 +225,9 @@ slurm_sched_init( void )
 	int retval = SLURM_SUCCESS;
 	char *sched_type = NULL;
 
+	if ( g_sched_context )
+		return retval;
+
 	slurm_mutex_lock( &g_sched_context_lock );
 
 	if ( g_sched_context )
-- 
GitLab