From 01d7119c1cc083198792d6d8801a349708e56bea Mon Sep 17 00:00:00 2001
From: Danny Auble <da@schedmd.com>
Date: Thu, 20 Feb 2014 16:50:40 -0800
Subject: [PATCH] Consolidate like code

---
 src/sacctmgr/account_functions.c | 45 ++++------------------------
 src/sacctmgr/common.c            | 49 +++++++++++++++++++++++++++++++
 src/sacctmgr/sacctmgr.h          |  1 +
 src/sacctmgr/user_functions.c    | 50 +++++---------------------------
 4 files changed, 64 insertions(+), 81 deletions(-)

diff --git a/src/sacctmgr/account_functions.c b/src/sacctmgr/account_functions.c
index 39ec6bb0705..204036e84f5 100644
--- a/src/sacctmgr/account_functions.c
+++ b/src/sacctmgr/account_functions.c
@@ -465,46 +465,13 @@ extern int sacctmgr_add_account(int argc, char *argv[])
 		}
 		list_iterator_destroy(itr_c);
 		list_destroy(tmp_list);
-	} else {
-		List temp_list = NULL;
-		slurmdb_cluster_cond_t cluster_cond;
-
-		slurmdb_init_cluster_cond(&cluster_cond, 0);
-		cluster_cond.cluster_list = cluster_list;
-
-		temp_list = acct_storage_g_get_clusters(db_conn, my_uid,
-							&cluster_cond);
-
-		itr_c = list_iterator_create(cluster_list);
-		itr = list_iterator_create(temp_list);
-		while((cluster = list_next(itr_c))) {
-			slurmdb_cluster_rec_t *cluster_rec = NULL;
-
-			list_iterator_reset(itr);
-			while((cluster_rec = list_next(itr))) {
-				if (!strcasecmp(cluster_rec->name, cluster))
-					break;
-			}
-			if (!cluster_rec) {
-				exit_code=1;
-				fprintf(stderr, " This cluster '%s' "
-					"doesn't exist.\n"
-					"        Contact your admin "
-					"to add it to accounting.\n",
-					cluster);
-				list_delete_item(itr_c);
-			}
-		}
-		list_iterator_destroy(itr);
-		list_iterator_destroy(itr_c);
-		list_destroy(temp_list);
+	} else if (sacctmgr_validate_cluster_list(cluster_list)
+		   != SLURM_SUCCESS) {
+		slurmdb_destroy_association_rec(start_assoc);
+		slurmdb_destroy_account_rec(start_acct);
+		list_destroy(local_account_list);
 
-		if (!list_count(cluster_list)) {
-			slurmdb_destroy_association_rec(start_assoc);
-			slurmdb_destroy_account_rec(start_acct);
-			list_destroy(local_account_list);
-			return SLURM_ERROR;
-		}
+		return SLURM_ERROR;
 	}
 
 
diff --git a/src/sacctmgr/common.c b/src/sacctmgr/common.c
index 6e52f8e11ec..7ca9be5bc0c 100644
--- a/src/sacctmgr/common.c
+++ b/src/sacctmgr/common.c
@@ -1636,3 +1636,52 @@ extern List sacctmgr_process_format_list(List format_list)
 
 	return print_fields_list;
 }
+
+extern int sacctmgr_validate_cluster_list(List cluster_list)
+{
+	List temp_list = NULL;
+	char *cluster = NULL;
+	int rc = SLURM_SUCCESS;
+	ListIterator itr = NULL, itr_c = NULL;
+
+	if (cluster_list) {
+		slurmdb_cluster_cond_t cluster_cond;
+		slurmdb_init_cluster_cond(&cluster_cond, 0);
+		cluster_cond.cluster_list = cluster_list;
+
+		temp_list = acct_storage_g_get_clusters(db_conn, my_uid,
+							&cluster_cond);
+	} else
+		temp_list = acct_storage_g_get_clusters(db_conn, my_uid,
+							NULL);
+
+
+	itr_c = list_iterator_create(cluster_list);
+	itr = list_iterator_create(temp_list);
+	while ((cluster = list_next(itr_c))) {
+		slurmdb_cluster_rec_t *cluster_rec = NULL;
+
+		list_iterator_reset(itr);
+		while ((cluster_rec = list_next(itr))) {
+			if (!strcasecmp(cluster_rec->name, cluster))
+				break;
+		}
+		if (!cluster_rec) {
+			exit_code=1;
+			fprintf(stderr, " This cluster '%s' "
+				"doesn't exist.\n"
+				"        Contact your admin "
+				"to add it to accounting.\n",
+				cluster);
+			list_delete_item(itr_c);
+		}
+	}
+	list_iterator_destroy(itr);
+	list_iterator_destroy(itr_c);
+	list_destroy(temp_list);
+
+	if (!list_count(cluster_list))
+		rc = SLURM_ERROR;
+
+	return rc;
+}
diff --git a/src/sacctmgr/sacctmgr.h b/src/sacctmgr/sacctmgr.h
index 6dd4d1498e2..d569605e8ae 100644
--- a/src/sacctmgr/sacctmgr.h
+++ b/src/sacctmgr/sacctmgr.h
@@ -289,6 +289,7 @@ extern void sacctmgr_print_qos_limits(slurmdb_qos_rec_t *qos);
 extern int sacctmgr_remove_assoc_usage(slurmdb_association_cond_t *assoc_cond);
 extern int sort_coord_list(void *, void *);
 extern List sacctmgr_process_format_list(List format_list);
+extern int sacctmgr_validate_cluster_list(List cluster_list);
 
 /* you need to free the objects returned from these functions */
 extern slurmdb_association_rec_t *sacctmgr_find_account_base_assoc(
diff --git a/src/sacctmgr/user_functions.c b/src/sacctmgr/user_functions.c
index 198e3b4bf80..0f502447971 100644
--- a/src/sacctmgr/user_functions.c
+++ b/src/sacctmgr/user_functions.c
@@ -778,48 +778,14 @@ extern int sacctmgr_add_user(int argc, char *argv[])
 				list_destroy(local_acct_list);
 			return SLURM_ERROR;
 		}
-	} else {
-		List temp_list = NULL;
-		slurmdb_cluster_cond_t cluster_cond;
-
-		slurmdb_init_cluster_cond(&cluster_cond, 0);
-		cluster_cond.cluster_list = assoc_cond->cluster_list;
-
-		temp_list = acct_storage_g_get_clusters(db_conn, my_uid,
-							&cluster_cond);
-
-		itr_c = list_iterator_create(assoc_cond->cluster_list);
-		itr = list_iterator_create(temp_list);
-		while((cluster = list_next(itr_c))) {
-			slurmdb_cluster_rec_t *cluster_rec = NULL;
-
-			list_iterator_reset(itr);
-			while((cluster_rec = list_next(itr))) {
-				if (!strcasecmp(cluster_rec->name, cluster))
-					break;
-			}
-			if (!cluster_rec) {
-				exit_code=1;
-				fprintf(stderr, " This cluster '%s' "
-					"doesn't exist.\n"
-					"        Contact your admin "
-					"to add it to accounting.\n",
-					cluster);
-				list_delete_item(itr_c);
-			}
-		}
-		list_iterator_destroy(itr);
-		list_iterator_destroy(itr_c);
-		list_destroy(temp_list);
-
-		if (!list_count(assoc_cond->cluster_list)) {
-			slurmdb_destroy_wckey_cond(wckey_cond);
-			slurmdb_destroy_association_cond(assoc_cond);
-			list_destroy(local_user_list);
-			if (local_acct_list)
-				list_destroy(local_acct_list);
-			return SLURM_ERROR;
-		}
+	} else if (sacctmgr_validate_cluster_list(assoc_cond->cluster_list)
+		   != SLURM_SUCCESS) {
+		slurmdb_destroy_wckey_cond(wckey_cond);
+		slurmdb_destroy_association_cond(assoc_cond);
+		list_destroy(local_user_list);
+		if (local_acct_list)
+			list_destroy(local_acct_list);
+		return SLURM_ERROR;
 	}
 
 	if (!list_count(assoc_cond->acct_list)) {
-- 
GitLab